Project Structure:
📁 d361
├── 📁 data
│   └── 📁 offline
│       ├── 📄 d360_getsitenav.md
│       ├── 📄 d360_getsitenav.py
│       ├── 📄 d360_makesite.md
│       ├── 📄 d360_makesite.py
│       ├── 📄 d361_offline.css
│       ├── 📄 d361_offline.md
│       ├── 📄 nav.html
│       ├── 📄 nav.json
│       ├── 📄 nav.md
│       ├── 📄 README.md
│       └── 📄 sitemap-en.xml
├── 📁 docs
│   ├── 📄 d363.json
│   ├── 📄 d363.md
│   ├── 📄 d363.py
│   ├── 📄 d364.md
│   ├── 📄 d364.py
│   ├── 📄 d365.json
│   ├── 📄 d365.md
│   ├── 📄 d366.json
│   ├── 📄 d366.md
│   ├── 📄 document360.json
│   ├── 📄 document360.md
│   ├── 📄 document360_core.json
│   ├── 📄 document361.json
│   ├── 📄 document362.json
│   ├── 📄 mkdocs_export.md
│   ├── 📄 openapi_spec.json
│   ├── 📄 README.md
│   ├── 📄 summarize.py
│   ├── 📄 test.json
│   └── 📄 test.md
├── 📁 examples
│   ├── 📄 d361.example.toml
│   ├── 📄 d361api.example.toml
│   └── 📄 mkdocs_export_examples.py
├── 📁 schemas
│   └── 📄 d361.schema.json
├── 📁 scripts
│   ├── 📄 build.sh
│   ├── 📄 generate_d360_models.py
│   ├── 📄 install.sh
│   ├── 📄 json_compress.py
│   ├── 📄 monitor_d360_api.py
│   ├── 📄 process_d360_archive.py
│   ├── 📄 release.sh
│   ├── 📄 test.sh
│   └── 📄 text_replacement_utility.py
├── 📁 src
│   └── 📁 d361
│       ├── 📁 api
│       │   ├── 📄 __init__.py
│       │   ├── 📄 api_updater.py
│       │   ├── 📄 bulk_operations.py
│       │   ├── 📄 chunked_download.py
│       │   ├── 📄 circuit_breaker.py
│       │   ├── 📄 client.py
│       │   ├── 📄 data_sync.py
│       │   ├── 📄 errors.py
│       │   ├── 📄 generate_models.py
│       │   ├── 📄 metrics.py
│       │   ├── 📄 openapi_integration.py
│       │   └── 📄 token_manager.py
│       ├── 📁 archive
│       │   ├── 📄 __init__.py
│       │   ├── 📄 cache.py
│       │   ├── 📄 document360_parser.py
│       │   ├── 📄 parser.py
│       │   └── 📄 schema.py
│       ├── 📁 cli
│       │   ├── 📄 __init__.py
│       │   └── 📄 main.py
│       ├── 📁 config
│       │   ├── 📄 __init__.py
│       │   ├── 📄 environment.py
│       │   ├── 📄 loader.py
│       │   ├── 📄 schema.py
│       │   ├── 📄 secrets.py
│       │   └── 📄 secrets_manager.py
│       ├── 📁 core
│       │   ├── 📄 interfaces.py
│       │   ├── 📄 models.py
│       │   └── 📄 transformers.py
│       ├── 📁 edit
│       │   └── 📄 SPEC.md
│       ├── 📁 http
│       │   ├── 📄 __init__.py
│       │   ├── 📄 client.py
│       │   ├── 📄 compatibility.py
│       │   └── 📄 middleware.py
│       ├── 📁 mkdocs
│       │   ├── 📁 exporters
│       │   │   ├── 📄 __init__.py
│       │   │   ├── 📄 config_generator.py
│       │   │   ├── 📄 mkdocs_exporter.py
│       │   │   ├── 📄 navigation_builder.py
│       │   │   └── 📄 theme_optimizer.py
│       │   ├── 📁 processors
│       │   │   ├── 📄 __init__.py
│       │   │   ├── 📄 accessibility_optimizer.py
│       │   │   ├── 📄 asset_manager.py
│       │   │   ├── 📄 content_enhancer.py
│       │   │   ├── 📄 cross_reference_resolver.py
│       │   │   ├── 📄 markdown_processor.py
│       │   │   ├── 📄 plugin_manager.py
│       │   │   └── 📄 seo_optimizer.py
│       │   ├── 📁 templates
│       │   │   ├── 📄 material_theme.yml.j2
│       │   │   ├── 📄 mkdocs_base.yml.j2
│       │   │   └── 📄 plugin_configs.yml.j2
│       │   └── 📄 __init__.py
│       ├── 📁 offline
│       │   ├── 📄 __init__.py
│       │   ├── 📄 __main__.py
│       │   ├── 📄 browser.py
│       │   ├── 📄 config.py
│       │   ├── 📄 content.py
│       │   ├── 📄 d361_offline.css
│       │   ├── 📄 d361_offline.py
│       │   ├── 📄 generator.py
│       │   ├── 📄 navigation.py
│       │   └── 📄 parser.py
│       ├── 📁 plugins
│       │   ├── 📄 __init__.py
│       │   └── 📄 manager.py
│       ├── 📁 providers
│       │   ├── 📄 __init__.py
│       │   ├── 📄 api_provider.py
│       │   ├── 📄 archive_provider.py
│       │   ├── 📄 hybrid_provider.py
│       │   └── 📄 mock_provider.py
│       ├── 📁 scraping
│       │   ├── 📄 __init__.py
│       │   ├── 📄 content_processor.py
│       │   ├── 📄 converter.py
│       │   ├── 📄 deduplicator.py
│       │   ├── 📄 extractor.py
│       │   └── 📄 scraper.py
│       ├── 📁 utils
│       │   ├── 📄 __init__.py
│       │   ├── 📄 dependency_injection.py
│       │   ├── 📄 logging.py
│       │   ├── 📄 performance.py
│       │   └── 📄 validation.py
│       └── 📄 __init__.py
├── 📁 templates
│   ├── 📄 d361.toml.example
│   └── 📄 d361api.toml.example
├── 📁 tests
│   ├── 📁 data
│   │   └── 📄 v1_categories_articles.json
│   ├── 📁 fixtures
│   │   ├── 📁 markdown_samples
│   │   │   ├── 📄 about-this-guide.md
│   │   │   ├── 📄 actions-6.md
│   │   │   └── 📄 adding-a-fill.md
│   │   ├── 📁 vexy-lines-archive
│   │   └── 📄 README.md
│   ├── 📁 offline
│   │   ├── 📄 test_content.py
│   │   ├── 📄 test_integration.py
│   │   ├── 📄 test_navigation.py
│   │   ├── 📄 test_offline_core.py
│   │   └── 📄 test_parser.py
│   ├── 📄 conftest.py
│   ├── 📄 mkdocs_test_fixtures.py
│   ├── 📄 test_integration_api.py
│   ├── 📄 test_mkdocs_integration.py
│   ├── 📄 test_mkdocs_units.py
│   ├── 📄 test_package.py
│   ├── 📄 test_performance.py
│   ├── 📄 test_plugin_manager_enhanced.py
│   ├── 📄 test_seo_optimizer_enhanced.py
│   ├── 📄 test_theme_optimizer_enhanced.py
│   ├── 📄 test_unit_config.py
│   ├── 📄 test_unit_models.py
│   └── 📄 test_unit_providers.py
├── 📄 .gitignore
├── 📄 d361.spec
├── 📄 DEVELOPMENT.md
├── 📄 example_api_usage.py
├── 📄 LICENSE
├── 📄 PLAN.md
├── 📄 publish.sh
├── 📄 pyproject.toml
├── 📄 README.md
├── 📄 test_api_client.py
├── 📄 test_chunked_download.py
├── 📄 test_circuit_breaker.py
├── 📄 test_data_sync.py
├── 📄 test_metrics.py
├── 📄 test_streaming_bulk.py
└── 📄 TODO.md


<documents>
<document index="1">
<source>.gitignore</source>
<document_content>
*_autogen/
.DS_Store
__version__.py
__pycache__/
_Chutzpah*
_deps
_NCrunch_*
_pkginfo.txt
_Pvt_Extensions
_ReSharper*/
_TeamCity*
_UpgradeReport_Files/
!?*.[Cc]ache/
!.axoCover/settings.json
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/settings.json
!.vscode/tasks.json
!**/[Pp]ackages/build/
!Directory.Build.rsp
.*crunch*.local.xml
.axoCover/*
.builds
.cr/personal
.fake/
.history/
.ionide/
.localhistory/
.mfractor/
.ntvs_analysis.dat
.paket/paket.exe
.sass-cache/
.vs/
.vscode
.vscode/*
.vshistory/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
[Bb]in/
[Bb]uild[Ll]og.*
[Dd]ebug/
[Dd]ebugPS/
[Dd]ebugPublic/
[Ee]xpress/
[Ll]og/
[Ll]ogs/
[Oo]bj/
[Rr]elease/
[Rr]eleasePS/
[Rr]eleases/
[Tt]est[Rr]esult*/
[Ww][Ii][Nn]32/
*_h.h
*_i.c
*_p.c
*_wpftmp.csproj
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
*- [Bb]ackup.rdl
*.[Cc]ache
*.[Pp]ublish.xml
*.[Rr]e[Ss]harper
*.a
*.app
*.appx
*.appxbundle
*.appxupload
*.aps
*.azurePubxml
*.bim_*.settings
*.bim.layout
*.binlog
*.btm.cs
*.btp.cs
*.build.csdef
*.cab
*.cachefile
*.code-workspace
*.coverage
*.coveragexml
*.d
*.dbmdl
*.dbproj.schemaview
*.dll
*.dotCover
*.DotSettings.user
*.dsp
*.dsw
*.dylib
*.e2e
*.exe
*.gch
*.GhostDoc.xml
*.gpState
*.ilk
*.iobj
*.ipdb
*.jfm
*.jmconfig
*.la
*.lai
*.ldf
*.lib
*.lo
*.log
*.mdf
*.meta
*.mm.*
*.mod
*.msi
*.msix
*.msm
*.msp
*.ncb
*.ndf
*.nuget.props
*.nuget.targets
*.nupkg
*.nvuser
*.o
*.obj
*.odx.cs
*.opendb
*.opensdf
*.opt
*.out
*.pch
*.pdb
*.pfx
*.pgc
*.pgd
*.pidb
*.plg
*.psess
*.publishproj
*.publishsettings
*.pubxml
*.pyc
*.rdl.data
*.rptproj.bak
*.rptproj.rsuser
*.rsp
*.rsuser
*.sap
*.sbr
*.scc
*.sdf
*.sln.docstates
*.sln.iml
*.slo
*.smod
*.snupkg
*.so
*.suo
*.svclog
*.tlb
*.tlh
*.tli
*.tlog
*.tmp
*.tmp_proj
*.tss
*.user
*.userosscache
*.userprefs
*.vbp
*.vbw
*.VC.db
*.VC.VC.opendb
*.VisualState.xml
*.vsp
*.vspscc
*.vspx
*.vssscc
*.xsd.cs
**/[Pp]ackages/*
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.HTMLClient/GeneratedArtifacts
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
*~
~$*
$tf/
AppPackages/
artifacts/
ASALocalRun/
AutoTest.Net/
Backup*/
BenchmarkDotNet.Artifacts/
bld/
BundleArtifacts/
ClientBin/
cmake_install.cmake
CMakeCache.txt
CMakeFiles
CMakeLists.txt.user
CMakeScripts
CMakeUserPresets.json
compile_commands.json
coverage*.info
coverage*.json
coverage*.xml
csx/
CTestTestfile.cmake
dlldata.c
DocProject/buildhelp/
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/*.HxC
DocProject/Help/*.HxT
DocProject/Help/html
DocProject/Help/Html2
ecf/
FakesAssemblies/
FodyWeavers.xsd
Generated_Code/
Generated\ Files/
healthchecksdb
install_manifest.txt
ipch/
Makefile
MigrationBackup/
mono_crash.*
nCrunchTemp_*
node_modules/
nunit-*.xml
OpenCover/
orleans.codegen.cs
Package.StoreAssociation.xml
paket-files/
project.fragment.lock.json
project.lock.json
publish/
PublishScripts/
rcf/
ScaffoldingReadMe.txt
ServiceFabricBackup/
StyleCopReport.xml
Testing
TestResult.xml
UpgradeLog*.htm
UpgradeLog*.XML
x64/
x86/
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Distribution / packaging
!dist/.gitkeep

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
.ruff_cache/

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# IDE
.idea/
.vscode/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Project specific
__version__.py
_private
docs.document360.com/
docs.document360.com1/

</document_content>
</document>

<document index="2">
<source>.pre-commit-config.yaml</source>
<document_content>
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.3.4
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format
        args: [--respect-gitignore]
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-toml
      - id: check-added-large-files
      - id: debug-statements
      - id: check-case-conflict
      - id: mixed-line-ending
        args: [--fix=lf] 
</document_content>
</document>

<document index="3">
<source>DEVELOPMENT.md</source>
<document_content>
# Development Guide

This document provides detailed instructions for developing, testing, and releasing the d361 project.

## Table of Contents

- [Development Setup](#development-setup)
- [Build System](#build-system)
- [Testing](#testing)
- [Release Process](#release-process)
- [CI/CD Pipeline](#cicd-pipeline)
- [Binary Distribution](#binary-distribution)
- [Contributing](#contributing)

## Development Setup

### Prerequisites

- Python 3.10+ (3.12 recommended)
- [uv](https://github.com/astral-sh/uv) (fast Python package installer)
- [hatch](https://hatch.pypa.io/) (project management)
- Git

### Quick Setup

```bash
# Clone the repository
git clone https://github.com/twardoch/d361.git
cd d361

# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install hatch
uv pip install hatch

# Activate development environment
hatch shell

# Install Playwright browsers
playwright install chromium

# Run tests to verify setup
hatch run test:test
```

## Build System

### Local Build Scripts

The project includes convenient build scripts in the `scripts/` directory:

#### Build Script (`scripts/build.sh`)

```bash
# Full build with all checks
./scripts/build.sh

# Quick build (skip tests and quality checks)
./scripts/build.sh --quick

# Clean build artifacts
./scripts/build.sh --clean

# Show help
./scripts/build.sh --help
```

#### Test Script (`scripts/test.sh`)

```bash
# Run all tests
./scripts/test.sh

# Quick test (unit tests only)
./scripts/test.sh --quick

# Run with integration tests
./scripts/test.sh --integration

# Install Playwright browsers
./scripts/test.sh --install-browsers

# Fix linting issues
./scripts/test.sh --fix
```

#### Release Script (`scripts/release.sh`)

```bash
# Create a new release
./scripts/release.sh --version 1.0.0

# Dry run (publish to test PyPI)
./scripts/release.sh --version 1.0.0 --dry-run

# Skip certain steps
./scripts/release.sh --version 1.0.0 --skip-tests --skip-github
```

### Hatch Commands

The project uses Hatch for environment management:

```bash
# Run tests with coverage
hatch run test:test-cov

# Run linting and formatting
hatch run lint:fix

# Run type checking
hatch run lint:typing

# Run all quality checks
hatch run lint:all

# Build package
hatch run build
```

## Testing

### Test Structure

```
tests/
├── test_package.py           # Basic package tests
├── offline/
│   ├── test_offline_core.py  # Core offline functionality
│   ├── test_parser.py        # Sitemap parsing tests
│   ├── test_content.py       # Content extraction tests
│   ├── test_navigation.py    # Navigation extraction tests
│   └── test_integration.py   # Integration tests
```

### Test Categories

- **Unit Tests**: Test individual components in isolation
- **Integration Tests**: Test component interactions
- **End-to-End Tests**: Test complete workflows

### Running Tests

```bash
# Run all tests
hatch run test:test

# Run with coverage
hatch run test:test-cov

# Run specific test file
hatch run test:test tests/offline/test_parser.py

# Run tests matching pattern
hatch run test:test -k "test_navigation"

# Run tests with verbose output
hatch run test:test -v
```

### Test Configuration

Tests are configured in `pyproject.toml`:

```toml
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
python_files = ["test_*.py"]
python_functions = ["test_*"]
markers = [
    "unit: unit tests",
    "integration: integration tests",
    "slow: slow tests"
]
```

## Release Process

### Semantic Versioning

The project uses [Semantic Versioning](https://semver.org/):

- **MAJOR**: Incompatible API changes
- **MINOR**: New functionality (backward compatible)
- **PATCH**: Bug fixes (backward compatible)

### Version Management

Versions are managed through Git tags using `hatch-vcs`:

- Version is automatically derived from Git tags
- Use `v` prefix for tags (e.g., `v1.0.0`)
- Pre-release versions supported (e.g., `v1.0.0-alpha.1`)

### Release Steps

1. **Prepare Release**
   ```bash
   # Ensure you're on main branch
   git checkout main
   git pull origin main
   
   # Run full test suite
   ./scripts/test.sh
   
   # Run build
   ./scripts/build.sh
   ```

2. **Create Release**
   ```bash
   # Create and push tag (triggers CI/CD)
   ./scripts/release.sh --version 1.0.0
   ```

3. **Verify Release**
   - Check GitHub Actions workflow
   - Verify PyPI package
   - Test binary downloads
   - Verify GitHub release

### Pre-release Testing

```bash
# Test with dry run
./scripts/release.sh --version 1.0.0-beta.1 --dry-run

# Test specific PyPI installation
pip install --index-url https://test.pypi.org/simple/ d361==1.0.0-beta.1
```

## CI/CD Pipeline

### GitHub Actions Workflows

#### Push Workflow (`.github/workflows/push.yml`)

Runs on every push to `main` and pull requests:

- **Code Quality**: Linting, formatting
- **Type Checking**: MyPy static analysis
- **Multi-platform Testing**: Ubuntu, Windows, macOS
- **Multi-version Testing**: Python 3.10, 3.11, 3.12
- **Build Verification**: Package building
- **Installation Testing**: Verify package installation

#### Release Workflow (`.github/workflows/release.yml`)

Runs on Git tag pushes (`v*`):

- **Full Testing**: All platforms and Python versions
- **Package Building**: Source and wheel distributions
- **Binary Building**: PyInstaller executables for all platforms
- **PyPI Publishing**: Automatic package publishing
- **GitHub Release**: Automated release with binaries
- **Post-release Testing**: Verify installation from PyPI

### Workflow Features

- **Concurrency Control**: Cancels outdated runs
- **Artifact Management**: Preserves build artifacts
- **Matrix Testing**: Comprehensive platform/version coverage
- **Caching**: Speeds up builds with UV caching
- **Security**: Uses trusted actions and proper permissions

## Binary Distribution

### PyInstaller Configuration

The project creates standalone executables using PyInstaller:

```bash
# Manual binary creation
pyinstaller --onefile --name d361-offline-linux \
    --add-data "src/d361/offline/d361_offline.css:d361/offline" \
    src/d361/offline/__main__.py
```

### Binary Artifacts

Each release includes:

- **Linux**: `d361-offline-ubuntu-latest`
- **Windows**: `d361-offline-windows-latest.exe`
- **macOS**: `d361-offline-macos-latest`

### Usage

```bash
# Download binary
curl -L -o d361-offline https://github.com/twardoch/d361/releases/latest/download/d361-offline-ubuntu-latest

# Make executable
chmod +x d361-offline

# Run
./d361-offline --help
```

## Contributing

### Code Quality

- **Linting**: Use Ruff for fast linting
- **Formatting**: Use Ruff for consistent formatting
- **Type Checking**: Use MyPy for static type analysis
- **Testing**: Maintain high test coverage

### Development Workflow

1. **Fork and Clone**
   ```bash
   git clone https://github.com/YOUR-USERNAME/d361.git
   cd d361
   ```

2. **Create Feature Branch**
   ```bash
   git checkout -b feature/your-feature-name
   ```

3. **Develop and Test**
   ```bash
   # Make changes
   # Run tests
   ./scripts/test.sh
   
   # Run build
   ./scripts/build.sh
   ```

4. **Commit and Push**
   ```bash
   git add .
   git commit -m "feat: add your feature description"
   git push origin feature/your-feature-name
   ```

5. **Create Pull Request**
   - Submit PR against `main` branch
   - Include clear description
   - Ensure all CI checks pass

### Code Standards

- Follow PEP 8 style guide
- Use type hints for all functions
- Write docstrings for public APIs
- Include tests for new functionality
- Update documentation as needed

### Commit Messages

Use [Conventional Commits](https://www.conventionalcommits.org/):

```
feat: add new feature
fix: resolve bug
docs: update documentation
test: add test coverage
refactor: improve code structure
```

## Troubleshooting

### Common Issues

1. **Playwright Browser Issues**
   ```bash
   # Reinstall browsers
   playwright install chromium
   ```

2. **Build Failures**
   ```bash
   # Clean and rebuild
   ./scripts/build.sh --clean
   ./scripts/build.sh
   ```

3. **Test Failures**
   ```bash
   # Run specific test
   hatch run test:test tests/offline/test_parser.py -v
   ```

4. **Version Issues**
   ```bash
   # Check current version
   git describe --tags --abbrev=0
   
   # Verify hatch-vcs
   hatch version
   ```

### Getting Help

- **Issues**: [GitHub Issues](https://github.com/twardoch/d361/issues)
- **Discussions**: [GitHub Discussions](https://github.com/twardoch/d361/discussions)
- **Documentation**: [README.md](README.md)

## Resources

- [Hatch Documentation](https://hatch.pypa.io/)
- [UV Documentation](https://github.com/astral-sh/uv)
- [Pytest Documentation](https://docs.pytest.org/)
- [Ruff Documentation](https://docs.astral.sh/ruff/)
- [MyPy Documentation](https://mypy.readthedocs.io/)
- [PyInstaller Documentation](https://pyinstaller.org/)
- [Semantic Versioning](https://semver.org/)
</document_content>
</document>

<document index="4">
<source>LICENSE</source>
<document_content>
MIT License

Copyright (c) 2025 AUTHOR_NAME

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
</document_content>
</document>

<document index="5">
<source>PLAN.md</source>
<document_content>
# d361 MkDocs Export Enhancement Plan

## [∞](#tldr) TL;DR

This plan enhances the d361 package with comprehensive, modern MkDocs export capabilities, transforming it from a basic Document360 toolkit into a complete Document360 → MkDocs conversion system. Building on the existing solid hexagonal architecture, this enhancement adds extensive, performant, modular MkDocs export functionality that supports the full MkDocs ecosystem including Material theme, popular plugins, and Python Markdown extensions.

## Current d361 Status ✅

The d361 package is already well-structured with:
- **Hexagonal Architecture**: Clean separation of concerns with interfaces, providers, and adapters
- **API Client Integration**: Uses d361api auto-generated client for Document360 API access
- **Archive Processing**: Basic archive handling capabilities
- **Configuration Management**: Environment-specific configuration with secrets management
- **Testing Framework**: Comprehensive test infrastructure
- **CLI Interface**: Command-line interface for offline operations

## MkDocs Export Enhancement Objectives

### 1. Document360 Archive Processing with Numerical Ordering
**Goal**: Create Document360 offline archive → MkDocs conversion with proper file ordering

**Key Requirements**:
- Process Document360 archives (like Vexy-Lines-2025-Aug-07-12-38-29.zip)
- Generate numerical prefixes matching Document360 ordering
- Support mkdocs-awesome-nav and vexy-mkdocs-strip-number-prefix plugins
- Enable two-stage build process for enhanced processing

**Components to Enhance**:
- `d361/mkdocs/exporters/` - Enhanced MkDocs export with numerical ordering
- `d361/mkdocs/templates/` - Templates for specialized plugin configurations  
- `d361/mkdocs/processors/` - Archive processing with ordering preservation
- `d361/archive/` - Enhanced archive handling for structure extraction

**Research-Informed Design**:
- **MkDocs Core Features**: Static site generation, YAML configuration, live preview, navigation
- **Material Theme Integration**: Modern UI, advanced features, extensive customization
- **Plugin Ecosystem**: autorefs, literate-nav, section-index, gen-files, redirects
- **Markdown Extensions**: SuperFences, tabbed content, admonitions, math support

### 2. Modern MkDocs Feature Integration  
**Goal**: Full integration with contemporary MkDocs ecosystem and best practices

**Advanced Capabilities**:
- **Navigation Intelligence**: Smart structure generation from Document360 hierarchy
- **Content Enhancement**: HTML → optimized Markdown with extensions support
- **Asset Management**: Intelligent image processing with CDN URL rewriting
- **Cross-Reference Resolution**: Automatic link resolution and validation
- **Template System**: Extensible Jinja2 templates for different use cases

**Plugin Integrations**:
- **mkdocs-material**: Full Material Design theme support with custom styling
- **mkdocs-autorefs**: Automatic cross-reference linking between pages  
- **mkdocs-section-index**: Clickable sections with index pages
- **mkdocs-redirects**: URL migration and redirect management
- **Performance Plugins**: Minification, compression, caching optimizations

### 3. Production-Ready Export Pipeline
**Goal**: Enterprise-grade MkDocs export with performance and quality focus

**Quality Assurance**:
- Content validation and quality checks
- Broken link detection and resolution
- Image optimization and asset management
- SEO enhancement with meta descriptions and social cards
- Accessibility compliance features

**Performance Optimization**:
- Parallel processing for large Document360 archives
- Intelligent caching strategies
- Memory usage optimization
- Incremental build support for faster iterations
- Export validation and quality reporting

### 4. Dual-Stage Export Architecture Enhancement
**Goal**: Enhance existing dual-stage approach with MkDocs-specific optimizations

**Stage 1**: Document360 → Structured Markdown
- Archive/API content loading with d361's existing capabilities
- Enhanced content processing pipeline
- Asset extraction and optimization
- Navigation structure generation
- Metadata preservation and enrichment

**Stage 2**: Markdown → Optimized MkDocs Site  
- Dynamic MkDocs configuration generation
- Theme-specific optimizations
- Plugin configuration and setup
- Build pipeline orchestration
- Quality validation and reporting

## MkDocs Export Implementation Plan

### Phase 1: Document360 Archive Processing Enhancement (Week 1-2)
**Objective**: Enhance d361 archive processing for Document360 structure extraction with ordering

- **Week 1**: Archive Processing Enhancement
  - Enhance existing archive module for Document360 structure extraction
  - Extract category/article hierarchy with original ordering information
  - Process Document360 metadata for numerical prefix generation
  - Handle Document360-specific content types and relationships
  - Preserve cross-references and internal linking structure

- **Week 2**: Numerical Ordering System
  - Implement numerical prefix generation based on Document360 order
  - Create file naming system: "01_category/02_article.md" format
  - Ensure compatibility with mkdocs-awesome-nav navigation discovery
  - Support vexy-mkdocs-strip-number-prefix for clean URLs
  - Add validation for ordering consistency and completeness

### Phase 2: Advanced Content Processing (Week 3-4)
**Objective**: Enhanced content processing with MkDocs-specific optimizations

- **Week 3**: Content Enhancement Pipeline
  - Implement `ContentEnhancer` for Document360 → MkDocs content optimization
  - Add HTML → Markdown conversion with MkDocs extensions support
  - Create `CrossReferenceResolver` for internal link processing
  - Build frontmatter enrichment system for MkDocs metadata
  - Add content validation and quality assurance checks

- **Week 4**: Asset and Navigation Processing
  - Enhance image processing for MkDocs workflows
  - Implement CDN URL rewriting for optimized asset delivery
  - Add support for responsive images and lazy loading
  - Implement smart navigation generation from Document360 hierarchy
  - Add support for mkdocs-literate-nav integration

### Phase 3: Plugin Ecosystem Integration (Week 5-6)
**Objective**: Integrate popular MkDocs plugins and extensions

- **Week 5**: Core Plugin Support
  - Add mkdocs-material theme integration and customization
  - Implement mkdocs-autorefs automatic cross-referencing
  - Integrate mkdocs-section-index for clickable sections
  - Add mkdocs-redirects for URL migration support
  - Configure advanced search with offline capability

- **Week 6**: Extensions and Performance
  - Configure Python Markdown Extensions (SuperFences, tabbed, admonitions)
  - Integrate mkdocs-minify for production optimization
  - Add social cards generation for better sharing
  - Configure caching and compression optimizations
  - Add accessibility compliance features

### Phase 4: Integration and Testing (Week 7-8)
**Objective**: Integration with existing systems and comprehensive testing

- **Week 7**: vexy-help Integration
  - Update vexy-help to use d361 MkDocs export capabilities
  - Maintain backward compatibility with existing workflows
  - Add Vexy-specific customizations and branding
  - Update CLI to support new MkDocs export options
  - Create migration guide for existing users

- **Week 8**: Testing and Documentation
  - Unit tests for all MkDocs export components
  - Integration tests with both archive and API data sources
  - Performance benchmarks for large Document360 projects
  - Create comprehensive MkDocs export documentation
  - Add usage examples and troubleshooting guides

### Phase 5: Advanced Features (Week 9-10)
**Objective**: Advanced features and production optimization

- **Week 9**: Advanced Export Features
  - Multi-site export for large Documentation projects
  - Incremental build support for faster iterations
  - Advanced caching strategies for improved performance
  - Custom plugin development framework
  - Export validation and quality reporting

- **Week 10**: Production Readiness
  - Performance profiling and optimization
  - Memory usage optimization for large archives
  - Error handling and graceful degradation
  - Monitoring and observability integration
  - Production deployment documentation

## Enhanced d361 Architecture

After MkDocs enhancement, d361 will have this structure:

```
d361/
├── api/              # Document360 API client integration (EXISTING)
├── archive/          # Archive processing and parsing (EXISTING)
├── scraping/         # Content processing and conversion (EXISTING)
├── providers/        # Data source providers (EXISTING)
├── config/          # Configuration management (EXISTING)
├── core/            # Core models and interfaces (EXISTING)
├── utils/           # Utilities and helpers (EXISTING)
└── mkdocs/          # MkDocs export capabilities (NEW)
    ├── exporters/
    │   ├── mkdocs_exporter.py           # Main MkDocs export orchestrator
    │   ├── config_generator.py          # MkDocs YAML config generation
    │   ├── navigation_builder.py        # Smart navigation structure creation
    │   └── theme_optimizer.py           # Theme-specific optimizations
    ├── templates/
    │   ├── mkdocs_base.yml.j2          # Base MkDocs config template
    │   ├── material_theme.yml.j2       # Material theme specific template
    │   └── plugin_configs.yml.j2       # Popular plugin configurations
    ├── processors/
    │   ├── markdown_processor.py       # Enhanced Markdown processing
    │   ├── content_enhancer.py         # Document360 → MkDocs content optimization
    │   ├── asset_manager.py            # Image and asset processing
    │   └── cross_reference_resolver.py # Internal link resolution
    └── plugins/
        ├── d360_compatibility.py       # Document360 compatibility plugin
        ├── vexy_integration.py         # Vexy Lines specific enhancements
        └── export_validation.py        # Export quality validation
```

## Integration Points with vexy-help

After MkDocs enhancement, the integration will be:

**d361 provides**:
- **Universal MkDocs Export**: Complete Document360 → MkDocs conversion for any project
- **Modern MkDocs Features**: Material theme, plugins, extensions, optimization
- **Template System**: Extensible Jinja2 templates for different use cases
- **Quality Assurance**: Content validation, link checking, asset optimization
- **Performance**: Parallel processing, caching, incremental builds

**vexy-help utilizes d361 for**:
- **Core MkDocs Conversion**: `d361.mkdocs.exporters.MkDocsExporter` as primary engine
- **Content Processing**: `d361.mkdocs.processors` for enhanced Document360 → Markdown
- **Template Customization**: `d361.mkdocs.templates` with Vexy-specific overrides
- **Archive/API Processing**: `d361.archive` and `d361.providers` for data access

**vexy-help focuses on**:
- **Vexy Lines Branding**: Vexy-specific templates, colors, logos, styling
- **Workflow Orchestration**: Combining d361 MkDocs capabilities with Vexy workflows
- **Legacy Compatibility**: Maintaining existing CLI and user interfaces
- **Domain Expertise**: Vexy Lines specific content organization and navigation

## Success Metrics and Validation

### Technical Success Metrics
1. **Performance**: Export 1000+ page Document360 archive to MkDocs in <5 minutes
2. **Quality**: >95% link resolution accuracy with automated validation
3. **Compatibility**: Support for all major MkDocs themes and popular plugins
4. **Test Coverage**: >90% test coverage for all MkDocs export functionality
5. **Documentation**: Complete API documentation and user guides

### User Experience Metrics
1. **Ease of Use**: Single command export from Document360 to production MkDocs site
2. **Customization**: Template-based configuration for different use cases
3. **Integration**: Seamless integration with existing CI/CD pipelines
4. **Error Handling**: Clear error messages with actionable troubleshooting steps
5. **Migration**: Smooth migration path from legacy vexy-help MkDocs workflows

### Business Impact Metrics
1. **Code Reusability**: d361 MkDocs export works for any Document360 project
2. **Clean Separation**: vexy-help contains no Document360-specific export code
3. **Maintainability**: Reduced code duplication and clear responsibility boundaries
4. **Extensibility**: Template and plugin system allows easy customization
5. **Production Readiness**: Enterprise-grade export with monitoring and optimization

## Risk Mitigation Strategy

### Technical Risks
- **Performance Regression**: Comprehensive benchmarking before and after implementation
- **Feature Compatibility**: Exhaustive testing with existing vexy-help workflows
- **Plugin Conflicts**: Isolated testing environment for MkDocs plugin interactions
- **Template Complexity**: Gradual template system rollout with fallback options

### Project Risks
- **Scope Creep**: Clear phase boundaries with defined deliverables
- **Integration Complexity**: Incremental integration with comprehensive testing
- **Timeline Overruns**: Buffer time built into each phase for testing and refinement
- **Resource Constraints**: Modular implementation allows for priority-based development

### Mitigation Actions
- **Backward Compatibility**: All existing vexy-help workflows continue working unchanged
- **Incremental Migration**: Phase-by-phase implementation with validation at each step
- **Comprehensive Testing**: Unit, integration, and end-to-end testing at all levels
- **Documentation**: Detailed migration guides and troubleshooting documentation
- **Rollback Strategy**: Ability to revert to previous implementation if needed

## Project Impact and Vision

**🎯 Primary Objective**: Transform d361 into the definitive Document360 → MkDocs conversion toolkit

**Expected Outcomes**:
- **Universal MkDocs Export**: Any Document360 project can export to modern MkDocs
- **Best-in-Class Features**: Full Material theme, plugin ecosystem, performance optimization
- **Production Quality**: Enterprise-ready with validation, monitoring, error handling
- **Extensible Architecture**: Template and plugin system for custom requirements
- **Clean Architecture**: Clear separation between generic (d361) and specific (vexy-help) concerns

**Long-Term Vision**: d361 becomes the go-to solution for Document360 → static site generation, supporting not just MkDocs but potentially Hugo, Docusaurus, and other popular documentation frameworks.

**Timeline**: 10 weeks for complete MkDocs export enhancement with production-ready quality and comprehensive testing.
</document_content>
</document>

<document index="6">
<source>README.md</source>
<document_content>
# D361: Robust Offline Documentation Generator

[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
[![PyPI version](https://badge.fury.io/py/d361.svg)](https://badge.fury.io/py/d361)
[![Python Versions](https://img.shields.io/pypi/pyversions/d361.svg)](https://pypi.org/project/d361/)
[![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Checked with MyPy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
[![Tests Passing](https://github.com/twardoch/d361/actions/workflows/push.yml/badge.svg)](https://github.com/twardoch/d361/actions/workflows/push.yml)

## 🚀 **TL;DR**

D361 is a robust, enterprise-grade Python package that creates comprehensive offline versions of Document360 knowledge bases and other sitemap-based documentation sites. It's the **generic, reusable foundation** of the Document360 unified toolkit, designed for reliability, performance, and seamless integration.

**Quick Start:**
```bash
# Install and generate offline docs in one command
pip install d361 && playwright install chromium
d361-offline all --map-url="https://docs.example.com/sitemap-en.xml" --output-dir="offline_docs"

# Or use the standalone binary (no Python required)
curl -L -o d361-offline https://github.com/twardoch/d361/releases/latest/download/d361-offline-ubuntu-latest
chmod +x d361-offline && ./d361-offline all --map-url="https://docs.example.com/sitemap-en.xml"
```

**Key Features:**
- 🎯 **Complete Documentation Capture** - Intelligently extracts entire documentation structures
- 🚀 **Multi-Strategy Parsing** - Robust sitemap parsing with multiple fallback mechanisms
- 🤖 **Browser Automation** - Playwright-based extraction with stealth techniques for dynamic content
- 📱 **Multi-Format Output** - HTML, Markdown, and combined documentation files
- ⚡ **Performance Optimized** - Concurrent downloads with intelligent retry logic
- 🔄 **Navigation Preservation** - Maintains original site structure for intuitive offline browsing

---

## 📦 **What is D361?**

D361 is the **robust offline documentation generator** that serves as the foundational component of the Document360 unified toolkit. As a standalone package, it specializes in extracting, processing, and organizing documentation content for offline access, with enterprise-grade reliability and performance.

**Core Purpose:**
D361 automates the complete process of downloading entire Document360 sites (or other sitemap-based documentation) and converting them into comprehensive, browsable offline formats. It's designed to handle the complexities of modern documentation sites, including dynamic content, virtual scrolling, and complex navigation structures.

**The D361 Workflow:**

1. **🔍 Multi-Strategy Discovery** - Advanced sitemap parsing with multiple fallback mechanisms
2. **🗺️  Dynamic Structure Extraction** - Intelligently maps navigation hierarchies from live sites  
3. **⚡ Concurrent Content Fetching** - High-performance parallel downloading with retry logic
4. **🔄 Multi-Format Processing** - Converts content to HTML, Markdown, and combined formats
5. **📁 Intelligent Organization** - Creates structured offline archives with preserved navigation

**Result:** A complete, self-contained documentation snapshot that works entirely offline.

## 🎯 **Who Uses D361?**

**Enterprise Documentation Teams:**
- **Technical Writers** - Archive documentation versions, perform offline reviews, and create distribution packages
- **DevOps Engineers** - Integrate offline documentation into deployment pipelines and container images
- **Support Engineers** - Access knowledge bases instantly in customer support scenarios
- **Compliance Teams** - Create immutable documentation snapshots for regulatory requirements

**Development & Integration:**
- **Software Developers** - Bundle documentation with applications for offline environments
- **System Integrators** - Deploy documentation in air-gapped or restricted network environments  
- **CI/CD Pipelines** - Automated documentation processing and archival as part of build processes
- **Documentation Toolkit Builders** - Use D361 as a foundational component (like in `vexy-help`)

**Specialized Use Cases:**
- **Industrial/Manufacturing** - Offline documentation access on factory floors and production environments
- **Healthcare/Government** - Secure, compliant documentation in regulated environments
- **Field Service** - Technical documentation for remote locations with limited connectivity
- **Training & Education** - Portable documentation packages for distributed learning

## 🚀 **Why Choose D361?**

**🔧 Technical Excellence:**
- **Robust Architecture** - Handles complex modern documentation sites with dynamic content
- **Enterprise Performance** - Concurrent processing with intelligent retry mechanisms and error handling
- **Multiple Fallback Strategies** - Ensures successful content extraction even with challenging sites
- **Format Flexibility** - Outputs HTML, Markdown, and combined formats for different use cases

**🌐 Real-World Reliability:**
- **Production-Tested** - Successfully processes large-scale documentation sites with thousands of pages
- **Stealth Browser Automation** - Advanced Playwright techniques to handle cookie banners, virtual scrolling, and dynamic loading
- **Content Preservation** - Maintains original navigation structure, styling, and cross-references
- **Error Resilience** - Comprehensive error handling ensures partial success even with network issues

**🔄 Integration-Friendly:**
- **Standalone Operation** - Works independently without external dependencies on other toolkit components
- **API-First Design** - Clean programmatic interface for integration into larger workflows
- **Container-Ready** - Docker-friendly with minimal resource requirements
- **Cross-Platform** - Native support for Linux, macOS, and Windows environments

## ⚡ **Core Features & Capabilities**

### 🎯 **Complete Documentation Extraction**
D361 employs sophisticated techniques to capture entire documentation ecosystems:

```python
# Advanced content discovery with multiple fallback strategies
from d361.offline.parser import parse_sitemap

# Strategy 1: Direct sitemap parsing
urls = await parse_sitemap("https://docs.example.com/sitemap-en.xml")

# Strategy 2: Robots.txt discovery + parsing  
urls = await parse_sitemap("https://docs.example.com/robots.txt", strategy="robots")

# Strategy 3: Stealth browser automation for protected sites
urls = await parse_sitemap("https://docs.example.com", strategy="stealth")
```

**What gets captured:**
- 📄 All article content (HTML + converted Markdown)
- 🗺️ Complete navigation hierarchy with nested categories
- 🖼️ Referenced images and media files
- 🔗 Cross-references and internal links  
- 🎨 Original styling and CSS (optional)

### 🚀 **Multi-Strategy Sitemap Parsing**
Robust discovery mechanisms ensure content extraction even from challenging sites:

```python
from d361.offline.d361_offline import D361Offline
from d361.offline.config import Config

config = Config(
    map_url="https://docs.example.com/sitemap-en.xml",
    # Fallback strategies automatically attempted if primary fails
    effort=True,  # Enable additional discovery strategies
    max_concurrent=8,  # Concurrent parsing attempts
    retries=3  # Per-strategy retry attempts
)

offline_gen = D361Offline(config)
await offline_gen.prep()  # Intelligent sitemap discovery and parsing
```

**Parsing Strategies:**
1. **Direct Navigation** - Standard HTTP GET to sitemap URL
2. **Stealth Browser** - Playwright with human-like behavior patterns
3. **HTTP Direct** - aiohttp-based lightweight parsing
4. **Robots.txt Discovery** - Automatic sitemap URL discovery
5. **Google Cache** - Last resort via cached versions

### 🤖 **Advanced Browser Automation**
Playwright-powered content extraction handles modern web complexity:

```python
from d361.offline.browser import setup_browser, expand_all_items

# Configure stealth browser with realistic parameters
browser_config = {
    'headless': True,
    'user_agent': 'Mozilla/5.0 (compatible; D361 Documentation Archiver)',
    'viewport': {'width': 1920, 'height': 1080},
    'extra_http_headers': {
        'Accept-Language': 'en-US,en;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br'
    }
}

async with setup_browser(**browser_config) as browser:
    page = await browser.new_page()
    await page.goto("https://docs.example.com")
    
    # Handle dynamic content loading
    navigation_tree = await page.locator('#left-panel d360-data-list-tree-view').first
    await expand_all_items(navigation_tree, page)  # Recursively expand all navigation
    
    # Extract complete navigation structure
    nav_data = await extract_tree_structure(navigation_tree)
```

**Browser Automation Capabilities:**
- 🍪 **Cookie Banner Dismissal** - Automatically handles consent dialogs  
- 📜 **Virtual Scrolling** - Loads all content from virtually rendered lists
- 🌳 **Dynamic Tree Expansion** - Recursively expands navigation hierarchies
- ⏱️ **Network Idle Detection** - Waits for complete content loading
- 🔄 **Retry Logic** - Handles intermittent failures gracefully

### 📱 **Multi-Format Output Generation**
Flexible output formats for different consumption needs:

```python
# Configure output formats and customization
config = Config(
    map_url="https://docs.example.com/sitemap-en.xml",
    output_dir=Path("./offline_docs"),
    css_file=Path("./custom-styling.css"),  # Custom CSS for HTML output
    
    # File naming patterns
    all_docs_html_filename="complete_documentation.html",
    all_docs_md_filename="complete_documentation.md",
    
    # Processing options
    test=False,  # Process all content (not just test subset)
    verbose=True  # Detailed logging
)

offline_gen = D361Offline(config)
await offline_gen.all()  # Generate all formats
```

**Generated Output Structure:**
```
offline_docs/docs.example.com/
├── prep.json              # Sitemap discovery metadata
├── fetch.json             # Content extraction results  
├── nav.json               # Navigation structure data
├── nav.html               # Standalone navigation menu
├── nav.md                 # Markdown navigation index
├── all_docs.html          # Complete HTML with embedded navigation
├── all_docs.md            # Complete Markdown with TOC
├── html/                  # Individual HTML pages
│   ├── getting-started.html
│   ├── api-reference.html
│   └── ...
└── md/                    # Individual Markdown pages
    ├── getting-started.md
    ├── api-reference.md
    └── ...
```

### ⚡ **Performance-Optimized Processing**
Enterprise-grade performance with intelligent resource management:

```python
from d361.offline.config import Config

# Performance-tuned configuration
config = Config(
    map_url="https://docs.example.com/sitemap-en.xml",
    max_concurrent=12,        # Concurrent page fetching
    timeout=60,              # Per-page timeout (seconds)
    retries=5,               # Retry attempts for failed pages  
    pause=0,                 # No artificial delays (max speed)
)

# Monitor performance during processing
offline_gen = D361Offline(config)

start_time = time.time()
result = await offline_gen.all()
processing_time = time.time() - start_time

print(f"Processed {len(result['content'])} pages in {processing_time:.2f}s")
print(f"Average: {processing_time/len(result['content']):.3f}s per page")
```

**Performance Features:**
- 🚀 **Concurrent Downloads** - Configurable parallel processing (default: 5 concurrent)
- 🔄 **Exponential Backoff** - Intelligent retry delays with `tenacity` library
- 💾 **Memory Efficient** - Streaming content processing to minimize memory usage
- 📊 **Progress Tracking** - Real-time processing status and performance metrics
- ⚡ **Network Optimization** - Connection pooling and keep-alive for HTTP efficiency

### Installation

D361 can be installed in multiple ways depending on your needs:

#### Quick Installation (Recommended)

```bash
# One-line installation script
curl -sSL https://raw.githubusercontent.com/twardoch/d361/main/scripts/install.sh | bash
```

#### Manual Installation

**Via pip:**
```bash
pip install d361
playwright install chromium
```

**Via uv (faster):**
```bash
uv pip install d361
playwright install chromium
```

**Binary Download (No Python required):**
```bash
# Linux
curl -L -o d361-offline https://github.com/twardoch/d361/releases/latest/download/d361-offline-ubuntu-latest
chmod +x d361-offline

# macOS
curl -L -o d361-offline https://github.com/twardoch/d361/releases/latest/download/d361-offline-macos-latest
chmod +x d361-offline

# Windows
curl -L -o d361-offline.exe https://github.com/twardoch/d361/releases/latest/download/d361-offline-windows-latest.exe
```

#### Installation Options

The installation script supports various options:

```bash
# Install specific version
./scripts/install.sh --version 1.0.0

# Install via specific method
./scripts/install.sh --method binary

# Install with Playwright browsers
./scripts/install.sh --install-browsers

# Install to custom directory
./scripts/install.sh --install-dir ~/.local/bin

# See all options
./scripts/install.sh --help
```

### Command Line Usage

The package provides a command-line interface `d361-offline` with several operations. The main commands are `prep`, `fetch`, `build`, and `all`.

**1. `all` (Recommended for most users):**
Runs the entire process: preparation, fetching, and building.
```bash
d361-offline all --map-url="https://docs.example.com/sitemap-en.xml" --output-dir="my_offline_docs"
```
*   `--map-url`: (Required) The URL to your Document360 sitemap (usually ends with `sitemap-en.xml` or similar).
*   `--output-dir`: (Optional) The directory where offline documentation will be saved. Defaults to a folder named after the domain in the current directory (e.g., `./docs.example.com/`).
*   `--style`: (Optional) Path to a custom CSS file to style the HTML output.
*   `--nav-url`: (Optional) URL of a specific page to extract navigation from. If not provided, uses the first URL from the sitemap.

**2. Individual Steps (for advanced control):**

*   **`prep`**: Parses the sitemap and extracts the navigation structure.
    ```bash
    d361-offline prep --map-url="https://docs.example.com/sitemap-en.xml" --output-dir="my_docs"
    ```
    This creates a `prep.json` file in the output directory.

*   **`fetch`**: Downloads the content for all URLs found in the `prep` phase.
    ```bash
    d361-offline fetch --prep-file="my_docs/prep.json" --output-dir="my_docs"
    ```
    This creates a `fetch.json` file and saves individual HTML/Markdown pages.

*   **`build`**: Generates the final combined documentation files from the fetched content.
    ```bash
    d361-offline build --fetch-file="my_docs/fetch.json" --output-dir="my_docs" --style="path/to/custom.css"
    ```

**Getting Help:**
For a full list of options for each command, use `d361-offline <command> --help`.
For example: `d361-offline all --help`.

### Programmatic Usage

You can also use D361 from your Python scripts:

```python
import asyncio
from pathlib import Path
from d361.offline.config import Config
from d361.offline.d361_offline import D361Offline

async def generate_my_docs():
    # Configure the generator
    # Ensure map_url is provided
    sitemap_url = "https://docs.example.com/sitemap-en.xml" # Replace with actual sitemap URL
    if not sitemap_url:
        raise ValueError("map_url must be set for Config")

    config = Config(
        map_url=sitemap_url,
        output_dir=Path("custom_offline_docs"),  # Output will be in ./custom_offline_docs/docs.example.com/
        css_file=Path("styles/my_custom_style.css") if Path("styles/my_custom_style.css").exists() else None,
        max_concurrent=5,  # Number of parallel downloads
        retries=3,         # Number of retries for failed requests
        timeout=60,        # Timeout for page loads in seconds
        verbose=False,     # Set to True for detailed logging
        test=False         # Set to True to process only a few items for testing
    )

    # Create an instance of the offline generator
    offline_generator = D361Offline(config)

    try:
        print(f"Starting offline generation for {config.map_url}...")
        print(f"Output will be saved to: {config.output_dir.resolve()}")

        # Run the entire process: prep, fetch, and build
        await offline_generator.all()

        # Alternatively, run individual phases:
        # print("Running prep phase...")
        # prep_data = await offline_generator.prep()
        # print(f"Prep phase complete. Data saved to {config.prep_file}")

        # print("Running fetch phase...")
        # fetch_data = await offline_generator.fetch(prep_file=config.prep_file)
        # print(f"Fetch phase complete. Data saved to {config.fetch_file}")

        # print("Running build phase...")
        # await offline_generator.build(fetch_file=config.fetch_file)
        # print("Build phase complete.")

        print("Offline documentation generated successfully!")
        print(f"Combined HTML: {config.output_dir / config.all_docs_html_filename}")
        print(f"Combined Markdown: {config.output_dir / config.all_docs_md_filename}")

    except Exception as e:
        print(f"An error occurred: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    # Ensure Playwright browsers are installed:
    # Run `playwright install` in your terminal if you haven't already.
    asyncio.run(generate_my_docs())
```

### Configuration Options

The behavior of `d361-offline` is controlled by the `Config` model (see `src/d361/offline/config.py`). Key options include:

| Option (`Config` field) | CLI Argument    | Description                                           | Default (from `Config`) |
|-------------------------|-----------------|-------------------------------------------------------|-------------------------|
| `map_url`               | `--map-url`     | URL of the sitemap (e.g., sitemap.xml)                | **Required** (None by default, must be set) |
| `nav_url`               | `--nav-url`     | URL of a page to extract navigation from (optional)   | None                    |
| `output_dir`            | `--output-dir`  | Base directory for output. A subfolder named after the domain will be created here. | Current working directory |
| `css_file`              | `--style` (build)| Path to custom CSS file for styling HTML output       | None                    |
| `effort`                | `--effort` (prep)| Try harder to map all sitemap links in navigation     | `False`                 |
| `max_concurrent`        | `--parallel`    | Maximum number of concurrent download requests        | 5                       |
| `retries`               | `--retries`     | Number of retry attempts for failed requests          | 3                       |
| `timeout`               | `--timeout`     | Request timeout in seconds for page loads             | 60                      |
| `verbose`               | `--verbose`     | Enable verbose (DEBUG level) logging                  | `False`                 |
| `test`                  | `--test` (prep, fetch) | Test mode: process only a few items (typically 5)  | `False`                 |
| `pause`                 | `--wait` (prep) | Pause during navigation extraction (for debugging browser) | `False` (numeric value for seconds in CLI) |

*Note: Default `output_dir` behavior: If `map_url` is `https://docs.example.com/...` and `output_dir` is `my_docs` (or not set, defaulting to current dir), the actual output path will be `my_docs/docs.example.com/`.*

### Output Structure

The generated offline documentation will be organized as follows in your specified output directory (e.g., `output_dir/your_domain_com/`):

```
output_dir/your_domain_com/
├── prep.json          # Intermediate data from preparation phase (URLs, navigation)
├── fetch.json         # Intermediate data from fetch phase (content map)
├── nav.json           # Navigation structure in JSON format
├── nav.html           # Standalone HTML version of the navigation menu
├── nav.md             # Markdown version of the navigation menu
├── all_docs.html      # Combined HTML documentation with navigation and styling
├── all_docs.md        # Combined Markdown documentation with a table of contents
├── html/              # Directory for individual HTML page files
│   ├── page-slug-1.html
│   ├── page-slug-2.html
│   └── ...
└── md/                # Directory for individual Markdown page files
    ├── page-slug-1.md
    ├── page-slug-2.md
    └── ...
```
If a custom CSS file is used, it will be copied into `html/assets/` and linked in `all_docs.html`.

## Part 2: Technical Deep-Dive

This section describes how D361 works internally, its architecture, and guidelines for contributors.

### How the Code Works

D361 operates in a three-phase workflow: **Prep**, **Fetch**, and **Build**. All operations are asynchronous using Python's `asyncio` library for efficient I/O and concurrency.

**Core Workflow:**

1.  **Prep Phase:**
    *   Parses the sitemap (`map_url`) to get a list of all unique page URLs.
    *   Extracts the navigation structure (table of contents) from a specified page (`nav_url` or the first sitemap URL).
    *   Saves this information (`urls`, `navigation`, `config`) into `prep.json`.
    *   Generates `nav.json`, `nav.html`, and `nav.md`.

2.  **Fetch Phase:**
    *   Reads `prep.json`.
    *   For each URL, fetches the page content (title, HTML body, Markdown version).
    *   Saves individual page content as `html/<slug>.html` and `md/<slug>.md`.
    *   Saves all fetched content mapped by URL, along with the navigation structure and config, into `fetch.json`.

3.  **Build Phase:**
    *   Reads `fetch.json`.
    *   Generates `all_docs.html`: A single HTML file containing all articles, prepended with the navigation menu and linked to the specified CSS.
    *   Generates `all_docs.md`: A single Markdown file containing all articles, with a generated table of contents at the top.

**Key Components and Processes:**

*   **Configuration (`src/d361/offline/config.py`):**
    *   The `Config` class (Pydantic model) manages all settings. It validates inputs, computes default values (like `output_dir` based on the domain), and provides paths for various output files.

*   **Main Orchestrator (`src/d361/offline/d361_offline.py`):**
    *   The `D361Offline` class is the heart of the generator. It takes a `Config` object and has methods for `prep()`, `fetch()`, `build()`, and `all()`.
    *   It coordinates interactions between other modules.

*   **Command Line Interface (`src/d361/offline/__main__.py`):**
    *   Uses the `fire` library to expose `D361Offline` methods and configuration options to the command line as `d361-offline prep`, `fetch`, `build`, `all`.

*   **Sitemap Parsing (`src/d361/offline/parser.py`):**
    *   The `parse_sitemap` function is responsible for fetching and extracting URLs from the `sitemap.xml`.
    *   It employs multiple strategies for robustness:
        1.  Direct Playwright navigation (`_parse_with_playwright_direct`).
        2.  Playwright with enhanced stealth techniques (`_parse_with_playwright_stealth`) to mimic human browsing.
        3.  Direct HTTP GET request using `aiohttp` (`_parse_with_aiohttp_direct`).
        4.  Checking `robots.txt` for sitemap directives and then parsing found URLs (`_parse_with_playwright_via_robots`).
        5.  As a last resort, it can try Google's web cache of the sitemap.
    *   Uses `BeautifulSoup` (with `lxml` parser) to parse XML content and extract `<loc>` tags.

*   **Navigation Extraction (`src/d361/offline/navigation.py`):**
    *   The `extract_navigation` function uses Playwright to load the `nav_url`.
    *   This is one ofthe most complex interactions due to Document360's dynamic UI:
        *   **Cookie/Consent Handling:** Attempts to detect and dismiss various cookie consent banners.
        *   **Tree Expansion:** Locates the main navigation tree element (e.g., `#left-panel ... d360-data-list-tree-view`). It then calls `expand_navigation_tree` which uses `browser.expand_all_items`.
        *   `expand_all_items` (in `browser.py`) repeatedly scrolls the navigation pane (to load virtually rendered items via `scroll_to_bottom`) and clicks on collapsed item indicators (e.g., triangle icons) until all navigation nodes are visible.
        *   **Structure Parsing:** `extract_tree_structure` then iterates over the DOM elements of the expanded tree to rebuild the hierarchical navigation data (titles, links, children).
    *   Includes fallback mechanisms if standard Document360 selectors are not found.

*   **Content Fetching and Processing (`src/d361/offline/content.py`, `D361Offline.process_url`):**
    *   For each URL, `D361Offline.process_url` launches a Playwright page.
    *   `extract_page_content` (in `content.py`) is called:
        *   Navigates to the URL.
        *   Attempts to dismiss cookie banners.
        *   Waits for network idle and content to render.
        *   Extracts the page title (trying common selectors like `h1.article-title`).
        *   Extracts the main article HTML content (trying selectors like `#articleContent`, `.article-content`).
        *   Converts the extracted HTML to Markdown using the `markdownify` library.
    *   The `D361Offline` class then saves this content to `html/<slug>.html` and `md/<slug>.md`. Slugs are generated from URLs.

*   **Browser Automation (`src/d361/offline/browser.py`):**
    *   `setup_browser`: Configures and launches Playwright (Chromium by default) with specific arguments to appear more like a regular browser and handle various environments.
    *   `scroll_to_bottom`: Handles scrolling within elements that use virtual scrolling (common in Document360 navigation) to ensure all items are loaded into the DOM.
    *   `expand_all_items`: A sophisticated function to recursively find and click "expand" icons in a tree structure, dealing with items that might only appear after scrolling or previous expansions. It uses multiple selector strategies.

*   **Output Generation (`D361Offline._generate_combined_files`, `src/d361/offline/generator.py`):**
    *   `D361Offline._generate_combined_files` is responsible for creating `all_docs.html` and `all_docs.md`.
    *   For `all_docs.html`:
        *   It includes a navigation section generated from `nav.json`.
        *   It appends the HTML content of each article, ordered by the navigation structure.
        *   It embeds the custom CSS (if provided) or a default style.
    *   For `all_docs.md`:
        *   It generates a Table of Contents based on the navigation and article titles.
        *   It appends the Markdown content of each article.
    *   The `generator.py` module contains helper functions for creating directories and was initially intended for more granular file generation, though much of that logic is now within `D361Offline`.

*   **Error Handling and Retries:**
    *   The `tenacity` library is used in `content.extract_page_content` to automatically retry page content extraction on failure, using exponential backoff.
    *   Individual URL processing errors are logged but generally don't stop the entire batch, allowing the tool to fetch as much content as possible.

### Development Environment

This project uses [Hatch](https://hatch.pypa.io/) for managing dependencies, virtual environments, and running development tasks. Hatch leverages [uv](https://github.com/astral-sh/uv) if available, which significantly speeds up environment setup and package installation.

**Setup:**

1.  **Install Hatch and uv**:
    It's recommended to install `uv` first, then use it to install `hatch`.
    ```bash
    # Install uv (refer to official uv documentation for your OS)
    # Example for Linux/macOS:
    curl -LsSf https://astral.sh/uv/install.sh | sh
    # Then install Hatch using uv
    uv pip install hatch
    ```

2.  **Create/Activate Hatch Environment**:
    Navigate to the project root directory and run:
    ```bash
    hatch shell
    ```
    This command:
    *   Creates an isolated virtual environment (e.g., in `.hatch/`) if one doesn't exist.
    *   Installs all project dependencies, including development tools (`pytest`, `ruff`, `mypy`, etc.), using `uv` if available.
    *   Activates the environment in your current shell.

3.  **Install Playwright Browsers**:
    After activating the environment, install the necessary browser binaries for Playwright:
    ```bash
    playwright install
    ```
    This typically installs Chromium, Firefox, and WebKit. D361 primarily uses Chromium.

**Running Tasks with Hatch:**

Hatch scripts are defined in `pyproject.toml` under `[tool.hatch.envs.*.scripts]`.

*   **Run Tests**:
    The project uses `pytest`.
    ```bash
    # Run tests with coverage report
    hatch run test:test-cov

    # Run tests without coverage
    hatch run test:test
    ```

*   **Linting and Formatting**:
    The project uses [Ruff](https://github.com/astral-sh/ruff) for super-fast linting and formatting, and [MyPy](http://mypy-lang.org/) for static type checking.
    ```bash
    # Format code and fix lint issues (where possible)
    hatch run lint:fix  # Or an alias: hatch run fix

    # Check for linting and formatting issues
    hatch run lint:style # Or an alias: hatch run lint

    # Run static type checking
    hatch run lint:typing # Or an alias: hatch run type-check

    # Run all checks (style, format, types)
    hatch run lint:all
    ```

*   **Pre-commit Hooks**:
    The project is configured with pre-commit hooks (see `.pre-commit-config.yaml`). Install them to automatically run checks before each commit:
    ```bash
    pre-commit install
    ```

### Coding and Contribution Guidelines

Contributions are highly welcome! Please adhere to the following guidelines:

1.  **Branching Strategy**:
    *   Create new branches from `main` for features or bug fixes (e.g., `feat/add-new-exporter`, `fix/navigation-parsing-bug`).

2.  **Code Style & Quality**:
    *   **Formatting**: Code is formatted with Ruff. Run `hatch run lint:fix` before committing.
    *   **Linting**: Code is linted with Ruff. Ensure `hatch run lint:style` passes.
    *   **Type Checking**: All code should pass MyPy checks. Run `hatch run lint:typing`.
    *   **Pythonic Code**: Write clear, readable, and idiomatic Python.
    *   **Docstrings and Comments**: Add docstrings to all public modules, classes, and functions. Use comments for complex logic.

3.  **Commit Messages**:
    *   Follow the [Conventional Commits](https://www.conventionalcommits.org/) specification.
    *   Examples:
        *   `feat: add support for Confluence sitemap parsing`
        *   `fix: improve resilience of cookie banner dismissal`
        *   `docs: update README with advanced usage examples`
        *   `refactor: simplify content extraction logic`
        *   `test: add unit tests for slug generation`

4.  **Testing**:
    *   Write tests for all new features and bug fixes using `pytest`.
    *   Place tests in the `tests/` directory, mirroring the structure of `src/d361/`.
    *   Aim for high test coverage. Check coverage with `hatch run test:test-cov`.
    *   Ensure all tests pass locally before submitting a Pull Request.

5.  **Pull Requests (PRs)**:
    *   Submit PRs against the `main` branch.
    *   Provide a clear and descriptive title and summary for your PR.
    *   Explain the "what" and "why" of your changes. Link to any relevant issues.
    *   Ensure all GitHub Actions CI checks (tests, linting, type checking) pass on your PR.
    *   Be responsive to feedback and code reviews.

6.  **Dependencies**:
    *   Minimize new dependencies. If adding one, justify its need.
    *   Add new dependencies to `pyproject.toml` under `[project.dependencies]` or `[project.optional-dependencies.dev]`.

### Releases

D361 follows [Semantic Versioning](https://semver.org/) and provides multiple distribution formats:

- **PyPI Package**: Available on [PyPI](https://pypi.org/project/d361/) for `pip` and `uv` installation
- **Binary Releases**: Pre-built executables for Linux, macOS, and Windows
- **Source Code**: Available on [GitHub](https://github.com/twardoch/d361)

Each release includes:
- Source distribution (`.tar.gz`)
- Wheel distribution (`.whl`)
- Standalone binaries for all platforms
- Automated testing across Python 3.10-3.12 and multiple operating systems

#### Release Process

New releases are automatically created when version tags are pushed:

```bash
# Create and push a new release tag
git tag v1.0.0
git push origin v1.0.0
```

This triggers the CI/CD pipeline which:
1. Runs comprehensive tests on all platforms
2. Builds Python packages and binaries
3. Publishes to PyPI
4. Creates GitHub release with binary artifacts

For development and contribution guidelines, see [DEVELOPMENT.md](DEVELOPMENT.md).

### License

D361 is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
</document_content>
</document>

<document index="7">
<source>TODO.md</source>
<document_content>
# d361 MkDocs Export Enhancement TODO List

This document contains the linearized itemized plan for enhancing the d361 package with comprehensive MkDocs export capabilities.

## 📊 Current Status
**✅ FOUNDATION COMPLETE**: d361 package has solid hexagonal architecture
**🎯 CURRENT FOCUS**: Implementing comprehensive Document360 → MkDocs export functionality
**📋 RESEARCH COMPLETE**: MkDocs ecosystem, Material theme, plugins, and extensions analyzed

---

## Phase 1: Document360 Archive Processing Enhancement (Week 1-2)

### 1.1 Archive Processing Enhancement
- [ ] Enhance existing d361.archive module for Document360 structure extraction
- [ ] Extract category/article hierarchy with original ordering information
- [ ] Process Document360 metadata for numerical prefix generation
- [ ] Handle Document360-specific content types and relationships
- [ ] Preserve cross-references and internal linking structure

### 1.2 Numerical Ordering System Implementation
- [ ] Implement numerical prefix generation based on Document360 order
- [ ] Create file naming system: "01_category/02_article.md" format
- [ ] Ensure compatibility with mkdocs-awesome-nav navigation discovery
- [ ] Support vexy-mkdocs-strip-number-prefix for clean URLs
- [ ] Add validation for ordering consistency and completeness

### 1.3 Archive Processing Integration
- [ ] Integrate with existing d361.providers for archive data access
- [ ] Connect with d361.scraping.content_processor for content enhancement
- [ ] Add MkDocs-specific archive processing capabilities
- [ ] Test with Vexy-Lines-2025-Aug-07-12-38-29.zip
- [ ] Validate structure extraction accuracy and completeness

### 1.3 Template System Foundation
- [ ] Create base MkDocs configuration templates (mkdocs_base.yml.j2)
- [ ] Add Material theme specific template (material_theme.yml.j2) with all features
- [ ] Design plugin configuration templates (plugin_configs.yml.j2) for popular plugins
- [ ] Implement template inheritance and customization system
- [ ] Add validation for generated configurations with comprehensive error reporting

### 1.4 Integration with Existing d361 Systems
- [ ] Integrate MkDocs exporters with d361.providers for archive/API data access
- [ ] Connect with d361.scraping.content_processor for enhanced content processing
- [ ] Utilize d361.config system for MkDocs-specific configuration management
- [ ] Implement proper error handling and logging using d361 infrastructure
- [ ] Add MkDocs export capabilities to d361 CLI interface

---

## Phase 2: Advanced Content Processing (Week 3-4)

### 2.1 Content Enhancement Pipeline
- [ ] Implement `ContentEnhancer` for Document360 → MkDocs content optimization
- [ ] Add HTML → Markdown conversion with MkDocs extensions support (SuperFences, tabbed, etc.)
- [ ] Create `CrossReferenceResolver` for internal link processing and validation
- [ ] Build frontmatter enrichment system for MkDocs metadata (SEO, social cards)
- [ ] Add content validation and quality assurance checks (broken links, images)

### 2.2 Asset Processing Enhancement
- [ ] Enhance image processing for MkDocs workflows with format optimization
- [ ] Implement CDN URL rewriting for optimized asset delivery
- [ ] Add support for responsive images and lazy loading configurations
- [ ] Create asset bundling and optimization pipeline for Material theme
- [ ] Add support for Material theme social cards generation from Document360 content

### 2.3 Navigation Intelligence System
- [ ] Implement smart navigation generation from Document360 hierarchy
- [ ] Add support for mkdocs-literate-nav integration (SUMMARY.md generation)
- [ ] Create section index page generation with proper Material theme styling
- [ ] Build automatic cross-reference detection and linking using mkdocs-autorefs
- [ ] Add navigation validation and optimization for large documentation sites

### 2.4 Markdown Extensions Integration
- [ ] Configure pymdownx.superfences for enhanced code blocks with syntax highlighting
- [ ] Add pymdownx.tabbed for tabbed content containers from Document360 content
- [ ] Integrate admonitions for Document360 callouts and note boxes
- [ ] Configure table of contents with permalink anchors for better navigation
- [ ] Add task list support for GitHub-style checkboxes in converted content

---

## Phase 3: Plugin Ecosystem Integration (Week 5-6)

### 3.1 Core Plugin Support
- [ ] Add mkdocs-material theme integration and customization with d361 templates
- [ ] Implement mkdocs-autorefs automatic cross-referencing for Document360 links  
- [ ] Integrate mkdocs-section-index for clickable sections in navigation
- [ ] Add mkdocs-redirects for URL migration support from Document360 slugs
- [ ] Configure advanced search with offline capability for Material theme

### 3.2 Python Markdown Extensions Configuration
- [ ] Configure pymdownx.superfences for enhanced code blocks with custom formats
- [ ] Add pymdownx.tabbed for tabbed content containers with Material theme styling
- [ ] Integrate admonitions for Document360 callout boxes (notes, warnings, tips)
- [ ] Configure table of contents with permalink anchors and proper Material theme integration
- [ ] Add task list support for GitHub-style checkboxes in converted Document360 content

### 3.3 Performance and SEO Optimization
- [ ] Integrate mkdocs-minify for production optimization (HTML, CSS, JS)
- [ ] Add social cards generation for better sharing using Material theme features
- [ ] Implement structured data and SEO enhancements from Document360 metadata
- [ ] Configure caching and compression optimizations for large documentation sites
- [ ] Add accessibility compliance features (ARIA labels, alt text, keyboard navigation)

### 3.4 Custom MkDocs Plugins Development
- [ ] Create d360_compatibility.py plugin for Document360-specific features
- [ ] Develop vexy_integration.py plugin for Vexy Lines specific enhancements
- [ ] Build export_validation.py plugin for quality reporting and validation
- [ ] Implement custom plugin discovery and registration system
- [ ] Add plugin configuration validation and error handling

---

## Phase 4: Integration and Testing (Week 7-8)

### 4.1 vexy-help Integration
- [ ] Update vexy-help to use d361 MkDocs export capabilities instead of local implementation
- [ ] Maintain backward compatibility with existing vexy-help workflows and CLI
- [ ] Add Vexy-specific customizations and branding through d361 template system
- [ ] Update CLI to support new MkDocs export options with enhanced features
- [ ] Create migration guide for existing users moving from legacy implementation

### 4.2 Comprehensive Testing Framework
- [ ] Unit tests for all MkDocs export components (exporters, processors, templates)
- [ ] Integration tests with both archive and API data sources from d361.providers
- [ ] Performance benchmarks for large Document360 projects (1000+ pages)
- [ ] Template validation and generation testing for all supported configurations
- [ ] End-to-end workflow testing from Document360 archive to deployed MkDocs site

### 4.3 Documentation and User Guides
- [ ] Create comprehensive MkDocs export documentation with API reference
- [ ] Add usage examples for different scenarios (Material theme, custom plugins)
- [ ] Document template customization and plugin configuration options
- [ ] Create troubleshooting guide for common issues and error resolution
- [ ] Add performance optimization guide for large documentation projects

### 4.4 Quality Assurance and Validation
- [ ] Implement export validation with content quality reporting
- [ ] Add broken link detection and resolution for internal Document360 links
- [ ] Create image optimization validation and missing asset detection
- [ ] Build SEO validation for generated MkDocs sites (meta tags, social cards)
- [ ] Add accessibility compliance checking and reporting

---

## Phase 5: Advanced Features and Optimization (Week 9-10)

### 5.1 Advanced Export Features
- [ ] Multi-site export for large Documentation projects with cross-site linking
- [ ] Incremental build support for faster iterations and CI/CD integration
- [ ] Advanced caching strategies for improved performance with large archives
- [ ] Custom plugin development framework for extending MkDocs export capabilities
- [ ] Export validation and quality reporting with detailed analytics

### 5.2 Production Readiness and Optimization
- [ ] Performance profiling and optimization for memory and CPU usage
- [ ] Memory usage optimization for large archives (>10GB Document360 exports)
- [ ] Error handling and graceful degradation for network failures and malformed content
- [ ] Monitoring and observability integration with metrics and health checks
- [ ] Production deployment documentation with Docker and CI/CD examples

### 5.3 Enterprise Features
- [ ] Multi-tenant support for hosting multiple Document360 exports
- [ ] Advanced security features (content sanitization, access control)
- [ ] Backup and recovery mechanisms for generated MkDocs sites
- [ ] Analytics integration for tracking documentation usage and performance
- [ ] API rate limiting and throttling for large-scale Document360 API usage

### 5.4 Future-Proofing and Extensibility
- [ ] Plugin API for third-party MkDocs theme and extension integration
- [ ] Webhook support for automated rebuilds on Document360 content changes
- [ ] GraphQL API for querying exported content metadata and structure
- [ ] Integration hooks for content management systems and wikis
- [ ] Extensible template system for supporting additional static site generators

---

## Success Criteria and Validation

### Technical Excellence
- [ ] **Performance**: Export 1000+ page Document360 archive to MkDocs in <5 minutes
- [ ] **Quality**: >95% link resolution accuracy with automated validation
- [ ] **Compatibility**: Support for all major MkDocs themes and popular plugins
- [ ] **Test Coverage**: >90% test coverage for all MkDocs export functionality
- [ ] **Documentation**: Complete API documentation and user guides

### User Experience
- [ ] **Ease of Use**: Single command export from Document360 to production MkDocs site
- [ ] **Customization**: Template-based configuration for different use cases
- [ ] **Integration**: Seamless integration with existing CI/CD pipelines
- [ ] **Error Handling**: Clear error messages with actionable troubleshooting steps
- [ ] **Migration**: Smooth migration path from legacy vexy-help MkDocs workflows

### Business Impact
- [ ] **Code Reusability**: d361 MkDocs export works for any Document360 project
- [ ] **Clean Separation**: vexy-help contains no Document360-specific export code
- [ ] **Maintainability**: Reduced code duplication and clear responsibility boundaries
- [ ] **Extensibility**: Template and plugin system allows easy customization
- [ ] **Production Readiness**: Enterprise-grade export with monitoring and optimization

---

**Total Tasks: 75+ MkDocs export enhancement items**

**Timeline: 10 weeks for complete d361 MkDocs export enhancement**

This enhancement will transform d361 into the definitive Document360 → MkDocs conversion toolkit, providing enterprise-grade capabilities with modern MkDocs features, comprehensive plugin support, and production-ready performance.
</document_content>
</document>

<document index="8">
<source>d361.spec</source>
<document_content>
# this_file: d361.spec
# PyInstaller spec file for d361

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
    ['src/d361/offline/__main__.py'],
    pathex=[],
    binaries=[],
    datas=[
        ('src/d361/offline/d361_offline.css', 'd361/offline'),
    ],
    hiddenimports=[
        'playwright',
        'playwright.async_api',
        'aiohttp',
        'aiofiles',
        'beautifulsoup4',
        'bs4',
        'lxml',
        'markdownify',
        'html2text',
        'tenacity',
        'pydantic',
        'loguru',
        'fire',
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='d361-offline',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
</document_content>
</document>

<document index="9">
<source>data/offline/README.md</source>
<document_content>
# D361Offline

A tool for generating offline documentation from Document360 sites.

## Features

- Extract URLs from a sitemap
- Extract navigation structure from Document360 pages
- Fetch and process HTML content
- Generate static HTML and Markdown documentation

## Installation

```bash
pip install -e .
```

Or with uv:

```bash
uv pip install -e .
```

## Usage

### Command Line Interface

```bash
# Prepare by extracting sitemap and navigation
d361-offline prep --map-url=https://docs.document360.com/sitemap-en.xml --output-dir=docs

# Fetch content for all URLs found
d361-offline fetch --prep-file=docs/prep.json

# Build HTML and Markdown output
d361-offline build --fetch-file=docs/fetch.json

# Or run all steps at once
d361-offline all --map-url=https://docs.document360.com/sitemap-en.xml --output-dir=docs
```

### Python API

```python
import asyncio
from d361_offline import D361Offline
from d361_offline.config import Config

# Create configuration
config = Config(
    map_url="https://docs.document360.com/sitemap-en.xml",
    output_dir="docs"
)

# Initialize
offline = D361Offline(config)

# Run the process
async def main():
    # Prepare
    await offline.prep()
    
    # Fetch
    await offline.fetch()
    
    # Build
    await offline.build()
    
    # Or run all at once
    # await offline.all()

# Run asynchronously
asyncio.run(main())
```

## Options

| Option | Description |
|--------|-------------|
| `--map-url` | URL of the sitemap.xml file |
| `--nav-url` | URL of the page to extract navigation from (if different from sitemap URLs) |
| `--output-dir` | Output directory path (defaults to domain name in current directory) |
| `--css-file` | Custom CSS file path |
| `--effort` | Effort level (1-3, higher means more processing) |
| `--max-concurrent` | Maximum number of concurrent requests |
| `--retries` | Number of retries for failed requests |
| `--timeout` | Timeout in seconds for page loads |
| `--verbose` | Enable verbose logging |
| `--test` | Run in test mode with limited output |
| `--pause` | Pause between requests in seconds |

## Development

Requires Python 3.11+ and Playwright.

```bash
# Install dependencies
uv pip install -e ".[dev]"

# Install Playwright browsers
playwright install chromium

# Run tests
pytest

# Format code
ruff check --fix . && ruff format .
```

## License

MIT 
</document_content>
</document>

<document index="10">
<source>data/offline/d360_getsitenav.md</source>
<document_content>

# d360_getsitenav

Python Fire CLI tool that uses Playwright, which will: 

- Go to https://docs.document360.com/docs/
- Focus on #left-panel > div.catergory-list > site-category-list-tree-view > d360-data-list-tree-view
- Scroll all the way down and keep clicking the small triangles to recursively expand all items, and gather the links, gradually working your way upwards, until you have gathered all links from https://docs.document360.com/sitemap-en.xml (included). 


</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/data/offline/d360_getsitenav.py
# Language: python

import json
from urllib.parse import urljoin
import fire
from playwright.sync_api import sync_playwright

def scroll_to_bottom((page, tree_view)) -> None:
    """Scroll the tree view to the bottom to load all virtual scroll items."""

def expand_all_items((page, tree_view)) -> None:
    """Recursively expand all items by clicking collapsed triangle icons."""

def scroll_to_bottom((page, tree_view)) -> None:
    """Scroll incrementally to load all virtual scroll items."""

def extract_tree((tree_view)):
    """Extract the hierarchical tree structure from the tree view."""

def generate_markdown((tree, filepath)) -> None:
    """Generate a Markdown file with a hierarchical list of links."""

def build_md((node, level=0)):

def generate_html((tree, filepath)) -> None:
    """Generate a static HTML file with a nested list of links."""

def build_html((node)):

def generate_json((tree, filepath)) -> None:
    """Generate a JSON file representing the tree hierarchy."""

def main((md_file="nav.md", html_file="nav.html", json_file="nav.json")) -> None:
    """Main function to run the CLI tool."""


<document index="11">
<source>data/offline/d360_makesite.md</source>
<document_content>

# d360_makesite

Tool `d360_makesite.py` that uses Python Fire CLI that transforms the content of the downloaded Document360 documentation into one long HTML file and one long Markdown file.

## 1. Read the TOC

Read the TOC that's the outout of `d360_getsitenav.py`, which contains links a bit like (but not entirely that format): 

```
<li xmlns="http://www.w3.org/1999/xhtml">
          <a href="/docs/creating-a-sandbox-project">
            <span>Creating a sandbox project</span>
          </a>
        </li>
```

### 1.1. Parse the links

We have locally the subfolder `docs` and therer files like `creating-a-sandbox-project.html`. Adapt the TOC links to the file paths. 

## 2. Read each page

### 2.1. Extract the title

From each page, we extract the title, like:

```
#main-content > d360-article-header > div.d-flex.justify-content-between.align-items-center.mb-3 > h1
```

### 2.2. Extract the content

From each page, we extract the content, like:

```css-selector
#main-content > d360-article-header > div.d-flex.justify-content-between.align-items-center.mb-3 > h1
```

```xpath
//*[@id="main-content"]/d360-article-header/div[1]/h1
```

```html
<h1 _ngcontent-serverapp-c2150518017="" class="article-title"><!----> Creating a sandbox project <d360-copy-article-link _ngcontent-serverapp-c2150518017="" _nghost-serverapp-c478378359="" ngh="11"><button _ngcontent-serverapp-c478378359="" aria-label="Copy article link" class="btn btn-secondary btn-icon copy-article"><i _ngcontent-serverapp-c478378359="" class="fa-regular fa-link-simple"></i></button><!----></d360-copy-article-link><!----></h1>
```

### 2.3. Extract the article

```css-selector
#articleContent
```

```xpath
//*[@id="articleContent"]
```

```html
<article _ngcontent-serverapp-c3082681425="" id="articleContent" appglossaryrenderer="" appimageviewer="" apphighlight="" appeditor360tabs="" class="block-article"><p data-block-id="8963fc1c-9933-4271-aeba-f2278090bd13"><strong>Plans supporting for creating a Sandbox project</strong></p><div contenteditable="false" translate="no" data-snippet="Ent plan supported" class="fr-deletable" id="blocksnippet"><table style="width: 100%;"><thead><tr>(...)</editor360-faq><p data-block-id="cb4876bb-f3e2-4b8d-9b43-86ae2794270c"></p></article>
```

## 3. Compile a complete document

### 3.1. HTML document

```html
<html>
    <body>
        <aside>
            <nav>
                <!-- original nav but with relative links -->
            </nav>
        </aside>
        <main>
            <div id="#<!-- the original filename without the .html -->">
                <h1...>
                    <!-- the title -->
                </h1>
                <article...>
                    <!-- the article -->
                </article>
            </div>
            ...
        </main>
    </body>
</html>
```

### 3.2. Markdown document

The document above but transformed with `html2text`. 

----

</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/data/offline/d360_makesite.py
# Language: python

import asyncio
from pathlib import Path
from typing import Any, cast
import fire
import html2text
import tqdm
import tqdm.asyncio
from bs4 import BeautifulSoup, Tag
from loguru import logger
from rich.console import Console
from playwright.async_api import async_playwright
import asyncio
import asyncio
from playwright.async_api import async_playwright
import asyncio
from playwright.async_api import TimeoutError
import random

class Document360Extractor:
    """ A tool that transforms the content of downloaded Document360 documentation..."""
    def __init__((
        self,
        nav_file: str | None = None,
        docs_dir: str = "docs",
        output_html: str = "document360_docs.html",
        output_md: str = "document360_docs.md",
        site_url: str | None = None,
        css_file: str | None = None,
        *,
        pages: int | None = None,
        verbose: bool = False,
        email: str | None = None,
        password: str | None = None,
    )) -> None:
        """ Initialize the Document360 extractor...."""
    def parse_toc((self)) -> list[dict[str, str]]:
        """ Parse the table of contents from the nav.xhtml file or the live site...."""
    def _parse_toc_from_file((self)) -> list[dict[str, str]]:
        """Parse the TOC from a local nav.xhtml file."""
    def _setup_browser((self)):
        """Set up a browser with authentication if needed."""
    def _parse_toc_from_site_async((self)):
        """Parse the TOC from the live site using Playwright asynchronously."""
    def _parse_toc_from_site((self)) -> list[dict[str, str]]:
        """Parse the TOC from the live site using Playwright."""
    def extract_article_content((self, source: str)) -> dict[str, Any]:
        """ Extract the title and content from an article file or URL...."""
    def _extract_content_from_file((self, file_path: str)) -> dict[str, Any]:
        """Extract content from a local HTML file."""
    def _extract_content_from_site((self, url: str)) -> dict[str, Any]:
        """Extract content from a live site URL using Playwright."""
    def _extract_content_from_site_async((self, url: str)) -> dict[str, Any]:
        """Extract content from a live site URL using Playwright asynchronously."""
    def process_articles_async((self)) -> dict[str, dict[str, Any]]:
        """ Process all articles from the TOC links asynchronously...."""
    def process_articles((self)) -> dict[str, dict[str, Any]]:
        """ Process all articles from the TOC links...."""
    def generate_html_document((self)) -> str:
        """ Generate a complete HTML document from the processed articles...."""
    def generate_markdown_document((self, html_document: str)) -> str:
        """ Generate a Markdown document from the HTML document...."""
    def run((self)) -> tuple[str, str]:
        """ Run the extraction process...."""

def load_css((css_path: str | None = None)) -> str:
    """ Load CSS from a file...."""

def __init__((
        self,
        nav_file: str | None = None,
        docs_dir: str = "docs",
        output_html: str = "document360_docs.html",
        output_md: str = "document360_docs.md",
        site_url: str | None = None,
        css_file: str | None = None,
        *,
        pages: int | None = None,
        verbose: bool = False,
        email: str | None = None,
        password: str | None = None,
    )) -> None:
    """ Initialize the Document360 extractor...."""

def parse_toc((self)) -> list[dict[str, str]]:
    """ Parse the table of contents from the nav.xhtml file or the live site...."""

def _parse_toc_from_file((self)) -> list[dict[str, str]]:
    """Parse the TOC from a local nav.xhtml file."""

def _setup_browser((self)):
    """Set up a browser with authentication if needed."""

def _parse_toc_from_site_async((self)):
    """Parse the TOC from the live site using Playwright asynchronously."""

def _parse_toc_from_site((self)) -> list[dict[str, str]]:
    """Parse the TOC from the live site using Playwright."""

def extract_article_content((self, source: str)) -> dict[str, Any]:
    """ Extract the title and content from an article file or URL...."""

def _extract_content_from_file((self, file_path: str)) -> dict[str, Any]:
    """Extract content from a local HTML file."""

def _extract_content_from_site((self, url: str)) -> dict[str, Any]:
    """Extract content from a live site URL using Playwright."""

def get_content_from_url(()):

def _extract_content_from_site_async((self, url: str)) -> dict[str, Any]:
    """Extract content from a live site URL using Playwright asynchronously."""

def process_articles_async((self)) -> dict[str, dict[str, Any]]:
    """ Process all articles from the TOC links asynchronously...."""

def process_with_semaphore((
                i: int, link: dict[str, str]
            )) -> tuple[str, dict[str, Any]]:

def process_local_file((
                link: dict[str, str],
            )) -> tuple[str, dict[str, Any]]:

def process_articles((self)) -> dict[str, dict[str, Any]]:
    """ Process all articles from the TOC links...."""

def generate_html_document((self)) -> str:
    """ Generate a complete HTML document from the processed articles...."""

def generate_markdown_document((self, html_document: str)) -> str:
    """ Generate a Markdown document from the HTML document...."""

def run((self)) -> tuple[str, str]:
    """ Run the extraction process...."""

def main((
    nav: str | None = None,
    docs_dir: str = "docs",
    html: str = "document360_docs.html",
    md: str = "document360_docs.md",
    site: str | None = None,
    css: str | None = None,
    pages: int | None = None,
    *,
    email: str | None = None,
    password: str | None = None,
    verbose: bool = False,
)) -> None:
    """ Transform Document360 documentation into a complete HTML and Markdown document...."""


<document index="12">
<source>data/offline/d361_offline.css</source>
<document_content>
:root {
    --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
    --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    --font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
    
    --color-background: #ffffff;
    --color-text: #333333;
    --color-text-muted: #666666;
    --color-link: #0366d6;
    --color-link-hover: #2188ff;
    --color-border: #e1e4e8;
    --color-heading: #24292e;
    --color-code-bg: #f6f8fa;
    --color-blockquote: #f0f4f8;
    --color-sidebar-bg: #f8f9fa;
    
    --spacing-unit: 16px;
    --content-width: 760px;
    --sidebar-width: 280px;
}

@media (prefers-color-scheme: dark) {
    :root {
        --color-background: #0d1117;
        --color-text: #c9d1d9;
        --color-text-muted: #8b949e;
        --color-link: #58a6ff;
        --color-link-hover: #79c0ff;
        --color-border: #30363d;
        --color-heading: #e6edf3;
        --color-code-bg: #161b22;
        --color-blockquote: #161b22;
        --color-sidebar-bg: #0d1117;
    }
}

html {
    box-sizing: border-box;
    font-size: 16px;
    -webkit-text-size-adjust: 100%;
}

*, *:before, *:after {
    box-sizing: inherit;
}

body {
    margin: 0;
    padding: 0;
    font-family: var(--font-sans);
    line-height: 1.6;
    color: var(--color-text);
    background-color: var(--color-background);
    display: flex;
    min-height: 100vh;
    font-size: 1rem;
}

/* Layout */
aside {
    position: fixed;
    width: var(--sidebar-width);
    height: 100vh;
    overflow-y: auto;
    padding: var(--spacing-unit);
    border-right: 1px solid var(--color-border);
    background-color: var(--color-sidebar-bg);
}

aside nav ul {
    padding-left: 0;
    list-style-type: none;
}

aside nav li {
    margin-bottom: calc(var(--spacing-unit) / 2);
}

aside nav li a {
    display: block;
    padding: calc(var(--spacing-unit) / 4) 0;
    text-decoration: none;
    color: var(--color-text);
    border-radius: 4px;
    transition: color 0.2s ease;
}

aside nav li a:hover {
    color: var(--color-link-hover);
}

main {
    flex: 1;
    padding: var(--spacing-unit) var(--spacing-unit) var(--spacing-unit) calc(var(--sidebar-width) + var(--spacing-unit));
    max-width: calc(var(--content-width) + var(--sidebar-width) + var(--spacing-unit));
    margin: 0 auto;
}

/* Typography */
h1, h2, h3, h4, h5, h6 {
    margin-top: calc(var(--spacing-unit) * 2);
    margin-bottom: var(--spacing-unit);
    font-weight: 600;
    line-height: 1.25;
    color: var(--color-heading);
}

h1 { font-size: 2em; border-bottom: 1px solid var(--color-border); padding-bottom: calc(var(--spacing-unit) / 2); }
h2 { font-size: 1.5em; border-bottom: 1px solid var(--color-border); padding-bottom: calc(var(--spacing-unit) / 2); }
h3 { font-size: 1.25em; }
h4 { font-size: 1em; }
h5 { font-size: 0.875em; }
h6 { font-size: 0.85em; color: var(--color-text-muted); }

p, ul, ol, dl, blockquote, table, pre {
    margin-top: 0;
    margin-bottom: var(--spacing-unit);
}

a {
    color: var(--color-link);
    text-decoration: none;
    transition: color 0.2s ease;
}

a:hover {
    color: var(--color-link-hover);
    text-decoration: underline;
}

code, pre {
    font-family: var(--font-mono);
    font-size: 0.9em;
    background-color: var(--color-code-bg);
    border-radius: 3px;
}

code {
    padding: 0.2em 0.4em;
}

pre {
    padding: var(--spacing-unit);
    overflow-x: auto;
    line-height: 1.45;
    border-radius: 6px;
}

pre code {
    padding: 0;
    background-color: transparent;
}

blockquote {
    margin-left: 0;
    padding: var(--spacing-unit);
    background-color: var(--color-blockquote);
    border-left: 4px solid var(--color-border);
}

table {
    border-collapse: collapse;
    width: 100%;
}

table th, table td {
    padding: 8px 12px;
    border: 1px solid var(--color-border);
}

table th {
    background-color: var(--color-code-bg);
    font-weight: 600;
}

img {
    max-width: 100%;
    height: auto;
}

/* Custom styles for article content */
#articleContent {
    margin-bottom: calc(var(--spacing-unit) * 3);
}

/* Responsive adjustments */
@media screen and (max-width: 900px) {
    :root {
        --sidebar-width: 220px;
    }
    
    body {
        font-size: 0.95rem;
    }
}

@media screen and (max-width: 768px) {
    body {
        flex-direction: column;
    }
    
    aside {
        position: static;
        width: 100%;
        height: auto;
        border-right: none;
        border-bottom: 1px solid var(--color-border);
    }
    
    main {
        padding: var(--spacing-unit);
        max-width: var(--content-width);
        margin: 0 auto;
    }
} 
</document_content>
</document>

<document index="13">
<source>data/offline/d361_offline.md</source>
<document_content>
The tool: 

- map: url = "https://docs.document360.com/sitemap-en.xml" # sitemap that defines the scope of the job (all links)
- nav: url # page to gather the nav, use the first link from sitemap if not provided
- dir: str | Path # work folder, use cwd + domain of the map url (like "./site.document360.com") 
- css: str | Path # path to a css file to use for the site.html file, `d361_offline` by default.
- effort: bool = False # try hard to mirror all map links in the nav

The tool should: 

## prep phase

- Read the `map` and use it to build a flat target list of URLs

- Inspired by d360_getsitenav.py , visit the `nav` page and extract the nav. Try to map between the page URLs between the map and the map. If effort is True, try harder to map all the links from the map. 

- FIXME: In the `dir`, write a `nav.json`, `nav.md` and `nav.html` file

## fetch phase

- Create a `html` and `md` folder in the `dir`

- Inspired by `d360_makesite.py`, mirror all the pages from the `map` into the `html` folder, but for each page only store the H1 and the article elements. Use `map` because that's flat and "authoritative". 

- Convert each one to markdown in `md`.

## build phase
- When we have all pages, and the nav, we can try to build the final files: 

- Inspired by `d360_makesite.py`, create a single `site.html` file and a `site.md` file. 


</document_content>
</document>

<document index="14">
<source>data/offline/nav.html</source>
<document_content>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document360 Navigation Tree</title>
</head>
<body>
<h1>Navigation Tree</h1>
  <li><a href="https://docs.document360.com/docs/getting-started">Getting started</a>
  <li><a href="https://docs.document360.com/docs/document360-getting-started">What is Document360?</a>
</li>
  <li><a href="https://docs.document360.com/docs/sign-up-to-document-360">Sign up to Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/system-and-browser-requirements">System and browser requirements</a>
</li>
  <li><a href="https://docs.document360.com/docs/understanding-basic-structure">Understanding basic structure</a>
  <li><a href="https://docs.document360.com/docs/document360-my-projects">Project dashboard</a>
</li>
  <li><a href="https://docs.document360.com/docs/top-right-menu-overview">Top-right menu overview</a>
</li>
  <li><a href="https://docs.document360.com/docs/creating-a-project">Creating a project in Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/dashboard">Dashboard</a>
</li>
  <li><a href="https://docs.document360.com/docs/workspaces-1">Workspaces</a>
</li>
  <li><a href="https://docs.document360.com/docs/getting-started-with-multi-lingual-knowledge-base">Multilingual Knowledge bases</a>
</li>
  <li><a href="https://docs.document360.com/docs/creating-a-sandbox-project">Creating a sandbox project</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/security">Security</a>
  <li><a href="https://docs.document360.com/docs/quick-summary-of-the-security-and-infrastructure-aspects">Document360 security and infrastructure</a>
</li>
  <li><a href="https://docs.document360.com/docs/x-frame-options">X-Frame options</a>
</li>
  <li><a href="https://docs.document360.com/docs/content-security-policy">Content security policy</a>
</li>
  <li><a href="https://docs.document360.com/docs/csp-guidelines-for-document360-widget">CSP and Whitelisting guidelines for Document360 widget</a>
</li>
  <li><a href="https://docs.document360.com/docs/bot-management">Bot management</a>
</li>
  <li><a href="https://docs.document360.com/docs/fair-usage-policy-for-bot-management">Fair usage policy for bot management</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/editor">Editor choices</a>
  <li><a href="https://docs.document360.com/docs/using-the-text-editor">Editor choices in Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/elements-of-the-editor">Elements of the editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/markdown-editor-overview">Markdown editor</a>
  <li><a href="https://docs.document360.com/docs/markdown-basics">Basic Markdown syntax</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/wysiwyg-editor">WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/advanced-wysiwyg-editor-overview">Advanced WYSIWYG editor</a>
  <li><a href="https://docs.document360.com/docs/advanced-wysiwyg-editor">Advanced WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/advanced-wysiwyg-editor-basics">Advanced WYSIWYG editor basics</a>
</li>
  <li><a href="https://docs.document360.com/docs/movable-blocks-in-advanced-wysiwyg-editor">Movable blocks in Advanced WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/conditional-content-blocks">Conditional content blocks in Advanced WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/tables-in-advanced-wysiwyg-editor">Tables in Advanced WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/image-formatting-in-the-advanced-wysiwyg-editor">Image formatting in the Advanced WYSIWYG editor</a>
</li>
  <li><a href="https://docs.document360.com/docs/tabs-in-the-advanced-wysiwyg-editor">Tabs in the Advanced WYSIWYG editor</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/categories-articles">Managing content</a>
  <li><a href="https://docs.document360.com/docs/categories-and-subcategories">Categories and subcategories</a>
  <li><a href="https://docs.document360.com/docs/managing-categories">Managing categories</a>
</li>
  <li><a href="https://docs.document360.com/docs/category-types">Category types</a>
</li>
  <li><a href="https://docs.document360.com/docs/assigning-drive-folder-for-a-category">Mapping a category with a folder in Drive</a>
</li>
  <li><a href="https://docs.document360.com/docs/downloading-category-and-article-in-kb-site">Downloading category and article in KB site</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/article">Articles</a>
  <li><a href="https://docs.document360.com/docs/managing-articles">Managing articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-import-from-word-files">Word .docx files</a>
</li>
  <li><a href="https://docs.document360.com/docs/publishing-an-article">Publishing an article</a>
</li>
  <li><a href="https://docs.document360.com/docs/reviewing-an-article-inline-comments">Reviewing an article using Inline comments</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-images-to-articles">Adding images to articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-videos-in-articles">Adding videos in articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-files-to-articles">Adding files to article</a>
</li>
  <li><a href="https://docs.document360.com/docs/linking-to-other-articles">Adding hyperlinks</a>
</li>
  <li><a href="https://docs.document360.com/docs/code-blocks">Code blocks</a>
</li>
  <li><a href="https://docs.document360.com/docs/private-notes">Adding private notes</a>
</li>
  <li><a href="https://docs.document360.com/docs/embedding-microsoft-streams-video-in-articles">Embedding Stream videos in articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/embedding-google-forms-in-article">Embedding Google forms in articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/embedding-a-drawio-diagram">Embedding a Draw.io diagram</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/bulk-operations-overview">All articles</a>
  <li><a href="https://docs.document360.com/docs/all-articles-overview-page">All articles - Overview page</a>
</li>
  <li><a href="https://docs.document360.com/docs/filter-bulk-operations">Using filters in All articles page</a>
</li>
  <li><a href="https://docs.document360.com/docs/export-bulk-operations">Export All articles list</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/article-management">Article settings</a>
  <li><a href="https://docs.document360.com/docs/review-reminders">Article review reminder</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-seo">Article SEO</a>
</li>
  <li><a href="https://docs.document360.com/docs/excluding-articles-from-searches">Excluding articles from search engines</a>
</li>
  <li><a href="https://docs.document360.com/docs/changing-the-url-of-an-article">Change the URL of an article</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-tags">Article tags</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-article-labels">Add article labels</a>
</li>
  <li><a href="https://docs.document360.com/docs/related-articles">Related articles</a>
</li>
  <li><a href="https://docs.document360.com/docs/featured-image">Featured image</a>
</li>
  <li><a href="https://docs.document360.com/docs/attachments">Attachments</a>
</li>
  <li><a href="https://docs.document360.com/docs/status-indicator">Status indicator</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-status">Article status</a>
</li>
  <li><a href="https://docs.document360.com/docs/preferences">Preferences</a>
</li>
  <li><a href="https://docs.document360.com/docs/showhide-table-of-contents-for-an-article">Show/hide table of contents for an article</a>
</li>
  <li><a href="https://docs.document360.com/docs/marking-articles-as-deprecated">Mark as deprecated</a>
</li>
  <li><a href="https://docs.document360.com/docs/updating-article-contributors">Update article contributors</a>
</li>
  <li><a href="https://docs.document360.com/docs/schedule-publishing">Schedule publishing</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-discussion-feed">Discussion feed</a>
</li>
  <li><a href="https://docs.document360.com/docs/revision-history">Revision history</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-analytics">Article analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/article-access-control-knowledge-base-site">Security - Article access control</a>
</li>
  <li><a href="https://docs.document360.com/docs/health-check-metrics">Health check metrics</a>
</li>
  <li><a href="https://docs.document360.com/docs/readability-score">Readability score</a>
</li>
  <li><a href="https://docs.document360.com/docs/sitemap-generator">Sitemap</a>
</li>
  <li><a href="https://docs.document360.com/docs/public-comments">Public article comments</a>
</li>
  <li><a href="https://docs.document360.com/docs/robotstxt">Robots.txt</a>
</li>
  <li><a href="https://docs.document360.com/docs/read-receipt">Read receipt</a>
</li>
  <li><a href="https://docs.document360.com/docs/share-articles-via-private-link">Share articles via private link</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/ai-features">AI features</a>
  <li><a href="https://docs.document360.com/docs/ai-customization">Eddy AI customization</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-machine-translation">AI machine translation</a>
</li>
  <li><a href="https://docs.document360.com/docs/eddy-ai-trust-page">Eddy AI trust page</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-writer-suite">AI writer suite</a>
  <li><a href="https://docs.document360.com/docs/ai-writer">AI writer</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-faq-generator">AI FAQ generator</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-title-recommender">AI title recommender</a>
</li>
  <li><a href="https://docs.document360.com/docs/seo-description-generator">AI SEO description generator</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-tag-recommender">AI tag recommender</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-related-articles-recommender">AI related articles recommender</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-chart-generator">AI Chart generator</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-alt-text-generator">AI alt text generator</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/ai-search-suite">AI search suite</a>
  <li><a href="https://docs.document360.com/docs/ai-assistive-search-ask-eddy">AI assistive search (Ask Eddy AI)</a>
</li>
  <li><a href="https://docs.document360.com/docs/eddy-search-analytics-1">Eddy AI search analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-dynamic-related-articles-recommendation">AI dynamic related articles recommendation</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-chatbot">AI Chatbot</a>
  <li><a href="https://docs.document360.com/docs/securing-chatbot-authentication-using-jwt">Securing Chatbot authentication using JWT</a>
</li>
  <li><a href="https://docs.document360.com/docs/styling-the-chatbot">Styling the Chatbot</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/eddy-ai-federated-search">Adding external sources for AI Assistive search</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-article-summarizer">AI article summarizer</a>
</li>
  <li><a href="https://docs.document360.com/docs/ask-eddy-ai-api">Ask Eddy AI API</a>
</li>
  <li><a href="https://docs.document360.com/docs/text-to-voice-functionality">Enhancing accessibility with our read out loud feature</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/ai-premium-suite">AI premium suite</a>
  <li><a href="https://docs.document360.com/docs/ai-glossary-generator">AI glossary generator</a>
</li>
  </li>
  <li>AI tips and tricks
  <li><a href="https://docs.document360.com/docs/how-to-write-genai-friendly-content">How to write GenAI friendly content</a>
</li>
  <li><a href="https://docs.document360.com/docs/prompt-engineering-tips">Prompt engineering tips</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/drive">File management</a>
  <li><a href="https://docs.document360.com/docs/adding-folders-and-files">Adding folders and files</a>
</li>
  <li><a href="https://docs.document360.com/docs/folder-actions-in-drive">Folder actions in Drive</a>
</li>
  <li><a href="https://docs.document360.com/docs/file-actions-in-drive">File actions in Drive</a>
</li>
  <li><a href="https://docs.document360.com/docs/all-content-overview">All files overview</a>
</li>
  <li><a href="https://docs.document360.com/docs/recycle-bin-recent-and-starred-files">Recent, Starred, and Recycle bin files</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/content-tools">Content tools</a>
  <li><a href="https://docs.document360.com/docs/workflow">Workflows</a>
  <li><a href="https://docs.document360.com/docs/workflow-designer">Workflow designer</a>
</li>
  <li><a href="https://docs.document360.com/docs/managing-workflow-status">Managing workflow status</a>
</li>
  <li><a href="https://docs.document360.com/docs/workflow-assignment">Workflow assignment</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/content-reuse">Content reuse</a>
  <li><a href="https://docs.document360.com/docs/article-templates">Templates</a>
</li>
  <li><a href="https://docs.document360.com/docs/variables">Variables</a>
</li>
  <li><a href="https://docs.document360.com/docs/snippets">Snippet</a>
</li>
  <li><a href="https://docs.document360.com/docs/glossary">Glossary</a>
  <li><a href="https://docs.document360.com/docs/adding-glossary-term">Adding glossary terms</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-glossary-term-in-articles">Inserting glossary term in an article</a>
</li>
  <li><a href="https://docs.document360.com/docs/editing-and-deleting-glossary-term">Managing glossary terms</a>
</li>
  <li><a href="https://docs.document360.com/docs/glossary-overview-page">Managing the glossary landing page</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/feedback-manager-overview">Feedback manager</a>
</li>
  <li><a href="https://docs.document360.com/docs/custom-pages">Custom pages</a>
</li>
  <li><a href="https://docs.document360.com/docs/tags">Tags</a>
  <li><a href="https://docs.document360.com/docs/tag-manager-overview-page">Manage tags page overview</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-a-new-tag">Adding a new tag</a>
</li>
  <li><a href="https://docs.document360.com/docs/tag-groups-overview">Tag groups page overview</a>
</li>
  <li><a href="https://docs.document360.com/docs/tag-dependency-viewer">Manage tag dependencies</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/content-essentials">Content essentials</a>
  <li><a href="https://docs.document360.com/docs/find-and-replace">Find and replace</a>
</li>
  <li><a href="https://docs.document360.com/docs/seo-descriptions">SEO descriptions</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/import-export">Import & Export project/article</a>
  <li><a href="https://docs.document360.com/docs/export-documentation-as-zip">Exporting your Document360 project as a ZIP file</a>
</li>
  <li><a href="https://docs.document360.com/docs/import-a-documentation-project">Importing a Document360 project ZIP file</a>
</li>
  <li><a href="https://docs.document360.com/docs/migrating-documentation-from-another-knowledge-base-platform">Migrating documentation from other platforms</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/export-to-pdf">Export to PDF</a>
  <li><a href="https://docs.document360.com/docs/pdf-design-templates">Designing a PDF template</a>
</li>
  <li><a href="https://docs.document360.com/docs/compliling-content-for-pdf">Compiling content for PDF</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/analytics">Analytics</a>
  <li><a href="https://docs.document360.com/docs/articles-analytics">Articles analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/eddy-ai-search-analytics">Eddy AI search analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/analytics-search">Search analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/reader-analytics">Reader analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/analytics-team-accounts">Team accounts analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/feedback">Feedback analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/links-status">Links status analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/page-not-found-analytics">Page not found analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/ticket-deflector-overview">Ticket deflector analytics</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/api-documentation-tool">API Documentation</a>
  <li><a href="https://docs.document360.com/docs/api-documentation-getting-started">Getting started with API documentation</a>
</li>
  <li><a href="https://docs.document360.com/docs/manage-api-documentation">Managing API documentation</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/knowledge-base-widget">Knowledge base widget</a>
  <li><a href="https://docs.document360.com/docs/knowledge-base-widget-getting-started">Knowledge base widget - Getting started</a>
</li>
  <li><a href="https://docs.document360.com/docs/installing-the-knowledge-base-widget">Installing the Knowledge base widget</a>
</li>
  <li><a href="https://docs.document360.com/docs/edit-clone-and-delete">Edit, Clone, and Delete widget</a>
</li>
  <li><a href="https://docs.document360.com/docs/managing-and-customizing-the-knowledge-base-widget">Managing and customizing the Knowledge base widget</a>
</li>
  <li><a href="https://docs.document360.com/docs/url-mapping">URL Mapping</a>
</li>
  <li><a href="https://docs.document360.com/docs/customizing-the-kb-widget-using-custom-css-javascript">Customizing the Knowledge base widget using Custom CSS/JavaScript</a>
</li>
  <li><a href="https://docs.document360.com/docs/faq-knowledge-base-widget">FAQ - Knowledge base widget</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/design-and-styling-knowledge-base-site">Knowledge base site</a>
  <li><a href="https://docs.document360.com/docs/knowledge-base-site-20">Knowledge base site 2.0</a>
</li>
  <li><a href="https://docs.document360.com/docs/customize-site">Customize site</a>
  <li><a href="https://docs.document360.com/docs/kb-site-20-migration">KB site 2.0 migration</a>
</li>
  <li><a href="https://docs.document360.com/docs/web-content-accessibility-guidelines-wcag">Web Content Accessibility Guidelines (WCAG)</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/site-header-and-footer">Site header and footer</a>
  <li><a href="https://docs.document360.com/docs/header-primary-navigation">Header - Primary navigation</a>
</li>
  <li><a href="https://docs.document360.com/docs/header-secondary-navigation">Header - Secondary navigation</a>
</li>
  <li><a href="https://docs.document360.com/docs/footer-navigation">Footer</a>
</li>
  <li><a href="https://docs.document360.com/docs/custom-footer">Custom footer</a>
</li>
  <li><a href="https://docs.document360.com/docs/rss-feeds">RSS Feeds</a>
</li>
  <li><a href="https://docs.document360.com/docs/themes">Themes</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/main-pages">Main pages</a>
  <li><a href="https://docs.document360.com/docs/hero-section">Hero section</a>
</li>
  <li><a href="https://docs.document360.com/docs/text-block">Rich text blocks</a>
</li>
  <li><a href="https://docs.document360.com/docs/text-columns-block">Multicolumn card section</a>
</li>
  <li><a href="https://docs.document360.com/docs/image-and-text">Image with text block</a>
</li>
  <li><a href="https://docs.document360.com/docs/html-block">Custom code section</a>
</li>
  <li><a href="https://docs.document360.com/docs/knowledge-base-categories">Knowledge base categories block</a>
</li>
  <li><a href="https://docs.document360.com/docs/widgets">Widgets block</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/error-pages">Error pages</a>
  <li><a href="https://docs.document360.com/docs/404-page">404 page</a>
</li>
  <li><a href="https://docs.document360.com/docs/access-denied-page">Access denied page</a>
</li>
  <li><a href="https://docs.document360.com/docs/unauthorized-page">Unauthorized page</a>
</li>
  <li><a href="https://docs.document360.com/docs/ip-restriction-page">IP restriction page</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/custom-css-javascript">Custom CSS & JavaScript</a>
  <li><a href="https://docs.document360.com/docs/css-snippets">CSS Snippets</a>
</li>
  <li><a href="https://docs.document360.com/docs/callout-styles">Callout styles</a>
</li>
  <li><a href="https://docs.document360.com/docs/body-font-style">Body font style</a>
</li>
  <li><a href="https://docs.document360.com/docs/image-alignment">Image alignment</a>
</li>
  <li><a href="https://docs.document360.com/docs/header-font-style">Header font style</a>
</li>
  <li><a href="https://docs.document360.com/docs/table-style">Table style</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/article-redirect-rules">Article redirect rule</a>
</li>
  <li><a href="https://docs.document360.com/docs/configuring-the-article-settings">Article settings & SEO</a>
  <li><a href="https://docs.document360.com/docs/article-header">Article header</a>
</li>
  <li><a href="https://docs.document360.com/docs/document-header">Site header-What's new</a>
</li>
  <li><a href="https://docs.document360.com/docs/follow-articles-and-categories">Follow articles and categories</a>
</li>
  <li><a href="https://docs.document360.com/docs/search-in-knowledge-base-site">Search in Knowledge base site</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/liking-or-disliking-an-article">Liking or disliking an article</a>
</li>
  <li><a href="https://docs.document360.com/docs/smart-bar-cookie-consent">Smart bar & Cookie consent</a>
  <li><a href="https://docs.document360.com/docs/smart-bar">Smart bars</a>
</li>
  <li><a href="https://docs.document360.com/docs/cookie-consent">Cookie consent</a>
</li>
  </li>
  <li>Ticket deflectors
  <li><a href="https://docs.document360.com/docs/accessing-the-ticket-deflectors">Accessing the ticket deflectors in portal</a>
</li>
  <li><a href="https://docs.document360.com/docs/adding-a-new-ticket-deflector">Adding a new ticket deflector</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/integrations">Integrations</a>
  <li><a href="https://docs.document360.com/docs/integrations-getting-started">Integrations in Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/advanced-insertion-rules-in-integration">Code inclusion and exclusion conditions</a>
</li>
  <li><a href="https://docs.document360.com/docs/chat">Chat</a>
  <li><a href="https://docs.document360.com/docs/livechat">LiveChat</a>
</li>
  <li><a href="https://docs.document360.com/docs/olark">Olark</a>
</li>
  <li><a href="https://docs.document360.com/docs/freshchat">Freshchat</a>
</li>
  <li><a href="https://docs.document360.com/docs/crisp">Crisp</a>
</li>
  <li><a href="https://docs.document360.com/docs/chatra">Chatra</a>
</li>
  <li><a href="https://docs.document360.com/docs/door-bell">Doorbell</a>
</li>
  <li><a href="https://docs.document360.com/docs/gorgias">Gorgias</a>
</li>
  <li><a href="https://docs.document360.com/docs/belco">Belco</a>
</li>
  <li><a href="https://docs.document360.com/docs/sunshine">Sunshine Conversations</a>
</li>
  <li><a href="https://docs.document360.com/docs/kommunicate">Kommunicate</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/analytics-1">Analytics</a>
  <li><a href="https://docs.document360.com/docs/google-analytics-integration">Google Analytics</a>
</li>
  <li><a href="https://docs.document360.com/docs/google-analytics-new">Google Analytics (GA4)</a>
</li>
  <li><a href="https://docs.document360.com/docs/google-tag-manager">Google Tag Manager</a>
</li>
  <li><a href="https://docs.document360.com/docs/heap">Heap</a>
</li>
  <li><a href="https://docs.document360.com/docs/segment-integration">Segment</a>
</li>
  <li><a href="https://docs.document360.com/docs/hotjar">Hotjar</a>
</li>
  <li><a href="https://docs.document360.com/docs/amplitude">Amplitude</a>
</li>
  <li><a href="https://docs.document360.com/docs/fullstory">FullStory</a>
</li>
  <li><a href="https://docs.document360.com/docs/mixpanel">Mixpanel</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/marketing-automation">Marketing automation</a>
  <li><a href="https://docs.document360.com/docs/vwo">VWO</a>
</li>
  <li><a href="https://docs.document360.com/docs/freshmarketer">Freshmarketer</a>
</li>
  <li><a href="https://docs.document360.com/docs/zoho-page-sense">ZOHO PageSense</a>
</li>
  <li><a href="https://docs.document360.com/docs/gosquared">GoSquared</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/commenting">Commenting</a>
  <li><a href="https://docs.document360.com/docs/commento">Commento</a>
</li>
  <li><a href="https://docs.document360.com/docs/disqus">Disqus</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/extensions">Extensions</a>
  <li><a href="https://docs.document360.com/docs/all-extensions">Document360 Extensions - Getting started</a>
</li>
  <li><a href="https://docs.document360.com/docs/customer-support">Helpdesk</a>
  <li><a href="https://docs.document360.com/docs/freshdesk">Freshdesk</a>
</li>
  <li><a href="https://docs.document360.com/docs/freshservice">Freshservice</a>
</li>
  <li><a href="https://docs.document360.com/docs/zendesk">Zendesk</a>
</li>
  <li><a href="https://docs.document360.com/docs/intercom-integration">Intercom</a>
</li>
  <li><a href="https://docs.document360.com/docs/salesforce-integration">Salesforce</a>
  <li><a href="https://docs.document360.com/docs/salesforce">Salesforce</a>
</li>
  <li><a href="https://docs.document360.com/docs/cases-page">Cases page</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/team-collaboration">Team collaboration</a>
  <li><a href="https://docs.document360.com/docs/slack">Slack</a>
</li>
  <li><a href="https://docs.document360.com/docs/microsoft-teams">Microsoft Teams</a>
</li>
  <li><a href="https://docs.document360.com/docs/drift">Drift</a>
</li>
  <li><a href="https://docs.document360.com/docs/zapier-integration">Zapier</a>
  <li><a href="https://docs.document360.com/docs/zapier-setup-guide">Zapier - Setup guide</a>
</li>
  <li><a href="https://docs.document360.com/docs/use-cases-for-zap-templates">Use cases of Zapier</a>
  <li><a href="https://docs.document360.com/docs/google-docs-document360-integration">Integrating Google Docs with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/document360-with-google-sheets-integration">Integrating Google Sheets with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/google-drive-document360">Integrating Document360 with Google Drive</a>
</li>
  <li><a href="https://docs.document360.com/docs/document360-with-trello-integration">Integrating Trello with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/github-document360">Integrating GitHub with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/confluence-document360">Integrating Confluence Server with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/zoho-crm-document360">Integrating Zoho CRM with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/pipedrive-document360">Integrating Pipedrive with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/hubspot-document360">Integrating Hubspot with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/asana-document360">Integrating Asana with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/mondaycom-document360">Integrating Monday.com with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/typeform-document360">Integrating Typeform with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/document360-gmail">Integrating Gmail with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/document360-mailchimp">Integrating Mailchimp with Document360</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/make-1">Make</a>
  <li><a href="https://docs.document360.com/docs/make-setup-guide">Make - Setup guide</a>
</li>
  <li><a href="https://docs.document360.com/docs/use-cases-for-make-scenarios">Use cases for Make Scenarios</a>
  <li><a href="https://docs.document360.com/docs/asana-and-document360-integration">Integrating Asana with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/monday-document360-integration">Integrating Monday.com with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/typeform-and-document360-integration">Integrating Typeform with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/google-docs-and-document360-integration">Integrating Google Docs with Document360</a>
</li>
  <li><a href="https://docs.document360.com/docs/jira-and-document360-integration">Integrating Jira with Document360</a>
</li>
  </li>
  </li>
  </li>
  <li>Code repositories
  <li><a href="https://docs.document360.com/docs/github-extension">GitHub</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/translation">Translation and browser</a>
  <li><a href="https://docs.document360.com/docs/chrome-extension">Chrome</a>
</li>
  <li><a href="https://docs.document360.com/docs/crowdin">Crowdin</a>
</li>
  <li><a href="https://docs.document360.com/docs/phrase">Phrase</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/portal-management">Portal management</a>
  <li><a href="https://docs.document360.com/docs/general-project-settings">General project settings</a>
</li>
  <li><a href="https://docs.document360.com/docs/team-auditing">Team auditing</a>
</li>
  <li><a href="https://docs.document360.com/docs/localization-workspace">Localization & Workspace</a>
  <li><a href="https://docs.document360.com/docs/localization">Localization</a>
  <li><a href="https://docs.document360.com/docs/localization-getting-started">Localization - Getting started</a>
</li>
  <li><a href="https://docs.document360.com/docs/setting-up-a-multi-lingual-knowledge-base">Setting up a Multi-lingual knowledge base</a>
</li>
  <li><a href="https://docs.document360.com/docs/localization-variables">Localization variables</a>
</li>
  <li><a href="https://docs.document360.com/docs/ai-machine-translation-1">AI machine translation</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/workspaces">Workspaces</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/backup-restore">Backup and restore</a>
</li>
  <li><a href="https://docs.document360.com/docs/notifications">Notifications</a>
  <li><a href="https://docs.document360.com/docs/webhook-notification-channel">Webhook notification channel</a>
</li>
  <li><a href="https://docs.document360.com/docs/slack-notification-channel">Slack notification channel</a>
</li>
  <li><a href="https://docs.document360.com/docs/microsoft-teams-notification-channel">Microsoft Teams notification channel</a>
</li>
  <li><a href="https://docs.document360.com/docs/smtp-email-notification-channel">SMTP notification channel</a>
</li>
  <li><a href="https://docs.document360.com/docs/notification-mapping">Notification mapping</a>
</li>
  <li><a href="https://docs.document360.com/docs/notification-history">Notification history</a>
</li>
  <li><a href="https://docs.document360.com/docs/send-notifications-from-custom-email-domain">Email domain</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/api-tokens">API tokens</a>
</li>
  <li><a href="https://docs.document360.com/docs/external-api-tools">External API Tools</a>
  <li><a href="https://docs.document360.com/docs/how-to-use-postman">How to use Postman?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-use-swagger">How to use Swagger?</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/full-portal-search">Portal search</a>
  <li><a href="https://docs.document360.com/docs/article-full-portal-search">Article-portal search</a>
</li>
  <li><a href="https://docs.document360.com/docs/drive-full-portal-search">Drive-portal search</a>
</li>
  <li><a href="https://docs.document360.com/docs/users-groups-full-portal-search">Users & groups-portal search</a>
</li>
  <li><a href="https://docs.document360.com/docs/tags-full-portal-search">Tags-portal search</a>
</li>
  <li><a href="https://docs.document360.com/docs/settings-full-portal-search">Settings-portal search</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/domain-management">Domain management</a>
  <li><a href="https://docs.document360.com/docs/custom-domain-mapping">Custom domain mapping</a>
</li>
  <li><a href="https://docs.document360.com/docs/document360-on-a-sub-folder">Hosting Document360 on a sub-directory</a>
</li>
  <li><a href="https://docs.document360.com/docs/nginx-server">Nginx server - Subfolder hosting</a>
</li>
  <li><a href="https://docs.document360.com/docs/aspnet-core-server">ASP.NET Core server</a>
</li>
  <li><a href="https://docs.document360.com/docs/microsoft-iis-server">Microsoft - IIS server</a>
</li>
  <li><a href="https://docs.document360.com/docs/apache-http-server">Apache HTTP server</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/user-management">User management</a>
  <li><a href="https://docs.document360.com/docs/managing-team-account">Managing team accounts</a>
</li>
  <li><a href="https://docs.document360.com/docs/team-account-groups-overview-page">Managing team account groups</a>
</li>
  <li><a href="https://docs.document360.com/docs/reader-accounts">Managing readers</a>
</li>
  <li><a href="https://docs.document360.com/docs/managing-reader-groups">Managing reader groups</a>
</li>
  <li><a href="https://docs.document360.com/docs/reader-self-registration">Readers self registration</a>
</li>
  <li><a href="https://docs.document360.com/docs/managing-reviewer-accounts">Managing reviewer accounts</a>
</li>
  <li><a href="https://docs.document360.com/docs/account-locked">Account locked</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/access-management">Access management</a>
  <li><a href="https://docs.document360.com/docs/roles">Roles and permissions</a>
</li>
  <li><a href="https://docs.document360.com/docs/content-role-and-access">Content access</a>
</li>
  <li><a href="https://docs.document360.com/docs/block-inheritance">Block inheritance</a>
</li>
  <li><a href="https://docs.document360.com/docs/site-access">Site access</a>
</li>
  <li><a href="https://docs.document360.com/docs/ip-restriction">IP restriction</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/single-sign-on-sso">Single Sign-On (SSO)</a>
  <li><a href="https://docs.document360.com/docs/login-using-sso-knowledge-base-portal">Login using SSO - Knowledge base portal</a>
</li>
  <li><a href="https://docs.document360.com/docs/login-using-sso-knowledge-base-site">Login using SSO - Knowledge base site</a>
</li>
  <li><a href="https://docs.document360.com/docs/inviting-or-adding-sso-users">Inviting or Adding SSO users</a>
</li>
  <li><a href="https://docs.document360.com/docs/mapping-an-existing-sso-configuration-to-other-projects">Mapping an existing SSO configuration to other projects</a>
</li>
  <li><a href="https://docs.document360.com/docs/disable-document360-login-page">Disable Document360 login page</a>
</li>
  <li><a href="https://docs.document360.com/docs/auto-assign-reader-group">Auto assign reader group</a>
</li>
  <li><a href="https://docs.document360.com/docs/convert-to-sso-account">Convert to SSO account</a>
</li>
  <li><a href="https://docs.document360.com/docs/team-account-idle-timeout">Sign out idle SSO team account</a>
</li>
  <li><a href="https://docs.document360.com/docs/saml">SAML</a>
  <li><a href="https://docs.document360.com/docs/saml-sso-with-okta">SAML SSO with Okta</a>
</li>
  <li><a href="https://docs.document360.com/docs/saml-sso-with-entra">SAML SSO with Entra</a>
</li>
  <li><a href="https://docs.document360.com/docs/google-sso-saml-configuration">SAML SSO with Google</a>
</li>
  <li><a href="https://docs.document360.com/docs/saml-sso-with-onelogin">SAML SSO with OneLogin</a>
</li>
  <li><a href="https://docs.document360.com/docs/saml-sso-with-adfs">SAML SSO with ADFS</a>
</li>
  <li><a href="https://docs.document360.com/docs/saml-sso-with-other-configurations">SAML SSO with other configurations</a>
</li>
  <li><a href="https://docs.document360.com/docs/idp-initiated-login">Identity Provider (IdP) initiated sign in</a>
</li>
  <li><a href="https://docs.document360.com/docs/removing-a-configured-saml-sso">Removing a configured SAML SSO</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/openid">OpenID</a>
  <li><a href="https://docs.document360.com/docs/okta-with-openid-sso">Okta with OpenID SSO</a>
</li>
  <li><a href="https://docs.document360.com/docs/auth0-with-openid-sso">Auth0 with OpenID SSO</a>
</li>
  <li><a href="https://docs.document360.com/docs/adfs-with-openid-sso">ADFS with OpenID SSO</a>
</li>
  <li><a href="https://docs.document360.com/docs/other-configurations-with-openid-sso">Other configurations with OpenID SSO</a>
</li>
  <li><a href="https://docs.document360.com/docs/removing-a-configured-openid-sso">Removing a configured OpenID SSO</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/jwt">JWT</a>
  <li><a href="https://docs.document360.com/docs/configuring-the-jwt-sso">Setting up JWT SSO</a>
</li>
  <li><a href="https://docs.document360.com/docs/jwt-reader-groups">JWT reader groups</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/customization-editor">Customization</a>
  <li><a href="https://docs.document360.com/docs/how-to-enlarge-the-pdf-preview-in-the-article">How to enlarge the pdf preview in the article?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-color-of-the-hyperlinks-in-dark-mode">How to change the color of the hyperlinks in Dark mode?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-highlighted-search-result-color-in-articles">How to change the highlighted search result color in articles?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site">How to hide the project's workspace dropdown in the Knowledge base site?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-a-vertical-scrollbar-to-the-code-blocks">How to add a vertical scrollbar to the code blocks?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-set-the-default-height-and-width-of-the-embedded-pdf">How to set the default height and width of the embedded PDF?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-make-the-table-border-bold-in-knowledge-base">How to make the table border bold in knowledge base?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base">How to vertically align table contents at the top in the Knowledge base?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-restrict-the-readers-from-copying-the-content">How to restrict the readers from copying the content?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-keep-dark-mode-for-the-knowledge-base-site-by-default">How to keep dark mode for the Knowledge base site by default?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-center-align-the-text-in-markdown">How to center align the text in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-color-of-the-text-in-markdown">How to change the color of the text in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-language-name-text-in-code-blocks">How to change the language name text in code blocks?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-callouts-color-in-dark-mode">How to change the callouts color in dark mode?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-center-align-the-heading-in-the-articles">How to center align the heading in the articles?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-color-of-the-table-header">How to change the color of the table header?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-accordion-in-markdown">How to add accordion in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-extra-space-in-markdown">How to add extra space in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-align-the-image-in-markdown">How to align the image in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-a-background-image-for-a-text-content">How to add a background image for a text content?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-color-of-the-table-of-contents">How to change the color of the table of contents?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-sort-the-contents-of-a-table">How to sort the contents of a table?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-customize-the-hyperlink">How to customize the hyperlink size?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-make-all-links-open-in-new-tab">How to make all links open in new tab?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-set-a-default-featured-image-in-knowledge-base">How to set a default featured image in knowledge base?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-shadows-to-an-image-in-markdown">How to add shadows to an image in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-add-borders-to-an-image-in-markdown">How to add borders to an image in Markdown?</a>
</li>
  <li><a href="https://docs.document360.com/docs/embed-youtube-shorts">How to embed YouTube Shorts?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-embed-loom-video">How to embed a Loom video?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-embed-an-excel-file">How to embed an Excel file?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-color-of-feedback-buttons">How to change the color of Feedback buttons?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-hide-footer-in-mobile-view">How to hide footer in mobile view?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-change-the-hover-color-of-the-header-options">How to change the hover color of the header options?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-move-the-related-articles-above-the-feedback-section">How to move the related articles above the feedback section?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-hide-the-change-password-option-for-readers">How to hide the change password option for readers?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-configure-a-custom-header-font-in-the-knowledge-base">How to configure a custom header font in the knowledge base?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-hide-the-category-manager">How to hide the category manager?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-configure-a-custom-font-in-the-knowledge-base">How to configure a custom font in the knowledge base?</a>
</li>
  <li><a href="https://docs.document360.com/docs/how-to-hide-the-left-navigation-bar-in-knowledge-base-site">How to hide the left navigation bar in the knowledge base site?</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/billing">Billing & Subscription</a>
  <li><a href="https://docs.document360.com/docs/plans-and-pricing">Plans and pricing</a>
</li>
  <li><a href="https://docs.document360.com/docs/upgrading-your-plan">Upgrading your subscription plan</a>
</li>
  <li><a href="https://docs.document360.com/docs/downgrading-your-plan">Downgrading your subscription plan</a>
</li>
  <li><a href="https://docs.document360.com/docs/add-ons">Purchasing add-ons</a>
</li>
  <li><a href="https://docs.document360.com/docs/upgrading-from-trial-version">Upgrading from trial version</a>
</li>
  <li><a href="https://docs.document360.com/docs/changing-payment-information">Changing payment information</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/release-notes">Release notes</a>
  <li><a href="https://docs.document360.com/docs/2025">2025</a>
  <li><a href="https://docs.document360.com/docs/february-2025-1112">February 2025 - 11.1.2</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2025-1111">January 2025 - 11.01.1</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2024">2024</a>
  <li><a href="https://docs.document360.com/docs/december-2024-10121">December 2024 - 10.12.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/november-2024-10111">November 2024 - 10.11.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/october-2024-10101">October 2024 - 10.10.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/september-2024-1091">September 2024 - 10.9.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/september-2024-1082">September 2024 - 10.8.2</a>
</li>
  <li><a href="https://docs.document360.com/docs/august-2024-1081">August 2024 - 10.8.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/july-2024-1071">July 2024 - 10.7.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/july-2024-1062">July 2024 - 10.6.2</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-2024-1061">June 2024 - 10.6.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-2024-1052">June 2024 - 10.5.2</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2024-1051">May 2024 - 10.5.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2024-1042">May 2024 - 10.4.2</a>
</li>
  <li><a href="https://docs.document360.com/docs/1041-release-note">April 2024 - 10.4.1</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-2024-minor-release">April 2024 - Minor release</a>
</li>
  <li><a href="https://docs.document360.com/docs/march-2024">March 2024</a>
</li>
  <li><a href="https://docs.document360.com/docs/february-2024">February 2024</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2024">January 2024</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2023">2023</a>
  <li><a href="https://docs.document360.com/docs/december-2023">December 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/november-2023">November 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/october-2023">October 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/august-3">August 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/july-2">July 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-3">June 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-1">May 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-3">April 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/march-4">March 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/february-3">February 2023</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2">January 2023</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2022">2022</a>
  <li><a href="https://docs.document360.com/docs/december-2022-release-note">December 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/november-2022-release-note">November 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/october-2022-release-note">October 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/september-2022-release-note">September 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/august-2022-release-note">August 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/july-2022-release-note">July 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-2022-release-notes">June 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2022-release-note">May 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-2022-release-note">April 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/march-2022-release-note">March 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/february-2022-release-note">February 2022</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2022-release-note">January 2022</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2021">2021</a>
  <li><a href="https://docs.document360.com/docs/december-2021-release-note">December 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/november-2021-release-note">November 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/october-2021-release-note">October 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/september-2021-release-note">September 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/august-2021-release-notes">August 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/july-2021-release-note">July 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-2021-release-note">June 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2021-release-note">May 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-2021-release-note">April 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/march-2021-release-note">March 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/february-2021-release-note">February 2021</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2021-release-note">January 2021</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2020">2020</a>
  <li><a href="https://docs.document360.com/docs/november-2020-release-note">November 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/october-2020-release-note">October 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/august-2020-release-note">August 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/june-2020-release-note">June 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2020-release-note">May 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-2020-release-note">April 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/march-2020-release-note">March 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/february-2020-release-note">February 2020</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2020">January 2020</a>
</li>
  </li>
  <li><a href="https://docs.document360.com/docs/2019">2019</a>
  <li><a href="https://docs.document360.com/docs/december">December 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/november">November 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/october">October 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/september-2019">September 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/august">August 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/july">July 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/june">June 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/may-2019">May 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/april-2019">April 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/march">March 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/february">February 2019</a>
</li>
  <li><a href="https://docs.document360.com/docs/january-2019">January 2019</a>
</li>
  </li>
  </li>
  <li><a href="https://docs.document360.com/docs/support">Support</a>
</li>
</body>
</html>
</document_content>
</document>

<document index="15">
<source>data/offline/nav.json</source>
<document_content>
[
  {
    "title": "Getting started",
    "link": "https://docs.document360.com/docs/getting-started",
    "children": [
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="16">
<source>data/offline/nav.md</source>
<document_content>
- [Getting started](https://docs.document360.com/docs/getting-started)
  - [What is Document360?](https://docs.document360.com/docs/document360-getting-started)
  - [Sign up to Document360](https://docs.document360.com/docs/sign-up-to-document-360)
  - [System and browser requirements](https://docs.document360.com/docs/system-and-browser-requirements)
  - [Understanding basic structure](https://docs.document360.com/docs/understanding-basic-structure)
    - [Project dashboard](https://docs.document360.com/docs/document360-my-projects)
    - [Top-right menu overview](https://docs.document360.com/docs/top-right-menu-overview)
    - [Creating a project in Document360](https://docs.document360.com/docs/creating-a-project)
    - [Dashboard](https://docs.document360.com/docs/dashboard)
    - [Workspaces](https://docs.document360.com/docs/workspaces-1)
    - [Multilingual Knowledge bases](https://docs.document360.com/docs/getting-started-with-multi-lingual-knowledge-base)
    - [Creating a sandbox project](https://docs.document360.com/docs/creating-a-sandbox-project)
  - [Security](https://docs.document360.com/docs/security)
    - [Document360 security and infrastructure](https://docs.document360.com/docs/quick-summary-of-the-security-and-infrastructure-aspects)
    - [X-Frame options](https://docs.document360.com/docs/x-frame-options)
    - [Content security policy](https://docs.document360.com/docs/content-security-policy)
    - [CSP and Whitelisting guidelines for Document360 widget](https://docs.document360.com/docs/csp-guidelines-for-document360-widget)
    - [Bot management](https://docs.document360.com/docs/bot-management)
    - [Fair usage policy for bot management](https://docs.document360.com/docs/fair-usage-policy-for-bot-management)
- [Editor choices](https://docs.document360.com/docs/editor)
  - [Editor choices in Document360](https://docs.document360.com/docs/using-the-text-editor)
  - [Elements of the editor](https://docs.document360.com/docs/elements-of-the-editor)
  - [Markdown editor](https://docs.document360.com/docs/markdown-editor-overview)
    - [Basic Markdown syntax](https://docs.document360.com/docs/markdown-basics)
  - [WYSIWYG editor](https://docs.document360.com/docs/wysiwyg-editor)
  - [Advanced WYSIWYG editor](https://docs.document360.com/docs/advanced-wysiwyg-editor-overview)
    - [Advanced WYSIWYG editor](https://docs.document360.com/docs/advanced-wysiwyg-editor)
    - [Advanced WYSIWYG editor basics](https://docs.document360.com/docs/advanced-wysiwyg-editor-basics)
    - [Movable blocks in Advanced WYSIWYG editor](https://docs.document360.com/docs/movable-blocks-in-advanced-wysiwyg-editor)
    - [Conditional content blocks in Advanced WYSIWYG editor](https://docs.document360.com/docs/conditional-content-blocks)
    - [Tables in Advanced WYSIWYG editor](https://docs.document360.com/docs/tables-in-advanced-wysiwyg-editor)
    - [Image formatting in the Advanced WYSIWYG editor](https://docs.document360.com/docs/image-formatting-in-the-advanced-wysiwyg-editor)
    - [Tabs in the Advanced WYSIWYG editor](https://docs.document360.com/docs/tabs-in-the-advanced-wysiwyg-editor)
- [Managing content](https://docs.document360.com/docs/categories-articles)
  - [Categories and subcategories](https://docs.document360.com/docs/categories-and-subcategories)
    - [Managing categories](https://docs.document360.com/docs/managing-categories)
    - [Category types](https://docs.document360.com/docs/category-types)
    - [Mapping a category with a folder in Drive](https://docs.document360.com/docs/assigning-drive-folder-for-a-category)
    - [Downloading category and article in KB site](https://docs.document360.com/docs/downloading-category-and-article-in-kb-site)
  - [Articles](https://docs.document360.com/docs/article)
    - [Managing articles](https://docs.document360.com/docs/managing-articles)
    - [Word .docx files](https://docs.document360.com/docs/article-import-from-word-files)
    - [Publishing an article](https://docs.document360.com/docs/publishing-an-article)
    - [Reviewing an article using Inline comments](https://docs.document360.com/docs/reviewing-an-article-inline-comments)
    - [Adding images to articles](https://docs.document360.com/docs/adding-images-to-articles)
    - [Adding videos in articles](https://docs.document360.com/docs/adding-videos-in-articles)
    - [Adding files to article](https://docs.document360.com/docs/adding-files-to-articles)
    - [Adding hyperlinks](https://docs.document360.com/docs/linking-to-other-articles)
    - [Code blocks](https://docs.document360.com/docs/code-blocks)
    - [Adding private notes](https://docs.document360.com/docs/private-notes)
    - [Embedding Stream videos in articles](https://docs.document360.com/docs/embedding-microsoft-streams-video-in-articles)
    - [Embedding Google forms in articles](https://docs.document360.com/docs/embedding-google-forms-in-article)
    - [Embedding a Draw.io diagram](https://docs.document360.com/docs/embedding-a-drawio-diagram)
  - [All articles](https://docs.document360.com/docs/bulk-operations-overview)
    - [All articles - Overview page](https://docs.document360.com/docs/all-articles-overview-page)
    - [Using filters in All articles page](https://docs.document360.com/docs/filter-bulk-operations)
    - [Export All articles list](https://docs.document360.com/docs/export-bulk-operations)
  - [Article settings](https://docs.document360.com/docs/article-management)
    - [Article review reminder](https://docs.document360.com/docs/review-reminders)
    - [Article SEO](https://docs.document360.com/docs/article-seo)
    - [Excluding articles from search engines](https://docs.document360.com/docs/excluding-articles-from-searches)
    - [Change the URL of an article](https://docs.document360.com/docs/changing-the-url-of-an-article)
    - [Article tags](https://docs.document360.com/docs/article-tags)
    - [Add article labels](https://docs.document360.com/docs/adding-article-labels)
    - [Related articles](https://docs.document360.com/docs/related-articles)
    - [Featured image](https://docs.document360.com/docs/featured-image)
    - [Attachments](https://docs.document360.com/docs/attachments)
    - [Status indicator](https://docs.document360.com/docs/status-indicator)
    - [Article status](https://docs.document360.com/docs/article-status)
    - [Preferences](https://docs.document360.com/docs/preferences)
    - [Show/hide table of contents for an article](https://docs.document360.com/docs/showhide-table-of-contents-for-an-article)
    - [Mark as deprecated](https://docs.document360.com/docs/marking-articles-as-deprecated)
    - [Update article contributors](https://docs.document360.com/docs/updating-article-contributors)
    - [Schedule publishing](https://docs.document360.com/docs/schedule-publishing)
    - [Discussion feed](https://docs.document360.com/docs/article-discussion-feed)
    - [Revision history](https://docs.document360.com/docs/revision-history)
    - [Article analytics](https://docs.document360.com/docs/article-analytics)
    - [Security - Article access control](https://docs.document360.com/docs/article-access-control-knowledge-base-site)
    - [Health check metrics](https://docs.document360.com/docs/health-check-metrics)
    - [Readability score](https://docs.document360.com/docs/readability-score)
    - [Sitemap](https://docs.document360.com/docs/sitemap-generator)
    - [Public article comments](https://docs.document360.com/docs/public-comments)
    - [Robots.txt](https://docs.document360.com/docs/robotstxt)
    - [Read receipt](https://docs.document360.com/docs/read-receipt)
    - [Share articles via private link](https://docs.document360.com/docs/share-articles-via-private-link)
- [AI features](https://docs.document360.com/docs/ai-features)
  - [Eddy AI customization](https://docs.document360.com/docs/ai-customization)
  - [AI machine translation](https://docs.document360.com/docs/ai-machine-translation)
  - [Eddy AI trust page](https://docs.document360.com/docs/eddy-ai-trust-page)
  - [AI writer suite](https://docs.document360.com/docs/ai-writer-suite)
    - [AI writer](https://docs.document360.com/docs/ai-writer)
    - [AI FAQ generator](https://docs.document360.com/docs/ai-faq-generator)
    - [AI title recommender](https://docs.document360.com/docs/ai-title-recommender)
    - [AI SEO description generator](https://docs.document360.com/docs/seo-description-generator)
    - [AI tag recommender](https://docs.document360.com/docs/ai-tag-recommender)
    - [AI related articles recommender](https://docs.document360.com/docs/ai-related-articles-recommender)
    - [AI Chart generator](https://docs.document360.com/docs/ai-chart-generator)
    - [AI alt text generator](https://docs.document360.com/docs/ai-alt-text-generator)
  - [AI search suite](https://docs.document360.com/docs/ai-search-suite)
    - [AI assistive search (Ask Eddy AI)](https://docs.document360.com/docs/ai-assistive-search-ask-eddy)
    - [Eddy AI search analytics](https://docs.document360.com/docs/eddy-search-analytics-1)
    - [AI dynamic related articles recommendation](https://docs.document360.com/docs/ai-dynamic-related-articles-recommendation)
    - [AI Chatbot](https://docs.document360.com/docs/ai-chatbot)
      - [Securing Chatbot authentication using JWT](https://docs.document360.com/docs/securing-chatbot-authentication-using-jwt)
      - [Styling the Chatbot](https://docs.document360.com/docs/styling-the-chatbot)
    - [Adding external sources for AI Assistive search](https://docs.document360.com/docs/eddy-ai-federated-search)
    - [AI article summarizer](https://docs.document360.com/docs/ai-article-summarizer)
    - [Ask Eddy AI API](https://docs.document360.com/docs/ask-eddy-ai-api)
    - [Enhancing accessibility with our read out loud feature](https://docs.document360.com/docs/text-to-voice-functionality)
  - [AI premium suite](https://docs.document360.com/docs/ai-premium-suite)
    - [AI glossary generator](https://docs.document360.com/docs/ai-glossary-generator)
  - AI tips and tricks
    - [How to write GenAI friendly content](https://docs.document360.com/docs/how-to-write-genai-friendly-content)
    - [Prompt engineering tips](https://docs.document360.com/docs/prompt-engineering-tips)
- [File management](https://docs.document360.com/docs/drive)
  - [Adding folders and files](https://docs.document360.com/docs/adding-folders-and-files)
  - [Folder actions in Drive](https://docs.document360.com/docs/folder-actions-in-drive)
  - [File actions in Drive](https://docs.document360.com/docs/file-actions-in-drive)
  - [All files overview](https://docs.document360.com/docs/all-content-overview)
  - [Recent, Starred, and Recycle bin files](https://docs.document360.com/docs/recycle-bin-recent-and-starred-files)
- [Content tools](https://docs.document360.com/docs/content-tools)
  - [Workflows](https://docs.document360.com/docs/workflow)
    - [Workflow designer](https://docs.document360.com/docs/workflow-designer)
    - [Managing workflow status](https://docs.document360.com/docs/managing-workflow-status)
    - [Workflow assignment](https://docs.document360.com/docs/workflow-assignment)
  - [Content reuse](https://docs.document360.com/docs/content-reuse)
    - [Templates](https://docs.document360.com/docs/article-templates)
    - [Variables](https://docs.document360.com/docs/variables)
    - [Snippet](https://docs.document360.com/docs/snippets)
    - [Glossary](https://docs.document360.com/docs/glossary)
      - [Adding glossary terms](https://docs.document360.com/docs/adding-glossary-term)
      - [Inserting glossary term in an article](https://docs.document360.com/docs/adding-glossary-term-in-articles)
      - [Managing glossary terms](https://docs.document360.com/docs/editing-and-deleting-glossary-term)
      - [Managing the glossary landing page](https://docs.document360.com/docs/glossary-overview-page)
  - [Feedback manager](https://docs.document360.com/docs/feedback-manager-overview)
  - [Custom pages](https://docs.document360.com/docs/custom-pages)
  - [Tags](https://docs.document360.com/docs/tags)
    - [Manage tags page overview](https://docs.document360.com/docs/tag-manager-overview-page)
    - [Adding a new tag](https://docs.document360.com/docs/adding-a-new-tag)
    - [Tag groups page overview](https://docs.document360.com/docs/tag-groups-overview)
    - [Manage tag dependencies](https://docs.document360.com/docs/tag-dependency-viewer)
  - [Content essentials](https://docs.document360.com/docs/content-essentials)
    - [Find and replace](https://docs.document360.com/docs/find-and-replace)
    - [SEO descriptions](https://docs.document360.com/docs/seo-descriptions)
  - [Import & Export project/article](https://docs.document360.com/docs/import-export)
    - [Exporting your Document360 project as a ZIP file](https://docs.document360.com/docs/export-documentation-as-zip)
    - [Importing a Document360 project ZIP file](https://docs.document360.com/docs/import-a-documentation-project)
    - [Migrating documentation from other platforms](https://docs.document360.com/docs/migrating-documentation-from-another-knowledge-base-platform)
  - [Export to PDF](https://docs.document360.com/docs/export-to-pdf)
    - [Designing a PDF template](https://docs.document360.com/docs/pdf-design-templates)
    - [Compiling content for PDF](https://docs.document360.com/docs/compliling-content-for-pdf)
- [Analytics](https://docs.document360.com/docs/analytics)
  - [Articles analytics](https://docs.document360.com/docs/articles-analytics)
  - [Eddy AI search analytics](https://docs.document360.com/docs/eddy-ai-search-analytics)
  - [Search analytics](https://docs.document360.com/docs/analytics-search)
  - [Reader analytics](https://docs.document360.com/docs/reader-analytics)
  - [Team accounts analytics](https://docs.document360.com/docs/analytics-team-accounts)
  - [Feedback analytics](https://docs.document360.com/docs/feedback)
  - [Links status analytics](https://docs.document360.com/docs/links-status)
  - [Page not found analytics](https://docs.document360.com/docs/page-not-found-analytics)
  - [Ticket deflector analytics](https://docs.document360.com/docs/ticket-deflector-overview)
- [API Documentation](https://docs.document360.com/docs/api-documentation-tool)
  - [Getting started with API documentation](https://docs.document360.com/docs/api-documentation-getting-started)
  - [Managing API documentation](https://docs.document360.com/docs/manage-api-documentation)
- [Knowledge base widget](https://docs.document360.com/docs/knowledge-base-widget)
  - [Knowledge base widget - Getting started](https://docs.document360.com/docs/knowledge-base-widget-getting-started)
  - [Installing the Knowledge base widget](https://docs.document360.com/docs/installing-the-knowledge-base-widget)
  - [Edit, Clone, and Delete widget](https://docs.document360.com/docs/edit-clone-and-delete)
  - [Managing and customizing the Knowledge base widget](https://docs.document360.com/docs/managing-and-customizing-the-knowledge-base-widget)
  - [URL Mapping](https://docs.document360.com/docs/url-mapping)
  - [Customizing the Knowledge base widget using Custom CSS/JavaScript](https://docs.document360.com/docs/customizing-the-kb-widget-using-custom-css-javascript)
  - [FAQ - Knowledge base widget](https://docs.document360.com/docs/faq-knowledge-base-widget)
- [Knowledge base site](https://docs.document360.com/docs/design-and-styling-knowledge-base-site)
  - [Knowledge base site 2.0](https://docs.document360.com/docs/knowledge-base-site-20)
  - [Customize site](https://docs.document360.com/docs/customize-site)
    - [KB site 2.0 migration](https://docs.document360.com/docs/kb-site-20-migration)
    - [Web Content Accessibility Guidelines (WCAG)](https://docs.document360.com/docs/web-content-accessibility-guidelines-wcag)
  - [Site header and footer](https://docs.document360.com/docs/site-header-and-footer)
    - [Header - Primary navigation](https://docs.document360.com/docs/header-primary-navigation)
    - [Header - Secondary navigation](https://docs.document360.com/docs/header-secondary-navigation)
    - [Footer](https://docs.document360.com/docs/footer-navigation)
    - [Custom footer](https://docs.document360.com/docs/custom-footer)
    - [RSS Feeds](https://docs.document360.com/docs/rss-feeds)
    - [Themes](https://docs.document360.com/docs/themes)
  - [Main pages](https://docs.document360.com/docs/main-pages)
    - [Hero section](https://docs.document360.com/docs/hero-section)
    - [Rich text blocks](https://docs.document360.com/docs/text-block)
    - [Multicolumn card section](https://docs.document360.com/docs/text-columns-block)
    - [Image with text block](https://docs.document360.com/docs/image-and-text)
    - [Custom code section](https://docs.document360.com/docs/html-block)
    - [Knowledge base categories block](https://docs.document360.com/docs/knowledge-base-categories)
    - [Widgets block](https://docs.document360.com/docs/widgets)
  - [Error pages](https://docs.document360.com/docs/error-pages)
    - [404 page](https://docs.document360.com/docs/404-page)
    - [Access denied page](https://docs.document360.com/docs/access-denied-page)
    - [Unauthorized page](https://docs.document360.com/docs/unauthorized-page)
    - [IP restriction page](https://docs.document360.com/docs/ip-restriction-page)
  - [Custom CSS & JavaScript](https://docs.document360.com/docs/custom-css-javascript)
    - [CSS Snippets](https://docs.document360.com/docs/css-snippets)
    - [Callout styles](https://docs.document360.com/docs/callout-styles)
    - [Body font style](https://docs.document360.com/docs/body-font-style)
    - [Image alignment](https://docs.document360.com/docs/image-alignment)
    - [Header font style](https://docs.document360.com/docs/header-font-style)
    - [Table style](https://docs.document360.com/docs/table-style)
  - [Article redirect rule](https://docs.document360.com/docs/article-redirect-rules)
  - [Article settings & SEO](https://docs.document360.com/docs/configuring-the-article-settings)
    - [Article header](https://docs.document360.com/docs/article-header)
    - [Site header-What's new](https://docs.document360.com/docs/document-header)
    - [Follow articles and categories](https://docs.document360.com/docs/follow-articles-and-categories)
    - [Search in Knowledge base site](https://docs.document360.com/docs/search-in-knowledge-base-site)
  - [Liking or disliking an article](https://docs.document360.com/docs/liking-or-disliking-an-article)
  - [Smart bar & Cookie consent](https://docs.document360.com/docs/smart-bar-cookie-consent)
    - [Smart bars](https://docs.document360.com/docs/smart-bar)
    - [Cookie consent](https://docs.document360.com/docs/cookie-consent)
  - Ticket deflectors
    - [Accessing the ticket deflectors in portal](https://docs.document360.com/docs/accessing-the-ticket-deflectors)
    - [Adding a new ticket deflector](https://docs.document360.com/docs/adding-a-new-ticket-deflector)
- [Integrations](https://docs.document360.com/docs/integrations)
  - [Integrations in Document360](https://docs.document360.com/docs/integrations-getting-started)
  - [Code inclusion and exclusion conditions](https://docs.document360.com/docs/advanced-insertion-rules-in-integration)
  - [Chat](https://docs.document360.com/docs/chat)
    - [LiveChat](https://docs.document360.com/docs/livechat)
    - [Olark](https://docs.document360.com/docs/olark)
    - [Freshchat](https://docs.document360.com/docs/freshchat)
    - [Crisp](https://docs.document360.com/docs/crisp)
    - [Chatra](https://docs.document360.com/docs/chatra)
    - [Doorbell](https://docs.document360.com/docs/door-bell)
    - [Gorgias](https://docs.document360.com/docs/gorgias)
    - [Belco](https://docs.document360.com/docs/belco)
    - [Sunshine Conversations](https://docs.document360.com/docs/sunshine)
    - [Kommunicate](https://docs.document360.com/docs/kommunicate)
  - [Analytics](https://docs.document360.com/docs/analytics-1)
    - [Google Analytics](https://docs.document360.com/docs/google-analytics-integration)
    - [Google Analytics (GA4)](https://docs.document360.com/docs/google-analytics-new)
    - [Google Tag Manager](https://docs.document360.com/docs/google-tag-manager)
    - [Heap](https://docs.document360.com/docs/heap)
    - [Segment](https://docs.document360.com/docs/segment-integration)
    - [Hotjar](https://docs.document360.com/docs/hotjar)
    - [Amplitude](https://docs.document360.com/docs/amplitude)
    - [FullStory](https://docs.document360.com/docs/fullstory)
    - [Mixpanel](https://docs.document360.com/docs/mixpanel)
  - [Marketing automation](https://docs.document360.com/docs/marketing-automation)
    - [VWO](https://docs.document360.com/docs/vwo)
    - [Freshmarketer](https://docs.document360.com/docs/freshmarketer)
    - [ZOHO PageSense](https://docs.document360.com/docs/zoho-page-sense)
    - [GoSquared](https://docs.document360.com/docs/gosquared)
  - [Commenting](https://docs.document360.com/docs/commenting)
    - [Commento](https://docs.document360.com/docs/commento)
    - [Disqus](https://docs.document360.com/docs/disqus)
- [Extensions](https://docs.document360.com/docs/extensions)
  - [Document360 Extensions - Getting started](https://docs.document360.com/docs/all-extensions)
  - [Helpdesk](https://docs.document360.com/docs/customer-support)
    - [Freshdesk](https://docs.document360.com/docs/freshdesk)
    - [Freshservice](https://docs.document360.com/docs/freshservice)
    - [Zendesk](https://docs.document360.com/docs/zendesk)
    - [Intercom](https://docs.document360.com/docs/intercom-integration)
    - [Salesforce](https://docs.document360.com/docs/salesforce-integration)
      - [Salesforce](https://docs.document360.com/docs/salesforce)
      - [Cases page](https://docs.document360.com/docs/cases-page)
  - [Team collaboration](https://docs.document360.com/docs/team-collaboration)
    - [Slack](https://docs.document360.com/docs/slack)
    - [Microsoft Teams](https://docs.document360.com/docs/microsoft-teams)
    - [Drift](https://docs.document360.com/docs/drift)
    - [Zapier](https://docs.document360.com/docs/zapier-integration)
      - [Zapier - Setup guide](https://docs.document360.com/docs/zapier-setup-guide)
      - [Use cases of Zapier](https://docs.document360.com/docs/use-cases-for-zap-templates)
        - [Integrating Google Docs with Document360](https://docs.document360.com/docs/google-docs-document360-integration)
        - [Integrating Google Sheets with Document360](https://docs.document360.com/docs/document360-with-google-sheets-integration)
        - [Integrating Document360 with Google Drive](https://docs.document360.com/docs/google-drive-document360)
        - [Integrating Trello with Document360](https://docs.document360.com/docs/document360-with-trello-integration)
        - [Integrating GitHub with Document360](https://docs.document360.com/docs/github-document360)
        - [Integrating Confluence Server with Document360](https://docs.document360.com/docs/confluence-document360)
        - [Integrating Zoho CRM with Document360](https://docs.document360.com/docs/zoho-crm-document360)
        - [Integrating Pipedrive with Document360](https://docs.document360.com/docs/pipedrive-document360)
        - [Integrating Hubspot with Document360](https://docs.document360.com/docs/hubspot-document360)
        - [Integrating Asana with Document360](https://docs.document360.com/docs/asana-document360)
        - [Integrating Monday.com with Document360](https://docs.document360.com/docs/mondaycom-document360)
        - [Integrating Typeform with Document360](https://docs.document360.com/docs/typeform-document360)
        - [Integrating Gmail with Document360](https://docs.document360.com/docs/document360-gmail)
        - [Integrating Mailchimp with Document360](https://docs.document360.com/docs/document360-mailchimp)
    - [Make](https://docs.document360.com/docs/make-1)
      - [Make - Setup guide](https://docs.document360.com/docs/make-setup-guide)
      - [Use cases for Make Scenarios](https://docs.document360.com/docs/use-cases-for-make-scenarios)
        - [Integrating Asana with Document360](https://docs.document360.com/docs/asana-and-document360-integration)
        - [Integrating Monday.com with Document360](https://docs.document360.com/docs/monday-document360-integration)
        - [Integrating Typeform with Document360](https://docs.document360.com/docs/typeform-and-document360-integration)
        - [Integrating Google Docs with Document360](https://docs.document360.com/docs/google-docs-and-document360-integration)
        - [Integrating Jira with Document360](https://docs.document360.com/docs/jira-and-document360-integration)
  - Code repositories
    - [GitHub](https://docs.document360.com/docs/github-extension)
  - [Translation and browser](https://docs.document360.com/docs/translation)
    - [Chrome](https://docs.document360.com/docs/chrome-extension)
    - [Crowdin](https://docs.document360.com/docs/crowdin)
    - [Phrase](https://docs.document360.com/docs/phrase)
- [Portal management](https://docs.document360.com/docs/portal-management)
  - [General project settings](https://docs.document360.com/docs/general-project-settings)
  - [Team auditing](https://docs.document360.com/docs/team-auditing)
  - [Localization & Workspace](https://docs.document360.com/docs/localization-workspace)
    - [Localization](https://docs.document360.com/docs/localization)
      - [Localization - Getting started](https://docs.document360.com/docs/localization-getting-started)
      - [Setting up a Multi-lingual knowledge base](https://docs.document360.com/docs/setting-up-a-multi-lingual-knowledge-base)
      - [Localization variables](https://docs.document360.com/docs/localization-variables)
      - [AI machine translation](https://docs.document360.com/docs/ai-machine-translation-1)
    - [Workspaces](https://docs.document360.com/docs/workspaces)
  - [Backup and restore](https://docs.document360.com/docs/backup-restore)
  - [Notifications](https://docs.document360.com/docs/notifications)
    - [Webhook notification channel](https://docs.document360.com/docs/webhook-notification-channel)
    - [Slack notification channel](https://docs.document360.com/docs/slack-notification-channel)
    - [Microsoft Teams notification channel](https://docs.document360.com/docs/microsoft-teams-notification-channel)
    - [SMTP notification channel](https://docs.document360.com/docs/smtp-email-notification-channel)
    - [Notification mapping](https://docs.document360.com/docs/notification-mapping)
    - [Notification history](https://docs.document360.com/docs/notification-history)
    - [Email domain](https://docs.document360.com/docs/send-notifications-from-custom-email-domain)
  - [API tokens](https://docs.document360.com/docs/api-tokens)
  - [External API Tools](https://docs.document360.com/docs/external-api-tools)
    - [How to use Postman?](https://docs.document360.com/docs/how-to-use-postman)
    - [How to use Swagger?](https://docs.document360.com/docs/how-to-use-swagger)
  - [Portal search](https://docs.document360.com/docs/full-portal-search)
    - [Article-portal search](https://docs.document360.com/docs/article-full-portal-search)
    - [Drive-portal search](https://docs.document360.com/docs/drive-full-portal-search)
    - [Users & groups-portal search](https://docs.document360.com/docs/users-groups-full-portal-search)
    - [Tags-portal search](https://docs.document360.com/docs/tags-full-portal-search)
    - [Settings-portal search](https://docs.document360.com/docs/settings-full-portal-search)
- [Domain management](https://docs.document360.com/docs/domain-management)
  - [Custom domain mapping](https://docs.document360.com/docs/custom-domain-mapping)
  - [Hosting Document360 on a sub-directory](https://docs.document360.com/docs/document360-on-a-sub-folder)
  - [Nginx server - Subfolder hosting](https://docs.document360.com/docs/nginx-server)
  - [ASP.NET Core server](https://docs.document360.com/docs/aspnet-core-server)
  - [Microsoft - IIS server](https://docs.document360.com/docs/microsoft-iis-server)
  - [Apache HTTP server](https://docs.document360.com/docs/apache-http-server)
- [User management](https://docs.document360.com/docs/user-management)
  - [Managing team accounts](https://docs.document360.com/docs/managing-team-account)
  - [Managing team account groups](https://docs.document360.com/docs/team-account-groups-overview-page)
  - [Managing readers](https://docs.document360.com/docs/reader-accounts)
  - [Managing reader groups](https://docs.document360.com/docs/managing-reader-groups)
  - [Readers self registration](https://docs.document360.com/docs/reader-self-registration)
  - [Managing reviewer accounts](https://docs.document360.com/docs/managing-reviewer-accounts)
  - [Account locked](https://docs.document360.com/docs/account-locked)
- [Access management](https://docs.document360.com/docs/access-management)
  - [Roles and permissions](https://docs.document360.com/docs/roles)
  - [Content access](https://docs.document360.com/docs/content-role-and-access)
  - [Block inheritance](https://docs.document360.com/docs/block-inheritance)
  - [Site access](https://docs.document360.com/docs/site-access)
  - [IP restriction](https://docs.document360.com/docs/ip-restriction)
- [Single Sign-On (SSO)](https://docs.document360.com/docs/single-sign-on-sso)
  - [Login using SSO - Knowledge base portal](https://docs.document360.com/docs/login-using-sso-knowledge-base-portal)
  - [Login using SSO - Knowledge base site](https://docs.document360.com/docs/login-using-sso-knowledge-base-site)
  - [Inviting or Adding SSO users](https://docs.document360.com/docs/inviting-or-adding-sso-users)
  - [Mapping an existing SSO configuration to other projects](https://docs.document360.com/docs/mapping-an-existing-sso-configuration-to-other-projects)
  - [Disable Document360 login page](https://docs.document360.com/docs/disable-document360-login-page)
  - [Auto assign reader group](https://docs.document360.com/docs/auto-assign-reader-group)
  - [Convert to SSO account](https://docs.document360.com/docs/convert-to-sso-account)
  - [Sign out idle SSO team account](https://docs.document360.com/docs/team-account-idle-timeout)
  - [SAML](https://docs.document360.com/docs/saml)
    - [SAML SSO with Okta](https://docs.document360.com/docs/saml-sso-with-okta)
    - [SAML SSO with Entra](https://docs.document360.com/docs/saml-sso-with-entra)
    - [SAML SSO with Google](https://docs.document360.com/docs/google-sso-saml-configuration)
    - [SAML SSO with OneLogin](https://docs.document360.com/docs/saml-sso-with-onelogin)
    - [SAML SSO with ADFS](https://docs.document360.com/docs/saml-sso-with-adfs)
    - [SAML SSO with other configurations](https://docs.document360.com/docs/saml-sso-with-other-configurations)
    - [Identity Provider (IdP) initiated sign in](https://docs.document360.com/docs/idp-initiated-login)
    - [Removing a configured SAML SSO](https://docs.document360.com/docs/removing-a-configured-saml-sso)
  - [OpenID](https://docs.document360.com/docs/openid)
    - [Okta with OpenID SSO](https://docs.document360.com/docs/okta-with-openid-sso)
    - [Auth0 with OpenID SSO](https://docs.document360.com/docs/auth0-with-openid-sso)
    - [ADFS with OpenID SSO](https://docs.document360.com/docs/adfs-with-openid-sso)
    - [Other configurations with OpenID SSO](https://docs.document360.com/docs/other-configurations-with-openid-sso)
    - [Removing a configured OpenID SSO](https://docs.document360.com/docs/removing-a-configured-openid-sso)
  - [JWT](https://docs.document360.com/docs/jwt)
    - [Setting up JWT SSO](https://docs.document360.com/docs/configuring-the-jwt-sso)
    - [JWT reader groups](https://docs.document360.com/docs/jwt-reader-groups)
- [Customization](https://docs.document360.com/docs/customization-editor)
  - [How to enlarge the pdf preview in the article?](https://docs.document360.com/docs/how-to-enlarge-the-pdf-preview-in-the-article)
  - [How to change the color of the hyperlinks in Dark mode?](https://docs.document360.com/docs/how-to-change-the-color-of-the-hyperlinks-in-dark-mode)
  - [How to change the highlighted search result color in articles?](https://docs.document360.com/docs/how-to-change-the-highlighted-search-result-color-in-articles)
  - [How to hide the project's workspace dropdown in the Knowledge base site?](https://docs.document360.com/docs/how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site)
  - [How to add a vertical scrollbar to the code blocks?](https://docs.document360.com/docs/how-to-add-a-vertical-scrollbar-to-the-code-blocks)
  - [How to set the default height and width of the embedded PDF?](https://docs.document360.com/docs/how-to-set-the-default-height-and-width-of-the-embedded-pdf)
  - [How to make the table border bold in knowledge base?](https://docs.document360.com/docs/how-to-make-the-table-border-bold-in-knowledge-base)
  - [How to vertically align table contents at the top in the Knowledge base?](https://docs.document360.com/docs/how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base)
  - [How to restrict the readers from copying the content?](https://docs.document360.com/docs/how-to-restrict-the-readers-from-copying-the-content)
  - [How to keep dark mode for the Knowledge base site by default?](https://docs.document360.com/docs/how-to-keep-dark-mode-for-the-knowledge-base-site-by-default)
  - [How to center align the text in Markdown?](https://docs.document360.com/docs/how-to-center-align-the-text-in-markdown)
  - [How to change the color of the text in Markdown?](https://docs.document360.com/docs/how-to-change-the-color-of-the-text-in-markdown)
  - [How to change the language name text in code blocks?](https://docs.document360.com/docs/how-to-change-the-language-name-text-in-code-blocks)
  - [How to change the callouts color in dark mode?](https://docs.document360.com/docs/how-to-change-the-callouts-color-in-dark-mode)
  - [How to center align the heading in the articles?](https://docs.document360.com/docs/how-to-center-align-the-heading-in-the-articles)
  - [How to change the color of the table header?](https://docs.document360.com/docs/how-to-change-the-color-of-the-table-header)
  - [How to add accordion in Markdown?](https://docs.document360.com/docs/how-to-add-accordion-in-markdown)
  - [How to add extra space in Markdown?](https://docs.document360.com/docs/how-to-add-extra-space-in-markdown)
  - [How to align the image in Markdown?](https://docs.document360.com/docs/how-to-align-the-image-in-markdown)
  - [How to add a background image for a text content?](https://docs.document360.com/docs/how-to-add-a-background-image-for-a-text-content)
  - [How to change the color of the table of contents?](https://docs.document360.com/docs/how-to-change-the-color-of-the-table-of-contents)
  - [How to sort the contents of a table?](https://docs.document360.com/docs/how-to-sort-the-contents-of-a-table)
  - [How to customize the hyperlink size?](https://docs.document360.com/docs/how-to-customize-the-hyperlink)
  - [How to make all links open in new tab?](https://docs.document360.com/docs/how-to-make-all-links-open-in-new-tab)
  - [How to set a default featured image in knowledge base?](https://docs.document360.com/docs/how-to-set-a-default-featured-image-in-knowledge-base)
  - [How to add shadows to an image in Markdown?](https://docs.document360.com/docs/how-to-add-shadows-to-an-image-in-markdown)
  - [How to add borders to an image in Markdown?](https://docs.document360.com/docs/how-to-add-borders-to-an-image-in-markdown)
  - [How to embed YouTube Shorts?](https://docs.document360.com/docs/embed-youtube-shorts)
  - [How to embed a Loom video?](https://docs.document360.com/docs/how-to-embed-loom-video)
  - [How to embed an Excel file?](https://docs.document360.com/docs/how-to-embed-an-excel-file)
  - [How to change the color of Feedback buttons?](https://docs.document360.com/docs/how-to-change-the-color-of-feedback-buttons)
  - [How to hide footer in mobile view?](https://docs.document360.com/docs/how-to-hide-footer-in-mobile-view)
  - [How to change the hover color of the header options?](https://docs.document360.com/docs/how-to-change-the-hover-color-of-the-header-options)
  - [How to move the related articles above the feedback section?](https://docs.document360.com/docs/how-to-move-the-related-articles-above-the-feedback-section)
  - [How to hide the change password option for readers?](https://docs.document360.com/docs/how-to-hide-the-change-password-option-for-readers)
  - [How to configure a custom header font in the knowledge base?](https://docs.document360.com/docs/how-to-configure-a-custom-header-font-in-the-knowledge-base)
  - [How to hide the category manager?](https://docs.document360.com/docs/how-to-hide-the-category-manager)
  - [How to configure a custom font in the knowledge base?](https://docs.document360.com/docs/how-to-configure-a-custom-font-in-the-knowledge-base)
  - [How to hide the left navigation bar in the knowledge base site?](https://docs.document360.com/docs/how-to-hide-the-left-navigation-bar-in-knowledge-base-site)
- [Billing & Subscription](https://docs.document360.com/docs/billing)
  - [Plans and pricing](https://docs.document360.com/docs/plans-and-pricing)
  - [Upgrading your subscription plan](https://docs.document360.com/docs/upgrading-your-plan)
  - [Downgrading your subscription plan](https://docs.document360.com/docs/downgrading-your-plan)
  - [Purchasing add-ons](https://docs.document360.com/docs/add-ons)
  - [Upgrading from trial version](https://docs.document360.com/docs/upgrading-from-trial-version)
  - [Changing payment information](https://docs.document360.com/docs/changing-payment-information)
- [Release notes](https://docs.document360.com/docs/release-notes)
  - [2025](https://docs.document360.com/docs/2025)
    - [February 2025 - 11.1.2](https://docs.document360.com/docs/february-2025-1112)
    - [January 2025 - 11.01.1](https://docs.document360.com/docs/january-2025-1111)
  - [2024](https://docs.document360.com/docs/2024)
    - [December 2024 - 10.12.1](https://docs.document360.com/docs/december-2024-10121)
    - [November 2024 - 10.11.1](https://docs.document360.com/docs/november-2024-10111)
    - [October 2024 - 10.10.1](https://docs.document360.com/docs/october-2024-10101)
    - [September 2024 - 10.9.1](https://docs.document360.com/docs/september-2024-1091)
    - [September 2024 - 10.8.2](https://docs.document360.com/docs/september-2024-1082)
    - [August 2024 - 10.8.1](https://docs.document360.com/docs/august-2024-1081)
    - [July 2024 - 10.7.1](https://docs.document360.com/docs/july-2024-1071)
    - [July 2024 - 10.6.2](https://docs.document360.com/docs/july-2024-1062)
    - [June 2024 - 10.6.1](https://docs.document360.com/docs/june-2024-1061)
    - [June 2024 - 10.5.2](https://docs.document360.com/docs/june-2024-1052)
    - [May 2024 - 10.5.1](https://docs.document360.com/docs/may-2024-1051)
    - [May 2024 - 10.4.2](https://docs.document360.com/docs/may-2024-1042)
    - [April 2024 - 10.4.1](https://docs.document360.com/docs/1041-release-note)
    - [April 2024 - Minor release](https://docs.document360.com/docs/april-2024-minor-release)
    - [March 2024](https://docs.document360.com/docs/march-2024)
    - [February 2024](https://docs.document360.com/docs/february-2024)
    - [January 2024](https://docs.document360.com/docs/january-2024)
  - [2023](https://docs.document360.com/docs/2023)
    - [December 2023](https://docs.document360.com/docs/december-2023)
    - [November 2023](https://docs.document360.com/docs/november-2023)
    - [October 2023](https://docs.document360.com/docs/october-2023)
    - [August 2023](https://docs.document360.com/docs/august-3)
    - [July 2023](https://docs.document360.com/docs/july-2)
    - [June 2023](https://docs.document360.com/docs/june-3)
    - [May 2023](https://docs.document360.com/docs/may-1)
    - [April 2023](https://docs.document360.com/docs/april-3)
    - [March 2023](https://docs.document360.com/docs/march-4)
    - [February 2023](https://docs.document360.com/docs/february-3)
    - [January 2023](https://docs.document360.com/docs/january-2)
  - [2022](https://docs.document360.com/docs/2022)
    - [December 2022](https://docs.document360.com/docs/december-2022-release-note)
    - [November 2022](https://docs.document360.com/docs/november-2022-release-note)
    - [October 2022](https://docs.document360.com/docs/october-2022-release-note)
    - [September 2022](https://docs.document360.com/docs/september-2022-release-note)
    - [August 2022](https://docs.document360.com/docs/august-2022-release-note)
    - [July 2022](https://docs.document360.com/docs/july-2022-release-note)
    - [June 2022](https://docs.document360.com/docs/june-2022-release-notes)
    - [May 2022](https://docs.document360.com/docs/may-2022-release-note)
    - [April 2022](https://docs.document360.com/docs/april-2022-release-note)
    - [March 2022](https://docs.document360.com/docs/march-2022-release-note)
    - [February 2022](https://docs.document360.com/docs/february-2022-release-note)
    - [January 2022](https://docs.document360.com/docs/january-2022-release-note)
  - [2021](https://docs.document360.com/docs/2021)
    - [December 2021](https://docs.document360.com/docs/december-2021-release-note)
    - [November 2021](https://docs.document360.com/docs/november-2021-release-note)
    - [October 2021](https://docs.document360.com/docs/october-2021-release-note)
    - [September 2021](https://docs.document360.com/docs/september-2021-release-note)
    - [August 2021](https://docs.document360.com/docs/august-2021-release-notes)
    - [July 2021](https://docs.document360.com/docs/july-2021-release-note)
    - [June 2021](https://docs.document360.com/docs/june-2021-release-note)
    - [May 2021](https://docs.document360.com/docs/may-2021-release-note)
    - [April 2021](https://docs.document360.com/docs/april-2021-release-note)
    - [March 2021](https://docs.document360.com/docs/march-2021-release-note)
    - [February 2021](https://docs.document360.com/docs/february-2021-release-note)
    - [January 2021](https://docs.document360.com/docs/january-2021-release-note)
  - [2020](https://docs.document360.com/docs/2020)
    - [November 2020](https://docs.document360.com/docs/november-2020-release-note)
    - [October 2020](https://docs.document360.com/docs/october-2020-release-note)
    - [August 2020](https://docs.document360.com/docs/august-2020-release-note)
    - [June 2020](https://docs.document360.com/docs/june-2020-release-note)
    - [May 2020](https://docs.document360.com/docs/may-2020-release-note)
    - [April 2020](https://docs.document360.com/docs/april-2020-release-note)
    - [March 2020](https://docs.document360.com/docs/march-2020-release-note)
    - [February 2020](https://docs.document360.com/docs/february-2020-release-note)
    - [January 2020](https://docs.document360.com/docs/january-2020)
  - [2019](https://docs.document360.com/docs/2019)
    - [December 2019](https://docs.document360.com/docs/december)
    - [November 2019](https://docs.document360.com/docs/november)
    - [October 2019](https://docs.document360.com/docs/october)
    - [September 2019](https://docs.document360.com/docs/september-2019)
    - [August 2019](https://docs.document360.com/docs/august)
    - [July 2019](https://docs.document360.com/docs/july)
    - [June 2019](https://docs.document360.com/docs/june)
    - [May 2019](https://docs.document360.com/docs/may-2019)
    - [April 2019](https://docs.document360.com/docs/april-2019)
    - [March 2019](https://docs.document360.com/docs/march)
    - [February 2019](https://docs.document360.com/docs/february)
    - [January 2019](https://docs.document360.com/docs/january-2019)
- [Support](https://docs.document360.com/docs/support)
</document_content>
</document>

<document index="17">
<source>data/offline/sitemap-en.xml</source>
<document_content>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://docs.document360.com</loc>
    <lastmod>2025-02-27T22:57:03.4633306Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/configuring-the-jwt-sso</loc>
    <lastmod>2025-02-27T05:29:00.695Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/custom-pages</loc>
    <lastmod>2025-02-26T05:16:16.084Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-alt-text-generator</loc>
    <lastmod>2025-02-26T04:44:27.119Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-extra-space-in-markdown</loc>
    <lastmod>2025-02-26T04:05:45.231Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-center-align-the-text-in-markdown</loc>
    <lastmod>2025-02-26T04:02:25.115Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/integrations-getting-started</loc>
    <lastmod>2025-02-25T16:33:17.76Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/revision-history</loc>
    <lastmod>2025-02-24T13:43:12.703Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/general-project-settings</loc>
    <lastmod>2025-02-21T09:52:04.752Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-callouts-color-in-dark-mode</loc>
    <lastmod>2025-02-21T09:26:56.091Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/glossary</loc>
    <lastmod>2025-02-17T07:13:34.846Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-glossary-term</loc>
    <lastmod>2025-02-17T07:12:48.391Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/knowledge-base-site-20</loc>
    <lastmod>2025-02-17T06:52:10.387Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-2025-1112</loc>
    <lastmod>2025-02-17T06:52:10.387Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/workspaces</loc>
    <lastmod>2025-02-16T07:55:29.19Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/system-and-browser-requirements</loc>
    <lastmod>2025-02-14T13:03:55.147Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/sitemap-generator</loc>
    <lastmod>2025-02-14T11:44:06.779Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-folders-and-files</loc>
    <lastmod>2025-02-14T09:31:25.603Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/read-receipt</loc>
    <lastmod>2025-02-14T09:16:45.443Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/managing-articles</loc>
    <lastmod>2025-02-14T07:31:33.724Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/follow-articles-and-categories</loc>
    <lastmod>2025-02-14T07:14:19.418Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/downloading-category-and-article-in-kb-site</loc>
    <lastmod>2025-02-14T07:13:37.141Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/links-status</loc>
    <lastmod>2025-02-14T06:42:29.889Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/login-using-sso-knowledge-base-portal</loc>
    <lastmod>2025-02-13T13:16:55.467Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml</loc>
    <lastmod>2025-02-13T13:16:05.499Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/openid</loc>
    <lastmod>2025-02-13T13:15:43.542Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/feedback</loc>
    <lastmod>2025-02-11T11:26:54.811Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-getting-started</loc>
    <lastmod>2025-02-07T11:57:17.22Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/articles-analytics</loc>
    <lastmod>2025-02-07T11:26:22.092Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-a-background-image-for-a-text-content</loc>
    <lastmod>2025-02-07T09:01:07.8Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tables-in-advanced-wysiwyg-editor</loc>
    <lastmod>2025-02-07T08:56:08.489Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/nginx-server</loc>
    <lastmod>2025-02-07T06:34:55.274Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/customize-site</loc>
    <lastmod>2025-02-07T06:19:17.867Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-images-to-articles</loc>
    <lastmod>2025-02-07T05:13:11.909Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-machine-translation</loc>
    <lastmod>2025-02-07T05:03:48.837Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/creating-a-sandbox-project</loc>
    <lastmod>2025-02-07T04:43:53.788Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/markdown-basics</loc>
    <lastmod>2025-02-06T14:43:56.436Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/customizing-the-kb-widget-using-custom-css-javascript</loc>
    <lastmod>2025-02-06T11:15:55.656Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-assistive-search-ask-eddy</loc>
    <lastmod>2025-02-05T05:43:06.309Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-move-the-related-articles-above-the-feedback-section</loc>
    <lastmod>2025-02-04T13:47:39.871Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/linking-to-other-articles</loc>
    <lastmod>2025-02-04T13:41:29.254Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july-2022-release-note</loc>
    <lastmod>2025-02-03T07:24:11.199Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/file-actions-in-drive</loc>
    <lastmod>2025-02-03T06:34:15.876Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/image-alignment</loc>
    <lastmod>2025-02-03T06:13:47.848Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-a-vertical-scrollbar-to-the-code-blocks</loc>
    <lastmod>2025-02-02T11:29:26.535Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-writer-suite</loc>
    <lastmod>2025-02-01T07:59:39.74Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/seo-description-generator</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-title-recommender</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-tag-recommender</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-writer</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-related-articles-recommender</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-faq-generator</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-chart-generator</loc>
    <lastmod>2025-02-01T07:59:38.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-search-suite</loc>
    <lastmod>2025-02-01T07:55:33.098Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-seo</loc>
    <lastmod>2025-02-01T07:28:27.897Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/related-articles</loc>
    <lastmod>2025-02-01T07:28:27.897Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-tags</loc>
    <lastmod>2025-02-01T07:28:27.897Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-article-labels</loc>
    <lastmod>2025-02-01T06:46:24.807Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/managing-categories</loc>
    <lastmod>2025-02-01T06:46:24.807Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2025-1111</loc>
    <lastmod>2025-02-01T06:43:34.037Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tags</loc>
    <lastmod>2025-01-30T06:27:38.842Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/pipedrive-document360</loc>
    <lastmod>2025-01-29T13:00:24.383Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/hubspot-document360</loc>
    <lastmod>2025-01-29T12:58:59.197Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-hide-footer-in-mobile-view</loc>
    <lastmod>2025-01-29T11:31:04.132Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/markdown-editor-overview</loc>
    <lastmod>2025-01-29T04:36:29.179Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/account-locked</loc>
    <lastmod>2025-01-28T12:45:08.973Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/reader-self-registration</loc>
    <lastmod>2025-01-28T07:16:15.418Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/eddy-ai-federated-search</loc>
    <lastmod>2025-01-27T16:15:30.704Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-enlarge-the-pdf-preview-in-the-article</loc>
    <lastmod>2025-01-27T06:49:21.502Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-hide-the-left-navigation-bar-in-knowledge-base-site</loc>
    <lastmod>2025-01-26T17:04:17.558Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-hide-the-change-password-option-for-readers</loc>
    <lastmod>2025-01-26T13:05:44.638Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-color-of-the-table-of-contents</loc>
    <lastmod>2025-01-26T13:03:10.03Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-restrict-the-readers-from-copying-the-content</loc>
    <lastmod>2025-01-26T12:51:15.163Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-color-of-the-hyperlinks-in-dark-mode</loc>
    <lastmod>2025-01-26T12:47:46.693Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/csp-guidelines-for-document360-widget</loc>
    <lastmod>2025-01-25T18:09:42.581Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/css-snippets</loc>
    <lastmod>2025-01-25T18:05:37.246Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/intercom-integration</loc>
    <lastmod>2025-01-25T17:15:44.147Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/zendesk</loc>
    <lastmod>2025-01-24T14:19:01.139Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-access-control-knowledge-base-site</loc>
    <lastmod>2025-01-23T12:07:52.822Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/export-bulk-operations</loc>
    <lastmod>2025-01-23T11:18:53.72Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/workflow-designer</loc>
    <lastmod>2025-01-23T08:30:43.677Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-make-all-links-open-in-new-tab</loc>
    <lastmod>2025-01-22T05:13:46.095Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-color-of-feedback-buttons</loc>
    <lastmod>2025-01-22T05:13:38.761Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-color-of-the-table-header</loc>
    <lastmod>2025-01-22T05:13:31.277Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-hover-color-of-the-header-options</loc>
    <lastmod>2025-01-22T05:13:26.039Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ask-eddy-ai-api</loc>
    <lastmod>2025-01-21T17:22:21.981Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/changing-the-url-of-an-article</loc>
    <lastmod>2025-01-21T10:28:27.14Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/mixpanel</loc>
    <lastmod>2025-01-17T07:32:17.353Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-on-a-sub-folder</loc>
    <lastmod>2025-01-16T11:26:29.209Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/custom-domain-mapping</loc>
    <lastmod>2025-01-16T06:35:42.131Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/advanced-wysiwyg-editor</loc>
    <lastmod>2025-01-15T12:10:46.841Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/compliling-content-for-pdf</loc>
    <lastmod>2025-01-15T09:33:49.25Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/managing-and-customizing-the-knowledge-base-widget</loc>
    <lastmod>2025-01-15T04:32:46.084Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/top-right-menu-overview</loc>
    <lastmod>2025-01-13T13:47:09.839Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/creating-a-project</loc>
    <lastmod>2025-01-13T13:45:20.847Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/editing-and-deleting-glossary-term</loc>
    <lastmod>2025-01-13T11:33:49.194Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/main-pages</loc>
    <lastmod>2025-01-13T11:32:26.096Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-redirect-rules</loc>
    <lastmod>2025-01-13T09:37:03.473Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/review-reminders</loc>
    <lastmod>2025-01-13T09:28:10.27Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-premium-suite</loc>
    <lastmod>2025-01-08T11:58:42.636Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/categories-and-subcategories</loc>
    <lastmod>2025-01-08T11:22:03.343Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/upgrading-your-plan</loc>
    <lastmod>2025-01-08T09:32:13.941Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/text-to-voice-functionality</loc>
    <lastmod>2025-01-07T12:32:08.699Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-article-summarizer</loc>
    <lastmod>2025-01-07T12:26:36.755Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/styling-the-chatbot</loc>
    <lastmod>2025-01-07T12:21:32.869Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/securing-chatbot-authentication-using-jwt</loc>
    <lastmod>2025-01-07T12:19:38.569Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-chatbot</loc>
    <lastmod>2025-01-07T12:08:04.364Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-dynamic-related-articles-recommendation</loc>
    <lastmod>2025-01-07T12:04:03.168Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/eddy-ai-search-analytics</loc>
    <lastmod>2025-01-07T11:59:51.128Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/custom-css-javascript</loc>
    <lastmod>2025-01-06T11:41:50.987Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/eddy-ai-trust-page</loc>
    <lastmod>2025-01-06T07:36:48.904Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/notifications</loc>
    <lastmod>2025-01-06T07:20:49.444Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/prompt-engineering-tips</loc>
    <lastmod>2025-01-06T06:06:52.681Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-write-genai-friendly-content</loc>
    <lastmod>2025-01-06T06:00:22.838Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/wysiwyg-editor</loc>
    <lastmod>2025-01-06T05:56:15.337Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/publishing-an-article</loc>
    <lastmod>2025-01-03T11:20:59.533Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/404-page</loc>
    <lastmod>2025-01-03T05:09:09.735Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/header-primary-navigation</loc>
    <lastmod>2025-01-03T04:56:44.398Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/widgets</loc>
    <lastmod>2025-01-03T04:50:34.778Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/recycle-bin-recent-and-starred-files</loc>
    <lastmod>2025-01-01T11:33:03.121Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/all-content-overview</loc>
    <lastmod>2025-01-01T11:31:25.553Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/folder-actions-in-drive</loc>
    <lastmod>2025-01-01T09:46:21.553Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/drive</loc>
    <lastmod>2025-01-01T09:33:08.782Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/1041-release-note</loc>
    <lastmod>2025-01-01T04:58:48.649Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-templates</loc>
    <lastmod>2024-12-31T09:53:44.136Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/single-sign-on-sso</loc>
    <lastmod>2024-12-30T18:55:13.849Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/december-2024-10121</loc>
    <lastmod>2024-12-30T13:23:52.293Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/import-a-documentation-project</loc>
    <lastmod>2024-12-30T11:26:34.251Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ticket-deflector-overview</loc>
    <lastmod>2024-12-24T11:31:09.58Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/reader-analytics</loc>
    <lastmod>2024-12-24T09:32:06.283Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-glossary-generator</loc>
    <lastmod>2024-12-24T08:53:00.786Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ai-customization</loc>
    <lastmod>2024-12-24T04:06:01.139Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november-2024-10111</loc>
    <lastmod>2024-12-23T10:19:26.178Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tabs-in-the-advanced-wysiwyg-editor</loc>
    <lastmod>2024-12-23T09:59:09.613Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/analytics-search</loc>
    <lastmod>2024-12-23T09:59:02.165Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/analytics-team-accounts</loc>
    <lastmod>2024-12-23T09:59:02.165Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/analytics</loc>
    <lastmod>2024-12-23T09:59:02.165Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/search-in-knowledge-base-site</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/all-articles-overview-page</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/filter-bulk-operations</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/using-the-text-editor</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/elements-of-the-editor</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/liking-or-disliking-an-article</loc>
    <lastmod>2024-12-23T09:57:34.539Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-import-from-word-files</loc>
    <lastmod>2024-12-18T10:37:59.074Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/team-auditing</loc>
    <lastmod>2024-12-18T09:44:41.54Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/notification-mapping</loc>
    <lastmod>2024-12-18T08:39:46.401Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/webhook-notification-channel</loc>
    <lastmod>2024-12-18T06:54:00.301Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/notification-history</loc>
    <lastmod>2024-12-18T06:52:24.497Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/smtp-email-notification-channel</loc>
    <lastmod>2024-12-18T06:51:22.459Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/microsoft-teams-notification-channel</loc>
    <lastmod>2024-12-18T06:50:26.675Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/slack-notification-channel</loc>
    <lastmod>2024-12-18T06:49:44.949Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-a-new-ticket-deflector</loc>
    <lastmod>2024-12-16T11:41:41.861Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/microsoft-teams</loc>
    <lastmod>2024-12-13T13:07:26.064Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/accessing-the-ticket-deflectors</loc>
    <lastmod>2024-12-13T09:29:41.073Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/smart-bar</loc>
    <lastmod>2024-12-13T09:28:31.62Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/fullstory</loc>
    <lastmod>2024-12-13T07:38:10.971Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/amplitude</loc>
    <lastmod>2024-12-13T07:30:58.876Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/hotjar</loc>
    <lastmod>2024-12-13T07:18:41.052Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/segment-integration</loc>
    <lastmod>2024-12-13T07:13:21.1Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/heap</loc>
    <lastmod>2024-12-13T06:33:16.807Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-tag-manager</loc>
    <lastmod>2024-12-12T10:36:22.545Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-analytics-new</loc>
    <lastmod>2024-12-12T10:34:20.159Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-analytics-integration</loc>
    <lastmod>2024-12-12T10:31:56.777Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/make-setup-guide</loc>
    <lastmod>2024-12-12T09:04:20.309Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/asana-and-document360-integration</loc>
    <lastmod>2024-12-12T09:03:18.455Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/monday-document360-integration</loc>
    <lastmod>2024-12-12T09:02:24.868Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/typeform-and-document360-integration</loc>
    <lastmod>2024-12-12T07:46:04.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/jira-and-document360-integration</loc>
    <lastmod>2024-12-12T07:45:14.943Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-docs-and-document360-integration</loc>
    <lastmod>2024-12-12T07:41:48.928Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/freshdesk</loc>
    <lastmod>2024-12-11T10:28:49.825Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/freshservice</loc>
    <lastmod>2024-12-11T10:28:49.825Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/livechat</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/olark</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/freshchat</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/crisp</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/chatra</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/door-bell</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/gorgias</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/belco</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/sunshine</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/kommunicate</loc>
    <lastmod>2024-12-11T10:28:35.397Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/updating-article-contributors</loc>
    <lastmod>2024-12-10T13:06:11.267Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/gosquared</loc>
    <lastmod>2024-12-10T10:21:35.591Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/hero-section</loc>
    <lastmod>2024-12-10T09:50:05.552Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/share-articles-via-private-link</loc>
    <lastmod>2024-12-09T07:34:18.297Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/web-content-accessibility-guidelines-wcag</loc>
    <lastmod>2024-12-09T07:34:18.297Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/kb-site-20-migration</loc>
    <lastmod>2024-12-09T07:34:18.297Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-mailchimp</loc>
    <lastmod>2024-12-09T06:09:30.996Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-gmail</loc>
    <lastmod>2024-12-09T05:59:00.814Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/mondaycom-document360</loc>
    <lastmod>2024-12-09T05:52:09.175Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/typeform-document360</loc>
    <lastmod>2024-12-09T05:50:58.709Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/zoho-crm-document360</loc>
    <lastmod>2024-12-06T11:03:38.014Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-with-trello-integration</loc>
    <lastmod>2024-12-06T10:27:05.039Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/confluence-document360</loc>
    <lastmod>2024-12-06T10:24:55.03Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/asana-document360</loc>
    <lastmod>2024-12-06T10:19:40.455Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/github-document360</loc>
    <lastmod>2024-12-06T10:14:51.266Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/url-mapping</loc>
    <lastmod>2024-12-06T09:49:14.617Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-color-of-the-text-in-markdown</loc>
    <lastmod>2024-12-06T09:36:22.971Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-accordion-in-markdown</loc>
    <lastmod>2024-12-06T09:14:34.325Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/header-secondary-navigation</loc>
    <lastmod>2024-12-06T08:05:49.237Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/rss-feeds</loc>
    <lastmod>2024-12-06T07:58:44.337Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/html-block</loc>
    <lastmod>2024-12-06T07:49:50.449Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/knowledge-base-categories</loc>
    <lastmod>2024-12-06T07:48:03.278Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-docs-document360-integration</loc>
    <lastmod>2024-12-05T10:47:19.717Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-with-google-sheets-integration</loc>
    <lastmod>2024-12-05T10:31:57.627Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-drive-document360</loc>
    <lastmod>2024-12-05T10:25:47.229Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/text-columns-block</loc>
    <lastmod>2024-12-04T06:36:00.25Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/feedback-manager-overview</loc>
    <lastmod>2024-12-03T10:54:33.15Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ip-restriction</loc>
    <lastmod>2024-12-03T09:42:04.977Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/plans-and-pricing</loc>
    <lastmod>2024-12-02T14:07:16.73Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/variables</loc>
    <lastmod>2024-12-02T13:40:50.793Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/snippets</loc>
    <lastmod>2024-12-02T13:38:46.385Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/jwt-reader-groups</loc>
    <lastmod>2024-12-02T13:17:08.245Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/configuring-the-article-settings</loc>
    <lastmod>2024-12-02T09:05:49.729Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/content-security-policy</loc>
    <lastmod>2024-12-02T07:39:20.023Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/support-ticket</loc>
    <lastmod>2024-12-01T19:55:18.027Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/schedule-publishing</loc>
    <lastmod>2024-12-01T07:06:47.169Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/getting-started-with-multi-lingual-knowledge-base</loc>
    <lastmod>2024-12-01T07:06:47.169Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/setting-up-a-multi-lingual-knowledge-base</loc>
    <lastmod>2024-11-29T14:33:39.118Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/text-block</loc>
    <lastmod>2024-11-29T09:55:15.212Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tag-groups-overview</loc>
    <lastmod>2024-11-29T09:53:59.283Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/image-and-text</loc>
    <lastmod>2024-11-29T09:50:51.833Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/upgrading-from-trial-version</loc>
    <lastmod>2024-11-29T09:48:44.429Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/changing-payment-information</loc>
    <lastmod>2024-11-29T09:48:44.429Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/downgrading-your-plan</loc>
    <lastmod>2024-11-29T09:48:44.429Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/add-ons</loc>
    <lastmod>2024-11-29T09:48:44.429Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/apache-http-server</loc>
    <lastmod>2024-11-29T06:42:09.563Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/aspnet-core-server</loc>
    <lastmod>2024-11-29T06:42:09.563Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/microsoft-iis-server</loc>
    <lastmod>2024-11-29T06:42:09.563Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/convert-to-sso-account</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/disable-document360-login-page</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/auto-assign-reader-group</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/inviting-or-adding-sso-users</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/mapping-an-existing-sso-configuration-to-other-projects</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/team-account-idle-timeout</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/login-using-sso-knowledge-base-site</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml-sso-with-entra</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/google-sso-saml-configuration</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/idp-initiated-login</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/removing-a-configured-saml-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml-sso-with-okta</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml-sso-with-onelogin</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml-sso-with-adfs</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/saml-sso-with-other-configurations</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/auth0-with-openid-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/removing-a-configured-openid-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/okta-with-openid-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adfs-with-openid-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/other-configurations-with-openid-sso</loc>
    <lastmod>2024-11-29T05:33:27.475Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/ip-restriction-page</loc>
    <lastmod>2024-11-28T16:34:49.721Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/unauthorized-page</loc>
    <lastmod>2024-11-28T16:29:26.41Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/access-denied-page</loc>
    <lastmod>2024-11-28T16:25:01.157Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/error-pages</loc>
    <lastmod>2024-11-28T16:12:33.609Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/manage-api-documentation</loc>
    <lastmod>2024-11-28T15:42:11.982Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/export-documentation-as-zip</loc>
    <lastmod>2024-11-28T15:28:34.812Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-use-swagger</loc>
    <lastmod>2024-11-28T14:57:41.511Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-use-postman</loc>
    <lastmod>2024-11-28T14:54:19.067Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tag-dependency-viewer</loc>
    <lastmod>2024-11-28T14:24:58.545Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-a-new-tag</loc>
    <lastmod>2024-11-28T14:19:35.788Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tag-manager-overview-page</loc>
    <lastmod>2024-11-28T14:15:46.095Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/send-notifications-from-custom-email-domain</loc>
    <lastmod>2024-11-28T07:17:34.513Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/health-check-metrics</loc>
    <lastmod>2024-11-28T06:57:33.74Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/readability-score</loc>
    <lastmod>2024-11-28T06:55:00.789Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/workflow-assignment</loc>
    <lastmod>2024-11-28T06:40:57.808Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/managing-workflow-status</loc>
    <lastmod>2024-11-28T06:30:01.841Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/block-inheritance</loc>
    <lastmod>2024-11-28T05:42:39.512Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/disqus</loc>
    <lastmod>2024-11-27T18:48:49.77Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/all-extensions</loc>
    <lastmod>2024-11-26T12:40:14.211Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/sign-up-to-document-360</loc>
    <lastmod>2024-11-24T16:47:10.992Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/october-2024-10101</loc>
    <lastmod>2024-11-23T11:29:23.098Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/managing-reviewer-accounts</loc>
    <lastmod>2024-11-23T10:26:01.444Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/chrome-extension</loc>
    <lastmod>2024-11-23T10:26:01.444Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/reviewing-an-article-inline-comments</loc>
    <lastmod>2024-11-21T13:49:31.275Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/localization-variables</loc>
    <lastmod>2024-11-20T12:10:25.066Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/drift</loc>
    <lastmod>2024-11-20T09:33:34.54Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/phrase</loc>
    <lastmod>2024-11-20T09:21:41.456Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/zapier-setup-guide</loc>
    <lastmod>2024-11-19T17:02:34.659Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/slack</loc>
    <lastmod>2024-11-19T17:00:48.153Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/salesforce</loc>
    <lastmod>2024-11-19T15:56:59.436Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/cases-page</loc>
    <lastmod>2024-11-19T15:56:36.201Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/crowdin</loc>
    <lastmod>2024-11-19T07:22:09.203Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/dashboard</loc>
    <lastmod>2024-11-18T13:32:49.48Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/seo-descriptions</loc>
    <lastmod>2024-11-18T13:08:45.597Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/full-portal-search</loc>
    <lastmod>2024-11-18T06:49:31.218Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/migrating-documentation-from-another-knowledge-base-platform</loc>
    <lastmod>2024-11-17T22:00:09.108Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/quick-summary-of-the-security-and-infrastructure-aspects</loc>
    <lastmod>2024-11-17T20:57:16.647Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-header</loc>
    <lastmod>2024-11-13T09:25:10.78Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/robotstxt</loc>
    <lastmod>2024-11-05T08:21:07.926Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/conditional-content-blocks</loc>
    <lastmod>2024-11-05T06:47:39.654Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-analytics</loc>
    <lastmod>2024-10-28T05:52:21.933Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/advanced-insertion-rules-in-integration</loc>
    <lastmod>2024-10-25T09:37:49.956Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/fair-usage-policy-for-bot-management</loc>
    <lastmod>2024-10-25T09:05:25.399Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/bot-management</loc>
    <lastmod>2024-10-25T09:04:44.642Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/backup-restore</loc>
    <lastmod>2024-10-24T06:54:38.676Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-configure-a-custom-font-in-the-knowledge-base</loc>
    <lastmod>2024-10-23T05:05:25.79Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/marking-articles-as-deprecated</loc>
    <lastmod>2024-10-17T04:43:48.55Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/custom-footer</loc>
    <lastmod>2024-10-15T09:52:35.804Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/movable-blocks-in-advanced-wysiwyg-editor</loc>
    <lastmod>2024-10-15T05:12:21.47Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/commento</loc>
    <lastmod>2024-10-14T17:41:45.514Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/cookie-consent</loc>
    <lastmod>2024-10-14T06:04:16.791Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/status-indicator</loc>
    <lastmod>2024-10-14T05:45:29.393Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/preferences</loc>
    <lastmod>2024-10-09T10:49:17.594Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/september-2024-1091</loc>
    <lastmod>2024-10-09T08:34:43.3Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/featured-image</loc>
    <lastmod>2024-10-09T07:40:02.992Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/september-2024-1082</loc>
    <lastmod>2024-10-07T06:32:22.97Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-highlighted-search-result-color-in-articles</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-set-the-default-height-and-width-of-the-embedded-pdf</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-make-the-table-border-bold-in-knowledge-base</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-change-the-language-name-text-in-code-blocks</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-center-align-the-heading-in-the-articles</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-set-a-default-featured-image-in-knowledge-base</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-hide-the-category-manager</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/callout-styles</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/body-font-style</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/header-font-style</loc>
    <lastmod>2024-10-05T08:19:28.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-keep-dark-mode-for-the-knowledge-base-site-by-default</loc>
    <lastmod>2024-10-05T08:16:03.792Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-sort-the-contents-of-a-table</loc>
    <lastmod>2024-10-05T08:16:03.792Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-customize-the-hyperlink</loc>
    <lastmod>2024-10-05T08:16:03.792Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base</loc>
    <lastmod>2024-10-05T08:16:03.792Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/table-style</loc>
    <lastmod>2024-10-05T08:16:03.792Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/showhide-table-of-contents-for-an-article</loc>
    <lastmod>2024-10-03T11:42:14.409Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-status</loc>
    <lastmod>2024-09-29T13:31:20.99Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/excluding-articles-from-searches</loc>
    <lastmod>2024-09-24T11:15:17.346Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/x-frame-options</loc>
    <lastmod>2024-09-24T10:14:29.165Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-glossary-term-in-articles</loc>
    <lastmod>2024-09-24T09:27:07.385Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-my-projects</loc>
    <lastmod>2024-09-24T06:19:18.944Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/category-types</loc>
    <lastmod>2024-09-24T06:19:14.576Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2024-1051</loc>
    <lastmod>2024-09-24T06:19:11.413Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-2024-1061</loc>
    <lastmod>2024-09-24T06:19:10.33Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2024-1042</loc>
    <lastmod>2024-09-24T06:19:09.873Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/assigning-drive-folder-for-a-category</loc>
    <lastmod>2024-09-24T06:19:08.386Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document360-support-generating-a-har-file</loc>
    <lastmod>2024-09-24T06:19:08.006Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2024</loc>
    <lastmod>2024-09-24T06:18:35.533Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march-2024</loc>
    <lastmod>2024-09-24T06:18:32.024Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november-2023</loc>
    <lastmod>2024-09-24T06:18:30.187Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-2024</loc>
    <lastmod>2024-09-24T06:18:27.596Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/public-comments</loc>
    <lastmod>2024-09-20T12:48:14.547Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/embedding-a-drawio-diagram</loc>
    <lastmod>2024-09-20T12:47:23.223Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/embedding-google-forms-in-article</loc>
    <lastmod>2024-09-20T12:46:13.421Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/embedding-microsoft-streams-video-in-articles</loc>
    <lastmod>2024-09-20T12:44:36.083Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/code-blocks</loc>
    <lastmod>2024-09-20T12:37:50.898Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/private-notes</loc>
    <lastmod>2024-09-19T04:38:23.779Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/image-formatting-in-the-advanced-wysiwyg-editor</loc>
    <lastmod>2024-09-16T06:05:04.959Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-files-to-articles</loc>
    <lastmod>2024-09-14T05:29:38.375Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/adding-videos-in-articles</loc>
    <lastmod>2024-09-14T05:28:02.703Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july-2</loc>
    <lastmod>2024-09-12T03:33:29.472Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august-3</loc>
    <lastmod>2024-09-12T03:33:17.666Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march-4</loc>
    <lastmod>2024-09-12T03:33:00.865Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-2022-release-notes</loc>
    <lastmod>2024-09-09T08:37:15.445Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2019</loc>
    <lastmod>2024-09-09T08:24:55.47Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february</loc>
    <lastmod>2024-09-09T08:24:12.798Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march</loc>
    <lastmod>2024-09-09T08:24:03.876Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-2019</loc>
    <lastmod>2024-09-09T08:23:52.61Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2019</loc>
    <lastmod>2024-09-09T08:23:17.248Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june</loc>
    <lastmod>2024-09-09T08:22:06.005Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july</loc>
    <lastmod>2024-09-09T08:21:54.335Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august</loc>
    <lastmod>2024-09-09T08:21:40.916Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/september-2019</loc>
    <lastmod>2024-09-09T08:21:15.152Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/october</loc>
    <lastmod>2024-09-09T08:20:36.162Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november</loc>
    <lastmod>2024-09-09T08:19:30.313Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/december</loc>
    <lastmod>2024-09-09T08:19:20.731Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2020</loc>
    <lastmod>2024-09-09T08:19:08.003Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-2020-release-note</loc>
    <lastmod>2024-09-09T08:18:56.835Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march-2020-release-note</loc>
    <lastmod>2024-09-09T08:18:44.769Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-2020-release-note</loc>
    <lastmod>2024-09-09T08:18:32.569Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2020-release-note</loc>
    <lastmod>2024-09-09T08:18:20.94Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-2020-release-note</loc>
    <lastmod>2024-09-09T08:18:05.668Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august-2020-release-note</loc>
    <lastmod>2024-09-09T08:17:53.533Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/october-2020-release-note</loc>
    <lastmod>2024-09-09T08:17:41.962Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november-2020-release-note</loc>
    <lastmod>2024-09-09T08:17:30.465Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2021-release-note</loc>
    <lastmod>2024-09-09T08:17:18.21Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-2021-release-note</loc>
    <lastmod>2024-09-09T08:17:06.688Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march-2021-release-note</loc>
    <lastmod>2024-09-09T08:16:33.863Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-2021-release-note</loc>
    <lastmod>2024-09-09T08:16:24.325Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2021-release-note</loc>
    <lastmod>2024-09-09T08:16:10.053Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-2021-release-note</loc>
    <lastmod>2024-09-09T08:15:58.853Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july-2021-release-note</loc>
    <lastmod>2024-09-09T08:15:46.503Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august-2021-release-notes</loc>
    <lastmod>2024-09-09T08:15:33.418Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/september-2021-release-note</loc>
    <lastmod>2024-09-09T08:15:05.197Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/october-2021-release-note</loc>
    <lastmod>2024-09-09T08:08:01.938Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november-2021-release-note</loc>
    <lastmod>2024-09-09T08:07:49.083Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/december-2021-release-note</loc>
    <lastmod>2024-09-09T08:07:37.686Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2022-release-note</loc>
    <lastmod>2024-09-09T08:06:46.838Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-2022-release-note</loc>
    <lastmod>2024-09-09T08:06:36.091Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/march-2022-release-note</loc>
    <lastmod>2024-09-09T08:06:24.775Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-2022-release-note</loc>
    <lastmod>2024-09-09T08:06:13.281Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-2022-release-note</loc>
    <lastmod>2024-09-09T08:06:00.248Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august-2022-release-note</loc>
    <lastmod>2024-09-09T08:04:41.673Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/september-2022-release-note</loc>
    <lastmod>2024-09-09T08:04:29.193Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/december-2022-release-note</loc>
    <lastmod>2024-09-09T08:03:59.081Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/january-2</loc>
    <lastmod>2024-09-09T08:03:49.039Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/february-3</loc>
    <lastmod>2024-09-09T08:03:37.293Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-3</loc>
    <lastmod>2024-09-09T08:03:17.732Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-3</loc>
    <lastmod>2024-09-09T08:02:57.111Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/localization-getting-started</loc>
    <lastmod>2024-09-09T06:52:32.371Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/attachments</loc>
    <lastmod>2024-09-07T10:43:26.542Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-discussion-feed</loc>
    <lastmod>2024-09-07T10:42:31.468Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/article-full-portal-search</loc>
    <lastmod>2024-09-07T07:57:20.858Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/drive-full-portal-search</loc>
    <lastmod>2024-09-07T07:57:20.858Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/users-groups-full-portal-search</loc>
    <lastmod>2024-09-07T07:57:20.858Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/tags-full-portal-search</loc>
    <lastmod>2024-09-07T07:57:20.858Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/settings-full-portal-search</loc>
    <lastmod>2024-09-07T07:57:20.858Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/vwo</loc>
    <lastmod>2024-09-07T07:56:17.182Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/freshmarketer</loc>
    <lastmod>2024-09-07T07:56:17.182Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/zoho-page-sense</loc>
    <lastmod>2024-09-07T07:56:17.182Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/pdf-design-templates</loc>
    <lastmod>2024-09-07T07:55:50.608Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/glossary-overview-page</loc>
    <lastmod>2024-09-07T07:55:50.608Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/find-and-replace</loc>
    <lastmod>2024-09-07T07:55:50.608Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/faq-knowledge-base-widget</loc>
    <lastmod>2024-09-07T07:44:06.556Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/edit-clone-and-delete</loc>
    <lastmod>2024-09-07T07:44:06.556Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/themes</loc>
    <lastmod>2024-09-07T07:32:39.882Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/document-header</loc>
    <lastmod>2024-09-07T07:27:45.902Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/footer-navigation</loc>
    <lastmod>2024-09-07T07:27:45.902Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/advanced-wysiwyg-editor-basics</loc>
    <lastmod>2024-09-07T07:25:12.085Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-align-the-image-in-markdown</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-shadows-to-an-image-in-markdown</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-add-borders-to-an-image-in-markdown</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/embed-youtube-shorts</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-embed-loom-video</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/how-to-embed-an-excel-file</loc>
    <lastmod>2024-09-07T07:22:11.667Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/august-2024-1081</loc>
    <lastmod>2024-09-03T06:37:26.301Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/october-2022-release-note</loc>
    <lastmod>2024-08-20T11:31:22.247Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/november-2022-release-note</loc>
    <lastmod>2024-08-20T11:31:11.386Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/may-1</loc>
    <lastmod>2024-08-20T11:29:39.947Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/december-2023</loc>
    <lastmod>2024-08-20T11:09:28.826Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july-2024-1071</loc>
    <lastmod>2024-07-29T09:24:46.075Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/july-2024-1062</loc>
    <lastmod>2024-07-20T18:03:33.689Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/april-2024-minor-release</loc>
    <lastmod>2024-07-08T05:19:17.894Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
  <url>
    <loc>https://docs.document360.com/docs/june-2024-1052</loc>
    <lastmod>2024-06-10T11:02:48.447Z</lastmod>
    <changefreq>Weekly</changefreq>
  </url>
</urlset>
</document_content>
</document>

<document index="18">
<source>docs/README.md</source>
<document_content>
# Markdown Summarizer

This tool splits a Markdown file at H2 headings and summarizes each section using an LLM.

## 1. Features

- Splits Markdown documents at H2 headings
- Summarizes each section using LLM
- Preserves key information and technical details
- Outputs a new Markdown file with summaries
- Supports multiple LLM providers with fallback options
- Progress tracking with rich console output
- Resumable processing with intermediate JSON storage

## 2. Usage

The tool provides three separate commands for a flexible workflow:

### 2.1. Load Command

Splits a Markdown file at H2 headings and saves the sections to a JSON file:

```bash
# Basic usage
python summarize.py load input.md

# Specify output JSON file
python summarize.py load input.md --output_file=sections.json

# Enable verbose output
python summarize.py load input.md --verbose
```

### 2.2. Process Command

Processes the JSON file, summarizing each section and saving progress after each section:

```bash
# Basic usage
python summarize.py process sections.json

# Use a specific LLM model
python summarize.py process sections.json --model=gpt-4o-mini

# Enable verbose output
python summarize.py process sections.json --verbose
```

### 2.3. Save Command

Converts the processed JSON file back to a Markdown file with summaries:

```bash
# Basic usage
python summarize.py save sections.json

# Specify output Markdown file
python summarize.py save sections.json --output_file=summary.md

# Enable verbose output
python summarize.py save sections.json --verbose
```

### 2.4. All-in-One Command

Run the entire workflow in one command:

```bash
# Basic usage
python summarize.py all input.md

# Specify output file and model
python summarize.py all input.md --output_file=summary.md --model=gpt-4o-mini

# Enable verbose output
python summarize.py all input.md --verbose
```

### 2.5. Using with uv

The script includes a uv run header, so you can also run it directly with uv:

```bash
uv run summarize.py load input.md
```

## 3. Workflow Benefits

This three-step workflow provides several advantages:

1. **Resumable Processing**: If summarization is interrupted, you can restart from where you left off
2. **Selective Reprocessing**: You can edit the JSON file to clear specific summaries for reprocessing
3. **Progress Tracking**: The JSON file serves as a checkpoint for long-running processes
4. **Flexible Output**: You can modify the JSON before generating the final Markdown

## 4. LLM Support

The script uses the `llm` library to interact with various LLM providers. It will try the following models in order:

1. `gpt-4o-mini` (OpenAI)
2. `openrouter/google/gemini-flash-1.5`
3. `openrouter/openai/gpt-4o-mini`
4. `haiku` (Claude 3 Haiku)

You can specify a different model using the `--model` parameter.

## 5. Requirements

- Python 3.9+
- Dependencies: fire, rich, llm, tenacity, pathos

## 6. Example

If you have a Markdown file like:

```markdown
# My Document

## 7. Introduction
This is an introduction to my document.

## 8. Section 1
This is the first section with important details.

## 9. Section 2
This is the second section with more information.
```

Running the summarizer will create a new file with summaries of each section, preserving the H2 headings. 
</document_content>
</document>

<document index="19">
<source>docs/d363.json</source>
<document_content>
[
  {
    "heading": "What is Document360?",
    "text": "## What is Document360?\n\nHere is an overview and a navigation guide to help you get started with your Document360 experience.\n\n### What is Document360?\n\n**Document360** is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.\n\nWhen using Document360, you'll interact with several key interfaces:\n\n* #### [My Projects](/help/docs/document360-getting-started#my-projects)\n* #### [Knowledge base portal](/help/docs/document360-getting-started#knowledge-base-portal)\n* #### [Knowledge base site](/help/docs/document360-getting-started#knowledge-base-site)\n* #### [Document360 AI - Eddy AI](/help/docs/ai-features)\n* #### [Resources](/help/docs/document360-getting-started#other-resources)\n\n---",
    "summary": "## What is Document360?\n\nDocument360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases.  Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform."
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="20">
<source>docs/d363.md</source>
<document_content>
# Document360

## 1. What is Document360?

Document360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases. Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform.

## 2. Knowledge base portal

Document360 Knowledge Base Portal is a platform to create, manage, and configure knowledge base sites. Features include: creating/managing categories, articles, templates; managing files, teams, readers; configuring branding, domain, security. Portal provides dashboard (project overview, individual contributions), documentation (tree-view structure, bulk actions), API documentation (interactive testing), analytics (user engagement metrics), widgets (in-app search), drive (cloud storage), settings (customization), search (universal across project), and site opening. Unified search and interconnected functions streamline knowledge base maintenance.

## 3. Table of Contents

A comprehensive documentation guide for Document360, covering platform overview, project creation, editor tools (Markdown and WYSIWYG), article management (publishing, SEO, access control), AI features (Eddy AI tools, machine translation, search analytics), security measures (SSO, authentication, CSP), file management, collaboration tools (workflow, templates), branding options, and customizations. Also includes release notes from 2019 to 2025, detailing updates and feature enhancements over time.

## 4. My projects

The project dashboard in Document360 displays all your owned, team-associated, and reader-associated projects upon login. Each project features a visibility tag indicating its status as public, private, or mixed.

## 5. Other Resources

Document360 is a knowledge management platform with a public feedback portal, a feature explorer for trial projects, and in-app support. The knowledge base allows creation of categorized articles, templates, and management of files, teams, and readers. Features include analytics, AI assistance (Eddy AI), and article revision history. Support is available through in-app chat, email, documentation, and tutorials. Scheduled maintenance may impact knowledge base access.

## 6. Document360 AI - Eddy AI

Eddy AI is an AI-powered writing assistant in Document360, offering features like **article writing**, **SEO descriptions**, and recommendations for **tags**, **titles**, and **related articles**. It also enhances the knowledge base site with **assistive search** and an **article summarizer** to improve reader experiences.

## 7. Sign up to Document360

To use Document360, create an account by navigating to the signup page.

## 8. Knowledge base site

The Knowledge base site is a website where end-users access articles and find answers. It offers three access settings: **Public** (open to everyone), **Private** (login-restricted), and **Mixed** (combine public and private access). A screenshot preview of the site is provided.

## 9. Recommended

**Document360 Knowledge Base Portal Requirements:** Supports Windows 7+, OSX Mavericks+, Linux, Android 5+, and iOS 12+ operating systems. Minimum 2-core CPU and 4GB RAM. Supported web browsers include Google Chrome 91+, Firefox 79+, Safari 13.1.2+, and Microsoft Edge 88+. JavaScript, Cookies, Session/Local Storage, IndexedDB, and HTTPS-TLS v1.2+ are browser-level requirements. Internet Explorer is not supported. Contact support@document360.com for issues.

## 10. Troubleshooting

Document360 knowledge base login issues (reCAPTCHA, blocked access, loading) are often resolved by: 1) Switching browsers/networks, clearing browser cache; 2) Checking VPN connection, system time; 3) Providing HAR files/console errors to support@document360.com if problems persist. Document360 is a web application. Incorrect system time can cause callback URL issues.

## 11. System and browser requirements

### 11.1. System Requirements

- **Operating System**: Windows 10 or later, macOS High Sierra or later, Ubuntu 18.04 or later.
- **Processor**: Dual-core processor, 2 GHz or faster.
- **RAM**: Minimum 4 GB, 8 GB recommended.
- **Disk Space**: 500 MB available space.
- **Graphics**: Integrated graphics card (dedicated GPU recommended for intensive tasks).
- **Network**: Stable internet connection with TLS 1.2 or higher; ports 80 and 443 open.
- **Dependencies**: Java Runtime Environment 8 or later, .NET Framework 4.7.2 or later.
- **Security**: HTTPS required, SAML support for single sign-on.

### 11.2. Browser Requirements

- **Supported Browsers**: Chrome 90+, Firefox 88+, Safari 13+, Edge 90+.
- **Plugins/Extensions**: Adobe Acrobat for PDF viewing.
- **Resolution**: Minimum 1280x720 pixels.
- **JavaScript and Cookies**: Enabled for full functionality.
- **Mobile Support**: Responsive design compatible with iOS and Android browsers.

### 11.3. Additional Notes

- **Testing**: Tested on virtual machines and physical hardware; resolve any conflicts with admin privileges.
- **Updates**: Auto-update feature available; ensure network policies allow updates.
- **Accessibility**: Compatible with screen readers; supports keyboard navigation.

## 12. **Signing Up to Document360**

Signing up to Document360 involves navigating to the signup page and providing basic details, then verifying your email with a 6-digit code (note: 5 incorrect attempts lock access). Set a password meeting specific security criteria. Choose your primary use case (e.g., knowledge base, software documentation) and select up to two templates. Personalize your knowledge base with a URL and brand guidelines. Set privacy settings (Private, Public, Mixed). Complete setup to access the portal with pre-loaded content. A free trial is available, with paid plans post-trial. FAQs cover language support, plans, verification issues, migration, and data access post-trial.

## 13. Navigating the 'Your projects' page

Document360's "Your projects" dashboard displays project tiles for owned, team, and reader projects. Users can create new/sandbox projects, view project details (logo, name, access, settings), access documentation/knowledge bases, manage their profile, view release updates, and access help resources (documentation, issue reporting, feature requests, system status). The dashboard streamlines project management.

## 14. Project dashboard

Document360's "Your Projects" serves as a centralized dashboard for users to view and manage projects they are associated with, categorized by roles such as owner, team member, or reader. It offers essential navigational tools. The access tiers are as follows:

| Professional | Business | Enterprise |
| --- | --- | --- |
| Access to "Your Projects" | Enhanced team management features | Advanced features with unlimited project associations |

This dashboard provides a streamlined interface for users to manage their documentation projects efficiently across different plans.

## 15. Accessing profile options

Access profile options (My profile, View Access/Permissions, Change Password) via your profile picture in the top-right corner. My profile lets you edit personal info (image, name, email, author page, bio, portal language, role, content access). View Access/Permissions shows your portal and content role permissions, editable via Team accounts (admin privileges needed). Change password requires entering current password, strong new password (8+ chars, upper/lower/number/special character), and confirming. Password change logs you out. Strong password recommendations detail dos and don'ts of password creation.

## 16. Top-right menu overview

The top-right menu provides quick access to essential portal features, including profile management, access level checks, password changes, updates, and Document360 help resources. A table outlining plan-based access to the My profile page is included but currently empty.

## 17. Release updates

Release notes for Document360 are accessible via a button in the Knowledge base portal, summaries, or through the dedicated Document360 Updates - Changelog page. Full details are available at a link provided.

## 18. Key features in the top-right menu

- **My profile**: View/edit personal info, profile picture, biography, portal/content roles, and permissions.
- **View access and permissions**: Check assigned roles and permissions.
- **Change password**: Update login credentials securely.
- **Release updates**: Stay informed about Document360's latest features and updates.
- **Help menu**: Access documentation, support portal, or contact support directly.

## 19. Help menu

The Help menu offers tools for user assistance, including searching answers, accessing documentation (`https://docs.document360.com/docs`), chatting with support, creating tickets, submitting feature requests, and checking system updates (`https://status.document360.com/`). Authenticated users can access the feedback portal. For language preferences, the portal adheres to user settings over browser defaults. Contact support directly at <support@document360.com>.

## 20. Switching between Document360 projects

Document360 allows easy project switching via a dropdown menu or a dashboard. Projects can be public, private, or mixed; sandbox projects are for testing. Access control manages permissions and roles. Article revisions provide version control. Check project display for current project, and contact an administrator for access requests. Dropdown shows project details (name, access, sandbox). Dashboard displays a list of all associated projects.

### 20.1. Step-by-Step Guide to Creating a Knowledge Base Project in Document360

1. **Access the Dashboard**: Log in to the Document360 portal. If you're already in a project, click the Document360 icon to return to the dashboard. Click **+ Project** to start a new project.

2. **Select a Use Case**: Choose your primary use case (e.g., Knowledge Base Platform, Software Documentation, SOP Documentation, User Manual, API Documentation, or Others) by clicking **Get Started**.

3. **Choose Templates**: Based on your use case, select up to two templates to structure your content (e.g., Getting Started Guides, How-to Guides, FAQs for Knowledge Base; Release Notes, SDD, Software Requirement Documentation for Software/Technical Documentation).

4. **Personalize Your Knowledge Base**:

- **URL**: Enter your preferred website URL or skip for a default domain.
- **Branding**: Customize with a logo, brand colors, and language. These can be auto-populated from your URL or manually edited.

5. **Set Privacy Settings**: Choose access level (Private, Public, or Mixed) to control who can view your content.

6. **Access the Portal**: After setup, access the Document360 Knowledge Base portal with pre-loaded articles tailored to your selected use case and templates, providing a head start for content creation.

## 21. Creating a project in Document360

Document360 project centralizes all documentation (articles, categories, home page, teams, readers, groups, custom settings) for organized, accessible, and scalable knowledge base management.

## 22. Overview tab

The Overview tab provides project-level insights for Owners/Admins, showing contributions, performance, storage details, user data, and issues (e.g., broken links, search failures). Metrics include article counts (created, published, draft), team accounts, readers, drive capacity, broken links, failed searches, and last backup date. Filtering by workspace and language is possible. Clicking "View all" links to relevant settings/analytics pages.

## 23. Multilingual Knowledge bases

Multilingual knowledge bases provide information in multiple languages, improving user experience. Document360 supports internationalization of knowledge base sites.

## 24. Dashboard

The Document360 Dashboard offers insights into your project, team members, and tasks. It features two tabs: **My Contribution** for personal contributions and **Overview** for team-related information. A plans table is present but without detailed specifics.

## 25. My contribution tab

The **My Contribution** tab provides a comprehensive overview of your work in Document360, offering insights into your articles, tasks, and performance metrics. It features:

- **Article summary**: Track created, published, and draft articles, along with performance metrics like views, reads, likes, and dislikes. Filters allow viewing data by date range.
- **Assigned to me**: View articles assigned to you, including workflow status and due dates.
- **Review reminders**: See stale articles needing updates, marked with the date they became stale.
- **Feedback**: Access user feedback assigned to you, with status and assignment dates.
- **Broken links**: Identify articles with broken links, showing workspace, language, and link count.

Filters at the top enable focusing on specific workspaces, languages, or all of them, while date filters refine article statistics.

## 26. Creating a sandbox project

Document360's Sandbox project provides an isolated testing environment for safely experimenting with features, refining workflows, and training teams without affecting live users. It enables testing new features, identifying issues early, and optimizing setups.

## 27. FAQ

- **Languages per Plan:** Professional (2), Business (3), Enterprise (5). Add-ons available for more languages.
- **Knowledge Base:** A self-service platform with articles and information on products/services, managed by teams through categories, branding, and security settings.

## 28. Adding multiple languages to a single workspace

To add multiple languages to a workspace, navigate to **Settings > Knowledge base portal > Localization & workspaces**. Use either Method 1: editing the workspace and selecting languages through the "New language" option, or Method 2: using the "Add new language" icon on the overview page. After adding, translate content manually or via tools like Crowdin. Languages other than English display in native scripts. Manage settings like default language, display name, and direction as needed.

## 29. Quick summary - Security and infrastructure

Document360 data is securely stored in a MongoDB Atlas three-server cluster with encrypted storage and TLS traffic. Daily/weekly/monthly backups, lasting one month, and backups in Azure Blob Storage across multiple locations ensure data integrity. Authenticated API tokens secure data access.  Hosted on Microsoft Azure Cloud, it leverages their security protocols and DDoS mitigations. A strong technical team, coordinated with an offshore team, safeguards the system.

## 30. Document360 security and infrastructure

Document360 prioritizes data security, collaborating with industry leaders like Algolia, MongoDB Atlas, and Microsoft Azure Blob Storage to ensure robust protection. Data is encrypted in transit using TLS standards, and backups are safeguarded with strong security protocols, aligning with the latest SaaS security practices.

## 31. Security information of integrations and partners

- **Algolia (Search):** SOC2/SOC3 compliant, HTTPS/TLS encryption (rated A by Qualys), customer data isolation.
- **MongoDB Atlas (Database):** Network isolation via VPC and firewalls, independent security verification, end-to-end encryption (TLS), encryption at rest.
- **Azure Blob Storage:** Encryption in transit (HTTPS), encryption at rest (storage-side and client-side), advanced threat protection.

To create a Sandbox project in Document360, follow these organized steps:

1. **Access Settings:**

- Navigate to **Settings** > **Knowledge base portal** > **General**.

2. **Create Sandbox:**

- In the Sandbox section, click **Create Sandbox** to open the creation panel.

3. **Configure Project Details:**

- **Project Name:** Enter a name using allowed characters (letters, numbers, hyphens, spaces) and ensure it's ≤30 characters.
- **Language:** Select from the dropdown menu.
- **KB Site 1.0:** Check if needed (optional).

4. **Visibility and Access:**

- Default visibility is Private.
- Click **Next** to proceed.

5. **Invite Team Members:**

- Optionally, add email addresses (comma-separated) and assign roles.

6. **Finalize Creation:**

- Click **Create project** and then **Open Sandbox** to access it.

7. **Post-Creation Notes:**

- A Sandbox badge appears, indicating the environment.
- SSO users cannot create sandboxes; use a non-SSO account.

**Additional Considerations:**

- **Subdomain:** Defaults to include "sandbox"; can be customized via [custom domain mapping](https://docs.document360.com/docs/custom-domain-mapping).
- **Migration:** Not directly supported; manual export/import required.
- **SSO Access:** Non-SSO accounts needed for sandbox access.

By following these steps, you can efficiently set up a Sandbox project for testing, training, and risk-free experimentation.

## 32. Best practices

- Secure API keys by not sharing them publicly and deleting compromised keys immediately.
- Assign only necessary permissions to API keys.
- Use predefined roles to manage team access rights effectively.
- Regularly back up projects automatically and manually to prevent data loss.
- Set document visibility as private when needed to control access.

## 33. Business continuity and disaster recovery

Document360 prioritizes high availability & data safety via geographically replicated databases & multiple service instances. DevOps employs code reviews, QA testing, and version control for security and reliability. Disaster recovery involves daily/weekly/monthly backups, incident management, and Azure CDN for rapid service delivery.

## 34. GDPR compliance

Document360 is fully GDPR compliant, collecting and storing only essential data with explicit customer consent. [Learn more](https://document360.com/gdpr-compliance/).

## 35. X-Frame options

X-Frame options control embedding of the knowledge base in frames/iframes on other domains. Enabling this security feature prevents malicious sites from embedding the knowledge base. Iframe embedding of unauthorized domains will be blocked.

## 36. Help

Document360 offers expert support for security and infrastructure inquiries. The document defines an API as a communication protocol between software applications and mentions X-Frame-Options for security.

## 37. Content security policy

CSP feature restricts external CSS, scripts, and frames to prevent malicious content from external domains. The `Content-Security-Policy` header controls allowed domains for each resource type (e.g., CSS, scripts, frames). Different tiers (Professional, Business, Enterprise) may have varying implementation levels of CSP.

## 38. Enable the content security policy

Enable Content Security Policy (CSP) in your Knowledge Base to prevent XSS attacks. Specify allowed domains for stylesheets, JavaScript, and frames in the portal's security settings. Use correct URL format (e.g., `https://example.com`) and commas to separate entries. Add nonce attributes to custom HTML scripts.

## 39. Access X-Frame Options

Enable X-Frame options to prevent your knowledge base from being embedded in iframes, frames, or other tags on external domains. Navigate to **Settings > Users & Security > Security** and toggle on the **Enable X-Frame options** setting to block unauthorized embedding. This helps protect against clickjacking attacks. If needed, specific domains can be allowed via the content security policy. Not enabling this feature risks embedding on malicious sites, exposing users to security threats like clickjacking.

## 40. Testing your content security policy settings

Document360's CSP is implemented via meta elements, not response headers. To verify CSP, check the page source for `Content-Security-Policy`. Video playback issues often indicate differing CSP settings across articles; ensure the video source is allowed in the correct Frame sources in Document360 settings.

## 41. Bot management

Bots are internet software programs that can be helpful or harmful. The table showing plans with bot management capabilities is empty.

## 42. Troubleshooting

Blocked content on the Knowledge Base site is often due to incorrect CSP configurations. To resolve, update Knowledge Base portal CSP settings to whitelist affected domain URLs. Clear your browser cache, test in different environments/browsers. If the problem continues, contact support providing CSP response header details from browser developer tools' Network tab. Also, ensure application's CSP settings for the knowledge base widget are correct.

## 43. Bot management

Bot management is crucial for online safety & efficiency. It filters malicious bots, allowing legitimate access, preventing server strain, and stopping potential threats. Key focus is identifying and blocking bad bots, while letting good bots operate.

## 44. CSP and Whitelisting guidelines for Document360 widget

This document provides guidelines for implementing Content Security Policy (CSP) and whitelisting for the Document360 widget. Key points include:

- **supported plans**: Only Enterprise plans support widget addition.
- **CSP Directives**: Add trusted sources to `connect-src`, `script-src-elem`, `font-src`, and `style-src-elem` directives for both US and EU users.
- **US Sources**:
- `connect-src`: Includes Algolia, Document360 APIs, and Azure Monitor domains.
- `script-src-elem`: Includes CDN resources and nonce for script security.
- `font-src`: Includes Google Fonts and Document360 CDN.
- `style-src-elem`: Allows inline styles, CDN resources, and Google Fonts.
- **EU Sources**:
- Similar to US sources but with EU-specific Document360 domains.
- **Widget Configuration**:
- Update the widget JavaScript with the correct nonce value and API key.

## 45. Heuristics and Machine Learning Detection

Cloudflare uses heuristics (rules based on patterns) and machine learning to analyze traffic and user-agent data, proactively identifying and blocking malicious bots, thus strengthening security against sophisticated attacks.

## 46. User-Agent monitoring and IP/Port blocking

Cloudflare blocks bots using unusual user agents, unsupported ports, and suspicious IP/ISP traffic patterns. This protects against attacks but may affect automated scripts. Essential security measures to protect platforms.

## 47. Types of bots

Bots are categorized into Good Bots and Bad Bots. Good Bots, such as GoogleBot, BingBot, and GPTBot, are transparent and serve beneficial purposes. Bad Bots, including those used in DDoS attacks, web scraping, and credential stuffing, engage in malicious activities.

Document360 offers enhanced security with built-in bot detection and blocking in Block mode, proactively preventing unwanted traffic to safeguard data integrity.

## 48. Fair usage policy details

Document360's fair usage policy implements rate limiting to control user request volume, preventing bot traffic and DoS attacks while ensuring a positive user experience for all.

## 49. Fair usage policy for bot management

(This section needs the actual policy content to be filled in.) No details provided in the given text about the specific rules for bot management. A general document exists and applies to specific plans (Professional, Business, Enterprise). Lacking details, a concise summary is not possible.

## 50. Rate limiting

Cloudflare enforces rate limits of 1,500 requests per minute or 300 requests per 10 seconds per IP address. This is supplemented by bot detection using heuristics and machine learning.

## 51. Editor choices in Document360

Document360 offers three editors: 1) Markdown for syntax/HTML customization, 2) WYSIWYG for rich text formatting (no custom code), and 3) Advanced WYSIWYG (hybrid of Markdown/WYSIWYG). Editors are crucial for knowledge base article creation and management; supporting various formatting and custom needs.

## 52. Importance of compliance

Adhering to this Fair Usage Policy is crucial for maintaining system health, preventing server overload, ensuring responsive service for all users, and protecting against abuse or unintended high-volume requests. Contact support for higher limits if needed.

## 53. Markdown editor

The Markdown editor facilitates article writing and customization with a split-screen for typing and previewing. It ensures consistent formatting for professional documentation, aiding creation through guided flexibility and supporting image insertion with adjustable sizes using Markdown syntax.

## 54. WYSIWYG editor

A WYSIWYG editor is an HTML-based editor (like WordPress) that displays the article's formatting as you type. Easy for users familiar with HTML editing; offers extensive formatting options for code, media, and text. Recommended for articles with lots of code/media content.

## 55. Purpose of the policy

The policy ensures equitable access by preventing any single entity from monopolizing resources, thereby maintaining consistent performance and availability for all users.

## 56. Switching between Markdown - WYSIWYG - Advanced WYSIWYG editor

Document360 allows switching between Markdown, WYSIWYG, and Advanced WYSIWYG editors at article level. Article-level switching is possible between Advanced WYSIWYG and WYSIWYG(only in Edit mode), but not to Markdown or back. Advanced WYSIWYG is the irreversible choice once set. Project-level default settings are modifiable by project administrators. Unsupported HTML elements are flagged in the Advanced WYSIWYG editor, but preserved for user review. Supported tags for formatted text, lists, forms, links, and media are outlined. Key takeaways: Editor switching, limitations, unsupported HTML handling, and supported tags outlined in the Advanced WYSIWYG.

**Changing the default editor at the project level**

- Navigate to **Settings > Knowledge base portal > General**.
- In the Editor section, select the desired editor (WYSIWYG/Advanced WYSIWYG).
- Click **Save** to apply changes. This setting affects new articles only.

## 57. Advanced WYSIWYG editor

A lightweight, powerful editor combining Markdown syntax support with WYSIWYG-like visual editing. Ideal for text-centric, code-heavy, or media-rich content. Type '/' to access commands. For more details, refer to the [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview) documentation.

## 58. Elements of the editor

- **Fluid Interactions:** Intuitive interface for switching between projects (with icon-based type identification), workspaces, and languages (now in a unified dropdown).
- **Unified Workspace/Language:** Workspace and language selection is merged in a single dropdown, displaying the workspace name and language flag. The dropdown option "Manage workspace & language" links to the settings page for fine-tuning localization.
- **Content Creation:** The "Create" button is accessible from the header, allowing users to create categories, articles, articles from templates, or import existing content.
- **Accessibility:** Visual cues (icons) help users discern different project types.

## 59. Markdown editor

Markdown editor converts shorthand text (Markdown) to HTML, ideal for text-rich documents. Use cases include professional, business, and enterprise settings. Refer to the "Basic Markdown syntax" article for comment details.

## 60. Left navigation bar: Category tree manager

-Left navigation bar includes sections like Dashboard, Documentation, API Documentation, Analytics, Widgets, Drive, and Settings. The Categories & Articles section contains options such as All articles, Workflow assignments, Starred, Recycle bin, Site builder, and Content tools. The Site builder now redirects to Customize site in Settings. Recent updates have improved the usability of the More options menu.

## 61. Article editor’s header section

- Displays the article's URL/slug for easy reference.
- Shows the article's status (New, Draft, Published, Stale) prominently.
- Provides article information, including contributors, stats, and dates; manage contributors with the Manage option.
- Includes a preview feature to view the article's appearance.
- Allows modification of title, slug, and description with an Update button.
- Offers AI Glossary recommendations via a dropdown.
- Enables workflow status updates.
- Contains a More menu (•••) for additional actions like clone, move, hide, delete, SEO, tags, and Related articles.
- Facilitates discussions with a comments section.
- Provides a full-screen view option.

## 62. Related blogs

Markdown is a lightweight text-to-HTML conversion tool used to format content like lists, headers, images, videos, and links.

## 63. Using Markdown in your Knowledge base

- Use Markdown syntax manually or via the toolbar for formatting.
- Ensure correct syntax: no spaces in bold (`**Text**`) and spaces in headings (`### Heading`).
- Refer to [Editor choices](/help/docs/using-the-text-editor) and [Markdown syntax guide](https://www.markdownguide.org/basic-syntax/) for more info.

## 64. Markdown toolbar

A comprehensive overview of the Document360 Markdown editor, detailing its features and functions:

- **Toolbar Sections**:

- Headings (H2, H3, H4)
- Text formatting (bold, italic, strikethrough, blockquote)
- Lists (unordered, ordered)
- Inserts (tables, images, files, links)
- Callouts (info, warning, error)
- Private notes
- LaTeX support
- Find and replace
- Content reuse (variables, snippets)
- Code blocks
- Glossary
- Video embedding
- Scroll functionality

- **Additional Features**:

- Spell checker with browser-native corrections.
- Seamlessly integrates with HTML content.

- **FAQs**:
- Explains Markdown basics, key features, beginner-friendliness, and how to add ASCII/code blocks or HTML content.

Keyboard shortcuts and real-time previews enhance the editing experience, catering to both novices and experienced users.

## 65. Heading levels

Use `##`, `###`, or `####` (with a space between the `#` and the text) to create Heading 2, 3, or 4 respectively. Ensure a blank line before the heading tag.

## 66. Styling text

Markdown supports various text styles: bold (`**text**`), italics (`*text*` or `_text_`), strikethrough (`~~text~~`), highlight (`==text==`), superscript (`text^superscript`), and subscript (`text~subscript`). Avoid spaces between syntax and text for proper formatting.

## 67. Basic Markdown syntax

Document360's Markdown editor enables users to create organized content. Markdown is a lightweight markup language that simplifies text formatting using special characters, requiring no coding knowledge. It supports basic formatting like headings, lists, and links, making it easy to create professional content.

## 68. Markdown Commands

- **Headings (H2-H6)**: Use `##` to `######`. H1 is reserved for titles.
- **Bold**: Use `**text**` (Ctrl+B/Cmd+B).
- **Italics**: Use `*text*` or `_text_` (Ctrl+I/Cmd+I).
- **Strikethrough**: Use `~~text~~`.
- **Numbered List**: Use `1.` for automatic numbering.
- **Bulleted List**: Use `*` or `-`.
- **Link**: Use `[text](URL)` for clickable text.
- **Blockquote**: Use `>` for quotes.
- **Horizontal Line**: Use `***` to separate sections.

## 69. Horizontal line

A horizontal line is created in Markdown using three asterisks (`***`).

## 70. Lists

- **Numbered Lists**: Use `1.`, `2.`, `3.` etc. to create lists that automatically increment.
- **Bulleted Lists**: Use `*`, `-`, or `+` to create bullet points. Examples include `* Item`, `- Item`, and `+ Item`.

## 71. Links and blockquotes

Create links using `[text](URL)` syntax (e.g., [Document360](https://docs.document360.com)) and blockquotes by prefixing text with '>' (e.g., > This will quote the entire line of text).

## 72. Emoji usage

Copy and paste emojis from the table (📝, ✍️, etc.) or use FontAwesome HTML code for icons in documents.

## 73. More elements

A concise summary of additional Markdown features:

- **Image**: `![Alt text](URL "Title")` for adding images.
- **Reference Link**: `[Link text][ref]` paired with `[ref]: URL` for reference-style links.
- **Escaping Characters**: Use `\` to prevent special characters from being processed.
- **YouTube/Vimeo Videos**: Embed using `<iframe>` tags with specific video IDs and dimensions.

## 74. Using Unicode characters in the Markdown editor

Use Unicode characters in Markdown via copy/paste or HTML entity codes (e.g., `&#xXXXX;`). Find characters in online resources like unicode-table.com or unicode.org. Examples include stars, checkmarks, and currency symbols.

## 75. Quick tips for beginners

- Use headings (`##`, `###`) to structure content.
- Highlight key points with **bold** or _italics_.
- Organize info with lists (bullet points `*` or numbered `1.`).
- Include **links** for additional resources.

## 76. WYSIWYG editor

Document360 offers a WYSIWYG editor (What You See Is What You Get) for creating content that displays exactly how it will appear on published articles. Switching between WYSIWYG and Markdown is not possible; conversion to WYSIWYG is permanent.

## 77. WYSIWYG toolbar

The WYSIWYG toolbar provides a range of text editing and formatting options, including media file insertion. It is organized into sections with specific functions, starting with heading options like "Normal."

## 78. Example: Creating a simple article

The example provided demonstrates how to structure an article in Document360 using Markdown. It includes sections on the benefits of using Markdown, such as its ease of learning and clean formatting, along with practical tips like using headings, links, and dividers. The article also references additional resources for learning advanced Markdown syntax, emphasizing structured formatting for enhanced readability and professionalism. By following these guidelines, users can effectively format their articles to convey information clearly and efficiently.

## 79. Heading 2

Rich text editor offering features for text formatting, inserting various media (images, videos, files), advanced features like LaTeX and callouts, content reuse, glossary integration, and additional formatting options for images, videos, PDFs, Word files, and tables. Provides detailed instructions and examples for each supported function. Offers a switch to an advanced WYSIWYG editor, code view, undo/redo, and find/replace capabilities; supports various lists, alignments, and additional visual elements like emoticons.

## 80. Using Advanced WYSIWYG editor

The Advanced WYSIWYG editor utilizes slash commands for quick content insertion (headings, images, links, lists, etc.) and standard Markdown syntax for more complex formatting. Features include: Eddy AI access via slash menu & various format, insert, and content-reuse types. Markdown syntax works only when typed directly; copying and pasting won't work. Refer to help for unsupported syntax or details.

## 81. Advanced WYSIWYG editor

A lightweight, rich-text editor with Markdown support, offering a more visual experience than traditional Markdown editors and more flexibility than standard WYSIWYG editors. Switching between Advanced WYSIWYG and WYSIWYG is allowed only for Draft/New articles; switching from Markdown to Advanced WYSIWYG is irreversible.

## 82. Toolbar

Advanced WYSIWYG editor with categorized toolbar for formatting (text styles, headings, typography, colors, lists) and inserting diverse elements (images, videos, links, files, tables, code, FAQs). Supports inline comments, pasting from Word, LaTeX, and various formatting options. Customizable FAQs, and code view for HTML editing are available.

## 83. When, Where, and Why to Use the WYSIWYG Editor

- **Best for**: Document360 users familiar with HTML editors who prefer a Word-like experience.
- **Ease of use**: Functions like Microsoft Word or Google Docs, allowing direct content pasting without special syntax.
- **Advantages**: Offers a single editing pane in preview mode and supports pasting large tables.

## 84. Advanced WYSIWYG editor basics

This document provides an overview of the Advanced WYSIWYG editor basics, highlighting the supported plans: Professional, Business, and Enterprise. A table structure is included for details, though specific plan features and support levels are not provided.

## 85. Typography

This table defines input syntax for various typographic symbols (em dash, ellipsis, quotes, arrows, copyrights, fractions, mathematical symbols, currency, and more) and how they appear in the Advanced WYSIWYG editor. It details the conversion from input code to the displayed output, essential for accurate formatting.

## 86. Keyboard shortcuts overview

The Advanced WYSIWYG editor offers keyboard shortcuts for efficient editing. To access the overview, navigate to the desired article, click the **More** icon, and select **Keyboard shortcuts**. Key shortcuts include: general commands like Copy (Ctrl+C/+C), Paste (Ctrl+V/+V), Undo (Ctrl+Z/+Z), and Redo (Ctrl+Shift+Z/+Shift+Z); text formatting options such as Bold (Ctrl+B/+B), Italic (Ctrl+I/+I), and Underline (Ctrl+U/+U); paragraph formatting commands including Heading styles (Ctrl+Alt+1-6/+Alt+1-6), Lists (Ctrl+Shift+7-9/+Shift+7-9), and Alignment options (Ctrl+Shift+L, E, R/+Shift+L, E, R); and text selection commands like Complete article (Ctrl+A/+A). Refer to the tables for the full list of Windows and Mac shortcuts.

## 87. Unsupported markdown syntax

The Advanced WYSIWYG editor does not support markdown tables, subscript, or superscript syntax. Users must utilize Format tools to manually apply subscript and superscript styles.

## 88. Conditional content blocks in Advanced WYSIWYG editor

Conditional content blocks in Advanced WYSIWYG editor allow personalized content delivery based on user characteristics (IP, country, device, reader groups, or dates). This feature customizes user experiences, streamlines content management for diverse audiences, and boosts user engagement. Crucially, this function is only available for KB site 2.0 and won't be indexed by search engines.

## 89. Movable blocks in Advanced WYSIWYG editor

Movable blocks enable easy content rearrangement in the Advanced WYSIWYG editor. Users can drag blocks, insert new ones above or below, and delete blocks with subsequent content shifting up. Dividers and FAQ sections are fixed, with the latter treated as a single block. This feature enhances editing efficiency but has specific restrictions.

## 90. Creating a table

Two table creation methods exist: 1) The `/table` command automatically inserts a 3x3 table with a header row; or 2) The Format menu's Insert option lets you choose table size (up to 10x10). Slash command is faster, Format menu offers more control.

## 91. Set up **conditional content blocks**

- Navigate to the desired article in the Advanced WYSIWYG editor.
- Enable conditional content via the settings icon and choose **Show** or **Hide**.
- Use **AND** for requiring all conditions and **OR** for any condition.
- Select parameters like country, date, device, workspace, reader groups, or IP address, set conditions (e.g., equals, not equals, in, not in), and specify values.
- Save conditions for reuse and manage up to 25 conditions per article for efficiency.
- Conditions are version-specific and carry over when moving articles.

## 92. Tables in Advanced WYSIWYG editor

- The Advanced WYSIWYG editor supports table creation across Professional, Business, and Enterprise plans (see table for specific details).
- Tables are essential for organizing and presenting data in a clear and structured manner, enhancing readability and understanding.
- The editor offers comprehensive table formatting tools, including options for adding rows and columns, customizing cell colors, and applying advanced table styles.

## 93. Customizing table appearance

Customize table appearance in the editor by changing background color, border color/style (solid, dashed, dotted), hiding/showing header rows, alternating row colors (banded rows), and using CSS for advanced styles. Copy/delete tables, use slash commands, and paste tables from Microsoft Word/Excel web app (Excel desktop paste isn't supported).

## 94. Formatting table content

- **Insert/delete rows/columns**: Select row/column, use menu to insert above/below or left/right, or delete.
- **Merge cells**: Select multiple cells, click "Merge cells" to combine them.
- **Cell alignment**:
- **Vertical**: Align text to top, middle, or bottom.
- **Horizontal**: Choose left, center, right, or justify (spreads text across cell).
- **Fit to page width**: Select table, click option to adjust table width and content distribution.

## 95. Image formatting in the Advanced WYSIWYG editor

- **Image Formatting:** Offers alignment (left, center, right, inline), captions, alt text, hyperlinking with new tab option, styling (rounded, bordered, shadow).
- **Advanced Editing:** Provides resizing, cropping, flipping, rotating, drawing (lines, shapes), adding icons & text, and filtering (grayscale, blur, etc.).
- **Actions:** Replace, copy, delete image, undo/redo/reset edits.
- **Access:** Click image to open a floating menu with options.
- **Hyperlinking:** Allows image linking, opens in new tab option, edit/unlink options.

## 96. Editing tabs

To edit tabs, use the "Edit" icon. Duplicate: click "Duplicate tab." Rename: click "Change tab name" and type the new name (max 50 chars). Delete: click "Delete tab" (can undo with Ctrl+Z). Cannot delete if only two tabs.

## 97. Customizing tabs

Customize tab appearance by selecting background/border color (preset, HEX, RGB) in the tab content block. Rearrange tab order by dragging/dropping tabs in the "Tabs" section, utilizing the drag icon and noting scrolling/replacement/positioning behaviors (blue line indicators, grey scrolling areas). Background/border changes affect the entire tab content block.

## 98. Tabs in the Advanced WYSIWYG editor

- **Tabs**: Organizes content into separate sections within an article, enhancing readability. Typically supported in **Business** and **Enterprise** plans.

## 99. Viewing tabs in the Knowledge base site

Tabs in the Knowledge Base site are consistent across devices, can be switched without page refresh, and maintain their style and layout. On mobile, tabs function seamlessly. When exported to PDF, tab contents appear sequentially with headings. Key limitations include: no nested tabs, tab headings excluded from the table of contents, disabled page breaks within tabs, and tabs cannot be embedded inside other editor components like tables or accordions.

## 100. Creating tabs

To create tabs, use the Insert option in the editor, which adds a default structure with two tabs. Add more tabs by clicking the + button on the tab bar and enter titles. Each tab supports text, images, tables, links, callouts, code, and other enhancements. Tabs require at least two, with a maximum of ten.

## 101. Categories and subcategories

Document360 categories and subcategories are organizational tools that structure articles into logical groups, improving user navigation and accessibility. Categories represent broad topics, while subcategories provide more specific divisions. They can be customized, including renaming and changing icons, and articles can be assigned to multiple categories. Best practices include clear naming, logical hierarchy, and user-centric organization. Access permissions can be applied, and categories can be reordered. Visibility issues may arise if articles are unpublished or absent; troubleshooting includes checking browser settings and cache. Proper structuring enhances knowledge base usability and user experience.

## 102. Creating a category

Document360 allows category creation via four methods: top-bar "Create", "Flywheel", "More" icon, and within a Folder/Index. Fill in name, nesting level, and type (Folder, Index, Page, or GitHub), then click "Create". Favor a maximum of 3 subcategory levels for optimal navigation. Alternative content finding tools include tags, search, and related articles.

## 103. Changing category icon

To customize category icons in a knowledge base, navigate to the Documentation section, select the desired folder/index category, search for/browse emojis, choose one, and confirm. Emoji selection isn't possible for "Page" type categories.

## 104. Managing categories

- Document360 supports category management across Professional, Business, and Enterprise plans.
- Key features: create, rename, delete, move, clone, reorder, star categories, customize icons.
- Benefits: well-organized, accessible knowledge base for teams and users.

## 105. Hiding and unhiding a category

Document360 allows restricting team access to categories and subcategories within documentation. Hidden items are marked, and users can hide/unhide using the "More" menu in categories/folders/index. Hiding one category hides everything under it. Four methods are described for hiding/unhiding in various contexts (single items, groups, folders, etc.), through the navigation menus and visual aids.

## 106. Renaming a category

Document360 allows renaming categories within the knowledge base via two methods: directly on the category page or via the "More" menu. This action doesn't change the category's URL slug; simply update the displayed name.

## 107. Deleting a category

There are four methods to delete categories in the Knowledge base portal:

1. **Categories & Articles section**: Hover over the category, click **More** > **Delete**, then confirm.
2. **Folder/Index category**: In the desired category, click **More** > **Delete**, then confirm.
3. **Multiple articles/subcategories**: Select checkboxes, click **Delete**, confirm.
4. **Specific article/subcategory**: Hover, click **More** > **Delete**, confirm.

**Note**: Deleting a root category removes all subcategories and articles, stored in the recycle bin for 30 days.

## 108. Cloning a category

Clone categories in Document360 by selecting the "More" then "Clone" option on your target category or item within a category. Choose target workspace/category, optionally update linked files automatically. Security restrictions apply depending on destination. Three methods are available: in the main category list, within a folder/index, or on a specific article/subcategory in a folder/index.

## 109. Category types

Categories and subcategories in Document360 serve as organizational tools to group similar articles, resembling folders for related content. The document references a comparison table for Professional, Business, and Enterprise plans, though specific details in the table are unspecified.

## 110. Starring a category

To star a category for quick access, go to the Documentation section, select the category, and click the Star icon. You can also star subcategories and articles. To unstar, either click the Star icon again or remove them from the Starred section by selecting checkboxes and clicking "Remove from starred." The Starred section acts like a favorites list, enhancing navigation efficiency.

## 111. Moving a category

You can move a category or subcategory across workspaces using 5 methods:

1. **Drag and Drop**: Drag the category within the same workspace.
2. **More Icon in Categories & Articles**: Use the More icon to access the Move option and select a destination.
3. **More Icon in Folder/Index**: Similar to Method 2 but initiated from within a specific folder.
4. **Move Multiple Items**: Select multiple articles/subcategories and use the Move icon.
5. **Move Specific Item**: Use the More icon on a specific item within a folder.

**Key Considerations**: Moving affects all subcategories/articles; cannot move root categories into subcategories; link updating is recommended when moving across workspaces.

## 112. What is a 'Drive folder mapping'?

**Drive folder mapping** automatically places images uploaded by contributors to articles into specific Drive folders based on the article's category and subcategory.

## 113. Types of categories

Three category types for organizing a Document360 knowledge base: **Folder** (container for articles/subcategories, no URL), **Index** (generates a URL, lists articles with details), and **Page** (functions like an article with content creation). Categories can be switched anytime without data loss.

## 114. Associating a Drive folder to a category

To link a Drive folder to a Document360 category, navigate to the category, click "More" (•••), "Set drive folder," select the desired folder, and click "Update." Subcategory mappings take precedence over parent mappings for image uploads. Changes only affect new images.

## 115. Mapping a category with a folder in Drive

Implement a system to map categories to Google Drive folders by setting up categories as metadata or labels, and use the Drive API or scripts (for Business/Enterprise) to automate file organization into corresponding folders. Enterprise versions likely offer enhanced automation and management features.

## 116. Downloading category and article in KB site

This feature allows users to export entire categories and articles into PDFs with customizable templates. It is exclusive to private projects and workspaces. Enable the "Download as PDF" button in Settings > Knowledge base site > Article settings. Users can select templates during export. Note the 500 MB daily limit, with options to purchase additional capacity. Customization in the KB site does not affect PDFs, and visibility settings may restrict export options.

## 117. Creating an article

Document360 users can create articles via four methods: a top-bar "Create" button, "Flywheel" icon, "More" icon, or "Create" button within folders/indexes. Article creation involves navigating to the Documentation section, naming the article, and selecting the category. Plan-based article limits exist (Professional: 5,000; Business: 5,000; Enterprise: 10,000).

## 118. Managing articles

| Feature                  | Professional | Business | Enterprise |
| ------------------------ | ------------ | -------- | ---------- |
| Create/Edit/Publish      | ✅           | ✅       | ✅         |
| Basic Organization       | ✅           | ✅       | ✅         |
| Version Control          | ❌           | ✅       | ✅         |
| Multi-user Collaboration | ❌           | ✅       | ✅         |
| Advanced Access Controls | ❌           | ❌       | ✅         |
| Custom Workflows         | ❌           | ❌       | ✅         |

Document360 offers tiered article management features. Professional includes basic article handling. Business adds version control and collaboration. Enterprise provides advanced access controls and custom workflows for large organizations.

## 119. Locking an article

Article locking prevents simultaneous edits, crucial for team collaboration. Auto-unlocks after 15 minutes of inactivity. Manual unlocking is achievable through the portal's "Lock" icon. Navigation away from the article also automatically unlocks it.

## 120. Creating article templates

Document360 allows users to create, save, and reuse article templates for streamlined content creation. This feature is particularly useful for maintaining consistency, especially for repetitive structures like troubleshooting guides. Articles can be created from templates using three methods: via the Flywheel icon, the More option, or the Create button on the top bar. Each method involves selecting a template and customizing the article name and category. Additional features include automatic population of slugs and accessing template management from the Templates overview page.

## 121. Deleting an article

Five methods for deleting articles in a knowledge base portal are detailed. These include: (1) deleting single articles via the "More" icon in "Categories & Articles"; (2) deleting articles while in editing mode; (3) bulk deleting articles within "Folder/Index" categories; (4) deleting a single article within specific "Folder/Index" categories; and (5) bulk deleting across all articles using the "All articles" section. Each method involves navigating to the correct location, selecting the article(s), and confirming the deletion. Helpful links are provided to related documentation.

## 122. Renaming an article

To rename an article, navigate to the article in the Knowledge base portal's Documentation section, click the article name (or hover, click "More", select "Rename"). Enter the new name and click "Update". A confirmation is required if the article is published.

## 123. Moving an article

Five methods exist to move articles in the knowledge base: 1) drag-and-drop categories; 2) using the "More" menu; 3/4) moving from folders/index; 5) moving from "All articles". Select destination workspace/category and choose whether to update referenced links. Security restrictions apply.

## 124. Editing an article

Editing a published article is crucial for maintaining accurate and up-to-date content. Here's a concise summary:

- **Publishing Changes**: When an article is published, it becomes live on the Knowledge base site, and its status changes to "Published" in the portal.
- **Editing Process**: To edit, select the article, click the **Edit** button (changing its status to "Draft"), make necessary changes, and click **Publish** to update the live version.
- **Markdown View**: For articles created with Markdown, you can view the formatting by selecting **View markdown** from the **More** menu without creating a new version.

This process ensures seamless updates and easy access to content formatting.

## 125. Replicating an article

Replicate articles in a knowledge base to multiple categories. Navigate to the article, select "Replicate," choose the target category & click. Source article edits only; replicated article settings may be restricted due to security.

## 126. Hiding and Unhiding an article

In Document360, users can hide articles to restrict access to team accounts only, indicated by a strikethrough in the Documentation window. This feature is useful for internal content, such as sales team access to pricing details without public visibility.

There are four methods to hide/unhide articles:

1. **Categories & Articles Section**: Hover over an article, click the More icon, and select Hide/Unhide.
2. **Folder/Index Category**: Select multiple articles, click Hide/Unhide.
3. **Specific Article in Folder/Index**: Hover over the article, click More, then Hide/Unhide.
4. **All Articles Section**: Filter if needed, select multiple articles, and click Hide/Show.

Hidden articles are marked with a strikethrough, making them easily identifiable. This feature helps manage content access efficiently for internal and public documentation.

## 127. Word .docx files

Document360 imports .docx files (under 15MB) for direct knowledge base content transfer, streamlining article import.

## 128. Cloning an article

To clone an article in the Knowledge base portal, choose one of two methods:

**Method 1: Via Categories & Articles**

- Navigate to **Documentation**.
- Hover over the article in the left pane to show the **More** icon.
- Click **More** > **Clone**, fill in details (name, workspace, category, auto-update links), and confirm.

**Method 2: Within a Folder/Index Category**

- Navigate to **Documentation** and go to the desired folder/category.
- Hover over the article, click **More** > **Clone**, fill details, and confirm.

**Key Considerations:**

- Articles can be cloned within or across workspaces.
- Security restrictions apply based on destination settings.
- Auto-update links adjust references to the new location.

## 129. Importing Word files

Document360 allows importing Word (.docx) files as either a single article or multiple articles based on headings. Single article imports the whole document. Multiple articles create new articles for each H1 (and optionally H2, etc.) heading within the file. Media and hyperlinks are preserved during the import.

## 130. Troubleshooting

When the errors `documentation.categoriesAndArticles.maxArticlesCountReached` or `documentation.categoriesAndArticles.articleLimitExceedsPerCategory` occur, it indicates that the article limit for a category or project has been exceeded. This typically happens when creating many articles, bulk importing, or adding subcategories. **Steps to resolve:** Check if the issue affects all categories, verify the plan limits (100 articles per category; 5,000 per workspace for Pro/Business, 10,000 for Enterprise). Reduce articles or upgrade the plan if needed. If unresolved, contact Document360 Support.

An image overview of the error message is available in the document.

## 131. Publishing from the editor

Publish articles from Document360 editor by clicking Publish, optionally adding a comment, configuring settings (tags, SEO, related articles, status indicator – manually or with AI), and clicking "Yes." AI-assisted tagging, descriptions, and related articles enhance discoverability. New/updated status indicators can be automatically set. Follow visual instructions through screenshots.

## 132. Publishing articles in bulk

To publish multiple articles in Document360, select them, then click "Publish." Ensure only unpublished articles are chosen. AI features (tags, descriptions, related articles) require minimum article lengths (50/200 words respectively). Hidden or restricted articles won't appear in search. Verify publication by checking for hidden status, restrictions, and workspace settings ("Public").

## 133. Publishing an article

The process of making drafted and reviewed articles available to end-users. Key plans for publishing include:

- **Professional**: Basic customization and SEO support.
- **Business**: Advanced audience targeting and analytics.
- **Enterprise**: Premium features like custom domains and multi-language support.

## 134. Determining editors while importing .docx files

The editor used for importing .docx files is determined by selections in the Knowledge base portal settings. To configure this, navigate to **Settings > Knowledge base portal > General > Editor**, and choose between Markdown, WYSIWYG, or Advanced WYSIWYG editors. Note that Markdown does not support .docx imports.

Best practices include splitting large documents into multiple articles for efficiency and ensuring files are under 15MB. Troubleshooting common errors involves addressing issues like TOC header conflicts, firewall blocks, password-protected files, and style mismatches between Word and Google Docs. Additionally, the "maximum articles" error can be resolved by adjusting heading tags to reduce article count during import.

## 135. Adding inline comments to an article

To add inline comments to a knowledge base article, select text, click the comment icon, type your comment, and click send. Mention collaborators using the @ symbol. Enable comment notifications in the settings to receive updates. Published articles automatically delete unresolved comments.

## 136. Adding images to articles

Adding images to articles improves comprehension, engagement, and user experience, simplifying instructions and clarifying complex information. Methods for image insertion exist in both Markdown and WYSIWYG editors.

## 137. Reviewing an article using Inline comments

Document360's inline comment feature, exclusively available in the Advanced WYSIWYG editor, streamlines article reviews and feedback, fostering efficient collaboration and maintaining documentation quality.

## 138. Inserting an image in the Markdown editor

Insert images in a Markdown editor using 4 methods: 1) Upload from local; 2) URL; 3) File Picker; 4) Drag & Drop. Specify dimensions {height="x" width="y"}. Upload to Document360 Drive recommended for image permanence. Drag-and-drop saves automatically to Drive.

## 139. Inserting an image in the Advanced WYSIWYG editor

Insert images using the Advanced WYSIWYG editor via `/image` command, `Insert` menu (upload from device, Drive, or URL), or copy/paste/drag-and-drop. Uploaded images are saved in Document360 Drive; local changes don't affect inserted images. Refer to "Image formatting" for further details.

## 140. Managing comments

- **Viewing comments**: Click on highlighted areas or the comment icon.

- **Resolving comments**: Only the creator can mark comments as resolved.

- **Editing/deleting**: Only available for the user who added the comment.

- **Replying**: Team accounts can respond in the "Write a reply" field.

- **Filtering**: Options include All, Mentioned me, Open, and Resolved.

- **Limits**: 20 replies per comment, 500 comments per article, and 500 character limit per comment.

## 141. Adding videos in articles

Document360 allows adding videos to articles and categories via the "Insert video" and "Insert file" toolbar options. Videos enhance understanding of complex concepts, instructions, and processes, and increase user engagement.

## 142. Insert a video in Advanced WYSIWYG editor

Insert videos in the Advanced WYSIWYG editor via 3 methods: 1) Embed URL (self-hosted, platform URLs); 2) Embed code; 3) Upload from drive. Use `/video` slash command. Broken link detection available via link analytics. No caption searching.

## 143. **Troubleshooting**

**Broken Image Troubleshooting**: A broken image occurs when the image URL is incorrect, or the image is missing. To fix, retrieve the image URL from the article's code view or by inspecting the element. Check the URL in a browser—if it shows a 404 error, the image is missing. Ensure the image exists at the correct path. Best practice: Upload images to Document360 Drive to prevent broken links. FAQs address image alignment, recommended insertion methods, customization options, accessibility tips for alt text, adding icons via HTML, and storage of pasted images. Direct image uploads to Document360 Drive ensure stability and avoid broken links from external sources.

## 144. Insert a video in the Markdown editor

Two methods allow video insertion in Markdown editor:

1. **URL Insertion**: Supports YouTube, Wistia, and Vimeo links. Paste the URL and add alt text.
2. **Drive File Insertion**: Upload a video file and adjust dimensions as needed.

Both methods offer straightforward integration, with the WYSIWYG editor also supporting similar video additions.

## 145. Adding files to articles

To embed files directly in articles, upload them to the Drive, then use either the Markdown editor's "Insert file" button or the Advanced WYSIWYG editor's `/Insert file` command, drag-and-drop, or file selector. Filtering options exist in Drive. A "Download" option is available after insertion.

## 146. Adding hyperlinks

Document360 allows adding hyperlinks to text, images, or files for better user navigation. Hyperlinks connect to related content, external resources, or internal sections. Replicated articles cannot be linked within other articles.

## 147. Adding files to article

Files can be added to Document360 articles and category pages using two methods: adding files or attaching files, which help clarify and expand content for better understanding.

## 148. Editing or unlinking a hyperlink

To edit/unlink a hyperlink:

- **WYSIWYG:** Click hyperlinked text, select "Edit" to modify or "Unlink" to remove. There's also an "Open Link" and "Copy Link" option.
- **Markdown:** Manual hyperlink editing needed.

## 149. Adding hyperlinks to an article

Add hyperlinks by selecting text, opening the 'Link' panel, specifying the link type (internal to article, internal heading, or external URL). Optionally, open in new tab. Methods differ slightly between Markdown and Advanced WYSIWYG editors, but the core procedure is the same. Utilize the included visuals for step-by-step guidance.

## 150. Attaching files to articles

To attach files to an article, you can either upload a file or provide a URL, and they will appear on the right side above tags and the Table of Contents. Follow these steps: click the More icon, access Attachments, choose your method (URL or upload), arrange files if needed, and save. If files don't appear, ensure Show article files is enabled in settings.

## 151. Bookmark links inside articles/page categories

Create bookmark links to specific headings (H2, H3, H4) within articles/pages using the Advanced WYSIWYG editor's "Link to the current article heading" function. Select desired text, choose a heading from the dropdown, and optionally open in new tab. H3/H4 support depends on settings.

## 152. **Effect of Machine translation on Hyperlinks**

- **Machine translation automatically updates internal hyperlinks** to point to translated versions of linked articles.
- **Consistent article slugs across languages are important** to avoid broken links.
- **Relative and absolute paths are explained and examples are provided**, with emphasis on the role of relative paths for internal links.
- **FAQ covers linking to articles before publishing, linking to headings, and troubleshooting hyperlink issues after heading changes,** providing practical insights and workarounds.

## 153. Adding an Email link to an article

To add an email link, select the desired text. In the Markdown editor, use the format `[link_text](mailto:email_id)`, e.g., `[Email support](mailto:test@gmail.com)`. In the Advanced WYSIWYG editor, highlight the text, press `Ctrl + K` or use `/link`, and type `(mailto:email_id)` in the Link field.

## 154. Code blocks

Document360 uses Prism.js for syntax highlighting. Supported languages include HTML, C#, Java, JavaScript, XML, JSON, CSS, SQL, Python, Markdown, PHP, PowerShell, and Text. Refer to Prism.js documentation for a complete list.

## 155. Effect of changing an article heading on Hyperlinks

Changing an article heading breaks existing hyperlinks as they rely on the heading's text. To prevent this, use the WYSIWYG editor to modify the HTML: add an anchor tag within the heading to separate the hyperlink name from the visible text. This keeps the hyperlink functional even when the heading is updated.

## 156. Creating code blocks in the Markdown editor

Create code blocks using triple backticks (\`\`\`\`\`) before and after the code, or the `Ctrl+Shift+P` keyboard shortcut (or the insert code block icon).

## 157. Creating code blocks in the Advanced WYSIWYG editor

Create code blocks using three methods: 1) Insert > Code Block, 2) Triple backticks \`\`\`\`\`+ Enter, 3)`/code block` Enter. A floating menu allows selecting language (predefined or custom) and copying/deleting blocks. Custom languages are created by inputting a title(WYSIWYG) after the backticks (Markdown). Indentation (4+ spaces) creates code blocks w/o highlighting. Syntax highlighting supported for numerous languages (c, c++, c#, css, html, etc.). Ctrl+Shift+V preserves pasting formatting. FAQs cover supported languages, indentation methods, custom languages, and Markdown editor use.

## 158. Using private notes

Private notes, used for reminders, future updates, and team context in articles, are excluded from downloads via the Knowledge Base's PDF option but are included in browser-generated PDFs. Use the browser's print/save function consistently for inclusion.

## 159. Adding private notes

Document360 allows users to add private notes visible only to specific reader groups or project team members, while remaining hidden from the public. Private notes can be created in both Markdown and Advanced WYSIWYG editors across Professional, Business, and Enterprise plans, enhancing collaborative content management.

## 160. Creating code blocks in the WYSIWYG (HTML) editor

- Navigate to the desired article in the WYSIWYG editor.
- Click the **Code block** icon to open the panel.
- Select the desired programming language from the dropdown menu.
- Enter your code in the provided field.
- Click **Insert** to add the code block.
- Use the **Edit** or **Delete** icons on the code block to modify or remove it.

[![Creating code blocks in WYSIWYG HTML editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)

## 161. Private note in the WYSIWYG editor

To add/manage private notes, navigate to the article in the WYSIWYG editor, click the private note icon, then use the floating menu options (visibility, copy, delete). Image shows the process.

## 162. Embedding Stream videos in articles

Document360 articles can now embed Microsoft SharePoint Stream and recent stream videos, using both Markdown and WYSIWYG editors. No specific professional/business/enterprise implementation details are outlined.

## 163. Private notes in the Markdown editor

To add a private note in the Markdown editor, use the syntax `:::(Internal) (Private notes)\nOnly visible to team accounts\n:::`, which is visible only to team accounts and not in the public version. Notes can be edited by modifying the content and deleted by removing the syntax.

## 164. Embedding SharePoint Stream videos

Embed a SharePoint Stream video by navigating to the video, selecting "Share" then "Embed code." Customize the embed with start time, size, autoplay and responsive options. Crucial: manage access permissions for viewers to view the video.

## 165. Private note in the Advanced WYSIWYG editor

Create private notes in Document360's Advanced WYSIWYG editor via `/Private note` or the Insert menu. Manage visibility (all team, security groups, reader groups) in WYSIWYG/Advanced editors. Notes can be copied, edited, or deleted (except in published articles). Ideal for internal comments, not visible publicly. Access visibility settings, copy, or delete via floating menu.

## 166. Embedding Google forms in articles

Google Forms can be embedded within knowledge base articles using embed HTML code blocks.

## 167. Embedding a Draw.io diagram

To embed a Draw.io diagram in Document360, use the HTML embed link generated within the Diagrams.net application. Ensure the diagram's privacy settings in its storage location (e.g., Google Drive) are set to public. Diagrams.net is a web-based diagramming tool.

## 168. Embedding Google forms

To embed a Google Form in your knowledge base article, navigate to the form, copy the embed HTML code (iframe src), and paste it into your article's Markdown or WYSIWYG editor. This allows readers to interact and submit data after publishing.

## 169. Embedding Microsoft Stream videos in article

You can embed Microsoft Stream videos in articles using Markdown or the Advanced WYSIWYG editor. In Markdown, paste the embed code directly. In WYSIWYG, use Code View or the Insert Video feature with the embed code. Videos can be embedded on external pages using an iframe. The embed code snippet is typically:

`<iframe src="<Stream video URL>" width="640" height="360" frameborder="0" scrolling="no" allowfullscreen title="<Video_file_name>"></iframe>`

## 170. All articles - Overview page

Document360's new "All articles" feature allows for bulk actions on multiple articles and page categories. Actions include publishing, previewing, copying links, hiding, moving, deleting, setting reminders, checking status, tagging, translation, PDF download, deprecating. This streamlines article management, especially for large-scale operations such as product launches.

## 171. Managing multiple articles with the All articles feature

The "All articles" feature in Document360 allows efficient handling of many articles by enabling bulk actions. Users can filter articles by status, date, tags, etc. Bulk operations include publishing, scheduling, previewing, copying links, hiding, moving, deleting, reviewing, setting live statuses, adding tags/labels, machine translation, and exporting as PDFs. Important considerations include article status (draft, published) and exceptions when working with categories that include subcategories or child articles (hide, move, delete options are restricted if subcategories exist).

## 172. Using filters in All articles page

No information is available regarding filters for bulk operations on all articles. The table is empty.

## 173. Embedding a Draw.io diagram

Two methods embed Draw.io diagrams into Document360:

1. **Embed Option**: Generate and copy an image tag from Diagrams.net, paste it into Document360's Markdown or Code view editor. Adjustable dimensions.
2. **Export as Image**: Save diagrams in formats like PNG/SVG, then upload to Document360 via Insert Image.

Choose embed for interactivity; static images for fixed visuals. Consider size and optimization for performance.

## 174. Accessing 'All articles' filters

Filter knowledge base articles by status, review reminders, stars, visibility, read receipts, contributors, categories, dates, tags, and labels. Save custom filters for reuse. Custom filters can be shared with team members. All articles filtering process is described with clear steps and illustrative screenshots.

## 175. Exporting All articles

Export all articles in a knowledge base (.csv) via platform interface by navigating to "All articles," filtering by various criteria (status, category, etc.), and clicking "Export." Exported file contains article title, category, status, date, and URLs. Draft articles cannot be individually exported; export the containing category instead. API endpoint exists for programmatic retrieval of article lists & URLs.

## 176. Article review reminder

Review reminders alert project members when articles need review, ensuring accuracy and timeliness for customers and internal teams. Facilitates the review process.

## 177. Clear filters

Clear filters by clicking "Clear all," using the Filter dropdown, or removing individual filters via the X. Custom filters can be saved, and Read receipts are limited to specific projects.

## 178. Export All articles list

Document360 allows users to export a list of articles and their status as a .csv file, enabling filtering by specific fields like contributor or date. This feature is supported across plans, providing flexibility in managing and analyzing article data.

## 179. FAQ(s)

To set review reminders for articles, go to Documentation > Content tools > Documentation > Article review reminders.

## 180. Article SEO

Search Engine Optimization (SEO) is crucial for knowledge base articles. Adding SEO titles and descriptions improves article visibility and indexing by search engines.

Create review reminders for articles to flag them for immediate review or set a future date, with options for Now, 30 days, 3 months, or Custom. Add a brief reason (up to 100 characters) for context, and apply reminders individually or to multiple articles. A red "Needs review" tag appears, showing the reason on hover. To clear, click the tag and mark as reviewed, removing the tag and updating the status.

## 181. Review reminder

Create and apply review reminders to flag articles for review, setting reminders to trigger immediately or on a specific date. You can apply reminders individually or to multiple articles. A red "Needs review" tag appears next to the article slug, showing the review reason on hover. To clear the reminder, click the tag and select "Mark as reviewed," removing the tag and updating the status.

## 182. Marking multiple articles as Reviewed or Needs review

Two methods are available to mark multiple articles.

1. **All Articles Method**:

- Navigate to Documentation > All articles.
- Use the Filter option to select "Stale" under Review reminder.
- Choose articles, then click "Mark as Reviewed" or set reminder days for "Needs review".

2. **Content Tools Method**:

- Go to Documentation > Content tools > Article review reminders.
- Create a new reminder, specify details, select workspace, language, and desired articles.
- Use filters (category, contributor, etc.) to manage selection efficiently.

Both methods allow efficient management of article review statuses.

## 183. Excluding articles from search engines

Document360 allows users to exclude articles or categories from search engine results, maintaining confidentiality of sensitive or internal content. No plan details are provided in the table.

## 184. Adding SEO title and description

- Navigate to the article in the Knowledge Base portal.
- Click on the More icon and select SEO.
- In the SEO tab, enter a meta title (5-60 characters) and a meta description (150-160 characters).
- Use AI generator if the article has at least 200 words.
- Update meta titles for article name changes.
- Manually update SEO descriptions for each language version.

## 185. Excluding articles from external search engines

To exclude articles from external search engines, navigate to the desired article, click the More icon (•••), select SEO settings, check "Exclude from external search engine results," and save your changes.

## 186. Excluding articles from Search results and Eddy AI assistive search

To exclude articles from search results and Eddy AI assistive search:

- Navigate to the article or category page.
- Use the **More** icon to access **Article settings**.
- Under **Search Visibility**, select desired exclusion checkboxes: **Exclude from knowledge base search** and/or **Exclude from Eddy AI assistive search**.
- Save changes.

Exclusion is available based on pricing plans. Excluded articles remain accessible via URL or navigation menu. Cloned articles retain their parent's search visibility settings.

## 187. Changing the slug of an article

Change an article's URL slug (part of the article's address) in Document360 using two methods: 1) portal settings (SEO tab) or 2) article editor. **Essential:** Create a redirect rule for the new slug to prevent broken links. Special characters (e.g., ä, ö, ü) require proper encoding, copy URLs from the portal, and refer to the support page if issues persist.

## 188. Change the URL of an article

_No summary available for this section._

## 189. Article tags

Article tags are keywords for searching, filtering, sorting, and bulk actions on knowledge base articles and categories by team accounts. Tags apply to articles, categories, and drive files; drive file tags are only visible in the knowledge base. The "Tags" page manages all project tags.

## 190. Adding tags to an article or category page

To add tags: Navigate the portal, click "More" > "Tags," create/choose tags, optionally generate AI-suggested tags (minimum 200 words), save, and publish. Configure article settings; readers can then click tags to find related materials. Tag limits: 30 characters (spaces included), permissible symbols.

## 191. Related articles

Related articles will be added to the bottom of knowledge base articles. These links will only point to published articles within the knowledge base and won't appear in any widgets.

## 192. Adding Related articles

Add related articles to knowledge base articles via the Knowledge Base portal or Publish checklist. Manual selection involves searching and adding articles. Eddy AI can suggest related articles (requires 50+ word article). An automated "Auto relate" option is available. Access restrictions limit which related articles are shown.

## 193. Add article labels

The Knowledge Base portal allows adding article labels to streamline content management across Professional, Business, and Enterprise plans, enabling efficient sorting and filtering of articles, such as quickly locating release notes.

## 194. Adding labels to articles

The Knowledge Base portal offers **five methods** to add labels to articles:

1. **Article Editor**: Navigate to the article, click **More** > **Labels**, enter the label, and click **Add**.
2. **All Articles Section**: Select articles, click **More** > **Add labels**, enter the label, and apply filters to sort.
3. **Workflow Assignments**: Select articles, click **Add labels**, enter the label, and use filters.
4. **Starred Section**: Select articles, click **Add labels**, or hover over an article and use **More** > **Add labels**.
5. **Folder/Index Category**: Navigate to the category, select articles, and add labels via **More** or bulk selection.

**Limits**:

- Up to **10 labels per article** and **10,000 per project**.
- Labels are **internal only**, **not visible on the site**, and cannot be used for searches but can filter articles.

**Key Differences**:

- **Tags** are visible and aid in search/navigation, while **labels** are for internal organization.

## 195. Adding a featured image to an article

To add a featured image to a Knowledge base article, click "More article options," then "Featured image" and "Upload an image." Use high-quality JPEG or PNG images with optimal dimensions (1200x800 - 2000x1200 pixels) for clarity and responsiveness across devices.

## 196. Featured image

In Document360, featured images enhance SEO and improve link previews without appearing on the article itself. Only available in Business and Enterprise plans.

## 197. Adding attachments to an article

To add attachments to a knowledge base article: navigate to the article, open "More article options," select "Attachments," add a URL or upload a file from Drive, select and insert, arrange, and remove attachments as needed. Attachments appear near the Table of Contents and Tags on the knowledge base site.

## 198. Status indicator

A knowledge base site will display a status indicator ("New", "Updated", or "Custom") near article titles. No specific implementations or relationships between status and category (Professional, Business, Enterprise) are detailed.

## 199. Attachments

**Plans supporting for adding attachments**

| Professional | Business | Enterprise |
| --- | --- | --- |
| Basic attachment support (up to 5MB) | Standard attachment support (up to 10MB) | Advanced attachment support (up to 20MB) |

The Professional plan offers basic attachment capabilities with a limit of 5MB. The Business plan provides standard support up to 10MB. The Enterprise plan includes advanced features with a 20MB limit, catering to larger organizations.

## 200. Manually updating the "Status indicator" for an article

To change the status indicator for an article in the knowledge base, navigate to the article, select "More article options," then "Article settings," and change the status. Customize indicator text by editing localization variables, and its color in "Article settings." Specify duration of status display in the article settings.

## 201. Knowledge base site view

A public knowledge base website allows end-users to access articles. Project members manage content (articles, categories, templates, files, users, site settings), and article status is indicated visually (new=green, updated=orange, custom).

## 202. Article status

Article status feature in knowledge base portal allows quick identification of article statuses (Draft, Needs review) to streamline content management. Readers see update/new indicators. Improves efficiency and user clarity.

## 203. Article status in the Knowledge base portal

Knowledge base articles have four statuses: 1) **New**: Draft, accessible only to team members; 2) **Draft**: Published article being updated in a draft, original remains live; 3) **Published**: Publicly accessible; 4) **Needs review**: Flagged for review by a contributor or automated system. Applies to category pages as well.

## 204. Preferences

No preferences are defined for Professional, Business, or Enterprise plans in the provided table.

## 205. Automatic "Status indicator" update

To enable automatic status updates, go to **Settings** > **Knowledge base site** > **Article settings & SEO**. Turn on "Automatically set article status" in the Category manager accordion. Set the number of days the status should appear. For more details, refer to the [Category manager](/help/docs/knowledge-base-category-manager) article.

## 206. Article status of hidden articles

Hidden articles are marked with a strikethrough and inaccessible on the Knowledge base site, only viewable via the portal. They can be hidden in any status (New, Draft, Published, Needs review). Articles flagged as Needs review are marked for review by contributors or automated reminders. Hidden categories also hide articles on the site. Category pages display article statuses, aiding in Knowledge base maintenance.

## 207. Show/hide table of contents for an article

Control table of contents visibility at the knowledge base site or individual article level using settings in the software interface. Site-wide settings control visibility for all articles. Individual article settings allow for hiding the TOC on a per-article basis. Only headings (H2, H3, H4) are included in the TOC, not bold text.

## 208. What is a deprecated article?

**Deprecated articles are outdated.** Marked as obsolete, they may be replaced by newer content due to subject removal, changes, or new concepts. Deprecation tagging now occurs at the article/page category level, signifying the article's status clearly. A custom message explaining the reason and links to updated versions are optional, improving user experience.

## 209. Mark as deprecated

The document content is not provided, but based on the structure, it appears to relate to plans supporting a "mark as deprecated" feature, typically used to indicate plans that are being retired or phased out.

## 210. Updating the preferences for an article

To update an article's preferences, navigate to the desired article, click the More icon (•••), select Preferences in Article settings, adjust the checkboxes for comments, table of contents, and feedback, then save. This process is article-specific and may require additional setup for features like Disqus.

## 211. Marking multiple articles as deprecated

To deprecate multiple knowledge base articles simultaneously, select them, click "Deprecate," add a reason, and click "Apply." Deprecation will be indicated with a visual tag on the articles' knowledge base site view.

## 212. Marking an article as deprecated

To mark an article as deprecated, navigate to it in the Knowledge base portal, access Article settings via the More icon, enable the Deprecated toggle in the dedicated tab, optionally add a formatted reason, and save your changes.

## 213. Schedule publishing

Document360 allows scheduling content publication for specific dates/times, improving content calendar planning, consistency, and reducing last-minute publishing issues.

## 214. Update article contributors

Document360 automatically tracks contributors based on their actions (create, update, publish) and displays them publicly. Readers can view contributors' other articles. The Enterprise plan allows manual addition or removal of contributors, while Professional and Business plans do not support this feature.

## 215. Setting up schedule publishing

To schedule an article or page category's publication in the knowledge base, navigate to the item, select "Publish later," choose date, time, and timezone, optionally add comments, and click "Schedule." This feature works for articles and categories.

## 216. Adding or deleting contributors

To manage contributors in Document360, access the contributor list via the Article information icon, then use the Manage popup to add (via search) or remove contributors using icons. If no contributors are listed, assign one by searching and adding; contributors persist until their team account is deleted.

![add contributor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Add_delete_contributors.gif)

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-No_contributor_error_resolving.gif)

## 217. Editing a schedule publication

To edit a scheduled publication, navigate to the article in the Knowledge Base portal, click the **Scheduled** dropdown, and select **Edit schedule**. Modify the date, time, and timezone in the panel, add comments if needed, and click **Schedule** to save changes. Optionally, publish immediately by selecting **Publish now** from the dropdown.

## 218. Schedule publishing on multiple article

To schedule multiple knowledge base articles for later publishing, select them, choose a date/time/timezone in the "Publish later" panel, and click "Schedule." Scheduled articles display a "Publish later" icon. Instant publishing of a scheduled article is possible. Editing a scheduled article is not allowed; cancelling the schedule is required for edits. Scheduled articles cannot be published via API. Moving scheduled articles to another workspace will clear the schedule.

## 219. Cancel schedule publishing

To cancel scheduled publishing, navigate to the article, click the **Scheduled** dropdown, select **Cancel**, and confirm with **Yes**.

## 220. Discussion feed

A discussion feed feature allows users across different roles to collaborate, converse, and review articles and categories within the platform. The platform supports peer reviews and approvals. Discussion feed functionality is available across different plans (professional, business, enterprise), but the specific details/features for each tier are unknown.

## 221. Delete from feed

Users can delete their own comments from a discussion feed by hovering over the message, clicking the delete icon. Undo is available. Feed disabled after article publication.

## 222. FAQ (s)

Comments on articles in Document360's Knowledge Base are enabled during draft/edit mode, but disabled after publishing. Inline comments are possible in the Advanced WYSIWYG editor. Users can access and manage articles, categories, versions, and languages.

## 223. Article revision

Document360 article revision creates a new unpublished version when edited, preserving the old version in history until published. Team accounts can compare/revert versions but must manually delete older versions. Versioning supports collaboration, audit, and access to accurate information.

To access the discussion feed, go to the desired article, click "Discussion" or "Comments" at the top right, compose your message in the text box, and send. Use @ to tag team members, triggering an email notification with article details.

## 224. Creating an article version

Two methods exist for creating new article versions. **Method 1:** Edit a published article directly. **Method 2:** Fork an older revision to create a new version with that content. Both require publishing the newly created draft.

## 225. Revision history

| **Features**           | Professional | Business | Enterprise |
| ---------------------- | ------------ | -------- | ---------- |
| Version Control        |              |          |            |
| Change Tracking        |              |          |            |
| Collaboration Features |              |          |            |

## 226. Comparing article versions

Document360 allows comparing article versions by highlighting additions, removals, and formatting changes. Users can swap comparison views, view revision history, and revert to previous versions (with caveats about published articles needing deletion). Published article dates are automatically generated, and cannot be changed.

## 227. Article analytics

**Document360's Article Analytics** provides article-specific insights (reads, views, likes, dislikes, link status) across Professional, Business, and Enterprise tiers. Use this data to optimize content strategy and improve user experience.

## 228. Article revision actions

- **Fork**: Create a new version for editing.
- **Delete**: Permanently remove an unpublished version.
- **Open**: Access previous versions to restore or publish.
- **Workflow history**: Tracks stages, assignees, comments, and dates.
- **Publish**: Make any version public from the editor.

Version details include number, contributor, date, and visibility. An image of the workflow history is referenced.

## 229. Security - Article access control

Granular access control to knowledge base articles is offered via team/reader accounts and groups, allowing varying levels of access (Professional, Business, Enterprise) for different users.

## 230. Health check metrics

Health check metrics analyze articles and category pages (English only) to identify readability issues (e.g., long sentences, missing internal links). These metrics help improve content quality and SEO.

## 231. Accessing article analytics

Access article analytics by clicking the **More (•••)** icon in the editor and selecting **Analytics**. Metrics include **Reads** (engagement-based, updated daily), **Views** (unique browser clicks), **Likes**, **Dislikes**, and **Link Status** (working, broken, unknown, ignored). Use the link validation tool to maintain reliable links. Analytics update in real-time, with reads reflecting unique user sessions. Access project-wide insights via **Go to Analytics**. Metrics help refine content engagement strategies.

## 232. SEO metrics

Optimize SEO by keeping article titles (50-70 characters), descriptions (120-160 characters), and a featured image present. One to three external and internal links are ideal; exceeding these numbers warrants review/adjustments. Tool provides categorization (Problems, Suggestions, Good Work) based on metric evaluations, guiding users toward improvements.

## 233. Accessing the Article access control

To manage article access control:

1. Navigate to the desired article.
2. Click **More** > **Security**.
3. Choose between **Knowledge base portal** (for team accounts) or **Knowledge base site** (for readers).

- **Portal**: Manage team access for content updates and settings.
- **Site**: Control viewer access for published articles.

For more details, refer to the linked sections and FAQs for troubleshooting access restoration and category-specific access management.

## 234. Readability score

The Readability score from the Health Check Metrics measures how easy text is to understand, using a scale from 0-100. Higher scores indicate easier readability.

## 235. Checking the readability score

To check article readability in the Knowledge base, open the article, then click "More" -> "Health check metrics". Expand "Readability metrics" to see the score. Scores below 30 are problematic, 30-59 suggest improvement, and above 59 are good. Update the "Health check metrics" panel and click "Check now" for immediate results.

## 236. Accessing health check metrics

To access health check metrics for an article, navigate to the article in the Knowledge Base portal, click **More** (•••), and select **Health Check Metrics**. The panel includes:

- [SEO metrics](/help/docs/health-check-metrics#seo-metrics) and [Readability metrics](/help/docs/health-check-metrics#readability-metrics).
- Metrics are classified into **Problems** (need immediate action), **Suggestions** (require improvement), and **Good Work** (optimal parameters).
- If parameters are updated while the panel is open, click **Check now** for the latest insights.

![Health check metrics panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Health_check_metrics_in_the_Knowledge_base_portal.gif)

## 237. Readability metrics

- **Readability Score (0-100)**: Higher scores mean better readability. Categorized as Problems (below 30), Suggestions (30-59), or Good Work (above 59).
- **Paragraph Length**: Optimal ≤150 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sentence Length**: Recommended ≤20 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sub-heading Distribution**: Absence appears under Suggestions; presence under Good Work. Uses H2, H3, H4 tags in Document360.

> NOTE: Metrics exclude LaTeX and code blocks.

## 238. Accessing the Sitemap in Document360

Document360 allows managing sitemaps for SEO. Find the sitemap URL in _Settings > Knowledge base site > Article settings & SEO > SEO_. Choose update frequency (e.g., Daily). Submit the generated XML sitemap to Google Search Console via their instructions for best results. The sitemap lists URLs and potentially metadata (e.g., last modification times).

## 239. Public article comments

Document360 enables public article comments via the Disqus plugin. Configure Disqus integration for automatic comment activation on all articles. Refer to the Disqus integration help article for details.

## 240. Sitemap

A Sitemap is an XML file detailing a website's structure and page URLs, aiding search engines like Google in crawling and indexing. The table below indicates which plans support sitemap generation:

| Professional | Business  | Enterprise |
| ------------ | --------- | ---------- |
| No support   | Supported | Supported  |

The sitemap feature is only available for public projects.

## 241. Robots.txt

_No data available to generate a `Robots.txt` entity-dense TLDR. Document is a table template and lacks any information needed to produce meaningful details about robots.txt support._

## 242. What is a Robots.txt file?

A Robots.txt file is a website file that instructs web crawlers (e.g., search engine bots) on which parts of your site they are allowed to access and index. It prevents crawlers from accessing specific files or directories, maintaining control over the content visibility in search results. Key: controls web crawler access; prevents indexing; text file; site-specific rules.

## 243. Read receipt

Read receipt feature confirms article acknowledgment, crucial for tracking communication, notably important updates. Available exclusively in KB site 2.0 for private and mixed projects, but not for JWT configured projects.

## 244. Enabling comments on a public article

To enable comments on a public article, ensure Disqus integration is active. Navigate to the article, click the More icon, select More article options, go to the Preferences tab, check the Enable feedback checkbox, and save. Disabling comments requires deselecting this checkbox. Removing Disqus disables all comments and requires reconfiguration to restore.

## 245. Managing Read receipts in the Knowledge base portal

Manage read receipts for your knowledge base articles and categories via bulk actions on all articles, individual article settings, or category rules in the settings. Settings rules have priority. Republishing an article forces re-acknowledgment. Category visibility can be controlled using rules.

## 246. Accessing Robots.txt in Document360

To access and edit Robots.txt in Document360, navigate to **Settings** > **Knowledge base site** > **Article settings & SEO** > **SEO** tab, then click **Edit** under Robots.txt. Use it to set crawl rules, block access to specific pages/folders, or add crawl delays. Examples include blocking admin data, preventing tag pages from indexing, or allowing sitemap access. Follow best practices by including sitemap links and ensuring no duplicate Robots.txt files. For specific needs, refer to FAQs on excluding content from search engines or restricting crawlers like Googlebot or Bingbot.

## 247. Reader acknowledgement in the Knowledge base site

After configuring read receipts, readers see a banner prompting acknowledgement. Scrolling to the bottom, checking a box, and clicking submit acknowledges reading. Successful acknowledgement displays a confirmation message.

## 248. **Read receipt page**

A detailed interface for managing read receipt rules, allowing users to:

- Create new rules for Knowledge base categories
- Rearrange rules (priority-based execution)
- View/edit rule details (name, visibility, categories)
- Modify rule dependencies
- Edit or delete existing rules
- Set visibility (Show/Hide) for each rule
- Organize and manage rules effectively.

## 249. Share articles via private link

Document360 KB Site 2.0 (projects created after June 10th) enables sharing articles with external users via private links. Generate a unique link for any article, even unpublished ones. External users don't need access to the portal. Manage links by deleting or regenerating as needed. Private links expire if the article is deleted and won't work on the article after it's deleted.

## 250. Acknowledgement required in the Knowledge base site

The Knowledge Base site features an Announcement icon on the top-right of the home page, indicating pending acknowledgements. Clicking this icon leads to the **Acknowledgement required** page, where users can filter articles by workspace (Current, All, or Specific) and acknowledgement status (Required or Acknowledged). This allows users to efficiently manage and track article acknowledgements across workspaces.

## 251. Eddy AI customization

Eddy AI customization is available for different user plans (Business/Enterprise). Customization includes response tone/length, and for Enterprise, AI assistant name changes. Legacy users can also customize. Renaming Eddy possible for branding. Certain Document360 users can adjust the Eddy AI term.

## 252. Monitoring Read receipt in Analytics

To monitor read receipts in Analytics:

- Navigate to **Analytics** () > **Articles** and click **View all** in the **Top articles** section.
- The **Read Receipt** field in the **All Articles** page displays acknowledgment details.
- Changes reflect in analytics within 15 minutes.

Key points:

- Maximum 20 read receipt rules can be created.
- Reader acknowledgment rules do not carry over when cloning articles/categories across workspaces.
- Readers must acknowledge republished articles again if acknowledgment is enabled.

## 253. Prerequisites for using machine translation

Machine translation requires credits. Check your balance in Settings > Knowledge base portal > Localization & Workspaces > Machine translation. Purchase more if needed. Credits are consumed at a rate of one per translated character.

## 254. Using machine translation

Two methods for machine translation exist: bulk translation of multiple articles via the "All articles" section (involving WYSIWYG editor switch) or for individual articles from within the editor. Both involve setting the translation status. Retranslating is required if the main language article is updated.

## 255. AI machine translation

Document360's AI machine translation enables seamless localization of content, with benefits including time efficiency, consistency, and scalability. Key points include automatic conversion from Markdown to WYSIWYG and specific behaviors regarding article deletion vs. hiding.

To customize the Eddy AI, go to **Settings () > AI features > Customization**. On the **Customize Eddy AI** page, you can:

1. **Rename the AI**: Enter a desired name (up to 15 characters) in the **AI assistant name** field.
2. **Adjust Response Tone**: Choose from options like Default, Professional, Friendly, Casual, or Straightforward to match your preferred style.
3. **Set Response Length**: Select between Default, Long and detailed, or Short and concise for varying levels of detail.

Once done, click **Save**. Note: The AI name is subject to moderation checks; override if prompted.

**TL;DR**: Personalize Eddy AI by renaming it, adjusting tone, and response length via the customization page.

## 256. Article translation status indicators

Multilingual knowledge base articles have translation status indicators (🌐 for "Needs translation") above formatting tools. Filtering by "Needs translation" or "Translated" in the Knowledge Base portal allows users to locate and update translation status, including machine translation. The main language article doesn't show status.

## 257. Troubleshooting

- **Large articles:** Split articles exceeding 50,000 characters (HTML) into smaller sections for translation.
- **Content updates:** Manually trigger updates in secondary languages using the "Machine translation" feature in the "All articles" section. New content doesn't automatically update.
- **Supported languages:** Machine translation supports many languages (list provided).
- **Character limit:** Be mindful of the 50,000 character limit and potential error messages.
- **Reversibility:** Translating changes the article status, but the original content is not recoverable. Backups are recommended.
- **Costs:** Machine translation is included in the subscription, but excessive character counts may incur additional charges.
- **Language management:** Deleting or hiding articles in one language affects the main and other language versions. Changing/Adding languages isn't automatic, requiring specific actions.

## 258. Understanding machine translation with real-time examples

Document360 offers two machine translation methods. **Scenario 1** allows translating existing English articles to other languages (e.g., German, Spanish) via the "All articles" section, requiring selection, confirmation, and automated translation. **Scenario 2** involves adding a new language (e.g., French) post-content creation; English articles are replicated but must be translated manually. If languages were added before content creation, manual translation from "All articles" is needed. The timing of language addition affects content replication and translation requirements.

To manage machine translation credits effectively, start by navigating to **Settings > Knowledge base portal > Localization & Workspaces > Machine translation** to monitor your project's usage. The dashboard includes Limit (total credits), Usage (consumed credits), Remaining (leftover credits), and Usage meter (percentage used). Note that individual articles must be under 50,000 characters, including formatting; split larger articles if necessary. Subscription plans determine credit limits: Professional (1M), Business (2M), and Enterprise (5M). Additional credits can be purchased in 1M increments for $50.

Machine translation credits are managed via the settings portal, with metrics for limit, usage, remaining, and usage percentage. Articles must be under 50k characters, including formatting. Subscription tiers set limits (Professional: 1M, Business: 2M, Enterprise: 5M), with options to buy additional 1M credits for $50.

## 259. Compliance

Eddy AI complies with GDPR for EU data privacy and SOC 2 Type 2 for security, availability, and confidentiality.

## 260. Subprocessors

Eddy AI utilizes subprocessors including MongoDB (vector database), OpenAI (AI capabilities), Azure (cloud infrastructure), Stripe (payment processing), and Segment (product analytics) to enhance service quality and user experience.

## 261. Eddy AI trust page

Eddy AI's trust page highlights Document360's commitment to transparency, detailing how AI enhances user experience. It provides an overview of Eddy AI's functionality and outlines related security and privacy practices to ensure trust and accountability.

## 262. Data Security and Privacy

Eddy AI encrypts data at rest and in transit using industry-standard protocols to ensure data integrity and confidentiality.

## 263. Data Privacy

Eddy AI uses OpenAI models via API. Data is sent to OpenAI and retained for 30 days for analysis, then deleted. A DPA outlines privacy commitments. Consult OpenAI's and Document360's privacy policies for full details.

## 264. Resources

Document360's comprehensive information security policy framework involves categorized data handling (Confidential, Restricted, Public), strong encryption (AES-256, hash functions), a robust incident response plan including root cause analysis, defined roles and responsibilities for all personnel, secure development practices embedded in the SDLC (secure-by-design), operations security procedures covering change management, capacity planning, and data leakage prevention, access control focused on least privilege, and regulated data retention. Policy enforcement involves documented procedures, audits, and potential disciplinary action for violations. The policies cover all systems and data, whether internal or external.

## 265. AI writer suite

Document360's AI writer suite is a collection of AI-powered tools for content creation within a knowledge base portal. Features include writing assistance, SEO optimization, FAQ generation, and related content recommendations, designed to improve productivity and reader experience.

## 266. Plan availability and usage limits

- **Plan access:** Freemium lacks AI Writer Suite; Professional, Business, & Enterprise have full access.
- **Credit limits (monthly):** Most features: 5,000 credits; SEO/Title generator: 1,000 credits.
- **Unlimited:** Within Professional, Business, & Enterprise plans, some features have unlimited usage.
- **Notifications:** Users get warnings when approaching credit limits.

## 267. AI writer

Document360's AI writing suite, "Eddy AI," is accessible via Ctrl+Space. All features are enabled by default in trial accounts. The document outlines plans for different access levels (professional, business, enterprise) but does not currently detail specific functionalities per level.

## 268. Features in the AI writer suite

- **AI Writer**: Generates outlines, adjusts content length, changes tone/voice, splits sentences, converts speech, improves writing clarity, and converts text into tables.
- **AI FAQ Generator**: Automatically creates FAQs from article content.
- **AI Title Recommender**: Suggests engaging and SEO-friendly titles.
- **AI SEO Description Generator**: Produces search engine-friendly descriptions.
- **AI Tag Recommender**: Provides relevant tags for better content categorization.
- **AI Related Articles Recommender**: Suggests additional relevant content for users.
- **AI Chart Generator**: Creates pie charts, flow charts, and tables from content.
- **AI Alt Text Generator**: Generates alt text for images and videos to enhance accessibility and SEO.

## 269. Multilingual support for Eddy AI writer suite

Eddy AI writer suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Features like search suite are unavailable in unsupported languages such as Chinese.

## 270. Prerequisite

Enable the AI writer feature by toggling it on in the AI features section of your project settings. Ensure browser extensions are disabled if issues arise.

## 271. AI FAQ generator

Document360's AI FAQ Generator, part of the Eddy AI content suite, automatically creates FAQs from article content. Requires purchase of the Eddy AI content suite and enabled AI writer suite.

## 272. AI FAQ generator in Advanced WYSIWYG editor

Advanced WYSIWYG editor now includes AI-powered FAQ generation. Minimum 150 words required. Generated FAQs appear at end of article. Customizable titles, settings, and regenerations are possible. Users can add/edit/delete FAQs, lock specific questions, and manage templates separately.

## 273. Accessing the AI writer actions

The AI writer provides tools to enhance content, including outline creation, improving text, changing tone, converting speech, altering voice, expanding or condensing text, converting to tables, and splitting sentences. These features are accessed by selecting text in the Advanced WYSIWYG editor, clicking the Eddy AI option, and choosing the desired action. The AI writer is limited to 5000 uses per month for most features and requires at least 10 words for generation. It’s available in Professional, Business, and Enterprise plans, with data handled according to OpenAI’s privacy policies. Key features include:

- **Actions**: Outline creation, improve text, change tone, convert speech, change voice, expand/condense text, convert to table, split sentences.
- **Usage**: Select text (min. 10 words), click Eddy AI, and choose action.
- **Availability**: Advanced WYSIWYG editor only.
- **Limits**: 5000 uses/month (most features).
- **Plans**: Professional, Business, Enterprise.
- **Data Security**: Adheres to OpenAI’s policies.

## 274. Using the article title recommender

Document360's article title recommender generates 3 AI-suggested titles. Click "Ask Eddy AI" to use it. One credit is consumed per suggestion attempt (whether saved or not). Minimum 50 preprocessed words are needed. Suggestions are generated using OpenAI, adhering to their privacy policy. Credit limits apply; contact support for more.

## 275. AI title recommender

The Article Title Recommender in Document360 uses NLP to generate optimized titles. It requires content over 50 words and consumes 1 credit for three options. Language support is available; see [here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) for details.

## 276. Setting up the FAQ generator

To customize the FAQ generator, navigate to **Settings > Knowledge base site > Article settings & SEO**, and expand the FAQ accordion. Options include:

- **Expand/Collapse**: Choose to expand first, expand all, or collapse all FAQs.
- **Style**: Select with border for clear separation or without border for a cleaner look.
- **Arrow Position**: Set the expand arrow to the right or left.
- **Icons**: Choose between arrow up/down or plus/minus for expand/collapse actions.

The AI FAQ generator supports English only, generates 5-10 questions, and allows editing. Custom FAQs can be inserted between generated ones, and usage is limited to 5000/month.

## 277. AI SEO description generator

An AI-powered tool designed to automate the creation of meta descriptions for articles and category pages, enhancing SEO optimization and improving click-through rates. It supports Professional, Business, and Enterprise plans, ensuring efficient content alignment with SEO best practices while saving time.

## 278. Using the SEO description generator

Use Eddy AI to generate SEO meta descriptions for articles/categories in the knowledge base portal. Click "More" > "SEO" > "Ask Eddy AI" in the Article settings panel. Review & save the generated meta description. Manual review is recommended for accuracy & relevance.

## 279. Prerequisites

- Ensure sufficient credits for generating SEO descriptions.
- Confirm preprocessed content exceeds 200 words after excluding non-text elements.
- Verify user permissions to access the AI feature.
- Check Eddy AI's supported languages for non-English content.

## 280. How to generate SEO descriptions for multiple articles/category pages?

Document360's SEO description generator lets you batch-generate meta descriptions for articles/categories in English. Filter by various criteria (date, contributor, tags), generate for articles with at least 200 preprocessed words, and use AI to optimize for keywords/user intent in 155-160 characters. Limited by language support (English only) and credits, with a monthly limit (1000 descriptions) per plan. Manual updates and titles possible.

## 281. AI tag recommender

The AI tag recommender suggests relevant tags for article or category content using AI. Requires preprocessed content exceeding 50 words and proper access privileges. Supported languages are available elsewhere.

## 282. Best practices for content management

Establish consistent, specific, and limited tags for your knowledge base articles. Review and update them regularly. Group related content using tags. Utilize the AI tag recommender, which doesn't cost credits. Teams with 'update article settings' or 'manage tags' permissions can create and edit tags. Manual tagging is still an option, but AI recommendations are always active. Keep tags relevant to avoid clutter and optimize content retrieval.

## 283. Accessing the AI related article recommender

Eddy AI recommends related articles to improve knowledge base navigation. Users can (1) add related articles to individual articles via manual selection within the article details, or (2) from the publish checklist. Eddy AI recommends up to 3 related articles; minimum 50-word article length required. Manual additions do not overwrite existing ones. "Auto relate" feature creates mutual relationships between articles.

## 284. Accessing the recommended tags for an article

To access AI-recommended tags for an article via Eddy AI in Document360, navigate to the article, click **More**, select **Tags**, and use the **Ask Eddy AI** button. Articles need at least 200 words; preprocessing removes HTML tags, images, URLs, and code blocks. Tags also appear during publishing in the confirmation prompt. Tagging improves content organization, searchability, and discoverability.

## 285. AI related articles recommender

Document360's AI-powered related articles recommender automatically suggests relevant articles based on content, enhancing user experience. Requires articles over 200 words and proper permissions; [language support details](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) available.

## 286. Creating charts from text

Eddy AI tool in an advanced WYSIWYG editor lets you create charts (pie, flow, table) from highlighted text. Up to 10 regenerations are available. Charts can replace or be inserted below the selected text. Error handling is provided.

## 287. AI Chart generator

The AI Chart generator in Document360 automatically converts text into visual formats like pie charts and flow charts, streamlining the creation of visual aids without the need for third-party tools.

## 288. Creating charts from tables

Highlight table in document, click Eddy AI > Generate, choose chart type (pie, flow, table). Regenerate up to 10 times for better chart. Final chart is saved in Document360 Drive for reuse. Output may be inserted below table or replace the table.

## 289. Prerequisites

- Requires an active subscription to the Eddy AI content suite.
- AI writer suite must be enabled in Document360.
- Text/table must be within the main article body (excludes comments or captions).
- [Supported languages](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) information available.

## 290. Customizing charts

Document360 charts are customizable _after_ insertion via image editing tools (alignment, cropping, resizing, annotations). While not directly editable, you can regenerate, undo, or update chart content.

## 291. AI alt text generator

Document360's Eddy AI generates alt text for images, saving time and boosting accessibility & SEO. Works best with smaller images (under 20MB) in JPEG, JPG, PNG, or WEBP formats. Limited to English and may have issues with certain image types. Free with AI writer enabled, but usage is capped at 5000 alt texts per month.

## 292. File naming convention

All generated charts follow a naming convention where the AI-generated filename is appended with the chart type (e.g., **sales_data_pie_chart.png**). Charts are saved in Document360 Drive under **Images** > **Documentation**.Chart regeneration is limited to 10 times, and only the final chart is saved. Each generation consumes Eddy AI credits.

## 293. Supported chart types

- **Pie charts**: Visualize proportions like task completion percentages. Example: Display team members' contribution percentages.
- **Flow charts**: Map processes or decision sequences. Example: Document approval steps.
- **Tables**: Present structured data for comparison. Example: Compare product features.

## 294. Generating AI alt text while uploading an image in Drive

Generate AI alt text for images uploaded to Drive either during upload (manually or automatically) or after upload by navigating to the image, clicking "File details," "Generate," and "Update". Options for single or multiple images are available.

## 295. AI search suite

An AI search suite (Ask Eddy AI assistive search, API, and article summarizer) improves search and content discovery. No specific implementation plans are provided for professional, business, or enterprise levels.

## 296. Generating AI alt Text in the Advanced WYSIWYG Editor

Generate AI alt text in the Advanced WYSIWYG editor by uploading images via device, Drive, drag-and-drop, or external URL—Eddy AI auto-generates alt text for uploads except Drive, where existing alt text persists (regenerate by clicking the image and using the Alt text icon). For multiple images, regenerate alt text individually. Copy-paste images, click the Alt text icon, and use Generate. Review and edit alt text before inserting. For more details, see [Inserting images guide](https://docs.document360.com/docs/adding-images-to-articles#inserting-an-image-advanced-wysiwyg-editor).

## 297. Features in the AI search suite

The AI search suite offers intelligent search (Ask Eddy), API integration (Ask Eddy AI API), article summarization, and text-to-voice capabilities. Ask Eddy provides AI-assisted querying for quick answers. The API lets developers integrate AI search into their products. Summarization condenses lengthy articles for quick comprehension. Text-to-voice lets users listen to articles.

## 298. Try this feature

- Generate up to **5000 AI alt texts monthly** per project.
- **Enabled by default** if AI writer is active.
- **Review and edit** generated alt texts before accepting.
- **Generation process**:
- Click the **Generate** button when uploading images to Drive.
- Regenerate by deleting existing text and clicking **Generate** again.
- **Credits**:
- **Generate** button is disabled when monthly credits are exhausted.
- Insufficient credits for multiple images disables **Generate all**; select images within credit limit.
- **Formats**: Supported for **JPEG, JPG, PNG, WEBP** images under **20 MB**.
- **Pasted images**: Generate alt text via the floating menu in the Advanced WYSIWYG editor.
- **Counting**: Only images from articles, templates, snippets, and glossary count toward limits.

## 299. Plan availability and usage limits

- **Business Plan:** 2,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search.
- **Enterprise Plan:** 5,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search/API call/summarization.
- Additional credits purchasable. Features help businesses with AI-driven search and summarization tasks.

## 300. Multilingual support for Eddy AI search suite

Eddy AI search suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Workspaces using unsupported languages, like Chinese, will not have access to search suite features.

## 301. Enable Ask Eddy AI for your Knowledge base site

Enable Eddy AI's assistive search on your knowledge base site by navigating to Settings > AI features > Eddy AI and toggling on the AI assistive search. This indexes your knowledge base content, adding the Ask Eddy AI button to your site search and home page. The feature can also be enabled for KB widgets, extensions, and public API endpoints.

## 302. Accessing Ask Eddy AI

Ask Eddy AI, a conversational AI, is exclusive to KB site 2.0. Access it through the search bar. Review generated results, source articles, and continue conversations. Configure Eddy AI localization in KB site 2.0 settings. Filtering workspaces will reset results.

## 303. AI assistive search (Ask Eddy AI)

Ask Eddy AI is an AI-powered search feature available on the home page and Knowledge base site's search bar, providing contextual answers to user queries. It extracts information from textual content, code blocks, tables, content reuse elements, and LaTeX. By default, it retrieves answers from the main workspace, but users can switch workspaces using filters. Updated content takes approximately 15 minutes to reflect in search results. For more information on supported languages, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

## 304. AI dynamic related articles recommendation

Dynamic related articles are automatically recommended in a knowledge base. This feature improves user experience by providing additional relevant information and enhances navigation. It applies to the entire knowledge base.

## 305. Dynamic related articles recommendation

KB site 2.0's Dynamic related articles feature, powered by Eddy AI, automatically adds relevant related articles to all articles. Enabled via Settings > AI features > Eddy AI, this feature can be further customized with manual addition through Eddy AI and automatic reciprocal linking. Users can identify automatically generated recommendations by the icon next to the article name (not displayed for manually added articles). The feature enhances navigation and user experience, requiring no additional user interaction outside of initial enabling to function.

## 306. Integrating Eddy AI in KB Widget with multi-lingual support

Eddy AI can be seamlessly integrated into a Knowledge Base (KB) widget, offering support for multiple languages including English (en-US, en-GB), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), and Danish (da). This ensures users can interact with the AI in their preferred language, enhancing accessibility and user experience.

## 307. Enabling Eddy AI credits notification

To enable Eddy AI credit balance alerts, go to **Settings > Knowledge base portal > Notifications**, switch to the **Notification mapping** tab, and turn on the **Credit usage alert** toggle. Notifications are sent via configured channels when credits drop to 20%, 10%, or expire. Document360 and OpenAI comply with GDPR, and the platform is SOC 2 compliant. For configuration details and purchasing additional credits, refer to the [**Notifications**](/help/docs/notifications) and [**SMTP notification channel**](/help/docs/smtp-email-notification-channel) articles.

## 308. Configuring the Eddy AI Chatbot

Enable AI assistive search in Knowledge Base settings. Create a chatbot widget, customize it (styling, connection, security, content access), regenerate its key and configure JWT authentication. Deploy the widget's script to your Knowledge Base site or a custom site. Secure access via domains. Crucial steps: enabling AI search, widget creation, connection setup, security configuration.

## 309. AI Chatbot

_No summary available for this section._

## 310. Securing Chatbot authentication using JWT

Secure Eddy AI Chatbot access for private/mixed projects using JWT. Configure JWT in Knowledge base widget, obtaining a unique Client ID, Widget ID, and crucial client secret (regenerate and store securely!). Set the correct Token endpoint and Authorize URL. Embed the authorized URL in webpage script. Thoroughly test the implementation.

## 311. Styling the Eddy AI Chatbot

To style the Eddy AI chatbot widget, adjust its icon (upload image or choose from icon set), background color (using color picker or hex/RGB/HSL), position (left/right, spacing), and visibility (hide/show). Changes are saved automatically. The Knowledge Base portal is used for configuration.

## 312. Accessing the Eddy AI Chatbot in the site

To use the Eddy AI Chatbot, click the icon, type your query, and send it. Get answers from the Knowledge base. Hover for options to copy, like, or dislike responses. Clear conversations with the Clear icon. View feedback in Analytics > Eddy AI using the Application filter. Unlike Widgets, which require manual navigation, the chatbot offers direct, conversational answers.

## 313. Styling the Chatbot

Styling the Eddy AI chatbot improves user experience through customization of colors, icons, and brand alignment. It supports multilingual capabilities, with more details available [here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

## 314. Adding external sources

To add external sources to the Knowledge Base AI search, navigate to settings, select "Add new," choose "Webpage" or "Sitemap," input source name and valid URL (HTML5 format with <article> or <main> tags). Limit 50 webpages and 1 sitemap.

## 315. Manage source overview page

Manage indexed external sources in Eddy AI. Control content access (All or selected workspaces, languages, categories), filter sources (type, errors), sync (manually up to 4 times/day), add/edit/delete sources, and handle errors (view, remove, or remove all). AI access can be limited to specific workspaces and content categories. Ensuring sources use Server-Side Rendering (SSR) is important for accurate indexing.

\*\*

## 316. Adding external sources for AI Assistive search

The Enterprise plan supports adding external sources for AI assistive search, enhancing answer accuracy by incorporating external resources. This feature is also available to Legacy users with the AI add-on, aiding support agents in providing efficient and comprehensive solutions.

## 317. Troubleshooting

Eddy AI Assistive search troubleshooting for external sources. Issues arise from unsupported sitemaps (nested, large files, wrong format), forbidden access (by bot detection), or insufficient HTML5 tags on webpages. Solutions include verifying format/size limits, requesting access from website owners, and updating the webpage HTML. Manual syncing is available up to four times daily, with automatic syncing hourly. Sources can be deleted or disabled temporarily. Analytics for external source performance are available.

## 318. Knowledge base site view

Eddy AI displays numbered source URLs in the "Source articles" section, with hover functionality showing title and description, and allows clicking to open sources in a new tab.

## 319. Ask Eddy AI API

Eddy AI Public API allows businesses to deeply integrate AI-powered search into their platforms, customizing the user experience. The API supports various languages and offers efficient extraction of answers from Eddy AI.

## 320. AI article summarizer

The AI article summarizer in Document360 uses NLP to condense lengthy articles into concise summaries, helping users save time. It requires articles to be over 250 words and is available based on subscription plans since May 27, 2023. For language support, refer to the [help docs](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

## 321. Enabling article summarizer

To enable the article summarizer in Document360, navigate to **Settings > AI Features > Eddy AI** and toggle on the **Article summarizer**. The summary will appear at the top of articles. Ensure articles have over 250 preprocessed words (excluding HTML, images, etc.) for the summarizer to work. Data privacy is maintained as per OpenAI's policies, with no use of customer data for training.

## 322. Try the Eddy AI Public API in our API docs

Use the Document360 API docs (link provided) to interact with Eddy AI. Input your API token, a question/query (prompt), the version ID, and language code. Click "Try it & see response" to get results. Requires API token and inputting the prompt, version ID, and language code in the provided fields.

## 323. Using the Public API

Enable Public API in Settings under AI Features; if disabled, expect 500 or 400 errors. Create an API token with POST method access via API Tokens. Each API call consumes a credit. Visit the API hub for structure details.

## 324. Enhancing accessibility with our read out loud feature

Knowledge Base site 2.0 offers a read-out-loud feature for improved accessibility and engagement. Available on all plans except for older pricing plans which need the AI assistive search add-on for Enterprise. Users benefit by listening to content while multitasking or preferring auditory learning.

## 325. Try the Eddy AI Public API in Swagger

Authorize using your API token in Swagger, navigate to `/v2/ProjectVersions/ask-Eddy AI`, enter the required parameters (prompt, version ID, and language code), and click Execute to get the response.

## 326. FAQs

Feature reads glossary, snippets, variables, headings (H2-H4), lists, callouts, private notes, accordions, FAQs, link text, emojis. Skips tables, inline code, code blocks, images, videos, LaTeX, and attached files. Audio playback allows seeking.

## 327. Features in the AI premium suite

AI-automated business glossary generation in the premium suite streamlines glossary creation, maintaining consistent terminology, improving team communication, and ensuring documented accuracy. _Available only in English._

## 328. AI glossary generator

AI Glossary generator is a tool that creates a centralized glossary of business terms to improve understanding, data collection, team collaboration, and communication within an organization. It standardizes definitions across departments.

## 329. Using the read out loud feature

- Begins reading from the article heading and body content, excluding the summary.
- Reads alt text for images and videos; indicates presence if alt text is missing.
- **Listen** button located in the article header, changes to **Listening** during playback and opens the Player window.
- Player controls (bottom right): play, pause, skip 10 seconds forward/back, close.
- Enable or disable the feature via Settings > Knowledge base site > Article settings > Accessibility.
- Disabled by default for users on trial plans.

## 330. AI premium suite

The AI premium suite enhances user experience by automating key business processes and improving workflow efficiency through advanced AI-powered tools. It offers tailored plans for **Professional**, **Business**, and **Enterprise** users, each designed to meet specific needs and optimize productivity.

## 331. FAQs

AI Glossary generator treats singular/plural and synonymous terms as separate. Rescan is manual, recommended every 7 days, updating suggestions and notifying users.

## 332. How to write GenAI friendly content

For optimal GenAI content, use clear, concise headings (keyword-rich), short paragraphs, tables (structured data), code snippets (commented), bullet/numbered lists, descriptive alt text, contextual links (descriptive anchor text), SEO best practices (keyword optimization), consistent business glossary terms, natural language, conversational tone, and human-friendly writing. Test with AI tools and review generated output. Prioritize examples, elaborated text, and frequent FAQs to avoid hallucination. Use Document360 glossary for consistent terminology.

## 333. Enabling the AI Glossary generator

To enable the AI Glossary generator, follow these concise steps:

1. Go to **Settings () > AI Features > Eddy AI**.
2. Locate the **AI Glossary generator** option.
3. Toggle the switch to enable the feature.

## 334. Accessing AI Glossary generator

- Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Glossary**. Click **Take action** on the Eddy AI banner to access the glossary generator.
- The tool shows suggestions only for published articles.
- Use the left navigation bar to view and search glossary terms, and sort them as needed.
- Definitions can be edited (up to 500 characters).
- Use the **Add to** dropdown (default: English) and enable **Update in articles** to apply changes.
- Click **Show Articles** to see where terms will be used and **+ Add to glossary** to save terms.
- Terms can be ignored and moved between lists.
- The generator can be used in the advanced WYSIWYG editor by selecting **Glossary** under **Insert**.
- Keyboard shortcuts: ARROW keys to navigate, ENTER to add terms, BACKSPACE to ignore.

## 335. Tips for enhancing knowledge base articles with Eddy AI

Use Eddy AI to categorize articles, document error messages, create best practices guides, and generate troubleshooting steps for your knowledge base. Focus on specific prompts like "Suggest categories for \[article topic]" or "Generate explanations for \[error message]" to get effective results. This improves knowledge base structure and user support.

## 336. Best practices for prompt engineering with Eddy AI

For optimal Eddy AI results, use precise, step-by-step prompts, compare features, summarize sections, add context to recommendations. Natural language, detailed context, customized personas, and creative prompts unlock personalized insights. Key entities: Eddy AI, prompt engineering, Document360, knowledge base, summaries, comparisons, recommendations, article sections.

## 337. Prompt engineering tips

Document360's Eddy AI employs prompt engineering to enhance AI-driven tools, boosting content creation accuracy, efficiency, and relevance. This guide helps users optimize Eddy AI for tailored content generation.

## 338. Document360 Drive

Document360 Drive is a cloud-based file storage & management system for teams. Features include adding/managing folders and files, viewing recent/starred/deleted files, and accessing an overview of all content. Centralized storage and collaboration-focused.

## 339. Adding folders and files

Document360 Drive allows users to create and manage folders/subfolders mirroring knowledge base structure for better file navigation and accessibility. This improves document organization within the system. Different user plans may have varying Drive functionalities.

## 340. File management

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
| 50 GB        | 100 GB   | 500 GB     |

Document360 Drive is a centralized, cloud-based storage solution with tiered storage limits: Free (1 GB), Professional (50 GB), Business (100 GB), and Enterprise (500 GB).

## 341. Use cases

Eddy AI is a versatile tool designed to enhance content creation and management across multiple industries, offering tailored solutions to improve efficiency and engagement. Key applications include:

- **Learning Management Systems (LMS):** Streamlines course creation, offers adaptive learning paths, and generates engagement tools like quizzes and summaries.
- **Customer Support:** Develops structured knowledge bases with troubleshooting guides and FAQs for effective problem resolution.
- **Compliance Documentation:** Assists in creating and updating compliance checklists and SOPs for regulated industries.
- **Product Development:** Supports tech companies with API documentation, release notes, and user guides.
- **Retail & E-commerce:** Automates product guides, comparisons, and procedure documentation for customer support.

Each application leverages Eddy AI's capabilities to automate, organize, and enhance content, ensuring accuracy and relevance.

## 342. Adding a new folder

Create new Drive folders using either the '+' flywheel icon or a 'New Folder' button. Navigate to the desired location, enter the folder name, and click 'Create'. For easier maintenance, align folder structure with knowledge base categories.

## 343. System folders

Document360 projects include **System folders** like Images, Settings, and Documentation, marked by a shield icon. These folders are essential, restrictions prevent deletion or renaming, but allow actions like adding files, customizing colors, and setting defaults.

## 344. Adding files

Add files to a drive folder using drag-and-drop (into empty folders) or via the "More" menu. Specify file location, optional tags and alt text (for images). Avoid file names with +, %, #, =. Check supported file types.

To add subfolders, choose between two methods in the Drive section:

1. **Using the 'More' option**:

- Click the More icon next to a folder.
- Select "Add folder," name it, and set its location.

2. **Using the '+' option**:

- Hover between folders until the '+' icon appears.
- Click '+,' name the folder, and set its location.

Ensure root folders are expanded to correctly create subfolders. Deleting a root folder also removes its contents.

## 345. Folder actions in Drive

Organize Drive folders and subfolders logically (like your documentation categories) for efficient file storage, maintenance, and retrieval. Document360 allows both individual and bulk folder management. Different service tiers (Professional, Business, Enterprise) are implied but not detailed.

## 346. Setting a folder as Default folder

Set a default folder for new uploads in a system by selecting it from the Drive. This setting is overridden by existing category-to-folder mappings. Default folders are indicated by an edit icon.

## 347. File limits and file type restrictions

- **File Limits**: Each folder can hold up to 5000 files, with subfolders treated as separate folders. Single file uploads are capped at **150MB**, while multiple files cannot exceed a combined size of **160MB**.
- **File Type Restrictions**: Users can restrict allowed file types by navigating to **Settings > Knowledge base portal > General > Drive settings**. They must specify media types using the format `media type/extension` and provide lowercase extensions (e.g., .png, .jpg). Multiple types can be added and changes must be saved.

## 348. Troubleshooting

The Document360 folder has a 5000-file limit, including direct uploads and images from articles or Docx files. To resolve, use another folder, delete unused files, or clear cache. Alt text for images, limited to 140 characters, aids accessibility. File upload errors may stem from unsupported types, so check settings to ensure allowed media types are selected and avoid special characters in filenames.

## 349. Starred folders

To star a folder in the drive, click the star icon next to it. Starred folders appear in a dedicated "Starred" section in the navigation, regardless of their location. Clicking the star again removes it from the starred list.

## 350. Moving a folder

To move a folder within the Drive, excluding System folders, use either the **More option** or **drag and drop**:

- **More option method**: Select folder(s), click More > Move, choose destination via search, and confirm.
- **Drag and drop method**: Drag folder to desired location in left navigation.

## 351. Renaming a folder

To rename a folder in Drive, navigate to the desired folder in the tree-view, click the More icon, select Rename, enter the new name, and confirm. Note: System folders cannot be renamed.

## 352. Change folder color

Change folder color by hovering over the folder, clicking "More", then "Change Color". Choose from the color palette, enter a hex code, or use a color picker. Default is gray.

## 353. Folder breadcrumb

The breadcrumb trail in the Drive window shows the folder hierarchy, allowing navigation. Clicking on a level navigates back. Setting a folder as default multiple times has no effect. Renaming, copying, moving, or reordering folders does not change file URLs, keeping related image links intact. Folders act as categories in Document360 for organizing articles.

## 354. File actions in Drive

File actions in Google Drive are not detailed in this document. Missing data in the provided table prevents any summary of support plans for specific user groups.

## 355. Removing or deleting a folder

To remove or delete a folder, follow these steps:

1. Click the Drive icon in the left sidebar.
2. Use either the More () icon next to the folder or select the folder's checkbox to reveal the Remove option.
3. Click Remove and then confirm by clicking Yes in the Delete prompt.

Key considerations:

- Deleting a folder breaks media reference links and may take up to a minute to clear the CDN cache.
- System folders (marked with a shield icon) cannot be deleted.
- Accidentally deleted folders can be restored from the Recycle bin within 30 days.

## 356. Troubleshooting

Document360 file replacement error occurs when trying to swap files of different types. Verify file types match, clear browser cache, and test in different browsers. Back up files before replacement as they are permanently overwritten. Contact support if problem persists, providing error screenshots, file details, and a HAR file. No file version history is available.

tag, create a markdown heading called "Bulk folder actions," and provide a concise, entity-dense TLDR of the document. Finally, I need to close the

## 357. Performing file actions in Drive

- **Navigate to Drive**: Access Drive from the left menu and select the desired folder. Choose between **List view** or **Grid view** to manage files.

- **File Actions**:

- **Move**: Transfer files between folders without changing their links.
- **Copy**: Duplicate files in another folder.
- **Add Tags/Alt-text**: Enhance file discoverability by adding tags and alt-text for images.
- **View Details**: Access file metadata, dependencies, and actions like move, copy, or download.
- **View Dependencies**: Track how files are linked to articles or other content.
- **Download**: Export single or multiple files as a .zip.
- **Remove**: Delete files, moving them to the Recycle Bin.
- **Replace**: Update a file with a new version without changing its name or URL.

- **Important Notes**:
- Moving files does not break image links.
- Deleted files are moved to the Recycle Bin but cannot be restored if overwritten.
- Use the **Filter** option to identify files with or without dependencies.

## 358. All files overview

The All Files overview in Document360 Drive consolidates all project files into a centralized location, enabling efficient bulk operations like moving, copying, or deleting files across multiple folders and subfolders, thus streamlining file management and saving time.

## 359. Recent, Starred, and Recycle bin files

Document360's Recycle Bin temporarily stores deleted files, folders, categories, and articles. Users can restore deleted content from the Recycle Bin.

## 360. All files overview page

The **All files** page in Document360's Knowledge Base portal displays up to 20 files per page, with options to switch between grid and list views, filter files by criteria like dependencies, upload date, uploader, type, and tags, and view storage usage. Users can perform bulk operations (move, copy, download, remove) on selected files, with pagination for navigating beyond 20 files. Best practices include regular cleanups, using categories for organization, and checking dependencies before deletion.

## 361. Recycle bin operations

Recycle bin allows restoring or permanently deleting Drive files/folders. Restore in bulk or individually. Select items using checkboxes (max 20 with 'Select All'). 'Select all {N} items' for more than 20. Permanently delete individual items or the entire bin. Deletion is irreversible.

## 362. Recently uploaded files and folders

The "Recent" folder in a Drive window automatically displays the latest uploaded files and folders, simplifying access. Navigate to the Drive icon, then the "Recent" folder to view.

## 363. Why use workflow?

Document360's workflow facilitates collaboration, consistency, and accountability among writers, editors, illustrators, and subject matter experts throughout the documentation lifecycle. Its two modules (Workflow designer & Workflow assignments) structure the process.

## 364. Workflow designer

Documentation platform feature enabling project teams to create & manage step-by-step workflows for documents (e.g., Draft, Review, Publish). Admins/owners customize workflows. Access via Documentation > Content tools > Workflow designer. Allows adding, editing, and reordering workflow statuses.

## 365. Starred folder and files

- **Starred Folders/Files**: Mark folders or files as starred for quick access via the **Starred** option in the left navigation pane.
- **Access**: Click the Drive icon, then **Starred** folder to view starred items with a ★ icon.
- **Remove Star**: Click the star icon again to unstar.
- **FAQs**:
- **Recycle Bin**: Items auto-delete after 30 days if unused.
- **File Recovery**: Cannot recover permanently deleted files; use backups if needed.

## 366. Workflow designer

A Document360 workflow designer is a tool for managing knowledge base documentation processes, including creating, editing, reviewing, and publishing articles. It allows the establishment of internal business processes for document management and may vary across plans:

| Professional | Business | Enterprise |
| --- | --- | --- |
| Essential workflow automation | Advanced collaboration features | Custom automation and analytics |

It streamlines documentation workflows and enhances team collaboration.

## 367. Troubleshooting

Article editing blocked due to read-only workflow status. To resolve, access the Knowledge base's Workflow designer, locate the locked (read-only) status, disable the read-only toggle, and update the status. Requires admin permissions or admin intervention if the user lacks the required permissions.

## 368. eBook

This eBook provides a step-by-step guide to establishing a documentation workflow, outlining best practices for high-quality content creation that meets customer expectations.

## 369. Workflow status

- **System Status**: Predefined (e.g., Draft, Published), cannot be deleted or reordered.
- **Custom Status**: User-defined, flexible (create, edit, reorder, delete), can be set as read-only to restrict editing.

## 370. Adding a new status

Step-by-step guide to manage workflow statuses:

1. **Add Status**: Access the workflow designer, choose between two creation options, set name/description, enable/disable read-only, and save.
2. **Edit Status**:Navigate to the status, make necessary changes (name, description, read-only for eligible statuses), and update.
3. **Reorder Status**: Drag and drop custom statuses (system ones cannot be moved).
4. **Delete Status**:Remove permanently with a confirmation (system statuses are non-deletable).

## 371. **eBook**

This eBook guides users through creating quality documentation workflows. It covers procedural steps, best practices for content quality, and ensuring documentation meets customer expectations.

## 372. Managing workflow status

Managing workflow status can be handled through the Documentation editor, where statuses can also be assigned directly to team members. Brief plans for Professional, Business, and Enterprise are noted, with details to be filled in later.

## 373. Workflow assignment

Document360 allows for workflow assignment of document statuses to team members, improving visibility and control over each stage of an article's lifecycle.

## 374. Assign an article to a team member

To assign an article in the Knowledge base portal, navigate to the article, select the desired workflow status, click "Assign owner," choose the team member, and click "Assign." Removing an assignee or setting due dates is also possible. Assigned team members receive notification emails. One team member may be assigned to multiple statuses; only one can be assigned to a single status.

## 375. Workflow status actions

The Workflow status option, located at the top right of the Documentation editor, allows users to manage an article's workflow. Key actions include:

- **Viewing status**: Displays current and past statuses, with strikethrough indicating completion.
- **Setting due dates**: Assign or clear dates via a calendar.
- **Assigning team members**: Search and assign users, with notifications sent if enabled.
- **Activating next status**: Move through workflow stages with optional comments.
- **Viewing history**: Access past statuses and comments for each article revision.

**Notifications**: Ensure team accounts receive updates by enabling workflow events in Settings > Notifications under Documentation editor and category workflow sections.

## 376. eBook

Platform facilitates documentation workflow management, enabling creation of categories, articles, and templates. Users can manage files, teams, readers, branding, domains, and security settings for knowledge base content. Focuses on creating high-quality documentation for customers.

## 377. Templates

Document360 offers pre-designed article templates (professional, business, enterprise) for consistent knowledge base articles (user guides, FAQs, release notes). Users can also create their own custom templates for repeated use.

## 378. Creating a new template

To create a new template in the knowledge base portal, navigate to Content reuse > Templates, click "Create template", name it, select editor type, add description, and save. Edit existing templates by hovering, clicking "Edit", updating name/description (max 250 characters), and saving. Default templates are automatically created based on onboarding.

## 379. Workflow assignments overview

The Workflow assignments overview page provides a centralized view of articles and category pages in a knowledge base project, allowing team accounts to track workflow statuses, due dates, and assigned articles. Accessible via the Knowledge base portal under Documentation > Workflow assignments, it displays the number of articles in each workflow status and enables users to view their assigned articles from the left navigation menu.

To create an article from an existing template, follow these steps:

1. Hover over the desired category in the left navigation and click the () icon.
2. Select "Article from template" and enter the article name.
3. Choose the category location from the dropdown.
4. Select a template from the list, previewing it on the right.
5. Click **Create** to complete the process.
6. If needed, manage templates by clicking the **Manage templates** link.

![Creating a template from existing article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Creating_an_article_from_an_existing_template.gif)

## 380. Saving an existing article as a template

To create a template from an existing article in the documentation editor, click the "..." icon, select "Save as template", then confirm. Templates can be viewed, edited, or deleted via the "Manage templates" page.

## 381. FAQs

Templates can be cloned (within the same language) to create new ones, saving time and effort. Deleting a template doesn't affect existing articles. Saved templates are shareable with team members. Updating a template has no effect on previously created articles; a local copy is utilized. Templates cannot currently be cloned across different languages. To utilize a template in a different language, manually recreate and translate it.

## 382. Variables

Variables in Document360 are reusable elements for frequently changing text content (e.g., contact info, addresses). Updating a variable in one place automatically updates it throughout the document, maintaining consistency and reducing redundant effort. Key benefit: central updates for consistent data across multiple documents.

## 383. Variables overview page

Manage variables in a knowledge base portal. Find, view, edit, and delete variables. See which articles use a variable and how edits propagate. Modify links and their styles. Bulk delete possible. Navigation path detailed.

## 384. Translating variables

Translate variables in documentation to localize content. Create new variables selecting target languages, filling content (default language first), and translating to other languages. Existing variables can be translated, retranslated, or removed by language. Global variables cannot be translated.

## 385. Creating a variable

To create a variable, follow these steps:

- Navigate to **Documentation () > Content tools > Content reuse > Variables**.
- Click **Create variable** and select the desired language (default is Global).
- Enter a **Name** (30 characters max, letters, numbers, hyphens, underscores allowed).
- The **Merge code** will be generated as `{{variable.Name}}`.
- Choose a **Language** (Global or language-specific).
- Add **Content** (100 characters max, with formatting options like bold, italic, links, and more).
- Use **Snippets** for longer text or media.
- Click **Create variable** to save.

![Creating a new variable](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_variables.gif)

## 386. Using variable in an article/category page

Insert variables into your article or category page using two methods:

1. **Markdown Syntax**: Use `{{variable.MergeCodeValue}}` in the Markdown editor, ensuring the exact merge code is typed correctly.
2. **Toolbar Method**:

- For Markdown and WYSIWYG editors, click the Content reuse icon.
- For Advanced WYSIWYG, use Insert > Variables or the slash comando. Select variables from the right pane, which allows previewing by hovering.

Both methods allow variable insertion, with the toolbar method supporting multiple variable selection in non-Advanced editors. The exact merge code is essential for functionality.

built-in variables in Document360 streamline documentation by enabling single-source updates, ensuring consistency across articles. They are customizable, update in real-time, enhance team collaboration, and support translations. Variables improve efficiency and accuracy, making them a best practice for technical documentation.

## 387. Using snippet in the article

Two methods to insert snippets into articles: 1) Use specific merge code in Markdown editor; 2) Select from toolbar (Markdown, WYSIWYG, Advanced WYSIWYG) using search. Method 2 allows for preview & selection from a pane, enabling insertion of local copies (static snippets). Knowledge base portal compatible.

## 388. Snippet

Document360 uses "Snippets" for reusable content blocks (text, images, etc.). Authors/managers store these in a library and insert them easily into articles. Readers see the content seamlessly, unaware it's a reusable element.

## 389. Snippet overview page

Manage reusable content (snippets) in a knowledge base. Find, view, edit, and delete snippets. See articles using a snippet, its language, and last modification date. Edits automatically update using articles. Bulk delete snippets possible.

## 390. FAQs

- **Snippet limit:** 200 per project; additional available as add-on.
- **Snippet renaming:** Not possible after creation.
- **Snippet placement:** Always starts on a new line to facilitate multiple lines of content.

## 391. Translating snippets

Manage snippets in multiple languages to ensure consistency across translations. Global snippets cannot be translated. To create a new snippet: navigate to Snippets, select language, add name/content, translate into other languages, and save. Existing snippets can be translated by selecting the target language and translating or re-translating as needed. The default language is marked as Main, with translations indicated by a green tick.

## 392. Glossary

A glossary improves knowledge base readability and consistency by providing quick definitions for frequently used terms. This reduces confusion, ensures consistent terminology, saves writer time, and enables product-specific education using reusable terms. Glossary terms are viewable within the knowledge base and assistant.

## 393. Creating a snippet

To create a snippet, access the Snippets section via Documentation > Content tools > Content reuse. Click "Create snippets," name your snippet (up to 30 characters with letters, numbers, hyphens, and underscores), set the language (Global by default), choose the WYSIWYG or Markdown editor, add content, and click "Create snippet."

## 394. Quick navigation for glossary management

Manage glossary terms: add/edit/delete single/multiple, import, link overview page (header, footer, menu, homepage). Filter by language. Terms are project-wide, not workspace-specific. Use content tools > content reuse. Check article usage before deleting terms. Bulk import is possible. Terms deleted from articles.

## 395. Managing glossary terms

Access the glossary via **Content tools > Content reuse > Glossary**. Key features: language filtering, creating/editing terms, bulk import/export (CSV), term search with preview, tracking usage across articles, and AI-powered glossary generation with Eddy AI. SEO benefits include improved search relevance through keyword definitions.

## 396. Adding a glossary term

Add glossary terms by navigating to Content tools > Content reuse > Glossary. Create a new term, filling out Name (max 100 chars), Language, Term (max 100 chars), and Content (max 500 chars). Use the "Create Glossary" button. Translate terms by using the Name field for reference. Global terms can't be language-specific. Import options (CSV) are available.

## 397. Troubleshooting

CSV upload issues are often caused by non-English Excel regional settings. Change Excel regional settings to English (United Kingdom), ensure CSV headers match the template, and save/re-upload. Use HTML tags (`<img src="...">`, `<a href="...">`) to embed images and hyperlinks in glossary definitions for proper import and display. Contact support if issues persist.

## 398. Adding glossary terms

In Document360, easily add glossary terms by navigating to the glossary section via the left menu or search. Use an "Add Term" button to create entries, selecting from Professional, Business, or Enterprise categories. Organize terms alphabetically for better accessibility. Ensure clear definitions and consider proofreading. Manage entries with edit/delete options, and use bulk import for efficiency.

## 399. Importing glossary terms

Prepare a CSV file with glossary terms and definitions, using either a downloaded template (with or without sample data) or creating one. Use software like Excel or Google Docs for editing. Navigate to Content tools > Content reuse > Glossary, click Import terms, upload your CSV, and wait for validation. Address any errors (e.g., duplicate terms or long definitions) by downloading the error log, then import valid terms to streamline glossary management and save time.

## 400. Managing glossary terms

(No data provided, unable to generate a concise summary.)

## 401. Editing a Glossary term

Edit glossary terms in Document360 by navigating to Content reuse > Glossary. Hover over a term, click "Edit". Update term/definition, translate to desired languages (via "Translate" or "Translate again"). Remove translations with "Remove language". Save changes with "Update". Global glossaries can be translated.

## 402. Inserting glossary term in an article

- **Glossary terms** enhance reader understanding by providing instant definitions when hovering over them. They are marked with a dotted underline.

- **Markdown Editor**:

- Use the Glossary icon in the toolbar to select and insert terms.
- Alternatively, use Markdown syntax `{{glossary.Term_name}}`, ensuring exact case matching.

- **WYSIWYG Editor**:

- Click the Glossary option in the toolbar to select and insert terms.

- **Advanced WYSIWYG Editor**:

- Access via the Insert menu, select terms, and insert merge codes like `{{glossary.Term_name}}`.
- Preview required to see rendered glossary terms.

- **Key Notes**:
- Terms are case-sensitive and must match exactly.
- Preview in Advanced WYSIWYG to view rendered terms.

## 403. Deleting a Glossary

Delete glossary terms individually (hover/click) or in bulk (select/click). Check for dependencies; manually remove from articles before deleting from glossary to avoid data loss. View references in the glossary before deleting, then open and manually remove the term to prevent content loss in associated articles.

## 404. Translating glossaries

Create and manage glossaries in multiple languages to ensure consistency and localization. Navigate to the glossary section, create a new one, select the language, enter terms and content, translate into other languages, and save. The default language is marked as Main, and completed translations are indicated with a green tick.

## 405. Feedback manager

Document360's Feedback manager is a content tool to track, evaluate, and respond to user feedback on knowledge base articles. It aims to address user concerns and improve content quality. No specific features or functionalities are detailed in the provided text beyond this general purpose.

## 406. Managing the glossary landing page

Learn how to add a glossary overview page link to your Knowledge Base site's header, footer, or secondary navigation. Use the URL `https://yourdomain/docs/glossary-overview` (replace `<yourdomain>` with your site domain) to direct users to the glossary. Follow step-by-step instructions to customize your site and improve accessibility to the glossary terms.

## 407. Exporting glossary terms

To export glossary terms, navigate to **Documentation > Content tools > Content reuse > Glossary**, select a language, click **Export CSV**, and wait for the download. The CSV includes Glossary Name, Definition, Dependencies, Updated By, and Updated On.

## 408. Managing feedback in the No search results feedback tab

The "No search results feedback" tab allows users to report searches that yielded no results. Review user queries, understand the context, assign tasks, and take action (create/update content, add relevant keywords). Track progress using status updates, and notify users of replies. This improves search experience and fills content gaps.

## 409. Feedback manager overview

The Feedback manager in Document360 helps users gather and analyze reader feedback to improve content quality. It is accessed via **Documentation > Content tools > Documentation > Feedback manager**.

The tool features two tabs:

- **Article feedback tab**: Collects reader ratings (Yes/No) and comments on specific articles, aiding in content evaluation and improvement.
- **No search results feedback tab**: Captures feedback from users who couldn't find information, highlighting content gaps and areas to enhance search functionality.

## 410. Managing feedback in the Article feedback tab

The Article feedback tab allows you to handle user feedback on knowledge base articles. Readers can rate articles as helpful or not, provide comments, and choose to be notified of updates. You can respond by reviewing feedback, opening the related article, assigning tasks, discussing with the team, and updating the feedback status (Open, Planned, In Progress, Complete, Closed). Enabling the notify toggle automatically closes feedback.

## 411. Custom pages

Document360's "Custom pages" feature lets users create standalone pages (separate from articles) for their knowledge base, useful for policies, terms, etc. Customization, multilingual support, and navigation options are available. Only KB site 2.0 projects can use this feature.

## 412. Additional features

- **Filters, bulk actions, and CSV export**: Manage feedback efficiently with filtering options, apply bulk updates, and export data (up to 90 days) for analysis.
- **Status clarification**: "Complete" allows reopening, while "Closed" signifies all actions are resolved and cannot be reopened.

To create a custom page, users with Draft Writer or Editor roles can navigate to Documentation > Content Tools > Custom Pages, click Create Page, enter details, and use the editor to add and format content. Set SEO details, collaborate via comments, and publish when ready.

## 413. Managing a Custom page

Manage custom pages via the "Content tools" > "Custom Pages" list. Edit pages by selecting and clicking "Edit", making changes, and saving/publishing. Delete pages by selecting and clicking "Delete", confirming, viewing dependencies, and clicking "Delete" again. Clone pages by selecting and clicking "Clone". Clones are prefixed with "Clone -". Deleted pages cannot be restored.

## 414. Try this feature

Custom pages can be added to a knowledge base site's header or footer for easy access. Up to 5 custom pages are initially available per project. Access can be restricted by user role, but deleted pages are unrecoverable.

## 415. Multilingual custom pages

Translate custom pages into multiple languages by selecting a language from the dropdown, viewing translation details, and clicking to translate.

## 416. What are tags?

**Tags:** Simple labels (letters, numbers, words, phrases) describing content (articles, categories, files). Example: "Installation" tag for a software installation article. **Benefits:** Improved navigation, grouping similar content, better keyword searches, and increased visibility on external search engines. **Best Practices:** Concise tags, broad category terms, consistent naming (no spelling errors), avoid overusing/irrelevant tags. AI tool available for tag recommendation.

## 417. FAQs

Document360 allows multiple tags per article/file for better content grouping and search. Tags improve search results. There's a limit of 1000 tags per project, but no limit on tags per item. Bulk tag import is not currently supported.

## 418. Tags

In Document360, the Professional plan offers basic tag support, the Business plan provides advanced tag management, and the Enterprise plan includes premium tag features with enhanced customization and analytics.

## 419. Key features of the Manage tags page

Manage project tags by creating, searching, viewing creation info (creator, date), and examining dependencies (Articles, Page category, Files). Edit, move, merge, or remove tag references. Export tags to CSV; filtering available by associations, creation date, and creator. **Cannot delete a tag with dependencies (Articles, Page category, Files).** Remove dependencies first.

## 420. Adding a new tag

Document360 team accounts can use tags to organize articles, pages, and files for better content management and improved search. AI tag recommendations assist in suggesting or creating relevant tags for efficient content classification.

## 421. Manage tags page overview

The **Manage tags** page in Document360 is the central hub for managing tags. It allows assigning tags to articles, category pages, and files, as well as organizing tag groups to consolidate related tags and view their dependencies. Access the page via **Documentation** > **Content tools** > **Documentation** > **Tags**.

## 422. Adding tags to the library

Four methods exist to add tags to the knowledge base project: 1) Manage Tags overview page (creating new); 2) Documentation editor; 3) Drive file tagging; 4) All articles page. Each method has specific steps, utilizing a dropdown/search to select or create tags.

## 423. FAQs

- **Tag Management**: All tag-related actions are managed through the **Manage tags** overview page, accessible under _Content tools_ > _Documentation_ > _Tags_.
- **Viewing Tags**: The page displays all tags and allows viewing of associated articles or files by clicking on the reference numbers.
- **Editing Tags**: Users can edit or delete tags directly from the Manage tags page.
- **Merging Tags**: Similar tags can be merged using the **Merge tags** option.
- **Managing Dependencies**: Dependencies can be removed individually or in bulk using the **Remove dependencies** option.

## 424. **Tag naming guidelines**

Tag names can contain uppercase, lowercase, numbers, spaces, and select special characters (\_ + - @ # % ^ & ! ()). **Forbidden** characters include: \ / : \* ? " < > |.

## 425. Tag groups page overview

Document360's tag groups help organize related tags (e.g., articles, page categories, files in Drive), making large tag libraries easier to manage by showing tag relationships and dependencies.

## 426. Tag limitations and details

Document360 tags: Up to 1,000 tags per project. Tag names max 30 characters; descriptions max 100. Descriptions appear as tooltips on hover in the portal/site and below titles on the Tags page.

## 427. Adding tags to tag groups

Two ways to add tags to groups: 1) Assign a tag to a group when creating it. 2) Select tags and move them to a group within the tag library.

## 428. Deleting tag groups

Deleting a tag group permanently removes the group and all its tags from the project, severing links to associated articles, page categories, and files. Tags cannot be added to articles; tag groups are for organizing tags only.

## 429. Manage tag dependencies

Tag dependencies allow tracking and managing where tags are applied to various project elements (articles, categories, files) for efficient tag usage and cleanup.

## 430. Creating a tag group

To create a tag group, follow these steps:

1. Log in to the **Knowledge base portal** and select the **Documentation** tab from the left sidebar.
2. Navigate to **Content tools > Documentation > Tags**.
3. Under the **Groups** tab, click **Create group**.
4. Enter the **Tag group name** and **description**, then click **Create**.

This process allows you to organize tags effectively for easy content management.

## 431. Find and replace

Find-and-replace tool allows searching and replacing keywords/phrases (words, numbers) across articles and categorized pages within a project. Replaces can include words, numbers, and selected characters.

To view tag dependencies, navigate to **Documentation** > **Content** Tools > **Documentation** > **Tags**. Click on the number in the **Articles**, **Page Categories**, or **Files in Drive** columns to open the **Tag Dependencies** window, which displays detailed usage information.

## 432. Viewing tag dependencies

To view tag dependencies,

1. Navigate to **Documentation** > **Content tools** > **Documentation** > **Tags**.
2. Click the number under the **Articles**, **Page category**, or **Files in drive** columns to open the **Tag dependencies** window.
3. Review the detailed information about the selected tag's usage in the **Tag dependencies** window.

### 432.1. Information available in the Tag dependencies window

- **For articles**: Article title, status, workspace, language, creator, and creation date.
- **For page categories**: Page category title, status, workspace, language, creator, and creation date.
- **For files**: File name.

## 433. Removing tag dependencies

To remove tag dependencies, follow these steps:

- Select the desired items (articles, page categories, or files) using checkboxes.
- Click "Remove dependencies" to delete the tag from the selected items.
- For bulk removal, click "Select all" before clicking "Remove dependencies."

This process efficiently manages tag associations, ensuring accuracy and simplicity.

## 434. Performing the find and replace operation

To find and replace text in articles/categories, access the "Content tools" > "Documentation" > "Find and replace" section. Enter the text to find (and optionally use filters) and enter replacement text. Select articles to be updated and choose publish/draft status. Click "Replace" to implement changes. Precise control by whole-word matching, as well as advanced filtering like workspace, language, and status are available.

## 435. SEO descriptions

SEO descriptions can be added to individual articles or generated for multiple articles/categories using the Content tools SEO description tool. Settings vary by plan (Professional, Business, Enterprise).

## 436. Generating SEO descriptions

Generate SEO descriptions for knowledge base articles via the portal's Content tools > Documentation > SEO description section. Select articles; click "Ask Eddy AI." Review and save generated descriptions (adjusting as needed). Descriptions should be concise (155-160 chars), keyword-rich, align with user intent, and actionable. Filters for selecting articles based on various criteria (e.g., category, contributor) are available. Best practices for titles (50-60 chars) include relevant keywords, engaging language. Individual article descriptions can be generated via alternative editor tools.

## 437. Find and replace in editor

The Find and replace tool in the editor allows users to locate and modify text within a specific article. Access it via the icon in the editor; it operates only on the current article.

## 438. FAQ(s)

- **Find and replace** is available only to team accounts with the **Editor** content role or custom roles with **Perform Find and replace** permission.
- Replace can be done with an empty **Replace with** field; the found text will be removed.
- Markdown/HTML syntax in the editor is not affected; only the visible text is replaced.
- Search results exclude articles in the **Recycle Bin**.
- Up to 1000 articles can be edited per replacement event.

## 439. Downloading the ZIP file

To download the Document360 project ZIP, navigate to "Import & Export project," find the latest exported file under "Recent files," and click "Download" or "Copy link".

## 440. Export project API endpoint

Business/Enterprise plan-only API endpoint for exporting Document360 project content. Limited to 2 exports per day. Overwrites previous downloads. Markdown (.md) articles, WYSIWYG (.html) articles, or JSON for multi-language exports.

## 441. Exporting a project

To export a Document360 project as a ZIP file, navigate to **Documentation ()** > **Content tools** > **Import & Export** > **Import & Export project**, then:

- Click **Export**
- Choose articles by modification date (All, 7/30/90 days, or Custom)
- Select workspaces, languages, and categories
- Include media files as needed
- Click **Export** and wait for completion notified via popup

The exported ZIP includes selected content, with media optionally added. Export times vary based on content size, allowing background task handling. Project contents are downloadable upon completion.

## 442. Exporting your Document360 project as a ZIP file

Document360 allows you to export your project as a ZIP file, including articles, category pages, and optional media files. The ZIP can be imported into another Document360 project. The table detailing supported plans is empty, so plan-specific capabilities may need confirmation.

## 443. Importing a project ZIP file

Import Document360 project ZIP files into the Knowledge Base portal. Matching workspace slugs merge data; differing slugs create a new workspace. To avoid conflicts, modify the workspace slug in the project ZIP file before importing. Verify supported features, file formats, and destination workspace before importing. Check FAQs for common errors like unsupported features or mismatched slugs. Maximum file size is 1GB. Only Document360 project ZIP files are supported.

## 444. Migrating documentation from other platforms

Document360 offers migration support across Professional, Business, and Enterprise plans for over 100+ knowledge base platforms, including Zendesk, Freshdesk, and more. Initiate a migration request via a website form (or within Document360) by providing the URL of your current knowledge base and the platform. Document360's experts will handle the migration.

## 445. Document360 migration - What happens next?

Document360 migration involves three steps: 1) expert consultation & estimate, 2) automated & manual knowledge base transfer, and 3) thorough quality assurance, including SEO-friendly redirect rule setup. Redirect rules are crucial to maintain user experience and SEO (search engine optimization) by ensuring old URLs redirect to the new Document360 platform. Failure to implement redirects results in broken links, 404 errors, and diminished search rankings.

## 446. Importing a Document360 project ZIP file

The Document360 project ZIP file import feature is supported across Professional, Business, and Enterprise plans. It allows migration between projects or restoration from backups, importing articles, category pages, and media. Requires Editor role or custom role with Update and Publish access.

## 447. PDF templates overview page

Users access PDF templates via Knowledge base portal's **Content tools > Import & Export > Export to PDF**. Viewable templates are listed, sortable by date, and include system & custom templates. Actions include cloning, editing, deleting (with confirmation). A dedicated button creates new templates. Default templates cannot be deleted, and only one available template makes it the default.

## 448. New PDF template

Create new PDF templates with customizable options: name, layout, margins, cover page (title, description, logo, image), terms & conditions (existing/custom), table of contents (includes headings), watermark (text/image), header/footer images & text, page numbers, and text formatting (font, size, color). Character limits, image sizes, and alignment options vary.

## 449. Default template

Any PDF template can be set as default, automatically used for exports without selection. Click "Set as default" before saving. Default templates cannot be deleted.

## 450. Designing a PDF template

PDF templates (previously "Design templates") define the design, styling, and formatting for exported PDFs, ensuring brand consistency. Available across Professional, Business, and Enterprise plans, templates can be selected or created during the PDF export process.

## 451. Compiling content for PDF

All plans support exporting content to customized PDF documents. PDFs can be named, templated, and password-protected.

## 452. Other actions on PDF

Exported PDFs can be downloaded, regenerated, cloned, edited, details viewed, and deleted. Sharing draft articles and exporting SVG images are addressed. A known limitation exists with SVG rendering in PDFs due to the SelectPDF plugin, and workarounds are provided (convert to PNG/JPG).

## 453. FAQ(s)

PDF templates offer customizable layouts for creating professional PDF documents, saving time and effort while ensuring visual appeal and branding consistency. They can be tailored to specific needs and content. The knowledge base platform allows users to manage content creation, categories, articles, templates, files, team accounts, and site settings, including branding, domain, and security.

## 454. Analytics

Document360 offers various analytics (article, search, reader, team, feedback, links, page not found, Eddy AI, ticket deflection) categorized by Professional, Business, and Enterprise plans. Analytics data is specific to the active workspace and language, and presented in UTC time. Professional plan features are limited. Business and Enterprise plans include more analytics options.

## 455. Export to PDF

To export published articles and category pages to PDF:

1. Navigate to **Documentation** > **Content tools** > **Import & Export** > **Export to PDF**.
2. Only published content is available for export.
3. Click **Create new PDF** and enter a name, optional password, and select a template, workspace, and language.
4. Preview the template and select categories/articles to include.
5. Click **Export** and await completion (status: _Success_).

## 456. Accessing Articles analytics

Access knowledge base article analytics by navigating to the Analytics > Articles section. Data shows article views, reads, likes, and dislikes, filtered by date range, user type (Team accounts or readers), and JWT authentication. Metrics distinguish between simple views and user engagement (reads). Location- and category-based analytics are also available. Data, potentially including deleted articles, is presented graphically and in lists; export options exist. Detailed FAQs clarify factors influencing data presentation and user roles.

## 457. Accessing Eddy AI search analytics

Use Eddy AI's analytics dashboard to track knowledge base search performance (conversations, answered/unanswered queries, conversation depth, popular/unanswered queries, referenced articles). Filter data by date. Address unanswered queries to improve search accuracy. Data aggregation occurs across multiple chatbots/widgets/languages but some metrics are language-specific.

## 458. Articles analytics

**Plans supporting article analytics**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              |          | ✓          |

Document360's Articles analytics provides insights into article performance, including user engagement, geographic distribution, and top-performing content, helping improve your Knowledge Base with data-driven decisions.

## 459. Search analytics

Search analytics tracks user search behavior to optimize content and identify documentation gaps, monitoring search trends, successful queries, and no-result searches to enhance user experience.

## 460. Eddy AI search analytics

Eddy AI search analytics offers insights into AI search performance, supporting Professional, Business, and Enterprise plans. It provides metrics like unanswered searches, visualizations, and supports multiple languages. Conversational metrics require KB site 2.0.

## 461. Knowledge base site view

Users can provide feedback on search terms that don't return results. Analyzing "no results found" searches helps identify knowledge base content gaps and optimize the site for user needs. Understanding popular search terms ensures relevant content creation aligning with user queries. "Bounced search" refers to searches with no result clicks.

## 462. Accessing the Reader analytics page

Access reader analytics from the Knowledge base portal's Analytics > Reader page. Filter by date, reader type (self-registered, SSO, JWT, invited), and knowledge base/widget analytics. Data includes total readers, self-registered readers, frequent readers, and detailed reader information (views, reads, likes, dislikes, articles accessed, last login). View individual reader contributions filtered by date and article. Export data as CSV. Data refresh can take up to 15 minutes.

## 463. Accessing the Search analytics page

_No summary available for this section._

## 464. Reader analytics

The Reader analytics tool provides insights into reader activity for Private or Mixed access projects, enabling tracking of user engagement to optimize content strategy.

## 465. Team accounts analytics

This page provides detailed analytics on team members' account types, content access/creation, contributions, and last logins.

## 466. Accessing the Feedback analytics page

Access Feedback analytics in the Knowledge base portal's Analytics section. Filter data (date, widget type, JWT). Analyze metrics (article feedback, likes, dislikes, comments) via graphs and tables. View specific articles, feedback, and export data as CSV. Important: Only feedback with comments are included. Data refresh can take up to 15 minutes.

## 467. Feedback analytics

Feedback analytics allows tracking of total comments, likes, and dislikes for articles or pages, with data visualized in charts and graphs. The features are supported across all plans, including Professional, Business, and Enterprise.

The Team accounts analytics page is accessed via the Knowledge base portal under the Analytics section. Users can filter data by date ranges, with updates taking up to 15 minutes. The page displays metric tiles for total team accounts, articles published, and top performers. Clicking on a team account provides detailed contribution metrics and article performance. Data can be exported as CSV for further analysis.

## 468. Accessing the Team accounts analytics page

To view Team accounts analytics, navigate to the Analytics section in the Knowledge base portal and select Team accounts. Use date filters to customize the data range, noting a 15-minute delay for updates. The page features three metric tiles and detailed contribution data, accessible by clicking on team accounts. Export options are available for both overall and individual data, enabling efficient analysis and reporting.

## 469. Accessing the Links status analytics page

To access Link status analytics, navigate to the "Analytics" section of the Knowledge base portal and select "Link status". Visual aid available.

## 470. Links status overview page

Document360's knowledge base link status overview page displays internal and external links, classifying them by status (working, broken, redirect, ignored). A detailed list shows article name, link type, URL, status, and filtering options. Broken links display 404 errors or broken image thumbnails. Users can filter, export (CSV), and identify articles with deleted links. This page tracks and reports on all links within a workspace, ensuring knowledge base links are functional and accurate.

## 471. Links status analytics

Document360's "Links status analytics" is a broken link checker under the Analytics section. It validates internal, external, and media links, offering scheduled, manual, and article-level validations to improve SEO and user experience.

## 472. Manage links

Manage links by searching, filtering by type/dependency/status (included/ignored). Add/remove links to ignore/include lists via checkboxes/dropdown or button. Export links as .csv.

## 473. Link validation

Link validation can be performed in three ways:

1. **Scheduled Validation**: Automatically runs based on plan tier; access via Analytics > Links status > Scheduled validation.
2. **Manual Validation**: On-demand; accessible via Analytics > Links status > Manual validation > Validate links (note 24-hour report generation and overwrite behavior).
3. **Article-Level Validation**: Unlimited checks performed from the article editor via More > Analytics > Validate now.

Key notes: Manual validation requires permission and overwrites previous reports within 24 hours; article-level validation is done per article.

## 474. Troubleshooting

Document360's link validation has a 5-second timeout. If links appear broken but work in a browser, use Postman to check the HTTP response (200 is good). Error codes like 404, 500, or 502 can indicate true link problems. If issues persist, contact support. Links can be excluded from validation for cases like placeholders, and validation limits exist.

## 475. Actions and controls

- **Validation types**: Scheduled (weekly), Manual, and Article-level.
- **Report date**: Displays generated report dates with tooltips for upcoming scheduled validations.
- **Manage links**: Button opens a window showing all links, including ignored or included ones.
- **Validate links**: Initiates manual validation with a confirmation prompt about remaining validations.
- **Manual validation usage**: Shows remaining manual validations (resets monthly) for internal and external links.
- **Link analytics usage**: Displays used links vs. limit (Business: 5000, Enterprise: 10000).
- **Limit exceeded**: If links exceed the limit, only up to the limit are validated; contact support to increase capacity.

## 476. Sections of Ticket deflector tab

The Ticket Deflector tab provides performance analysis of the form and knowledge base. It includes: 1) **Satisfaction Analysis:** Shows form submissions and knowledge base answers, interactable graphs. 2) **Frequently Selected Questions:** Top 5 most frequent questions from the form. 3) **Satisfaction Summary:** Pie chart of form submissions vs. knowledge base answers. 4) **Most Useful Articles:** Top articles resolving user queries, showing count of answered questions. 5) **Keywords:** Shows keywords, search counts, and whether answers were found, exportable as CSV. 6) **Search Success Rate:** Percentage of successful vs. unsuccessful searches, visualized in a graph. All sections allow image exports for data visualization.

## 477. Accessing the Ticket deflector analytics page

_No summary available for this section._

## 478. Ticket deflector analytics

Analyzes key metrics for ticket deflector forms in Knowledge base sites/widgets, with support across Professional, Business, and Enterprise plans (table currently empty).

## 479. Generating API documentation

Document360 supports API documentation generation from URLs, JSON/YAML files, or via a CI/CD flow. Users select the source, input the API specification (URL or file path), provide an API token (for CI/CD), and click "Publish" to generate documentation. CI/CD requires Node.js and installing `d360` npm package. Review drafts are possible before publishing.

## 480. Feedback tab

The Feedback tab displays user feedback on ticket deflector forms, labeled by source (e.g., Form Submitted, Answered from Knowledge Base) with timestamps. Users can view feedback content by clicking on an entry. The FAQs explain that a ticket deflector reduces support tickets by suggesting knowledge base articles based on user queries. The 'Answered from Knowledge Base' metric tracks resolved queries without ticket submission. Effectiveness can be improved by maintaining an up-to-date knowledge base, using relevant keywords, reviewing frequently selected questions, and analyzing the Search Success Rate, which measures the percentage of successful searches returning relevant articles. A chart legend explains data series differentiation.

## 481. Regenerate API documentation

Document360 API docs can be automatically regenerated from updated API specifications (URLs, JSON/YAML files). Custom content is preserved. CI/CD integration using d360 npm packages is recommended for automated updates. Manual regeneration is possible via the web UI or command line. Draft saving and article relocation are restricted.

## 482. Managing API documentation

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
| ✓            | ✓        | ✓          |

Document360 offers API documentation generation across all plans, enabling users to create interactive and detailed API docs by uploading specification files, covering endpoints, methods, and responses.

## 483. Helpful links

- [**d360 npm package link**](https://www.npmjs.com/package/d360)
- [**Source code**](https://github.com/document360/d360)

The d360 npm package offers an API (Application Programming Interface) which facilitates communication between software applications. The package and its source code are accessible via the provided links.

## 484. Edit, Clone, and Delete widget

Manage your Knowledge Base widget in Document360 with options to edit, clone, or delete it. The table below indicates which plans support this feature (belum terisi). For the latest details on plan-specific features, refer to the official documentation.

| Professional    | Business        | Enterprise      |
| --------------- | --------------- | --------------- |
| \[Plan details] | \[Plan details] | \[Plan details] |

## 485. Edit Knowledge base Widget

To edit a Knowledge base Widget, navigate to it in the Knowledge base portal, hover over it, click "Edit", update configurations in the "Configure & connect" tab, and click "Save."

## 486. Delete Knowledge base Widget

To delete a knowledge base widget, navigate to the widget in the knowledge base portal, hover over the desired widget, click "Delete," confirm the action in the prompt, then click "Yes".

## 487. Managing and customizing the Knowledge base widget

The document describes managing and customizing a knowledge base widget, but crucial information like which plans support the widget (Professional, Business, Enterprise) is missing from the table.

## 488. Customizing the knowledge base widget

Customize the knowledge base widget's appearance and behavior by changing its color, icon, position (left/right, spacing), hiding the widget itself, or hiding the most searched articles. Access widget customization options through the 'Configure & connect' and 'Style widget' sections, selecting 'Edit', and clicking 'Save'. Color changes also update the icon color. Icons can be replaced with images or other icons. Hiding frequently searched articles disables URL mapping functionality.

## 489. Adding a ticket deflector in Knowledge base widget

To add a ticket deflector to a knowledge base widget, enable the "Show ticket deflector" toggle in the widget's configuration, select the desired deflector, and save changes. This adds a ticket deflector to the knowledge base widget. Requires logging into the Knowledge base portal, selecting a project, and navigating to the widget's configuration page.

## 490. Domain restriction

Restrict Knowledge Base Widget to specific domains. Add desired domains to "Widget security" list in widget settings. Widget accessible on any domain if no domains are specified. "www" is excluded from domain input; only the suffix is required (e.g., document360.com).

## 491. Clone Knowledge base Widget

1. Navigate to the **Knowledge base Widget** section in the portal.
2. Hover over the desired widget and click the **Clone** button.
3. Provide a title and update configurations in the **Configure & connect** tab.
4. Click **Save** to complete the cloning process.

![2_KBWidget_clone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_KBWidget_clone.png) ![5_KBWidget_confirmclone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_KBWidget_confirmclone.png)

## 492. Adding custom links

Add custom links (e.g., downloads, contact) to your Knowledge Base Widget. Navigate to "Widget Settings", add the link title, display text, URL, and optional icon in "Add Custom Links" section. Edit or delete links using the respective sections. Use `mailto:` for email links.

## 493. URL Mapping

URL Mapping lets you customize the knowledge base widget's display based on user location (URLs). This includes showing/hiding the widget and customizing search bar placeholders. Configurations are possible per user role (Professional, Business, Enterprise).

The documentation explains how to control content visibility in the Knowledge Base widget through options like Project, Workspace, and Category. Here's how to do it:

1. **Edit the Widget**: Navigate to the Knowledge Base widget, hover over it, and click Edit.

2. **Content Access Options**:

- **Project**: Shows all articles in the Knowledge Base.
- **Workspace**: Select specific workspaces or languages to display.
- **Category**: Choose specific categories from one or multiple workspaces.

3. **Considerations**:

- **URL Mappings**: Changes to content access can disable existing URL mappings if the articles are no longer accessible.
- **Autosave**: Navigating between tabs saves changes automatically.

By carefully selecting these options, you can tailor the widget's content while being mindful of its impact on URL configurations.

## 494. Securing Knowledge base widget authentication using JWT

Enable JWT authentication for the widget by navigating to the Knowledge Base portal, configuring client ID, widget ID, token endpoint, and client secret. Embed the authorization URL in your code and implement an auth endpoint to handle token requests, ensuring reader group IDs are included for proper widget rendering. Troubleshoot issues like category visibility and widget loading by checking permissions and API keys.

## 495. Using URL mapping

Configure URL mapping to control the Knowledge Base widget's behavior on specific URLs via four actions: showing an article, listing articles, displaying search results, or hiding the widget. Requires the Knowledge Base widget to be installed. Supports path, query, and hash URL parameters, with optional regex for advanced matching.

## 496. Deleting URL mapping

To delete a URL mapping in a Knowledge base widget, navigate to the widget, click "Edit," find the URL mapping, click "Delete," and confirm the action.

To edit a URL mapping, follow these steps:

1. Navigate to the **Widget** section in the Knowledge base portal.
2. Hover over the desired Knowledge base widget and click the **Edit** icon.
3. In the **URL mapping** tab, locate the mapping you wish to modify.
4. Hover over the target URL mapping and click the **Edit** icon.
5. Make the necessary changes in the **Update URL mapping** blade.
6. Click **Update** to save your modifications.

This process will allow you to update the URL mapping efficiently within the portal interface.

## 497. Adding URL Mapping to your Widget

To integrate a widget into your knowledge base, follow these concise steps:

1. Navigate to the **URL Mapping** tab in the **Widget** section of the portal.
2. Click **New URL mapping** and specify:

- **Name**: Internal label.
- **URL structure**: Choose from path, query, or hash.
- **URL**: Exclude domain (e.g., `/ebook/...`).
- **Action**: Select desired behavior.
- **Workspace**: Choose version if multiple exist.
- **Language**: Select if multiple languages are available.
- **Article**: Search and select page/index categories.

3. Click **Create**.

The widget will display the mapped content when the specified URL is accessed, maintaining consistency across tabs within the same version and language.

## 498. Basic URL matching

This document explains how to use regular expressions (regex) to match various URL components (protocol, domain, path, query parameters, fragment). Examples show matching specific paths, query parameters, optional parameters, and wildcards. Regex patterns for subdomains and complete URLs are given. Crucially, understanding URL matching is essential for effective URL mapping in web applications, allowing dynamic extraction of information from URLs.

## 499. URL mapping settings

Configure URL mapping behavior for unmapped URLs in the Knowledge base widget: Navigate to Widget > Configure & connect, expand URL mapping settings, choose to either display the page help/knowledge base or retain the last opened article, and save.

## 500. Customizing the Knowledge base widget using Custom CSS/JavaScript

Customize the knowledge base widget's appearance and behavior using CSS/JavaScript. Methods include modifying the icon, buttons, implementing show/hide callbacks, and customizing styling and localization to match your branding or functionality needs.

## 501. How to change the default widget icon?

Create a custom button, add JavaScript callbacks to control its visibility based on Knowledge Base widget load status and URL mappings. Integrate these callbacks into the widget's JavaScript snippet. Use JavaScript to make the button open the widget on click. Customize the button's appearance with CSS. Key details include custom button HTML, CSS, JavaScript for callbacks, and integrating them into the widget config.

## 502. How to change dark theme in Knowledge base widget?

**Method:** Custom CSS. **Target:** Knowledge Base Widget. **Action:** Modify Custom CSS to change background and text colors of the widget's modal and its elements (divs, paragraphs, buttons) to black and white, respectively. The feedback button's hover style and background also modified.

## 503. How to change the fields displayed in the Knowledge base Widget?

Customize knowledge base widget text by modifying HTML with JavaScript. Replace "Page help", "Knowledge base", "Top search articles" etc., with localized alternatives in the widget's tabs & search area. Use `$(document).ready` to execute JavaScript after page load. Replace placeholder text via jQuery. Save settings after updating.

To remove the Page help and Search bar from the widget when URL mapping for a single article is configured, follow these steps:

1. **Access the Widget Editor**: Navigate to the Widget section in the Knowledge base portal and edit the desired widget.

2. **Add Custom CSS**: In the Custom CSS tab, add the following code to hide the Page help tab, back icon, and search container:

```css
li#page-help-tab {
  display: none;
}
.article-header .article-back-icon {
  display: none;
}
.search-container {
  display: none !important;
}
```

3. **Add Custom JavaScript**: In the Custom JavaScript tab, add the following code to ensure the search container is hidden after a delay and to handle any dynamic loading:

```javascript
setTimeout(function () {
  $('.search-container').hide();
}, 2000);
setTimeout(function () {
  $('#knowledge-base-tab').click();
}, 2000);
```

4. **Save Changes**: Click Save to apply the changes.

5. **Cache Considerations**: Note that changes may take up to 15 minutes to appear due to caching. For immediate updates, clear the application cache.

This approach combines CSS for styling and JavaScript for dynamic adjustments, ensuring the elements are hidden as intended.

## 504. How to set the Knowledge base Widget to open automatically in the knowledge base site?

To automatically open the Knowledge Base widget, add custom JavaScript to the widget's settings. The script simulates a button click after a 2-second delay, ensuring the page fully loads before opening.

## 505. Knowledge base site 2.0

Knowledge Base Site 2.0 offers an enhanced UI, AI-powered search, streamlined content, real-time updates, and interactive elements for better user experience. The migration guide from KB 1.0 to 2.0 is available [here](/help/docs/kb-site-20-migration).

## 506. Overview of Knowledge base site 2.0

Knowledge base site 2.0 features a redesigned header with logo, workspace navigation, customizable primary/secondary navigation, announcements, acknowledgment requests, theme/language options, and search. The left pane offers search, navigation (tree view), article status, follow/export options. Article sections include breadcrumbs, title, links, status, date, contributors, sharing, summary, and acknowledgment. Image viewers support zooming, downloading, and navigating. A right pane displays attachments, tags, and a table of contents feature. Footer sections enable feedback, navigation to related/previous/next articles. Improvements include Eddy AI search and summarization.

## 507. Customize site

Document360's "Customize site" feature lets users tailor their Knowledge Base site's appearance (themes, colors, layouts) to match their brand and enhance user experience. This project-level setting affects the entire project. KB Site 2.0 supports customization with accessibility features; migration from KB Site 1.0 is required.

## 508. FAQ - Knowledge Base widget

The Knowledge Base widget is a tool that allows users to find answers within your app or site, supporting up to 10 configurations. It helps with onboarding, troubleshooting, and learning new features. Key features include customizable positions, the ability to hide the top search, URL mapping with regex support, custom links, ticket deflector, domain restriction, and default language detection. Available on Enterprise plans, it enhances user experience by providing in-app assistance and efficient content access.

## 509. Troubleshooting

- **Website Fails to Load**: Check URL, clear browser cache, disable VPN, and verify system date/time.
- **504 Gateway Timeout**: Review server configuration changes and revert Sub-folder Configuration if necessary.
- **Page Unresponsive While Editing**: Clear cache, reduce article length, and fix unclosed HTML tags.
- **Too Many Redirects**: Correct JWT Login URL and remove domain URL from configuration.
- **Project Not Found**: Ensure CNAME record is correct and verified.
- **/home/error/ Message**: Contact support with HAR file and console errors.
- **Icons Not Rendering**: Check FontAwesome settings in custom CSS.
- **Site Without CSS**: Whitelist Document360 domains.
- **Secure Connection Issues**: Verify CAA records and update DNS settings.
- **ResourceNotFound & AuthenticationFailed Errors**: Ensure SaaS tokens are added and not expired.

## 510. Advanced site customization

Centralized customization of Knowledge Base site. Customize branding (logo, favicon), header/footer, homepage, login, error pages, and CSS/JavaScript. Uses a preview feature for interactive changes. Options for light/dark themes, favicon uploads/URLs, logo changes (images or text), logo URLs, custom CSS/JavaScript for advanced styling. Specific FAQs address theme settings, favicon issues, logo customization (different logos for different themes), font selection (article and site font), button styles, and site layout. Clear instructions and visual aids (GIF) are provided.

## 511. KB site 2.0 migration

KB Site 2.0, a customizable knowledge base upgrade, offers enhanced features (following articles/categories, private sharing) and improved configuration options for various project tiers (Professional, Business, Enterprise). Projects created after June 10th, 2024 gain automatic access.

## 512. Basic site customization

Customize your Knowledge Base site by navigating to Settings > Knowledge base site > Customize site. Choose from three themes (light, dark, or both) and brand your site with a logo, favicon, and custom logo redirect link. Automatically apply WCAG-compliant colors or manually adjust brand colors, hyperlink colors (with options to use standard, brand, or custom colors), and fonts for articles and the site. Select button styles (rounded, sharp, bubble) and site layout (full width or centered). Save changes to apply. Existing logos and favicons remain unchanged until updated in settings.

## 513. Implementing WCAG 2.1 A and AA in Document360

Document360 ensures accessibility by providing text alternatives for images/icons, enabling full keyboard navigation, and ensuring readable text with sufficient contrast and clear language.

## 514. Customizing your knowledge base site 2.0

Navigate to Settings > Knowledge Base Site > Customize Site to access the 2.0 preview. Choose to go live immediately (retaining 1.0 settings) or customize further (including headers, footers, and CSS/JavaScript). Preview changes before publishing, with a 30-day rollback option to revert to 1.0. Integrations remain intact during the switch.

## 515. Web Content Accessibility Guidelines (WCAG)

_No summary available for this section._

## 516. Key Principles of WCAG 2.1

WCAG 2.1 ensures web content is accessible to everyone. **Perceivable** content uses text alternatives for non-text, **Operable** interfaces are usable via keyboard, provide sufficient time, and include clear navigation. **Understandable** content is readable, with predictable operation. **Robust** content is compatible with various user agents (including assistive tech). This promotes a more inclusive web experience.

## 517. Header - Secondary navigation

A secondary navigation header in Document360 allows customization with menus below the logo, providing quick access to frequently visited pages (e.g., Pricing, Documentation, Support). This improves user navigation, especially on large knowledge bases, enabling easy access to key information.

## 518. Accessing the Header - Secondary navigation

Customize your knowledge base's header secondary navigation by selecting Settings > Knowledge base site > Customize site. Create single-level, multi-level, or ticket-deflector menus from within the header settings, adding titles, links (hyperlinks, email, phone), and the ability to open in new tabs. Manage and reorder items, and optionally display this secondary navigation on the home page, before publishing changes.

## 519. Header - Primary navigation

Document360's primary navigation header is the bar located next to the logo at the top of your site, enabling users to add menus for easy navigation between pages on the Home or Knowledge base site. This feature supports customization across different plans, with varying degrees of functionality depending on the plan (Professional, Business, Enterprise).

## 520. Accessing the Header - Primary navigation

To customize the primary navigation header in Document360, follow these key steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select **Site header & footer** from the left pane, then expand **Header** and choose **Primary navigation**.
3. Add up to 6 new items (types include Home, Custom URL, Call to action, RSS feed, Ticket deflector, Glossary, API documentation, and Custom page).
4. Customize colors, edit, delete, or reorder items using the left navigation options.
5. Preview changes, then save and publish to activate them.

**Notes:** Use custom CSS & JavaScript for advanced customization, such as adding social media icons or feedback links.

## 521. Custom footer

No plans for customization of the knowledge base site are detailed in the provided table. The table is empty for all listed tiers (Professional, Business, Enterprise).

## 522. Creating a custom footer

Customize your knowledge base site's footer via the Knowledge Base portal's settings. Choose a blank or themed custom footer, add HTML/CSS or external links, preview, save, and publish changes. Incorporating external files (like PDFs) also detailed in the steps.

## 523. Accessing the Footer navigation settings

To access footer navigation settings, navigate to **Settings** > **Knowledge base site** > **Customize site**, select **Header & Footer** > **Footer**, and choose between **Basic footer** or **Custom footer**. Preview changes before saving and publishing. The **Custom footer** allows HTML input for advanced customization.

## 524. Footer

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              |          |            |

- Added footer to knowledge base site.
- Up to six custom links on the left for essential resources (e.g., pricing, contact, free trial).
- Social media links on the right included to drive engagement.
- Available across Professional, Business, and Enterprise plans.

## 525. Removing an **RSS Feed** from the Knowledge base site

To remove the RSS feed from your Knowledge base site, navigate to Settings > Knowledge base site > Customize site, select Site header & footer, locate the RSS feed in the desired header/footer section, and click Delete. Note: Existing subscribers will still receive updates and a 404 error for the RSS feed might be seen if the project is private. Public project access is necessary for the feed to work.

## 526. RSS Feeds

RSS (Really Simple Syndication) is an XML-based format that provides automatic updates, enabling readers to stay informed about new or modified articles in a Knowledge Base. By integrating RSS feeds into the header or footer, subscribers can effortlessly stay updated. For instance, a software company can use RSS feeds to keep customers informed about product releases and bug fixes without manual checks, ensuring engagement and informed readers.

## 527. Adding an **RSS Feed** option to your Knowledge base site

Add RSS feeds to enhance your Knowledge Base's functionality by providing readers real-time updates accessible via various RSS tools.

- **Primary Navigation**:

- Navigate to the customization settings, select Primary Navigation, add a new RSS Feed item with a title, and choose to open in a new tab.

- **Secondary Navigation**:

- Similar process, but select Single Level, enter the RSS title, and paste the XML URL.

- **Footer**:

- Add via Basic Footer by including a new link, or use Custom Footer by embedding the XML URL directly into HTML.

- **Usage**: RSS Feeds allow readers to stay updated using browser extensions (like Feeder.co) or apps (Feedly, Inoreader). Readers can subscribe by accessing the XML file through the provided links.

## 528. Home page

The Document360 knowledge base home page can be customized through the **Customize site** settings, offering various body blocks like rich text, image sections, and custom code. Users can choose from themes (Engage, Innovate, Learn, Default) and configure SEO with meta titles, descriptions, and featured images. The recommended hero image size is 1920x415 pixels. Customization includes reordering sections, previewing, and publishing changes. Themes are available on Professional, Business, or Enterprise plans.

## 529. Main pages

This document outlines the main pages of a Knowledge base site, with a focus on the Home page's customization features, including adding links, changing colors, and incorporating categories. It also presents a structured comparison table for Professional, Business, and Enterprise plans.

## 530. Login page

Document360 knowledge base login page customization guide. Allows users to modify the login page's appearance (images, styles) and add extra elements (buttons, video loaders, search bars). Handles homepage and documentation page customization too. Emphasizes using HTML, CSS, and JavaScript for personalization.

## 531. Hero section

The Hero section of Document360's knowledge base homepage is a customizable, visually-prominent area. It allows companies to introduce their knowledge base with engaging text, buttons, and search. This creates a strong first impression and directs users to key resources, like a software company showcasing updates and navigation.

## 532. Documentation

Customize the Documentation page by adjusting the search bar position (Left panel or Secondary Header) and applying a background color to the left navigation panel. Access settings through **Settings > Knowledge base site > Customize site**, select Documentation, make changes, preview, save, and publish to apply them live.

## 533. Multicolumn card section

Homepage section for showcasing features, "About," or "Contact." Columns have icons, titles, and descriptions to highlight key offerings. Visually appealing, allows for quick information access; useful for promoting software features (icon, title, description).

## 534. Rich text blocks

Customize knowledge base home page with rich text blocks by adding headings and paragraphs with formatting options (colors, bold, italics, links). Follow steps: navigate to settings, customize site, add rich text block, edit heading/paragraph content, choose styles & alignment, reorder, and save. Markdown support and a delete option are also discussed.

## 535. Accessing **Hero section**

- Navigate to **Settings** > **Knowledge base site** > **Customize site**.
- Select the **Home** page from the left dropdown to find the **Hero section** at the top.
- Configure the **Hero section** by setting the background (image, color, gradient, or pattern) and customizing elements like text, buttons, and search functionality.
- **Welcome text**, **Promo text**, **Buttons**, and **Search** can be edited or hidden as needed.
- After making changes, **Save**, **Preview**, and **Publish** to apply them.

## 536. Adding Multicolumn cards

To add multicolumn cards, customize your Knowledge Base site home page, add a multicolumn card section. Edit titles, icons (Document360 or Font Awesome), and descriptions for each column by clicking elements. Reorder, hide, and customize element appearance. Detailed steps are provided for deleting and using Font Awesome icons. Visual aids improve understanding of the process.

## 537. Image with text block

The **Image with text** block allows combining visuals with text to enhance a knowledge base site's homepage, differing from the **Rich text** block by adding imagery. It's ideal for showcasing features or announcements, such as highlighting a new feature with its description.

## 538. Adding an Image with text block

Customize your knowledge base homepage by adding image and text blocks. Select "Image with text" block, upload or update the image, edit heading and paragraph text (format, align, color), save, and publish. Deletion instructions also provided.

## 539. Adding a **Custom code section**

To add custom HTML/CSS to a knowledge base homepage: 1. Navigate to Customize Site. 2. Select the Home page. 3. Add a Custom Code Section. 4. Edit HTML/CSS. 5. Preview, Save, Publish. To delete, follow similar steps, selecting "Delete" then "Yes." The platform lets you manage content, files, and site settings.

## 540. Custom code section

Document360's **Custom code section** enables users to enhance their Knowledge base site by embedding custom HTML and CSS, ideal for adding visuals or interactive elements. For instance, it allows embedding dynamic banners or countdown timers for promotions, making it a versatile tool for site customization.

## 541. Widgets block

Widgets are embeddable blocks on the platform, placed below the header of the homepage. They serve various functionalities.

## 542. Knowledge base categories block

The **Knowledge base categories block** enhances a site's home page by displaying popular categories as cards, improving navigation and user experience. Ideal for managing documentation, it helps users quickly find relevant sections like "Getting Started" or "Troubleshooting Articles," reducing search time and boosting satisfaction.

## 543. Adding **Knowledge base categories** block

A step-by-step guide to adding and configuring a Knowledge Base Categories block on the home page of a Knowledge Base site:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select the **Home** page and click **Add section**, choosing **Knowledge base categories**.
3. Customize the block by adding categories from your Knowledge Base, reordering elements, and toggling visibility.
4. Edit category elements by selecting icons (Document360 or Font Awesome), adding titles, descriptions, and choosing colors for icons and text.
5. Save, preview, and publish changes.

This feature enhances content organization and user navigation.

## 544. Error pages

Custom error pages for Document360's knowledge base improve user experience by providing branded messages and clear next steps when users access broken, unauthorized, or restricted links, instead of generic error messages. This feature applies across all plans.

## 545. Deleting the widget section

To delete a widget section or individual widgets in the Knowledge Base site, follow these concise steps:

1. Navigate to **Settings > Knowledge base site > Customize site > Customize site**.
2. Select **Widgets** from the Home dropdown.
3. Click **Delete** at the bottom; confirm by clicking **Yes**.
4. For individual widgets, repeat the process.
5. Save and Publish changes to apply them.

**Key FAQs:**

- Hide widgets by hovering and clicking the Hide icon.
- Rearrange widgets using drag-and-drop.
- Recently Created and Modified Articles may overlap if articles are both new and edited.

Refer to the FAQs for additional guidance on hiding, rearranging, and understanding widget behaviors.

## 546. Adding widget(s) on your Home page

To add widgets to your Knowledge base home page:

1. Navigate to Settings > Knowledge base site > Customize site.
2. Select Home page from the left menu.
3. Click Add section and choose Widgets.
4. Select from the available widget options: Most Viewed, Most Liked, Most Read, Recently Modified, or Recently Created articles.
5. Edit widget headings and preview changes.
6. Click Save and Publish to apply the changes.

**Key Notes:**

- New articles appear in both Recently Created and Recently Modified sections.
- Widget content is filtered based on user access permissions.
- Use the reorder and preview icons to arrange and hide elements as needed.

Refer to the provided screenshots for visual guidance on both the portal and site views.

## 547. What is a 404 page?

A 404 page appears when a user requests a non-existent webpage. Customize this error page with a message, imagery, and links to improve user experience and guide them to appropriate content. Customization is irreversible.

## 548. Accessing the Error Pages Design Settings

To customize error pages, navigate to **Settings > Knowledge base site > Customize site**. Choose the error page type from the dropdown menu (404, Access denied, Unauthorized, IP restriction). Select **Basic style** to change images or **Custom style** for HTML/CSS editing. Use the preview toggle to view changes. Save, preview, and publish to activate. Note that once configured, you can't revert to the default static page. The Access denied page appears for permission issues, while Unauthorized appears for unauthenticated users. FAQs address image uploads, project availability, multimedia support, and the inability to revert to default.

## 549. 404 page

This document outlines the plans supporting error pages, with Business and Enterprise tiers typically offering custom 404 page support, while the Professional tier does not.

## 550. Access denied page

The "Access denied" page in a knowledge base redirects users with insufficient permissions. Customizable pages improve user experience by clearly explaining why access is denied and how to get permission. Only Private and Mixed knowledge bases support this feature, and a custom page prevents reverting to the default version.

## 551. Access denied page

**Plans supporting error page**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              | ✅       | ✅         |

The Business and Enterprise plans support the access denied page, as indicated in the table above.

## 552. Customizing the 404 page

- To customize the 404 page, navigate to **Customize site** in the Knowledge base portal and choose the **404 page** option.
- **Basic style**: Customize image, heading, paragraph, and add up to three buttons with suggested links like Home, Contact, or Sitemap.
- **Custom style**: Use HTML and CSS with a preview feature for tailored design.
- Use **Page Not Found analytics** and **Link status** tools to monitor and fix broken links.
- Best practices include consistent design, clear language, navigation options, search bars, feedback mechanisms, and mobile-friendliness.

## 553. Unauthorized page

No information is provided about plans for an error page in the provided data. The table displaying possible plans (professional, business, enterprise) is empty.

## 554. Customizing the Access denied page

To customize the Access Denied page in the Knowledge Base, navigate to Settings > Knowledge base site > Customize site. Select the Access Denied page, choose either Basic or Custom style, and modify elements like images, headings, and paragraphs. For advanced changes, use custom HTML/CSS. Preview and publish your changes. Note that once customized, you cannot revert to the default page. Refer to FAQs for additional guidance and best practices for clear messaging and responsive design.

## 555. Unauthorized page

The Unauthorized page appears when users lack proper permissions to access restricted content. It can be customized with messages like requesting admin access, but customization is irreversible once implemented.

## 556. Customizing the Unauthorized page

Customize your knowledge base's unauthorized access page by selecting either a "basic style" option (modifying default images, headings, and paragraphs) or a "custom style" option (adding custom HTML and CSS). Basic style allows changing visuals, while custom style provides full control over the page's design for a more tailored experience. Instructions for both options, including image changes, heading updates, and paragraph editing, are available. Save, preview, and publish changes for implementation on the knowledge base site.

## 557. IP restriction page

**Plans supporting error page:** Information not provided in the document.

## 558. Customizing the IP restriction page

Customize your knowledge base's IP restriction page by adjusting basic styles (images, texts) or creating custom HTML/CSS. Use the "Preview" toggle to test changes. Save, preview, then publish to apply changes. Basic style lets you change existing elements; custom style allows for full HTML/CSS customization. Key info includes navigating to site customization settings, selecting "IP restriction" page, modifying elements, previewing, and publishing.

## 559. IP restriction page

The **IP Restriction page** appears when users access the Knowledge base from restricted IP addresses. It can be customized to inform users (e.g., "Your IP address is not authorized. Please contact your admin for access.") and is exclusive to **Enterprise plan** projects. Once customized, the default version cannot be restored, so creating a tailored page is recommended for improving user experience.

## 560. Custom CSS & JavaScript

Insufficient data to provide a TLDR. The table lacks any details on custom CSS and JS plans for the Knowledge Base site. A summary requires actual plans, not empty cells.

## 561. JavaScript snippets

Customize website JavaScript by navigating to site settings, adding code to the JavaScript tab, and saving. Example code reorders elements.

## 562. Troubleshooting

Document360's SPA transition requires updating custom JavaScript, which previously relied on page refresh events. Instead, use the `articleload` event for updated content. Adjust existing JavaScript to include `window.addEventListener('articleload', function() { ... });`. Contact support for further assistance with persistent issues. Custom CSS is supported. Multiple brands can be accommodated via separate workspaces or by applying separate stylesheets to differing projects within the same workspace while recognizing any CSS added to the projects will apply universally across all workspaces.

## 563. CSS snippets

CSS snippets are reusable code blocks for common CSS functionalities, helping save time and reduce errors. An example is the `.shadow` snippet adding box-shadows. To use, go to Settings, add custom or preloaded snippets (7 available), and save. For more details: [CSS Snippets](/help/docs/css-snippets).

## 564. CSS Snippets

Customize Document360 Knowledge Base site using pre-loaded or custom CSS snippets. Navigate to Settings > Knowledge base site > Customize site > Custom CSS, select CSS tab, add snippets (including preloaded ones for body font, headings, tables, images, hero sections, callouts, and back-to-top), save changes. Custom CSS can also be added.

## 565. CSS Snippets

The document outlines plans (Professional, Business, Enterprise) supporting custom CSS and JS in a knowledge base site, presented in a comparative table.

## 566. Callout styles

No data available for callout styles across Professional, Business, and Enterprise plans.

## 567. What is a "Callout"?

A "Callout" is a feature in Document360 used to highlight important content, available in four types: Info, Warning, Error, and Success. Each offers a title and content section, accessible via Markdown or WYSIWYG editors.

## 568. Body font style

Document360 plans to allow custom CSS and JS for body font styling in knowledge base content. This will improve the reader experience.

## 569. Setting up the body font style using Custom CSS & JavaScript

To change the body font in Document360's knowledge base, use Custom CSS & JavaScript. Navigate to Knowledge base site > Customize site > Custom CSS & JavaScript. Click the "Custom CSS" tab and "Add code snippets." Select the "Change body text font" snippet, modify the code as needed to customize the font face and color, then save the changes.

## 570. Styling the Callouts

Steps to customize callout styling:

1. Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.
2. Under CSS, click **Add code snippets** and select **Change callout colors**.
3. Edit the code with your branding colors and **Save** for site-wide application.

For dark mode styling, refer to [How to change callouts color in dark mode](/help/docs/how-to-change-the-callouts-color-in-dark-mode).

## 571. Image alignment

Image alignment controls image placement (left, right, center) and maintains image-content proportions when resizing. Default alignment is left.

The GIF demonstrates changing the body font style from Nunito to a custom font and color using CSS, with changes applying globally across the Knowledge base.

## 572. Header font style

Document360 allows customization of header fonts (`<h1>`, `<h2>`, `<h3>`, `<h4>`) for knowledge base sites. Sans-serif fonts are common for technical documentation.

## 573. How to change the Header font style in Document360?

To change Document360 header fonts, navigate to Custom CSS in Knowledge Base settings, add/edit the "Change heading font" snippet, customize the CSS, and save. This change applies to all headers throughout the knowledge base. Default font is Montserrat.

## 574. Resizing images on the Knowledge base site

To maintain image proportions while zooming, navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**. Paste one of the following code snippets based on your site version:

- For KB 1.0:

```
.content_block .content_container .content_block_text img {
height: auto !important;
}
```

- For KB 2.0:

```
article img {
height: auto !important;
}
```

Click **Save** to apply changes, ensuring images resize proportionally during zooming.

## 575. Center images in your Document360 Knowledge base

To center images, navigate to **Custom CSS** in your Knowledge base settings, add the provided CSS snippet, and save. Centering uses `margin: 0 auto` and `display: block`. For alignment, use left or right margins as needed. Remember to delete previous snippets before adding new ones to avoid conflicts.

Key CSS snippets:

- **Center**: `.content_block .content_container .content_block_text img { margin: 0 auto; display: block; }`
- **Left**: `margin: auto 0 0 0 !important;`
- **Right**: `margin: 0 0 0 auto !important;`

## 576. Why are the table elements important for a document?

Tables allow for organized, structured presentation of data, enhancing understanding of complex information by arranging it in rows and columns.

## 577. Style the tables using CSS Snippets in Document360

To style tables in Document360, navigate to the Custom CSS & JavaScript section in Settings. Add or modify CSS snippets to customize table borders, padding, background colors, font styles, and potentially hide empty headers. Save changes for them to take effect. Custom CSS can be added in addition to the pre-built snippets.

## 578. Table style

The document highlights the importance of table styles in Document360 for creating rich layouts, with Document360 offering robust table and table element customization options. A table compares three plans—Professional, Business, and Enterprise—regarding their support for custom CSS and JS in knowledge base sites.

| Professional | Business | Enterprise |
| --- | --- | --- |
| Limited CSS/JS customization | Advanced CSS/JS customization | Full CSS/JS customization with priority support |

## 579. Editing a redirect rule

To edit a knowledge base article redirect rule, navigate to Knowledge base > Article redirect rules. Filter to find the correct rule, hover over it, click "Edit", update the fields, and click "Update".

## 580. Adding an article redirect rule

Configure URL redirects for articles in a knowledge base system. Two methods are provided: 1) for redirects based on article slugs at the end of the URL ("Ends with") and 2) for replacing segments of the URL ("Replace with"). Crucially, specify correct paths (starting/ending with `/`) and consider multilanguage/multi-project contexts for broader applicability. Site-level redirects are also described.

## 581. Article redirect rule

The Enterprise plan supports article redirect rules, enabling redirects for any published or draft article URL to prevent broken links and maintain cross-references. Bulk import of redirect rules is also supported.

## 582. Filter a redirect rule

Filter redirect rules by searching source/destination URLs, selecting rule type (Ends with, Replace with, or Both), and filtering by modification date (preset timeframes or custom date ranges).

## 583. Importing redirect rules

Import redirect rules in bulk by uploading a properly formatted CSV file (Source, Destination, RedirectionType, max 1MB) to the Knowledge Base portal's Settings > Knowledge base site > Article redirect rules. Review valid/invalid rules, download a list of invalid rules if applicable, and finally import the accepted rules.

## 584. Exporting redirect rules

Export redirect rules as a CSV from Document360 knowledge base settings > article redirect rules. Rules manage broken links and redirects for articles. Maximum 10,000 rules per project, import limits apply. Redirects can be customized with JavaScript, replace workspace names, or send to homepage. Errors, like too many redirects, are addressed. Key to resolving issues is validating and correcting redirection rules within the system.

## 585. Deleting a redirect rule

To delete an article redirect rule in the Knowledge base portal:

- Navigate to **Settings** > **Knowledge base site** > **Article redirect rules**.
- Use the **Filter** to find the rule.
- Hover over the rule and click the **Delete** icon, or select multiple rules using checkboxes and click **Delete**.
- Confirm by clicking **Yes** in the pop-up.

> **Note**: Deleted rules cannot be retrieved.

![Screenshot of deleting a redirect rule](https://cdn.document360.io/.../Documentation/5_Screenshot-Delete_a_redirection_rule.png)

Access redirect rules via Settings, filter or select the rule(s), delete, and confirm to permanently remove them.

## 586. Configuring the Knowledge base site article settings

Configure various Knowledge Base article settings (accessibility, headers, sidebars, footers, categories, search, FAQ) at the site level with global impact. Customize individual article elements like read-aloud, table of contents, comments, statuses, and related articles. Support for localization is provided for consistent language use across the site. Adjust search options and FAQs separately. Individual article settings can override global site level configurations, but site level overrides often take precedence.

## 587. Article header

Knowledge base article settings will be updated to include customizable header elements like contributor lists, estimated read times, and sharing options, improving user engagement.

## 588. Article settings & SEO

The **Article settings & SEO** section in Document360 enables customization of Knowledge base sites, improving user experience through features like headers, footers, search options, and accessibility. Companies can tailor settings to display contributor names, read times, social sharing, and related articles, enhancing engagement and user feedback.

## 589. Enabling the Article header elements

To enhance article headers across your knowledge base, enable the following settings in the Article settings panel: contributors, read time, follow button, share, print, dates, and PDF download. This project-wide change affects all articles and requires verification.

## 590. Accessing the What’s new feature

View recently published knowledge base articles by clicking the announcement icon, selecting workspace & language, and filtering by date range (last 24 hours, 7 days, or 30 days).

The "What's New" feature in Document360 allows users to access recently published or updated articles. It can be enabled or disabled via Settings > Knowledge base site > Article settings & SEO by toggling the 'Show What’s New' option. The feature's availability across Professional, Business, and Enterprise plans is currently unspecified as the provided table is empty.

## 591. **Article header elements in the Knowledge base site**

The article header includes contributors, read time estimate, follow button, share icon, print option, published/updated dates, and PDF export. Localization allows customizing text per language. FAQs cover hiding breadcrumbs, exporting drafts, setting default email apps, and disabling print/PDF options.

## 592. Follow articles and categories

The Document360 "Follow articles and categories" feature notifies users of new/updated knowledge base articles. Available only for Private/Mixed projects in KB site 2.0 (projects created after June 10th).

## 593. Search in Knowledge base site

The knowledge base site's search function allows fast, relevant searches across articles, categories, and PDF attachments. Advanced search filters and keyword operators improve efficiency for users, essential for large organizations with extensive documentation.

## 594. Attributes used in the Knowledge base site search

Knowledge base search utilizes article & category titles, tags, slugs (articles and categories), breadcrumbs, and content text. Search prioritizes article titles, then tags, slugs, breadcrumbs, and finally content.

## 595. Enabling the ‘Show Follow button’ from KB Portal

To enable the 'Show Follow button':

1. Go to **Settings** > **Knowledge base site** > **Article settings & SEO**.
2. In the **Article header** section, toggle on **Show Follow button**.

- This feature is enabled by default for new Private and Mixed projects.

![Reader notification](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_Reader_Notification.png)

## 596. Using Follow articles and categories in KB Site

_No summary available for this section._

## 597. Search attachments

Search attachments lets users search PDF files (up to 10MB) within a knowledge base. This finds relevant content even if file names don't match search terms, filtering by categories, articles, API docs and files. Enable via Knowledge base portal settings and requires the "Show article files" toggle. Search is limited to article content, titles, slugs and tags if the "Show attachment tab" is off.

## 598. Advanced search

Advanced search allows users to filter results across multiple workspaces and languages, with features like workspace, language, tags, contributors, date, and category filters. Enable it in settings under the Knowledge base portal to access these options. Filters include Workspace (current, all, or specific), Language (current, all, or specific), Tags, Contributor, Date (preset or custom range), and Categories.

## 599. Search filters

Knowledge base search filters allow refining results by category, attachments, workspace (current, all, or specific), and language (current, all, or specific). Filters are located to the left of the search bar.

## 600. Search operator support

Implementing search operators (double quotes for exact phrases and minus signs for excluding terms) significantly improves search precision and user satisfaction. Double quotes find exact phrases, while the minus sign excludes results containing a specific word. Crucial to understand the difference between using "-" for excluding versus its use as part of the word itself.

Step-by-step explanation:

To enable the 'No search result feedback' in Document360:

1. **Access Settings**: Click on the gear icon located at the top right corner to open the Settings menu.

2. **Navigate to Knowledge Base Settings**: In the Settings menu, select "Knowledge base site".

3. **Open Article Settings**: Within the Knowledge base site section, go to "Article settings & SEO".

4. **Locate Search Settings**: In the Article settings, find the "Search settings" section, which is usually in an accordion menu. Click to expand it.

5. **Enable Feedback Form**: Toggle the switch next to "No search result feedback" to activate it.

6. **Configure Behavior**:

- When enabled, users who perform a search with no results will see a feedback form.
- If disabled, they will see a blank results page.

7. **Review Feedback**: The feedback submissions can be viewed in the "Search analytics" module under the analytics section to help improve the knowledge base.

This setup ensures that your team can gather user feedback when searches yield no results, aiding in content improvements. The feedback form appears on both the knowledge base site and its widget.

## 601. FAQs

Advanced search allows combined searches across all workspaces/languages with filters. To hide the home page search, customize the header. Exclude articles by hiding, and external search engines are handled by a separate article. Include API documentation by selecting "All workspaces" in the search filter. For RTL languages (Hebrew, Arabic), search bar adjusts to right-to-left alignment. Search behavior depends on default language selection when mixing RTL/LTR languages. Enable "Include all workspaces in site searches" in Article settings within Knowledge base site settings for Document360 1.0 to search all workspaces.

## 602. Smart bars

Customizable banners/bars in Document360's knowledge base site. Convey information/announcements/updates, tailored to user location, browser, or project language. Enhance user engagement and highlight critical info updates.

## 603. Liking or disliking an article

Users can like or dislike articles in Document360 to provide feedback, helping improve content quality. Feedback can be submitted multiple times. The undo feature for likes/dislikes is only available in KB Site 2.0 projects, requiring migration for its use.

## 604. Creating a new **Smart bar**

Create a custom banner for a knowledge base. Configure its content (text, formatting), appearance (position, color theme), and visibility rules (based on URLs, IP, browsers, devices, language, project). Edit/delete created Smart bars. Supports global or language-specific display.

## 605. Liking or Disliking an article

Like or dislike articles in the Knowledge base by clicking respective icons at the end of an article. Liking is straightforward, while disliking requires a comment. Both actions open feedback panels with options to provide comments and enable update notifications via email. Users can undo their action within 30 days unless cache is cleared. Dislikes without comments aren't counted. Analytics only record active interactions. Feedback can be updated by switching like/dislike, retaining previous comments. The process is consistent across the Knowledge base widget, with a 30-day window for undoing actions in the Public site.

## 606. **Smart bar** **overview**

The Smart bar overview page provides a centralized interface to manage Smart bars, with features including language selection, status toggles, detailed previews, show/hide rules, editing and deletion options, filters for organization, and the ability to create new Smart bars.

## 607. Accessing the ticket deflectors in portal

Ticket deflectors are a feature that reduces support tickets by enabling users to resolve issues independently through self-service options in a knowledge base. This improves user satisfaction and reduces support workload.

## 608. **Ticket deflectors** overview page

The Ticket Deflectors overview page lets you manage ticket deflection forms in the knowledge base. You can view titles, status, update history, create/clone/edit/delete forms, and integrate with helpdesks. Forms can be previewed before publication and copied for sharing. Key limitation: only usable in the main workspace and its languages. Important: set to offline before deleting.

## 609. Cookie consent

A cookie is a small data piece stored by websites in users' browsers. Consent is required for using cookies, especially under GDPR. Document360 allows adding a cookie consent bar or popup to ensure compliance.

## 610. Adding a cookie consent message to your knowledge base site

Enable cookie consent in Settings > Knowledge base site > Cookie consent. Customize the message for all or specific languages, format it with basic tools, choose between a bar or popup banner, select position and theme (light, dark, or custom colors), add a CTA (text, button, or icon), preview, and save.

## 611. Adding **Ticket deflectors** in Header and Footer sections

Add ticket deflector forms to your knowledge base's header and footer navigation, and other relevant sections. Instructions cover adding link via primary/secondary navigation in header or to basic/custom footer. Forms must be activated. Use copied links for other placements like articles or home pages. Clone to duplicate forms, preview changes before publishing, and delete inactive forms. Copy link from settings>> Knowledge base site >> Ticket deflectors.

## 612. Adding a new ticket deflector

Ticket deflectors route users to self-service resources (FAQs, guides) for issue resolution. If users can't find a solution, they are directed to a tailored contact form. Business and enterprise plans support multiple deflectors (up to 10).

## 613. Helpdesk configuration

Ticket deflectors allow integration with **Freshdesk** and **Zendesk** for direct ticket creation. Configuration involves navigating to **Settings** > **Knowledge base site** > **Ticket deflectors**, selecting the helpdesk platform (Freshdesk or Zendesk), and entering required credentials (API key, domain URL, and agent email for Zendesk). Validate and save to complete the integration.

## 614. Adding a new integration

To integrate a third-party app into Document360, navigate to Integrations in Settings > Knowledge base site. Select the desired app, choose Basic or Custom configuration, provide required information (e.g., Description, App ID), and click "Add." Details may vary; check the "Learn more" link for specific app instructions.

## 615. Integrations in Document360

Document360 is a knowledge base platform offering over 25 third-party integrations across categories like analytics, chat, comments, and marketing automation, supported by Professional, Business, and Enterprise plans.

## 616. Creating a new Ticket deflector

To create a ticket deflector in Document360's Knowledge Base:

1. Navigate to **Settings** > **Knowledge base site** > **Ticket deflectors**, then click **New ticket deflector**.
2. **Configure Form Title, Slug, and Description**: Edit the title (max 150 chars), adjust the auto-generated slug if needed, add a description, and ensure the deflector is online.
3. **Set Up Context Questions**: Add qualifying questions (phrased as statements or prompts) to guide users, enabling search options and defining next actions (e.g., contact form or article).
4. **Add Suggestions**: Optionally, include block steps like additional questions, answers, or links to knowledge base articles for further user guidance.
5. **Customize Contact Form**: Define fields (mandatory: Email, First Name, Description; optional: Last Name, Telephone), allow attachments (max 5 files, 2MB each), enable CAPTCHA, and set a post-submission thank-you message (max 250 chars).
6. **Configure Ticket Submission Settings**: Set email notifications (custom subject, recipients), map deflectors to specific emails, and optionally connect to a helpdesk (e.g., Freshdesk) for automatic ticket creation.
7. **Localize Text**: Translate variable texts in the deflector through **Localization & Workspaces** > **Localization variables**.

This setup ensures efficient user guidance, reduces support tickets, and integrates seamlessly with existing systems.

## 617. Editing or deleting an integration

Update integration credentials, description, status (on/off), App ID/URL on the Integrations page by clicking "Edit." Delete integrations by clicking "Delete" after confirmation. Troubleshooting involves checking App ID/URL, internet connection, and app-specific instructions (Learn more). Best practices include periodic review and keeping integrations up-to-date. Add analytics scripts via Custom HTML in site settings.

## 618. Integration controls

The **Integration overview** page lets you manage integrations by toggling status, viewing type, description, and user involvement. Categories include Analytics (9 tools), Chat (11 tools), Commenting (2 tools), and Marketing automation (3 tools), with notable options like Google Analytics, Intercom, Disqus, and Zoho PageSense.

## 619. Code inclusion and exclusion conditions

Document360 integrations allow code filtering. Configure conditions (IP address, workspace, language) to control where/how integrated apps run, targeting specific users or cases. Use AND/OR logic to combine conditions. Example: filter Google Analytics data by IP address, workspace, or language, enabling targeted data collection.

## 620. Integrating **Document360** and **LiveChat**

To integrate Document360 with LiveChat, configure the integration within the Document360 Knowledge Base portal by selecting LiveChat, adding a description, entering the LiveChat ID, and potentially using conditional code. This allows LiveChat users to access Document360 knowledge base information, likely through a chat interface.

## 621. Custom HTML

Add custom HTML snippets for third-party integrations by navigating to **Settings > Knowledge base site > Integrations**. Choose the insertion point (Header, Begin Body, or End Body), paste the code, and save. The snippet appears on the Integrations overview page, enabling widgets like analytics or chat support based on placement.

## 622. Olark

**Olark** live chat tool integrates with Document360 for enhanced customer support. Key features include visitor co-browsing, geolocation, visitor insights (browsing history), and chat transcripts. This improves communication, troubleshooting, and support quality. Plans are likely tiered (Professional, Business, Enterprise).

## 623. LiveChat

LiveChat is an AI-powered customer service tool that enables real-time communication, allowing businesses to respond to customer needs efficiently. When integrated with Document360, it provides instant support to customers while they browse the knowledge base, enhancing user experience and reducing costs. The document includes a comparison table for Professional, Business, and Enterprise plans, though details are not specified. A screenshot illustrates the integration.

## 624. Obtaining the LiveChat ID

For existing LiveChat customers:

- Access the LiveChat dashboard.
- Click on "Install" and locate the LiveChat ID in the manual installation snippet using the prefix `window.lc.license=`.

For new LiveChat users:

- Copy the LiveChat ID during the initial account setup process.
- Integrate the ID into your Document360 knowledge base for chat functionality, enabling bots to handle common queries.

## 625. Obtaining the **Olark** ID

To get the Olark ID, log into Olark, go to Settings > Channels > Installation Code, copy the code, find the `olark.identify()` function, copy the 13-digit ID following it. Use this ID for Document360 integration.

## 626. Freshchat

Freshchat is a messaging platform for sales & customer engagement, supporting AI-powered chatbots and integration with WhatsApp, Apple Business Chat, Facebook Messenger, and LINE for a unified messaging experience across websites & apps. Key features include a consolidated inbox and AI-powered self-service chatbots to improve efficiency.

## 627. Integrating **Document360** and **Olark**

To integrate Document360 with Olark, log in to the Document360 Knowledge Base portal, navigate to Settings > Knowledge Base Site > Integrations, select Olark, enter your Olark ID, add a description, and click Add.

## 628. Integrating **Document360** and **Freshchat**

To integrate Document360 and Freshchat, access Document360's Knowledge Base portal settings, choose "Freshchat" integration, enter a description, paste the Freshchat token (obtained on Freshchat's dashboard under Settings > Admin settings > Configuration and Workflows > Web Chat Settings > Integration Settings), optionally configure code inclusion/exclusion rules, and click "Add." This enables searchable knowledge articles to be available directly within Freshchat for users.

## 629. Chatra

Chatra, a real-time chat software, integrates with Document360's knowledge base to provide instant customer support during content navigation. This integration helps reduce operational costs and improve customer satisfaction.

To integrate Crisp with Document360, navigate to Settings > Knowledge base site > Integrations, select Crisp, enter a description and your Crisp website ID, which can be found in Crisp's Settings > Website Settings. Use code inclusion/exclusion conditions if needed, then click Add. This integration allows chatbot functionality with email campaign and mobile app support.

## 630. Integrating **Document360** and \***\*Chatra\*\***

Integrate Document360 knowledge base with Chatra live chat. Get Chatra ID. Configure integration in Document360 Settings > Knowledge base site > Integrations. Add Chatra ID to Document360. Optional: Use code inclusion/exclusion conditions. Chatra ID retrieval instructions for existing and new users are included. This integration enables real-time user support, targeted chats, and visitor tracking within the Document360 knowledge base.

## 631. Crisp

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
| Zendesk, Slack, Trello | Salesforce, Mailchimp, HubSpot | Jira, Google Analytics, Advanced CRM |

**Crisp** is a centralized shared inbox platform designed to streamline customer interactions. It offers features like cost efficiency through simultaneous conversation handling, predefined answers for common queries, and enhanced communication tools such as images and GIFs to improve customer engagement.

**Key Features:**

- Cost Efficiency: Manage multiple conversations simultaneously.
- Predefined Answers: Automated responses for common customer inquiries.
- Enhanced Communication Tools: Include visuals in messages for better interaction.

This platform integrates third-party tools across Professional, Business, and Enterprise plans, scaling from essential to advanced integrations based on organizational needs.

## 632. Gorgias

Gorgias is a multi-channel helpdesk solution integrating with business applications and communication channels, providing support agents a unified customer view. Integrates with Document360 knowledge base for streamlined customer query management.

## 633. Integrating **Document360** and **Gorgias**

To integrate Document360 and Gorgias, obtain the Gorgias ID from Gorgias, then add it as a new integration in Document360's Knowledge Base portal settings. Optional: Configure conditional code inclusion based on IP address, Workspace, or Language.

## 634. Doorbell

Doorbell is a user-friendly chat software for collecting, managing, and analyzing customer feedback, designed to enhance feedback with features like screenshot attachments. It integrates seamlessly with Document360, providing valuable insights to improve customer interactions and conversions.\
![003_Screenshot_Doorbell_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Screenshot_Doorbell_Integration.png)

## 635. Integrating **Document360** and **Doorbell**

_No summary available for this section._

## 636. Obtaining the **Gorgias** App ID

For existing Gorgias users, log in, go to **Settings > Channels > Chat**, add a new chat integration, and install manually. For new users, copy the Gorgias ID during LiveChat setup and integrate it with Document360. This allows team collaboration and Ticket management.

## 637. Sunshine Conversations

Sunshine Conversations is an API-based CRM tool on AWS for customer communication via social media & messaging. Integration with Document360 knowledge base is possible to streamline customer communication and boost engagement.

## 638. Integrating **Document360** and **Belco**

Integrate Document360 knowledge base with Belco platform by obtaining Belco Shop ID via Belco application setup or initial installation. Configure the integration within the Document360 Knowledge base portal, adding a description and Shop ID. Optionally, use code inclusion/exclusion rules, then log in to Belco to manage chats. This links a chatbot interface to Document360's structured knowledge base for e-commerce users.

## 639. Belco

Belco is a real-time chat software that integrates with Document360 to offer instant customer support. It allows agents to manage multiple conversations simultaneously, enhancing efficiency and reducing operational costs.

## 640. Kommunicate

Kommunicate's integration with Document360 knowledge base provides real-time customer support via chat, powered by AI chatbots, to improve efficiency, reduce operational costs, and enhance customer satisfaction. Integrates AI-powered chatbots for faster query resolution and improves support experience within knowledge base.

## 641. Integrating Document360 and \***\*Sunshine Conversations\*\***

To integrate \***\*Sunshine Conversations\*\*** with \***\*Document360\*\***, follow these steps: navigate to the Knowledge base portal, go to Settings > Knowledge base site > Integrations, select \***\*Sunshine Conversations\*\***, add a description, and enter your unique \***\*App ID\*\***. Optionally, use code inclusion/exclusion conditions. Click Add to complete the integration.

## 642. Obtaining the \***\*Sunshine Conversations\*\*** ID

To obtain the Sunshine Conversations ID, follow these key steps: Access the dashboard, create a new app, fill in the details, save the app, navigate to the app's settings, and locate the App ID in the App Details section. Optionally, API keys can be generated in the same settings menu.

## 643. Integrating Document360 and **Kommunicate**

To integrate Document360 and Kommunicate, navigate to Document360's Knowledge Base Settings > Integrations, select Kommunicate, add a description, enter your Kommunicate ID (obtained from the Kommunicate app), and optionally configure code inclusion/exclusion conditions based on IP, workspace, or language. Click "Add" to complete.

## 644. Integrating Document360 and Google Analytics

Integrate Document360 with Google Analytics via Basic (standard ID) or Custom (snippet) configurations. Basic requires Google Analytics ID; Custom needs a snippet. Optional code inclusion/exclusion conditions based on IP, Workspace, and Language are possible. Document360 Settings -> Integrations -> Google Analytics(New) to get started.

## 645. Obtaining Google Analytics ID

To get the Google Analytics ID for your Document360 knowledge base, navigate to your Google Analytics account, find the "Tracking ID" in the property settings, and input that ID into the Document360 portal's corresponding field. This integration allows tracking key user metrics like views, location, and behavior.

## 646. Obtaining the **Kommunicate** App ID

Obtain your **Kommunicate** App ID by navigating to **Settings > Install** in your account (for existing users) or during the installation process (for new users). This ID is crucial for integrating **Kommunicate** with your **Document360** knowledge base portal, enabling efficient customer chat management, lead qualification, and 24/7 support.

**Step-by-Step Explanation:**

1. **Create a Google Analytics Account:**

- Navigate to the Google Analytics website (analytics.google.com) and sign in with your Google account. If you don’t have an account, create one.

2. **Set Up a Property:**

- In the Admin section, select "Create Property." Choose "Website" and fill in the required details about your knowledge base site, such as name, URL, and industry category.

3. **Retrieve the Google Analytics ID:**

- In the Admin section, go to "Property Settings" for your newly created property. The Google Analytics ID (Tracking ID) is listed under "Property." Copy this ID.

4. **Log in to Document360:**

- Access your Document360 account with administrative privileges.

5. **Navigate to Integrations:**

- In the Document360 dashboard, locate the "Integrations" or "Analytics" section. This is typically found under settings or site configuration.

6. **Input the Google Analytics ID:**

- Paste the copied Google Analytics ID into the specified field within Document360's integration settings. Save the changes.

7. **Verify Integration:**

- After implementation, monitor Google Analytics to ensure data is being collected. Check real-time reports to confirm activity from your knowledge base.

8. **Compliance and Privacy:**

- Review your site's privacy policy to include information about Google Analytics tracking. Ensure compliance with data protection regulations applicable to your audience.

By following these steps, you can successfully integrate Google Analytics with your Document360 knowledge base, enabling insights into user behavior and interactions.

## 647. Google Analytics (GA4)

Document360 supports GA4 integration through different plans, offering tracking for metrics like conversions, traffic, and user behavior. GA4 uses a Measurement ID starting with 'G-', replacing GA3's 'UA-' Tracking ID, and marks the latest evolution in analytics with enhanced data capabilities.

## 648. Obtaining Google Analytics ID (Measurement ID)

To get your Google Analytics Measurement ID (G-XXXXXX): Go to Google Analyti cs Admin > Property Settings > Data Streams. Select your stream, click Configure tag settings. Copy the 'G-' ID from the top right of the "Your Google Tag" section. Paste this into your Document360 portal's Google Analytics ID field.

## 649. Google Tag Manager

Google Tag Manager is a tag management system for easily updating website/app tags (measurement codes) for better analytics, marketing, and potentially site analytics/remarketing.

## 650. Integrating Document360 and Google Analytics(GA4)

Learn how to integrate GA4 with Document360 to track user interactions, popular articles, and locations. Requires a Google Analytics account and ID. Follow steps to enable integration via Settings > Knowledge base site > Integrations. Choose between basic configuration (using Measurement ID) or custom configuration (adding custom events). Optional conditions for code inclusion based on IP, workspace, or language.

## 651. Integrating Google Tag Manager with Document360

To integrate Google Tag Manager with Document360's Knowledge Base, select either Basic or Custom configuration. Basic requires a Google Tag Manager ID. Custom allows custom snippet code and conditional code inclusion (by IP, Workspace, Language). Both methods add tracking.

## 652. Heap

Heap is a product analytics tool for analyzing user behavior. It provides event feeds and analytical tools (funnels, retention, etc.) to improve product and marketing effectiveness.

## 653. Integrating Document360 and **Heap**

To integrate Document360 with Heap, select "Heap" in Document360's Integrations settings. Choose between basic configuration (needs Heap App ID) or custom configuration (allows custom event snippets and conditional code inclusion, e.g., by user IP). Essential information includes providing a description and the Heap App ID for basic integration.

## 654. Obtaining Google Tag Manager ID

To obtain your Google Tag Manager ID, follow these steps:

- **For Existing Users**: Navigate to the workspace section in your Google Tag Manager account. Here, you'll find the code snippet that contains your ID.
- **For New Users**: During the initial setup, after creating your container, you'll receive a code snippet that includes your Google Tag Manager ID.

This ID is essential for integrating Google Tag Manager into your platform, enabling features like conversion tracking and site analytics.

## 655. Segment

Segment is a data platform that simplifies the integration of third-party tools with a knowledge base site, enabling efficient customer data collection, transformation, and analysis. It streamlines data management, allowing teams to spend more time utilizing insights rather than data collection. Key value proposition: enhanced user behavior understanding and competitive advantage from detailed analytics.

## 656. Obtaining the **Segment** ID

To get your Segment Account SID, navigate to the Segment dashboard, find the "Develop" section on the left toolbar, and copy the Account SID from the "Account info" section. This SID is needed for Segment integration in the Document360 system, enabling better user understanding and knowledge base enhancement.

## 657. Obtaining **Heap** App ID

For **existing Heap customers**:

- Navigate to Account > Install in the dashboard.
- Select Web and copy the Heap ID from the provided snippet.

For **new Heap customers**:

- The App ID is provided during the integration setup.
- Access your Heap account post-setup to view the ID and manage user interactions.

**Note**: Heap integration enables advanced analytics, allowing user behavior analysis for product improvements.

## 658. Hotjar

Hotjar is a user behavior analytics tool offering heatmaps, session recordings, and surveys to understand user interactions and provide product insights. No specific integration details for a knowledge base are provided.

## 659. Integrating Document360 and **Segment**

Integrate Segment with your Document360 knowledge base through Settings > Integrations. Choose between Basic setup (using your Segment ID) for standard tracking or Custom setup (with snippet code) for advanced event tracking. Optional conditions can control code execution. Complete the setup and verify integration functionality.

## 660. Integrating Document360 and **Hotjar**

Integrate Hotjar with Document360 to track user behavior via Heatmaps and recordings, enhancing insights into knowledge base interactions.

Steps:

1. Navigate to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **Hotjar** and choose between Basic (using your Hotjar ID) or Custom (with custom event codes) configuration.
3. Enter a Description and Hotjar ID for Basic setup or add custom snippet code for advanced tracking.
4. Optional: Set inclusion/exclusion conditions based on IP, Workspace, or Language.
5. Save the configuration to enable Hotjar tracking on your Document360 portal.

## 661. Integrating **Amplitude** and Document360

To integrate Amplitude with Document360's knowledge base, use either Basic or Custom configuration, providing an Amplitude API key and optional code inclusion/exclusion conditions (IP, Workspace, Language). Basic config is straightforward, while Custom config allows for custom events and advanced integrations. Implementing Session Replay with Autocapture involves adding a specific JavaScript snippet to enable this feature.

## 662. Obtaining the **Hotjar** ID

To obtain the Hotjar ID, navigate to the Hotjar setup section by clicking "Set up Hotjar" from the left sidebar. Locate the snippet containing the `hjid` variable and copy the ID. This ID is essential for enabling Hotjar's analytics tools like heatmaps and surveys.

## 663. Amplitude

Amplitude is a product analytics tool that helps analyze product usage data and user behavior. It offers real-time analytics, flexible user segmentation, and a feature called Microscope. Integration plans for third-party tools in a knowledge base site are organized as follows:

- **Professional Plan**: Integrates with essential third-party tools such as basic analytics tools and SEO optimizers.
- **Business Plan**: Includes a broader range of integrations, such as advanced analytics and customer support software.
- **Enterprise Plan**: Provides extensive integration with custom tools, APIs, and advanced analytics solutions.

## 664. FAQ

Amplitude is a collaborative analytics platform for product tracking. It provides reports for product optimization and helps track visitors. A knowledge base platform (separate from Amplitude) lets teams manage content and users.

If you're new to Amplitude, sign up and obtain your API key during the initial setup. For existing users, navigate to your project dashboard, go to the General section under Projects to find and copy your API key.

## 665. Obtaining the **Amplitude** API Key

To obtain an Amplitude API key:

- **New customers**: Register at [Amplitude](https://amplitude.com/amplitour/register) and receive the API key during account setup.
- **Existing customers**: Access the key in the project dashboard under **Projects > General** section.

## 666. FullStory

FullStory is a user-experience intelligence tool offering real-time analytics, retention tracking, and unique features like Magic Moments for reviewing user sessions. Integration is available across all tiers: Professional includes basic metrics, Business adds advanced analytics, and Enterprise provides unlimited access to all features.

## 667. FAQs

Integrate FullStory for website analytics & recording. Document360 uses a FullStory ID for this integration, and manages knowledge base content (categories, articles, etc.).

## 668. Obtaining the **FullStory** ID

For existing users, navigate to the dashboard, click the work name dropdown, select **Settings**, and under **Install your FullStory snippet**, find your FullStory ID using `window['_fs_org']`. For new users, after completing the integration in Document360, access your FullStory account segment to view analytics and track your knowledge base site behavior.

## 669. Integrating Document360 and **FullStory**

Integrate FullStory with Document360 by navigating to **Settings** > **Integrations**, selecting FullStory, configuring with basic (description + ID) or custom (snippet code), and optionally setting inclusion/exclusion conditions. Click **Add** to save.

## 670. Mixpanel

Mixpanel is an event-based analytics tool integrated with Document360 to track user activity, including conversions from feature pages, sales funnel drop-off rates, and effective referral sites. It focuses on user event tracking for understanding user journey, not general site data.

## 671. Integrating **Document360** and **Mixpanel**

To integrate Document360 with Mixpanel, navigate to Integrations in the Knowledge Base settings, select Mixpanel, and choose either Basic or Custom configuration. Basic requires adding JavaScript via Document360's Customize site after basic setup. Custom allows adding JavaScript directly within the integration configuration. Both options permit conditional code inclusion based on IP, workspace, or language.

## 672. Obtaining the **Mixpanel** ID

To get your Mixpanel ID: 1. Log in to your Mixpanel account. 2. Go to Settings > Set up Mixpanel. 3. Copy the Mixpanel ID displayed.

To integrate Mixpanel with Document360, choose between Basic or Custom configuration. Basic requires minimal setup but needs manual JavaScript code addition later. Custom offers advanced tracking with direct code input during setup. Remember, data transmission to Mixpanel only occurs after JavaScript implementation. Tailor your code to specific needs and ensure thorough testing, possibly in a sandbox environment. Technical expertise may be necessary for customization.

## 673. VWO

VWO is an all-in-one optimization platform for businesses, enabling feature testing, user intent extraction, push notification management, and product roadmap creation/optimization.

## 674. How will you integrate Document360 and VWO?

Integrate Document360 knowledge base with VWO for website A/B testing. Obtain VWO Account ID from VWO account (new or existing). Configure Document360 integration with basic or custom settings, potentially adding custom events. Optionally use code inclusion/exclusion based on conditions (IP, workspace, language.) Manage and run website optimization and tests through VWO interface after successful integration.

## 675. Sample JavaScript Codes for **Mixpanel** Integration

These examples provide foundational code snippets for integrating **Mixpanel** tracking into **Document360**, focusing on page view and button click tracking. They require customization for specific use cases, with a **Mixpanel ID** needed for implementation. Integrating **Mixpanel** allows for enhanced event-based analytics to optimize user behavior insights.

## 676. ZOHO PageSense

Zoho PageSense is a platform for website optimization and personalization. It enables tracking, analysis, optimization, and personalization to boost conversion rates. No pricing or specific features are detailed in the provided document.

## 677. How will you integrate Document360 and Zoho PageSense?

Integrate Document360 and Zoho PageSense by navigating to Document360's Integrations settings, selecting Zoho PageSense, inputting the Zoho PageSense ID (obtainable from the Zoho PageSense Interface application), and optionally applying code inclusion/exclusion conditions. This unified platform offers complete conversion rate optimization (CRO) solutions by tracking, testing, analyzing, and optimizing product elements (heatmaps, A/B testing, form analytics, session recordings) to boost conversions.

## 678. Freshmarketer

Freshmarketer is a cloud-based marketing automation tool offering A/B testing, heatmaps, and funnel analysis to enhance conversion optimization. Its features provide insights into user behavior and identify drop-offs, aiding in improving user experience. The integration with Document360's knowledge base allows seamless access to these analytics, enhancing documentation effectiveness.

To integrate Freshmarketer with Document360, follow these steps:

1. Obtain the Freshmarketer Script Tag Src by logging into your Freshmarketer account. Navigate to Admin settings > Tracking and Integrations > CRM Code Library, and retrieve the script URL.

2. In Document360, go to Settings > Knowledge base site > Integrations, select Freshmarketer, and provide a description along with the script tag.

3. Optionally, set inclusion/exclusion conditions for targeted tracking.

4. Save the integration to enable features like contact management, campaigns, and automated emails.

This integration enhances marketing efforts by leveraging knowledge base analytics for personalized campaigns. Ensure correct permissions and test post-integration for functionality.

## 679. Integrating GoSquared with Document360

To integrate GoSquared with Document360, obtain the GoSquared Project Token from your GoSquared account. Add this token to the Document360 Knowledge base portal integrations settings. This enables behavioral data analysis and chat features in GoSquared, using Document360 user data for insights.

## 680. GoSquared

GoSquared is a platform that helps businesses turn visitors into loyal customers through an integrated suite of tools. Key features include **Analytics**, **Live Chat**, **Automation**, and **Customer Data Hub**, along with the **Now dashboard** for real-time insights and the **Trend dashboard** for historical insights. [Learn more](https://www.gosquared.com/support/articles/1604607-what-is-gosquared).

## 681. Commento

Commento, a modern commenting system, can be integrated into a knowledge base website. It's fast, bloat-free, and visually appealing. Integration details across differing subscription tiers are not yet provided.

## 682. FAQ

Why should I integrate GoSquared with Document360?\
Integrating GoSquared allows you to engage with customers via multi-channel messaging, live chat for conversions, and web analytics.

Document360 is a knowledge base platform that enables project members to create and manage content, including categories, articles, and templates. It also supports file management, team account administration, and site settings configuration for branding, domain, and security.

## 683. Disqus

Disqus is a multilingual commenting platform for Document360 articles, offering design integration and moderation features. Suitable for Professional, Business, and Enterprise users.

## 684. FAQ

To fix the '_This domain is not registered with Commento_' error on your Knowledge base site, disable the Commento integration by navigating to **Settings > Knowledge base site > Integrations** and turning off the Commento toggle.

To integrate Commento with Document360, choose between two methods:

**Method 1: Direct Integration**

1. Navigate to Document360's Settings > Knowledge base site > Integrations.
2. Under Comments, select Commento and click Add.
3. Enter a description and set inclusion/exclusion conditions if needed.
4. Click Add to complete the setup.
5. Check Commento for analytics and import Disqus comments if applicable.

**Method 2: Custom HTML Integration**

1. In Commento, go to the Staging tab and click Installation Guide.
2. Modify the Universal Snippet's URL to your project's domain.
3. Copy the code, then in Document360, navigate to Settings > Knowledge base site > Integrations.
4. Under Custom HTML, paste the code and select insertion at the end of the body.
5. Click Add to finalize.

Choose Method 1 for simplicity or Method 2 for more customization.

## 685. Accessing the Extensions page

Access extensions in the Knowledge base portal's Settings > Knowledge base portal > Extensions. Filter by category (All extensions, Helpdesk, Team collaboration, Code repositories, Translation & browser). Click "Connect" on the desired extension tile.

**Categories:** Helpdesk (Freshdesk, Zendesk, Intercom, Salesforce), Team collaboration (Slack, Microsoft Teams, Drift, Zapier, Make), Code repositories (GitHub), Translation & browser (Chrome, Crowdin, Phrase).

To integrate Disqus with Document360, navigate to the Integrations section in Document360's settings, add the Disqus integration, and paste the Disqus URL obtained from your Disqus account. This URL is found in the Universal code snippet. After adding, Disqus commenting will be enabled on your Document360 articles, allowing for user interactions and admin moderation.

## 686. Freshdesk

Freshdesk integrates with Document360 knowledge base, enabling support agents to access and use articles directly within Freshdesk, improving efficiency. Agents can also create articles in Document360 from within Freshdesk.

## 687. Document360 Extensions - Getting started

Document360 Extensions enhance your Knowledge Base by integrating with third-party platforms, enabling connected workflows. Available across Professional, Business, and Enterprise plans, they allow direct access, management, and sharing of content from other tools, reducing switching between apps and improving team collaboration.

## 688. Feature highlights

Freshdesk now seamlessly integrates with Document360, enabling agents to search, share, and even create knowledge base articles directly within Freshdesk. This integration streamlines support workflows by providing relevant information quickly and allowing for knowledge base updates directly from ticket responses.

## 689. Freshservice

_No summary available for this section._

## 690. Basic configuration steps

To integrate Document360 & Freshservice, generate a Document360 API token, copy it, access Freshservice, find the Document360 app in the marketplace, paste the token, and click "Install". Repeat for multiple Document360 knowledge bases.

## 691. Zendesk

Zendesk integrates with Document360's knowledge base, allowing support agents to access and create articles directly within Zendesk, improving customer support response times and article creation efficiency.

## 692. Basic setup guide

_No summary available for this section._

## 693. Basic setup guide

To connect Document360 to Zendesk, first install the app from the Zendesk Marketplace. Then, generate an API token in Document360 and paste it into the Zendesk setup. Enter a title and desired restriction settings (optional). This configures the connection.

## 694. Feature highlights

- **Search and Share Articles:** Access Document360's knowledge base sidebar from Freshservice tickets to search for articles. Features include auto-suggestions based on ticket titles, +Link to add URLs, and +Content to paste full articles. Automated search recommends articles using the ticket title.

- **Create Articles:** Directly create and publish knowledge base articles from Freshservice. Includes a text editor with formatting options (H2/H3, bold, italic, lists) and insert features (code blocks, hyperlinks, images). Note: New categories cannot be created via Freshservice.

## 695. Create an article on the Knowledge base from Zendesk

Create Zendesk knowledge base articles directly from the Document360 app without needing extra team accounts. Click "Create Article," input title and category. Write content in Markdown, and publish. A quick launch feature allows for linking/inserting articles into Zendesk chat replies.

## 696. Search and share articles on ticket responses

The Document360 app in Zendesk allows agents to instantly search and share Knowledge Base articles while responding to tickets. The app automatically searches articles based on the ticket title or via a search bar. Agents can preview articles and choose to link them, insert their full content, or open them in a new tab, enhancing efficiency without switching between tabs.

## 697. Zendesk federated search

To set up Zendesk Federated Search in Document360, navigate to **Settings** > **Knowledge base portal** > **Extensions** > **Zendesk**, then click **Setup** and configure under **Zendesk federated search**. Provide your Zendesk subdomain, admin email from Zendesk's support addresses, and API token generated from Zendesk API settings. Validate the details, select the workspace and language for syncing, and save the configuration. This allows searching Document360 articles within Zendesk as external sources.

## 698. Intercom

Intercom integrates with Document360 to enable real-time customer support by allowing agents to search and share knowledge base articles within Intercom chats. Requires a valid Intercom account and workspace ID.

## 699. Removing Document360 from Zendesk

To uninstall Document360 from Zendesk, navigate to **Apps and integrations** > **Zendesk Support apps**, locate the Document360 app, hover to access the settings icon, click **Uninstall**, and confirm in the prompt.

## 700. FAQ

**Can I push multiple articles from Zendesk to Document360 simultaneously?**

You can transfer articles from Zendesk to Document360, but only one at a time.

## 701. Search for and share articles in chat response

To share knowledge base articles with customers in Intercom chat, click the Document360 icon, search for the relevant article, choose the desired article from the list, and send it to the customer. Customers can click on the article assistant to open it in a new tab. Alternatively, send an Article search app assistant for customer-initiated article searches within the chat.

## 702. Article search app assistant

Document360 app assistant integrates with Intercom for creating new articles. Users create articles by filling in title, body, and category in the app. This process mirrors the creation of articles in the Document360 portal.

## 703. Salesforce

Document360 integration with Salesforce is an add-on feature for Enterprise plans only. This integration allows support agents to access and create knowledge base articles directly within the Salesforce console.

To integrate Intercom with your Document360 Knowledge base portal:

1. Navigate to **Settings > Knowledge base portal > Extensions**, and locate Intercom under the Helpdesk section.
2. Click **Connect** on the Intercom tile to generate an API token.
3. Sign in to Intercom if prompted, then authorize access on the authorization page to allow Document360 to integrate.
4. After redirecting back to Document360, click the **Edit** icon on the Intercom tile.
5. Select the desired workspace and language from the dropdowns to finalize the integration.

To uninstall:

1. In Intercom, go to **Settings > Integrations > App Store > Your installed apps**.
2. Find the Document360 app, then click **Uninstall** to remove the integration.

## 704. Basic setup guide

To connect Salesforce with Document360:

1. **Create a Salesforce account** via the [signup page](https://www.salesforce.com/in/form/signup/freetrial-sales/), verify your account, and choose a plan.
2. **Install the Document360 app** from the [AppExchange page](https://appexchange.salesforce.com/listingDetail?listingId=a0N4V00000GYmjZUAT&tab=e), selecting your environment (Production/Sandbox) and user access level.
3. **Add a Visualforce page** in Salesforce Developer Console using the provided code snippet to integrate Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Salesforce.png)

## 705. Authorize Salesforce integration from your Document360 portal

To connect Document360 to Salesforce, navigate to Settings > Knowledge Base Portal > Extensions > Salesforce. Purchase the Salesforce add-on if needed. Choose live or sandbox environment. Click "Connect" and "Allow" in the authorization window. Confirm connection status in the Salesforce assistant. View configuration details and delete connection if needed. Salesforce is a separate purchase within your Document360 project.

## 706. Searching and managing Knowledge base content in Salesforce

Use the **Knowledge Base** tab in Salesforce to search and view articles and categories. Select workspaces and languages via dropdown menus. Search by name, content, tag, or slug, then filter results by name. Clicking an article or category opens it in **Reader View**, where you can copy links, open articles on your site, or copy specific excerpts for reuse. Use the **Copy link** and **Open site** icons for quick access. The **Filter** field helps refine searches, and the category manager aids in organizing content.

## 707. Cases page

Enterprise Salesforce plan supports integrating Document360 with Cases to provide agents direct access to knowledge base articles, accelerating case resolution. Other plans do not.

## 708. Integrating Document360 and Cases home page

Integrate Document360 into Salesforce Cases by embedding a Visualforce component. Customize the component size in Lightning App Builder to match Document360 page specs. Create and manage knowledge base articles directly within Salesforce, accessible from cases. Articles are initially drafted and require admin/owner approval for publishing on Document360.

## 709. Recommendations

Document360 automatically recommends relevant articles based on case subject keywords, displayed with title, snippet, copy options, and open in new tab links. Users can customize workspace and language to filter recommendations. Displays up to 5 articles at a time.

## 710. FAQs

- The Document360 and Salesforce integration uses REST APIs for data transfer, with authentication via API keys, OAuth tokens, or other secure methods.
- Custom fields in Document360 can be mapped to custom objects in Salesforce for tailored integration.
- Document versioning is handled by tracking changes and updating corresponding Salesforce records accurately.
- Security measures include encryption, secure API authentication, role-based access, and industry compliance.
- Upgrading involves reviewing API changes, testing in staging, and ensuring compatibility before deployment.
- Salesforce can act as an Identity Provider (IdP) with SAML or OpenID for Single Sign-On.

## 711. Commands and uses

Document360 integrates with Slack via `/doc360` commands. Search knowledge base articles by keyword (`/doc360 search query`). Select version/language for search results. Open or link articles directly in Slack. Create articles (`/doc360 create Title`) within Slack using Markdown. Choose version and category. Articles are created in draft form. Cannot create categories from Slack.

## 712. Slack

Slack is a cloud-based communication platform enabling team collaboration. Integrating Slack with Document360 allows agents to access the knowledge base directly, search articles, create documentation, and use the Markdown editor for any version or language.

## 713. Basic setup guide

To connect Document360 with Slack, navigate to Knowledge base portal settings, select Extensions, find Slack, click Connect, grant workspace access, and confirm the connection.

## 714. Removing the Document360 app from the Slack workspace

To remove the Document360 app from your Slack workspace, access the Slack App Directory, select Manage, choose Document360, find "Remove application," and click it. Contact support@document360.com if needed.

## 715. Teams and **Document360**

Integrate **Teams** with **Document360** for seamless article searching and sharing within Teams, eliminating context switching.

## 716. Basic setup guide

To connect Document360 to Microsoft Teams: 1) Add the Document360 app to Teams. 2) Generate an API key in Document360's knowledge base portal. 3) Add the API key in the Teams app. Access the knowledge base in Teams using `/Document360` command. Uninstall by right-clicking the app.

## 717. Microsoft Teams

Microsoft Teams is a collaboration platform that streamlines messaging, document sharing, and team discussions. The Enterprise plan supports MS Teams extensions integration with Document360, while Professional and Business plans do not.

## 718. Searching and Sharing Articles

Search and share Document360 articles within Microsoft Teams using either the app logo or `/Document360search` command. Select articles from search results and customize share messages before sending to contacts or channels.

## 719. Drift

Integrating Drift (conversational messaging) with Document360 (knowledge base) allows support agents to share relevant articles directly within Drift chats, improving response time and streamlining customer support.

## 720. FAQs

Microsoft Teams does not have a built-in Knowledge base feature, but you can integrate platforms like Document360 for this purpose. You can share content from your Knowledge base, such as articles, links, or files, directly in Teams chats or posts. Additionally, you can add a Microsoft Teams extension for non-readers using an API token, enabling communication between different software applications.

## 721. Zapier - Setup guide

To integrate Document360 with other apps using Zapier, you need a Zapier account and a connected account in the other app. Zapier automates workflows (Zaps) between the applications. Refer to Zapier's getting started guide for detailed setup instructions.

## 722. Basic setup guide

To integrate Drift with Document360, follow these steps:

1. **Obtain JavaScript code**: Sign up for Drift, log in, go to Settings > App Settings > Install, select JavaScript, and copy the script. Existing users can skip steps 1 and 2.

2. **Set up Drift Chat**: Paste the JavaScript code into Document360's Custom CSS & JavaScript section under Knowledge base settings.

3. **Configure knowledge base**: Connect Document360 to Drift via the Extensions section, authorize, and use /doc360 slash commands to search and share articles.

## 723. Zapier use cases for Document360

Zapier connects Document360 to various applications, enabling workflow automation. Key integrations include Google Docs, Sheets, Drive; Trello, GitHub, Confluence, CRM platforms (Zoho, Pipedrive, Hubspot, Asana, monday.com); Typeform, email (Gmail, Mailchimp), and more, to streamline document management and task/project execution. This allows for automated data transfer, updates, and notifications between Document360 and connected apps using API rules.

## 724. Integrating Google Docs with Document360

Automate content flow from Google Docs to Document360 using Zapier. Connect the platforms via Zapier, map relevant Google Docs fields (title, content, etc.) to Document360, and test the connection. Configure trigger events in Google Docs (e.g., new documents) to create new articles in Document360. This saves manual transfer time and effort.

To generate an API key in Document360 for connecting your knowledge base with third-party applications via Zapier, follow these steps:

1. **Access the Project**: Navigate to your desired Document360 project.
2. **Open Settings**: Click on the settings cog.
3. **Select Extensions**: Go to Knowledge base portal > Extensions.
4. **Team Collaboration**: In the Extensions section, select Team collaboration.
5. **Connect Zapier**: Locate the Zapier extension tile and click Connect.
6. **Retrieve API Key**: A popup will appear with a generated Token (API key); use the copy icon to copy it.

This token enables integration with third-party services on Zapier, facilitating automated workflows and data synchronization.

## 725. Integrating Google Docs with Document360

Document360 supports integration with Google Docs via Zapier extensions, available exclusively on the Enterprise plan. This integration enables seamless document management, automates workflows, and enhances collaboration by centralizing documents. Organizations can leverage this setup to streamline operations but must ensure appropriate security measures and plan requirements are met.

tag and provide a markdown heading "## Zap overview". 6. Create a concise TLDR that captures the essential information from the document, focusing on the main actions and steps outlined. 7. Close the

## 726. Integrating Google Sheets with Document360

Use Zapier to automate syncing Document360 article additions to a Google Sheet. Connect Document360 and Google Sheets via Zapier creating a "Zap" that triggers on new articles, automatically adding details (mapped article attributes) to the specified Google sheet. Requires signing into Zapier, Document360 & Google accounts, selecting trigger/action events and mapping columns. Re-selection required if Google Sheet names change.

To integrate Google Sheets with Document360, you can use Zapier to automate workflows, such as creating a new article in Document360 when a new row is added to a Google Sheet. This feature is supported in Document360's Business and Enterprise plans.

## 727. Zap overview

To delete a Zap, navigate to the Zapier dashboard, locate the desired Zap, click the arrow, and select "Turn off and delete Zap". This action permanently removes the Zap. Note: Google Sheets setup is required for Zap integration, detailed in separate documentation.

## 728. Integrating Document360 with Google Drive

Document360 integration with Google Drive enables seamless file access, linking, management, and sharing within the Document360 knowledge base, improving collaboration and documentation workflows.

## 729. FAQ

**How is a spreadsheet different from a worksheet?**

A spreadsheet is the overall file you create or open in Google Drive, whereas a worksheet is a specific tab within that file where data is entered and managed.

<a id="google-drive-document360"></a>

## 730. Zap overview

Zapier is a no-code automation tool connecting web apps. View/edit/delete Zaps (automated workflows) on the Zap overview page. To delete, navigate to the Zapier dashboard, click the arrow next to desired Zap, and select "Turn off and delete Zap".

## 731. Integrating Trello with **Document360**

Automate documentation task management by connecting Trello and Document360 using Zapier. This syncs article publishing events from Document360 to Trello cards, including attributes like content, contributor, and publish date. Users configure triggers (Document360 article publishing) and actions (Trello card creation) via Zapier, ensuring consistent updates in both platforms. This streamlined workflow improves efficiency for documentation teams.

## 732. Integrating Document360 with Google Drive

Automate workflows between Document360 and Google Drive using Zapier. Create a Zap by connecting Document360 as the trigger and Google Drive as the action. Obtain an API token from Document360's Zapier extension, configure the action to upload files to a specific Google Drive folder, and test the integration. Publish the Zap to enable automatic file syncing, saving time and streamlining document management.

## 733. Zap overview

The Zap overview page allows users to view and edit Zaps. To delete a Zap, navigate to the Zapier dashboard, click the Zap actions icon () on the desired Zap, and select Delete.

## 734. Integrating Trello with Document360

_No summary available for this section._

## 735. Integrating GitHub with **Document360**

Automate Document360 content creation triggered by GitHub commits using Zapier. Connect GitHub via Zapier trigger, then connect Document360 via API token; map fields (Title, Content, Version, Language, Category, Publish Status) between platforms for seamless synchronization. Test the Zap, then activate it to automate creation of articles in Document360 reflecting GitHub code changes.

## 736. Zap overview

Zaps automate Document360 article creation from GitHub commits. Delete Zaps via the Zapier dashboard by finding the Zap, selecting "Zap actions", then "Delete". View Zaps from the Zap overview page.

## 737. Integrating Confluence Server with Document360

The provided text describes Confluence, a wiki platform, but does _not_ describe any integration with Document360. This integration is missing from the supplied content.

## 738. Zap overview

Zaps create Document360 articles from Confluence Server pages. To delete, navigate to the Zapier dashboard, locate the Zap, click "Zap actions" -> "Delete."

## 739. Integrating GitHub with Document360

_Document360's Enterprise plan supports Zapier extensions, enabling automation between GitHub and Document360. Use Zapier to create workflows (Zaps) that trigger actions in Document360 based on GitHub events like commits or pull requests. Connect repositories through API tokens, automating tasks such as article creation for new features or updates for resolved issues. Ensure security by limiting permissions and monitor the integration for smooth operation._

## 740. Integrating Zoho CRM with **Document360**

Automate knowledge base article creation in Document360 when new leads/contacts are added in Zoho CRM using Zapier. Connect Zoho CRM as the trigger, Document360 as the action, configure API tokens, map fields (version, language, article, publish status), test, and publish the Zap. Results in a new Document360 article corresponding to the Zoho lead/contact.

## 741. Integrating Confluence Server with **Document360**

Automate content synchronization between Confluence Server and Document360 using Zapier. Create a Zap with **Confluence Server** as the trigger (e.g., "New Page or Blog Post") and **Document360** as the action (e.g., "Create Article"). Connect both platforms to Zapier by authenticating accounts and generating an API token for Document360. Customize the Zap by mapping fields like workspace, language, category, and publish status. Test the integration to ensure seamless article creation in Document360 whenever Confluence is updated, eliminating manual effort.

## 742. Zap overview

The Zap overview page allows users to view and edit existing Zaps. To delete a Zap, navigate to the Zapier dashboard, select the desired Zap, click the arrow icon, and choose "Turn off and delete Zap" to remove it permanently.

## 743. Integrating Pipedrive with Document360

<table>
<thead>
   <tr>
      <th>Professional</th>
      <th>Business</th>
      <th>Enterprise</th>
   </tr>
</thead>
<tbody>
   <tr>
      <td></td>
      <td>✓</td>
      <td>✓</td>
   </tr>
</tbody>
</table>

Integrate Pipedrive with Document360 using Zapier extensions, available in Business and Enterprise plans, enabling efficient automation of CRM and knowledge base processes.

## 744. Integrating Zoho CRM with Document360

To integrate Zoho CRM with Document360 via Zapier, ensure you're on the Enterprise plan. Connect both platforms to Zapier, create a zap with Zoho CRM as the trigger and Document360 as the action, map fields, test, enable, and monitor. This automation enhances data synchronization and customer support efficiency.

## 745. Integrating Hubspot with Document360

Integration of HubSpot with Document360 via Zapier extensions is available in tiered plans (Professional, Business, Enterprise). The integration automates workflows, manages marketing efforts, and controls sales processes. More details on functionality and pricing are needed.

## 746. Integrating Pipedrive with **Document360**

Connect **Pipedrive** and **Document360** via **Zapier** to automatically create Knowledge Base articles in **Document360** when new leads/contacts are added in **Pipedrive**. **Authenticate** both platforms in Zapier, **customize field mappings** (Title, Content, Version, Language, Category, Publish), **test** the integration, and **publish** the Zap. This ensures seamless documentation of lead/contact information.

## 747. Integrating HubSpot with **Document360**

Automate support ticket resolution by creating Document360 knowledge base articles based on new HubSpot tickets. Zapier connects platforms, enabling automated workflows when a related article isn't found. Key steps involve connecting HubSpot and Document360 accounts in Zapier, mapping fields (ticket title/description, workspace, language), testing, and activating the Zap. Use Document360 API token for connection.

## 748. Zap overview

Automatically creates a Document360 article for each new Pipedrive sales deal. Zaps can be managed and deleted from the Zapier dashboard.

## 749. Integrating Asana with **Document360**

Automate adding Asana-created articles to the Document360 Knowledge Base using Zapier. Connect Asana and Document360 accounts, map article fields (title, content), configure trigger/action within Zapier, test, and publish. Key steps include obtaining API tokens, selecting Asana project/workspace, and choosing the Document360 location for the article.

## 750. Zap overview

- Automatically create **Document360** articles from new **HubSpot** support tickets.
- Manage and edit Zaps via the **Zapier dashboard**.
- Delete Zaps by navigating to the dashboard, clicking the Zap actions icon, and selecting **Delete**.

## 751. Integrating Asana with Document360

Integrate Asana with Document360 via Zapier to automate workflows, ensuring documentation efforts align with task management. Check if your Document360 plan supports Zapier, set up Zaps to trigger actions like creating Asana tasks when articles are published, and streamline your workflow for improved efficiency.

## 752. Zap overview

This Zap creates articles in Document360 from new Asana tasks. Users can manage and delete Zaps through the Zapier dashboard by navigating to the Zap overview page, selecting the desired Zap, and clicking delete.

## 753. Integrating Monday.com with **Document360**

Automate transferring content from Monday.com to Document360 using Zapier. Connect both platforms via API tokens, map necessary fields (title, content, etc.), and test the automated article creation process within Document360. Publish the Zap for continuous content flow. Key tools are Monday.com, Document360, and Zapier.

## 754. Integrating Monday.com with Document360

Integrate Monday.com with Document360 via Zapier to streamline workflows, especially for documentation teams. Common use cases include automating document creation or updates when tasks are added or completed. Key benefits: reduced manual work, improved collaboration, and minimized errors. Setup involves defining triggers in Monday.com and actions in Document360 within Zapier. Ensure both platforms support the integration, check for pre-made Zaps, and secure data transfer. This integration enhances productivity by keeping tasks and documentation in sync.

To integrate Typeform with Document360, utilize Zapier as a middleware. Set up a trigger in Typeform that activates when a form is submitted, then connect it to an action in Document360, such as creating or updating an article. This automation streamlines feedback collection and updates your knowledge base efficiently, reducing manual data entry. Ensure your Document360 plan supports Zapier for this integration.

## 755. Integrating Typeform with Document360

Use Zapier to automate transferring Typeform responses to Document360. Connect accounts, map Typeform fields to Document360 article attributes, generate API token, test, then publish the Zap. This streamlines knowledge base updates.

Based on the user's thought process, here's a step-by-step explanation of how to create the Zap:

1. **Log into Zapier**: Access your Zapier account and navigate to the dashboard.

2. **Create a New Zap**: Click on the "Create Zap" button to start the process.

3. **Set Up Trigger**:

- Choose "Monday.com" as the trigger app.
- Select "New Item" as the trigger event.
- Connect your Monday.com account if not already connected.
- Configure the trigger by selecting the specific board and view you want to monitor.

4. **Set Up Action**:

- Choose "Document360" as the action app.
- Select "Create Article" as the action event.
- Connect your Document360 account if not already connected.
- Map the fields from the Monday.com item to the Document360 article. This includes specifying where the article should be created, such as the category or folder.

5. **Test the Zap**:

- Zapier will test the Zap by sending a test article to Document360 based on a recent Monday.com item.
- Verify that the test was successful.

6. **Publish the Zap**: Once everything works as expected, publish the Zap to activate it.

For deleting a Zap:

1. **Access the Zapier Dashboard**: Go to your Zapier dashboard where all active Zaps are listed.

2. **Locate the Zap**: Find the Zap you wish to delete. You can use the search bar if needed.

3. **Delete the Zap**:

- Click on the three dots or the arrow next to the Zap name.
- Select "Turn off and delete" from the dropdown menu.
- Confirm the deletion to proceed.

The Zap will be turned off and removed from your Zapier account, stopping any further automation based on that Zap.

## 756. Integrating Gmail with Document360

Automatically notify stakeholders of new Document360 articles via Gmail. Use Zapier to connect Document360 & Gmail, configuring email settings (recipients, subject, body). Follow detailed steps for Document360 & Gmail connection, trigger setup (new article creation), action setup (email sending), and Zap testing/publishing. Customize email contents & attachments for each notification.

## 757. Zap overview

Automatically create Document360 articles from new Typeform entries using Zapier. Manage Zaps via the Zapier dashboard, where you can view, edit, or delete them by clicking the Zap actions icon and selecting delete.

## 758. Integrating Gmail with Document360

Document360 supports integration with Gmail via Zapier extensions, though specific plan details (Professional, Business, Enterprise) are not provided. Gmail's features, such as its powerful search, spam filtering, and integration with Google services, make it a versatile tool for communication and collaboration.

## 759. Zap overview

The Zap overview page allows users to view and edit their created Zaps. To delete a Zap, users navigate to the Zapier dashboard, click the Zap actions icon, and select Delete. A screenshot illustrates the process, though it may not load.

## 760. Integrating **Document360** with Mailchimp

Integrate Document360 knowledge base with Mailchimp marketing campaigns using Zapier for automatic updates. Configure trigger (Document360 updates) and action (Mailchimp campaigns). Map audience, subject, and email content fields. Generate a Document360 API token for authentication. Test and publish Zap for automated communication of new/updated content to Mailchimp subscribers.

## 761. Make - Setup guide

To integrate Make with Document360, you need a Make account and an account in the other app you want to connect. Make acts as an automation platform to create workflows (Scenarios) between the two.

## 762. Integrating Mailchimp with Document360

Mailchimp is a robust email marketing platform that enables organizations to manage contact lists, track interactions, and gain audience insights. Document360 supports integration with Mailchimp via Zapier across Professional, Business, and Enterprise plans. This integration allows automation of tasks like syncing new users or sending notifications for new articles, enhancing marketing efficiency and documentation processes.

## 763. **Make** use cases for **Document360**

Document360 integrates with popular tools like Asana, Monday.com, Typeform, Google Docs, and Jira using APIs. These integrations allow for seamless document management and workflow automation across different platforms. The integrations enable connecting document creation/management activities within Document360 with tasks, projects, and other workflows in the integrated applications. Essentially, this enables users to manage documents within a centralized platform (Document360), maintain a consistent record, and link related actions to it in other tools.

## 764. Zap overview

Create Mailchimp campaigns from new Document360 articles. View and edit Zaps on the overview page. Delete Zaps via Zapier dashboard by clicking the actions menu and selecting delete.

## 765. Integrating Asana with Document360

Asana integration with Document360 will streamline project management, task tracking, and collaboration among documentation teams across different project plans (Professional, Business, Enterprise). Asana provides a centralized platform for organizing work, tracking progress, and ensuring accountability in documentation projects.

## 766. API key generation in **Document360**

Generate an API key by navigating to your Document360 project's **Team collaboration** under **Settings > Knowledge base portal > Extensions**. Click **Connect** on the Make extension tile to obtain a Token, which connects Document360 to third-party apps on Make. Copy and secure the Token for integration.

## 767. Integrating Monday.com with Document360

Document360 plans integration with Monday.com via Make extensions to streamline content creation and collaboration for teams using Monday.com's organization and tracking features. No specific details on plans or implementation are provided.

## 768. Integrating Typeform with Document360

The provided text describes Typeform's capabilities but doesn't explain how it integrates with Document360 or what the function of that integration is. Insufficient details for a meaningful TLDR.

## 769. Integrating Typeform with **Document360**

Automate Document360 article creation triggered by new Typeform submissions. Configure a Make scenario, connecting Typeform (specifying form ID, and desired fields) and Document360 (API key). Map Typeform response fields to Document360 article title and content. Test and schedule the scenario for automated data flow.

To integrate Asana with Document360 via Make, follow these organized steps for a seamless experience:

1. **Log into Make**: Start by accessing your Make account to begin setting up the integration.

2. **Create a New Scenario**:

- Click on "Create a new scenario" in the Make dashboard.
- Add a module by selecting Asana, choosing the task you wish to monitor (e.g., "Watch Tasks or subtasks").
- Connect your Asana account by following the prompts to allow access and save the connection.

3. **Configure Asana Connection**:

- Select the Asana connection in your scenario.
- Set up filters (e.g., project, workspace) and specify the project ID to monitor.
- Define date parameters for completed and modified tasks, and set a limit on the number of tasks retrieved.

4. **Add Document360 Module**:

- Add another module in Make and select Document360.
- Choose the action (e.g., "Create an article") and set up a connection using an API token from Document360:
- Generate the token in Document360 under Settings > Extensions > Team Collaboration > Make.
- Use this token to create a new connection in Make.

5. **Map Asana Data to Document360**:

- Define how Asana task data maps to Document360 articles, setting the title (e.g., Task Name) and content (e.g., Assignee, Due Date, Description).
- Select the project category where new articles will be created.

6. **Test the Scenario**:

- Run a test by creating a new task in Asana and verify that an article is generated in Document360.
- Review test details and logs in Make to ensure everything works correctly.

7. **Schedule and Activate**:

- Enable the scenario to run automatically every 15 minutes.
- Activate the scenario to start the automation.

By following these steps, you'll have successfully integrated Asana with Document360, automating the creation of articles based on task updates.

## 770. Integrating Monday.com with **Document360**

Quickly connect Monday.com with Document360 using Make (Integromat). Set up a scenario in Make, authenticate both platforms with their respective API tokens (obtained from Monday.com’s profile and Document360’s Make extension), link the modules to trigger actions, and test the integration. Schedule and activate the workflow to automate tasks between the two platforms seamlessly.

The integration of Google Docs with Document360 is planned across different tiers, with details pending for Professional, Business, and Enterprise plans. This feature aims to enhance document management by allowing seamless access and embedding of Google Docs within Document360, streamlining workflows for users. Once plan specifics are available, they will be detailed here.

## 771. Integrating **Document360** with Google Docs

Integrate Google Docs with Document360 using Make. Create a Make scenario to monitor Google Docs (e.g., new documents created in a specific folder) and trigger a Document360 action (e.g., create an article) for each new document. Configure criteria like document folder, execution frequency, and API tokens within Make. Test and schedule the integration for automated workflow.

## 772. Integrating Jira with Document360

Plans exist for integrating Atlassian Jira's service desk functionalities with Document360 across different subscription tiers (Professional, Business, and Enterprise). Current details regarding the specifics of this integration are not provided.

## 773. Integrating Jira with **Document360**

Integrate Jira with Document360 using Make by creating a scenario, connecting both platforms via APIs. Map Jira task fields to Document360 article attributes. Configure triggers for new Jira tasks to create Document360 articles. Schedule the integration for continuous operation and test thoroughly. Requires Make account, Jira API token, and Document360 API key.

## 774. Feature highlights

Document360 Chrome extension provides easy launch and customizable positioning of the assistant. A quick launch label offers easy access. The "Page Help" tab allows searching and viewing knowledge base articles in the reader view (copy, open, expand options). The "Knowledge base" tab provides a complete tree-view access to integrated articles, permitting browsing and viewing in reader view.

## 775. **Removing the Document360 extension in Chrome**

Remove Document360 from Chrome by either: 1) Visiting the Chrome Web Store Document360 page and clicking "Remove from Chrome", or 2) Right-clicking the Document360 icon in Chrome, selecting "Remove from Chrome", and confirming the removal.

## 776. Chrome

The Document360 Chrome extension, available in the Chrome Web Store, enables users to access and search knowledge base articles and categories via an API key. Integration plans for Professional, Business, and Enterprise tiers are listed but details are pending.

## 777. Crowdin

Crowdin's localization platform integrates with Document360. Professional plans don't support the extension, Business plans require an add-on, and Enterprise plans include it. A Crowdin account is needed.

## 778. Chrome extension: setup

To set up the Document360 Chrome extension:

1. **Install the extension:**

- Open Chrome.
- Visit the Chrome Web Store.
- Search for Document360, click to open its page.
- Click "Add to Chrome" and confirm by clicking "Add extension" in the pop-up.

2. **Manage extensions:**

- Navigate to More (> ) > Extensions > Manage Extensions.
- Note: Requires a Google account; guest users cannot add extensions.
- For Incognito access, go to Manage Extensions and enable "Allow in Incognito."

3. **Configure API key:**

- Click the Document360 icon in Chrome's top right.
- In the side window, enter your API key.
- To get the API key:
- Log in to your Document360 portal.
- Go to Settings > Knowledge Base Portal > Extensions.
- Select the Chrome extension and click Details.
- Copy the Internal Integration Token.
- Paste the token into the extension window and click Save.

## 779. FAQ

The Document360 Google Chrome extension allows users to access articles and page categories from their knowledge base, featuring search, article viewing, and navigation. API stands for Application Programming Interface, enabling software communication. \[Crowdin] is linked for potential translation or collaboration.

## 780. Push to Crowdin from Document360

Users can now directly push content updates from Document360 to their connected Crowdin project. This eliminates the need to switch platforms and ensures the latest changes are automatically synchronized. Features include timestamps for translation actions, viewing translation progress on Crowdin, and team collaboration opportunities for edits/reviews. Only synced categories/articles are eligible for "Push to Crowdin."

## 781. Phrase

Phrase extension for Document360 is an enterprise-only feature, enabling multilingual content translation for high accuracy, speed, and scalability, potentially leading to resource savings and increased customer engagement.

## 782. Basic setup guide

Create a Crowdin enterprise project with matching name, source language, and target languages. Generate a Document360 API token and integrate it with Crowdin. Obtain a Crowdin API token and configure it in Document360. Sync categories and articles, ensuring project names match for seamless translation. Machine translations are enabled by default but can be customized.

## 783. Language Configuration

Configure default language and script direction (LTR/RTL) for translated knowledge base articles. Navigate to workspace settings, choose a language, set default, toggle script direction (LTR/RTL), and save changes.

## 784. Translation Configuration

Configure translation for knowledge base articles by navigating to Knowledge Base portal > Extensions > Phrase > Details. Select workspace, translation languages, and articles. Click "Translate". Monitor status ("Yet to initiate", "Translated", "Failed", "In Progress") via refresh and filtering. Translated articles move to Advanced WYSIWYG editor and are unrecoverable. Supports single/multiple workspace selection.

## 785. Setting up Phrase Translation Service

Navigate to Settings > Knowledge base portal > Extensions, connect to Phrase, create a new configuration with your API token, select workspaces, and click Create. Use Resync to update translations if language changes occur.

## 786. FAQ

Document360 subscriptions do not include Crowdin translation services, but integration is possible. API, defined as a set of communication rules between software applications, plays a role in such integrations.

## 787. FAQ

Translation options are limited to those supported by the specific project.

## 788. General project settings

Document360's "Project settings" page lets you customize your knowledge base portal by configuring project details, editor preferences, file formats, and analytics rules. The settings are broadly applicable across different user roles.

## 789. Accessing the Project settings page

Access project settings by navigating to Settings > Knowledge base portal > General. Configure project name, country, and editor preferences (Markdown, WYSIWYG). Enable/disable "Remember state" to retain UI state. Customize review reminders, drive settings (media format restrictions), analytics settings (IP exclusions), and support access. Save changes.

## 790. Preview Translated Content

- Navigate to Documentation and set the workspace language to match the translated content.
- Preview unpublished articles using the preview option.
- View published articles in the knowledge base.
- Note: Requires a Phrase subscription for the translation service extension.

## 791. Accessing team auditing

Access team audit logs in the Knowledge Base portal's Settings > Knowledge base portal > Team auditing. Filter by event, date, or user. Refresh for updates. Export as CSV to download. Only 20 records display at a time.

## 792. Localization - Getting started

Document360 supports localization across all plans, allowing users to translate knowledge base content to multiple languages (add-ons available). Content, visuals, and cultural nuances (e.g., units, dates) are customizable. Manual or machine translation is permissible, followed by human review for accuracy. Prioritize localization languages based on customer demographics. Document360 recommends using a single multilingual workspace, leveraging its security and access features, and employing style guides/glossaries for consistency. Update content regularly and track key metrics (user engagement, support tickets, customer satisfaction) to measure success. Machine translation can be a starting point, but human review is crucial. Consider the use of third-party integration tools like Crowdin.

# Team auditing

The **Team auditing** feature allows you to track actions performed by team accounts, such as adding or updating articles and changing settings. It provides accountability by logging who performed each action and when, useful for tracing activities like restoring deleted articles or reviewing changes during a product release. The **Audit configuration** allows selective monitoring of key actions. Access is restricted to Owners, Admins, and users with custom roles.

## 793. Setting up a Multi-lingual knowledge base

Document360 supports multi-lingual knowledge bases, allowing for either a single project with multiple languages or separate language-specific knowledge bases.

## 794. Setting up the audit configuration

To configure the audit settings in Document360, navigate to **Settings > Knowledge base portal > Team auditing**. Enable the **All events** toggle to monitor all project-related activities or select specific event categories from modules like Documentation editor, Drive, Knowledge base portal settings, site settings, widget settings, Users & security, and Tools settings. Each module tracks various actions such as article updates, folder changes, site design modifications, user management, and more. Audit data updates in real-time and can be filtered by user, event, or date range. Access to audit data can be restricted based on roles, and while auditing doesn't recover deleted content, it provides detailed activity logs.

## 795. Adding multiple languages to a single version

To add languages to a single knowledge base version, use either of two methods: Method 1 edits an existing workspace, allowing for language selection, default settings, name changes, and more. Method 2 adds entirely new workspaces for the desired languages, starting with an initial machine translation that must be manually translated. Key info is using settings to add, set defaults, edit display names, swap right/left writing direction, hide and delete (but cannot delete or hide default language). Both require manual translation effort.

## 796. **FAQ(s)**

**Document360 TLDR:** Document360 is a knowledge base platform supporting 49 languages (5/3/2 based on plan). Content isn't auto-translated between languages; bulk translation is needed via the "All articles" section. It has three components: a content management system, an online library where users can find answers, and a public-facing website.

## 797. Available languages

Document360 supports 48 languages for localization, including major languages like English, Spanish, French, Chinese, Japanese, and Korean, as well as regional variants such as English (US), English (UK), Chinese (Simplified), and Portuguese (Brazil).

## 798. Defining workspaces and their role

Document360 projects are central knowledge hubs. Workspaces, created within projects (with plan-limits), are specialized areas for organizing documentation by audience (e.g., internal users, external customers) or product lines. They improve content organization and management efficiency.

## 799. Localization variables

Localization variables enable tailored text across a Knowledge Base portal, ensuring language-specific experiences. Access via Settings > Knowledge Base Portal > Localization & Workspaces > Localization Variables. Edit by selecting a language, updating variables in accordion sections (e.g., Eddy AI, Accessibility), and saving changes. Key details: updates may take up to 15 minutes due to caching, and each language requires manual updates. Examples include customizing "Search" or "In this article" labels.

## 800. Workspaces

Document360 Workspaces enable organizations to create and manage multiple distinct knowledge bases within a single project, catering to diverse audiences or documentation needs. This feature helps organize content tailored to specific users or product areas, ensuring documentation remains organized, accessible, and relevant, regardless of complexity.

## 801. Benefits of using workspaces

Workspaces enhance productivity by ensuring relevant information is accessible to specific audiences, improving content organization, and facilitating team collaboration through structured areas for peer reviews and feedback.

## 802. Starting with Workspaces

Document360 automatically creates a default workspace ("v1") upon project creation. Using multiple workspaces streamlines documentation, targeting information for specific users (internal teams and customers), and improves access to relevant content.

## 803. Use cases of workspaces

- **Product-specific documentation:** Organize knowledge bases for multiple SaaS products within a single project, using separate workspaces to maintain clear boundaries for each product.
- **Audience-specific documentation:** Create dedicated workspaces for different user roles (e.g., developers, end-users, administrators) to provide relevant content and avoid confusion.
- **Internal and external knowledge bases:** Separate workspaces for internal (e.g., support teams) and external (e.g., customers) documentation, enabling access control and clear content separation.

## 804. Troubleshooting

404 errors navigating secondary workspaces often stem from the workspace being private, lacking published articles, or hidden articles. Ensure the workspace is public, at least one article is published, and visible within the knowledge base. Workspace status directly impacts visibility and the availability of 'Main workspace' options. The document also covers workspace management, recovery, and display options. Subscription tiers (Free, Professional, Business, Enterprise) affect the quantity of available workspaces and associated features (e.g., backup/restore).

## 805. Purchasing workspaces from Localization & Workspaces

To purchase additional workspaces:

1. Navigate to **Settings** > **Knowledge base portal** > **Localization & Workspaces** > **Localization & Workspaces**.
2. Click the **buy more** link (available only to users with the Owner role).
3. Adjust the number of workspaces in the **Purchase add-on** window and review the **Amount due**.
4. Confirm payment and await confirmation; workspaces will be added upon successful payment.
5. Download your invoice after payment.

Additional workspaces can also be purchased through the Billing section in Document360 settings.

## 806. Backup and restore

Document360 automatically backs up projects daily at 00:00 UTC. Manual backups are also possible. You can restore documentation, API docs, homepage builder, custom CSS & JavaScript to a previous state. Lost/altered content can be recovered from the latest backup.

## 807. Restoring from a Backup

To restore from a backup, navigate to Settings > Knowledge Base Portal > Backup & Restore. Select the desired backup and the elements (documentation, API, Homepage, CSS, JS) you want to restore. Compare Custom CSS/JS versions before restoring. Click "Restore," confirm, and wait for the "Backup restored" message.

## 808. Adding a new workspace

To create a new workspace, navigate to **Settings > Knowledge base portal > Localization & Workspaces > Localization & Workspaces**, then click **Add workspace**. Choose the workspace type, enter a name (max 30 alphanumeric/hyphen characters), and customize the URL. Select a status: Main (default, public), beta, public, or deprecated. Option to create a new workspace or copy existing content, including specific categories and link handling. Configure languages with options for default, display name, right-to-left scripts, and visibility. Finish by clicking **Add**.

## 809. Creating a manual backup

To create a manual backup, go to **Settings** > **Knowledge base portal** > **Backup and Restore**, click **New backup**, enter a backup name, and click **Backup**. The backup will be added to the backup log once complete.

![Creating a manual backup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_manual_backup.gif)

## 810. Restore options

Restore various knowledge base components (docs, API, homepage, custom CSS/JS) from backups. Select specific elements to restore or everything. Preview before restoring. Backups are automatic daily (00:00 UTC), retain for 90 days, and cannot be manually deleted. Compare and copy code snippets for custom CSS/JS.

## 811. Webhook notification channel

Document360's webhook feature enables real-time notifications (e.g., to Slack) about knowledge base updates (article changes). This automates information sharing between applications.

## 812. Accessing notification channels

Configure notification channels in Document360's Knowledge base portal (Settings > Knowledge base portal > Notifications > Notification channels). Available channels include webhook, Slack, Microsoft Teams, and SMTP (email). An SMTP channel is pre-configured and cannot be deleted but its configuration is customizable. Edit, delete, or add new channels.

## 813. Slack notification channel

Document360 allows configuring Slack notifications for new articles and updates to knowledge base documents. This feature enables real-time updates for support teams within Slack. Functionality is likely available across all subscription plans.

## 814. Notifications

Document360 offers notification setup for project changes through channels like email, Slack, Teams, and webhooks. All plans (Professional, Business, Enterprise) support notification settings, enabling real-time updates for users like project managers to stay informed about team modifications.

## 815. Setting up Slack notification channel

To receive Document360 notifications in Slack, create a Slack app, activate incoming webhooks, copy the generated webhook URL, configure the channel in Document360's settings (specifying a "Friendly name" and the copied webhook), and optionally map specific notifications to the Slack channel in the Notification Mapping.

## 816. Microsoft Teams notification channel

Document360 users can receive real-time notifications about knowledge base updates (article publications/updates) within their Microsoft Teams channels. This feature is available across different subscription tiers.

## 817. Setting up a Webhook notification channel

To set up a Webhook channel in Document360, navigate to Settings > Notifications, select Webhook, configure with a friendly name, choose request method (POST/PUT), specify the URL, format, headers, and authorization if needed, then save and map notifications.

## 818. SMTP notification channel

Document360 allows configuration of SMTP to send email notifications about knowledge base updates (article changes) from the portal, site, and widget. This ensures team members are instantly alerted to updates.

## 819. Setting up the SMTP notification channel

Configure an SMTP notification channel for your knowledge base portal by navigating to Settings > Knowledge base portal > Notifications > New channel > SMTP. Input a descriptive name, recipient emails (separated by semicolons), and save. Then, map events to trigger email notifications.

## 820. Notification mapping

Document360's notification mapping allows users to configure alerts for updates (documentation, security, analytics) across different user roles (Professional, Business, Enterprise). This facilitates automated updates without manual checking. The table, however, is empty, so there's no specific mapping to summarize.

## 821. Mapping Notification channels to events

Configure notifications in the knowledge base portal by enabling events (all or specific modules/events), then mapping those events to desired channels (e.g., email). All events are initially off. Specific events like "Analytics weekly mail" can be enabled per module. Each enabled event requires at least one assigned notification channel.

## 822. Notification history

Document360's notification history tracks delivery statuses of alerts (e.g., system updates, errors) sent to configured channels (like Slack). This allows teams to monitor delivery, troubleshoot failures, and ensure critical updates are received.

## 823. Setting Up the Microsoft Teams Notification Channel

Setup involves three main steps: creating a Teams channel, obtaining a webhook URL, and configuring it in Document360. For each step:

1. **Create a Teams Channel**: Open Teams, navigate to the desired team, add a new channel named (e.g., "Document360 Notifications").
2. **Get Webhook URL**: In the new channel, manage settings, add an incoming webhook, generate and copy the URL.
3. **Configure in Document360**: Navigate to Notification channels, add a new channel, select Teams, enter a friendly name, paste the webhook URL, and save.

Test the setup by triggering a notification and check the channel for receipt. Use Notification Mapping to customize which events trigger alerts. For multiple channels, repeat the process with different webhooks and map accordingly.

## 824. Email domain

Enterprise users can configure custom email domains for notifications in Document360. Requires configuring MX and TXT records on your DNS provider. Follow steps to add domain, obtain records from Document360, add records to DNS, verify the configuration, and specify the "From" email address and sender name. Verification and troubleshooting are addressed.

## 825. Notification events

The document describes notification events across multiple modules, including Documentation editor (e.g., article updates, visibility changes, workflow status), Drive (e.g., folder and file modifications), Knowledge base portal settings (e.g., workspace updates, tag changes), Knowledge site (e.g., feedback and user interaction alerts), AI notifications (e.g., credit usage alerts), Analytics (e.g., weekly metrics), and comments (e.g., inline comment notifications). These events enable users to stay informed about changes and activities within their knowledge base ecosystem.

## 826. **Linking your Document360 project in Postman**

Import the Document360 API into Postman using `https://apihub.document360.io/swagger/v2/swagger.json`. Authenticate using a Document360 API token, obtained from Settings > Knowledge Base portal > API tokens. Create a Postman environment variable (`base_URL`) with the API hub URL (`https://apihub.document360.io`). This allows accessing Document360 API endpoints via Postman. Re-authentication might be needed if the Postman session ends.

## 827. Managing Notification history

Access notification history by navigating to **Settings > Knowledge base portal > Notification** and selecting the **Notification history** tab. The history provides details for each notification, including channel name, delivery status, submission date, sent date, and event details. Use the **View details** option to review the content sent to users. This feature allows tracking and verification of notification delivery.

## 828. **Swagger documentation site**

Authenticate with API token. Use `GET` to retrieve, `POST` to add, `PUT` to update, and `DELETE` to remove items. Required fields use underscores (e.g., `email_id`). Proper formatting and usage of the specified API methods are crucial. Authentication is required to use the API. Refresh may end session, requiring re-authentication.

## 829. Portal search

Full portal search allows users to simultaneously search across all project content, files, tags, users, content tools, and settings across all workspaces and languages.

## 830. How to use Postman?

Postman is an API platform that allows users to build and use APIs. It can be easily integrated with a Document360 project, offering both on-premises and web-based access. For guidance, refer to the following resources:

- [Download Postman](https://www.postman.com/downloads/)
- [Install and Update Postman](https://learning.postman.com/docs/getting-started/installation-and-updates/)
- [Postman Documentation](https://learning.postman.com/docs/)
- [Postman FAQs](https://www.google.com/search?q=FAQs+in+Postman%3F&rlz=1C1CHBD_enIN1119IN1119&oq=FAQs+in+Postman%3F&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgoIARAAGIAEGKIE0gEHNjI5ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8)

## 831. How to use Swagger?

Swagger is a tool that creates interactive API documentation. Here's a concise guide:

1. **Definition**: Define your API using Swagger's JSON/YAML specification, detailing endpoints, methods, and parameters.
2. **Documentation**: Use Swagger UI to generate a web interface where users can explore and test API calls.
3. **Interaction**: Users can send requests and view responses directly in the interface, aiding development and testing.
4. **Integration**: Automatically updates with API changes, ensuring documentation stays current.

Swagger simplifies API understanding and testing through visual, real-time interaction.

## 832. Article-portal search

A tool allows searching all project articles and categories across all workspaces and languages.

## 833. Accessing the articles through full portal search

To find articles, click the search icon, select "Articles" in the dropdown menu. Type keywords; results show article title, workspace, language, status. Use filters to refine. Preview results by clicking and use the full-screen option to expand. Click "Go to article" to access the full document.

## 834. Filters

TLDR; Search filters for articles allow users to refine results by workspace/language, visibility (None, Visible, Hidden), status (None, New, Draft, Published), contributors (search by username), tags (multi-select), and updated date (7 days, 30 days, 3 months, 1 year, or custom). Filters can be cleared.

## 835. Accessing the full portal search

- Access the search by clicking the icon on the top navigation bar.
- Use the dropdown to select a module: All, Article, Drive file, Users & Groups, Tags, or Settings.
- Enter keywords; each module displays up to five results.
- Expand results by clicking "More articles."
- Apply filters or preview items as needed.
- Navigate using "Go to article."
- Press Escape to exit.

## 836. Drive-portal search

The Drive - Full portal search feature enables searching through all files in the Drive on a project. The table listing support across Professional, Business, and Enterprise plans is incomplete.

## 837. **Accessing the Drive - Full portal search page**

Search the entire drive by clicking the search icon, selecting "Drive" from the dropdown, and typing keywords. Results show file name, dependencies, update details, size, and tags. Filter by status (all, deleted, starred), file type (image, word, etc.), uploaded by, tags, upload date, or custom date range. Click on a file to see details (location, type, upload info). View dependencies to see where the file is used in articles/categories.

## 838. **Accessing the Users & Groups - Full portal search page**

To find users and groups, use the search icon, select "Users & Groups," and type a keyword. This returns results categorized as "Team accounts & groups" (view permissions, manage permissions, see associated members) or "Readers & groups" (view readers, manage associated readers). Clicking on an entry provides detailed information and further actions. This feature allows for searching team accounts, groups, readers, and reader groups within the portal.

## 839. Tags-portal search

The "Tags - Full portal search" page enables knowledge base tag searching and viewing, including dependency information. Different user roles (Professional, Business, Enterprise) may have varying access or search options.

## 840. Filters

The Users and Groups module offers two key filters:

1. **Type**: Options include All entity, Team account, Team account groups, Reader, and Reader Groups (default: All entity).
2. **Last logged in**: Options are All, 7 days, 30 days, 3 months, 1 year, or Custom date (default: All).

After selecting filter criteria, click **Apply** to apply them or **Clear** to reset.

## 841. Users & groups-portal search

The **Users & Groups - Full portal search** feature enables searching for team accounts, team account groups, readers, and reader groups in a knowledge base project. The support status for Professional, Business, and Enterprise plans is not specified.

## 842. Settings-portal search

A dedicated search page exists within the knowledge base portal to find features and settings. No details on the search functionality or supported plans are provided.

## 843. **Accessing the Settings - Full portal search page**

To access settings, click the Search icon, select "Settings" from the dropdown, search for the desired setting by keyword, and click on it to view/modify the settings page. Settings are grouped by Knowledge base portal, Knowledge base site, and Users & Security. Search results display setting names, icons, and short descriptions.

## 844. Custom domain mapping

Document360 allows users to customize their knowledge base website address from the default `project-name.document360.com` to a custom domain (e.g., `help.yourcompany.com`). This improves branding and user experience. Access via Settings > Knowledge base site > Custom domain. New projects use the project name as the default domain.

## 845. **Accessing the Tags - Full portal search page**

- Click the Search icon () on the top right, press Escape to close.
- Select "Tags" from the dropdown, type your keyword to see results.
- Results show tag name and dependencies (articles, categories, files).
- Click a tag to view detailed dependency info:
- For articles/categories: name, version, language, contributor, status, publish date.
- For files: thumbnail and filename.
- Download files or remove dependencies by selecting checkboxes and clicking "Remove dependencies."
- Cancel to close the panel.

## 846. Creating a custom domain

To use your own domain with Document360, add the domain in Document360's settings, create a CNAME record in your domain registrar pointing to Document360's provided value, verify this setup in Document360. If you get a "Deceptive site ahead" warning, check Google's Safe Browsing site status and address reported issues. Various domain registrar instructions are included.

## 847. Configuring a custom domain for Apex domains

To use your root domain (Apex) with Document360, ensure your domain registrar supports DNS flattening (some don't, like GoDaddy). If not, use a DNS provider like Cloudflare. Document360 provides a custom SSL certificate, which needs to be renewed within 90 days to continue using the custom domain properly. Important details like the Common Name (CN) are needed for the certificate.

## 848. Editing a default domain

To edit the default web address:

1. Go to the **Custom domain** page in Document360 settings.
2. Click the **Edit** icon next to the default domain.
3. Enter your preferred domain.

- If unavailable, the **Update** button is disabled; try a different domain.
- If available, the **Update** button is enabled.

4. Click **Update** to save changes.

## 849. Hosting Document360 on a sub-directory

No information is available in the provided table regarding which plans support hosting Document360 on a subdirectory.

## 850. Load balancer

A **load balancer** distributes traffic across multiple servers to keep your site fast and reliable, especially during high traffic periods. Upgrading it enhances security, traffic management, and performance. The upgrade is free, causes no downtime, and involves these steps:

1. Navigate to **Settings > Knowledge base site > Custom domain > Custom domain mapping**.
2. Click **Upgrade**.
3. Verify the configuration in Document360.
4. Copy the generated CNAME record.
5. Set up the CNAME record in your domain registrar.
6. Re-verify the configuration in Document360.

Contact [support](mailto:support@document360.com) if needed.

## 851. **What is subfolder hosting?**

Subfolder hosting organizes website content hierarchically within folders under the root domain (e.g., `example.com/docs`). This approach is often preferred over subdomains for SEO reasons. Subfolders are subdirectories that reside beneath the primary website's root domain, improving SEO.

## 852. Troubleshooting

- **Domain Verification Failed**: Ensure CNAME records match and no duplicate DNS records exist. Use tools like Digwebinterface to verify DNS settings. Some registrars like Cloudflare may mask records.
- **DNS Propagation**: Allow up to 24 hours for DNS changes to propagate. Check TTL settings if issues persist.
- **CAA Restrictions**: Check for CAA records restricting SSL providers. Add required CAA entries for Digicert, LetsEncrypt, and Google.
- **"This site can't be reached" Error**: Verify DNS configuration, check for duplicate records, and ensure SSL provider CAA entries are present.
- **SSL Certificate Issues**: Check certificate expiration, browser settings, and DNS resolver configuration. Try accessing via different browsers or without VPN.
- **FAQs**:
- Document360 provides SSL certificates automatically.
- Custom domains reflect in invitation emails.
- Multiple domains per project are not supported.
- Naked domains are those without "www" prefix.
- Domain registrars manage domain purchases and DNS settings.

## 853. What happens next?

Knowledge base site is live on custom subfolder, but needs a redirect from main domain to prevent duplicate content issues with search engines (e.g., `example.com/docs`). Contact Document360 support for this redirect. Configure canonical URL (e.g., `https://www.yourdomain.com`) in knowledge base portal settings to globally indicate preferred URL for search engines. This avoids duplicate content and ensures the correct URL ranks better.

## 854. Web servers

A web server delivers website content (text, images, video, application data) to clients like web browsers. Common web servers include Apache HTTP Server, Nginx, ASP.NET Core, Microsoft IIS, OpenResty, LiteSpeed, and Cloudflare.

## 855. Enabling Subfolder Hosting

- Enable subfolder hosting by navigating to **Settings > Knowledge base site > Custom domain > Subfolder hosting tab** and toggle on the feature. Default path is `/docs`.
- For custom subfolder paths (e.g., `/help`), enter the desired path and click **Update**. Ensure subfolder hosting is enabled and configure languages for your server.
- For **KB site 2.0**, customize the Site API path (e.g., `/docs-api`) in the same tab. Both Subfolder and Site API paths must be defined for proper functionality.

> **Note**: Article preview is not supported for custom domains with subfolder hosting. Site API path is separate from API documentation.

## 856. Nginx server - Subfolder hosting

Nginx is an open-source web server that supports hosting websites in subfolders. For more details, refer to the [**Nginx documentation**](https://nginx.org/en/docs/).

## 857. Helpful Links

Nginx location blocks direct requests to different parts of your web server based on URL patterns. There are selection algorithms that determine which location block to use when matching incoming requests. See external Nginx documentation and tutorials for details about configuring and understanding these algorithms.

## 858. Sitemap generation

Configure Nginx to proxy sitemap requests to a backend server. Example uses `example.document360.io`, but replace with your domain (e.g., `your-custom-domain.com`). Supports language-specific sitemaps (e.g., `/sitemap.xml.en`). Ensures proper header forwarding for security and tracking.

## 859. What happens next?

After configuring the web server, your knowledge base is accessible via both your project's existing URL and your custom domain. This may cause duplicate content, so a redirect from the existing Document360 subdomain URL to your custom domain URL is needed. Contact support to implement this redirect.

## 860. Setting up a subfolder/subdirectory

Configure Nginx by adding location blocks for your desired subdirectory, specifying proxy_pass, headers, and sub_filter directives to rewrite URLs. For multiple workspaces, add separate blocks and redirects. Restart Nginx to apply changes.

## 861. Home page hosted on a subfolder

To host a project's home page on a custom subfolder, add Nginx configuration blocks for each workspace. Each block proxies requests to the Document360 domain and sets appropriate headers. Redirects are used for language-specific paths. After updating the configuration, restart Nginx.

**TLDR;** Configure Nginx with exact location blocks for each subfolder, proxy to Document360, set headers, handle redirects, then restart Nginx. Customization of domains, subfolders, and workspaces is required.

## 862. ASP.NET Core server

Host a knowledge base as a subfolder (`/docs`) of your main website using an ASP.NET Core server. Install the `Microsoft.AspNetCore.Proxy` package and configure a proxy to route requests to the knowledge base's actual server (e.g., `example.document360.io`). Define both the subfolder path and the knowledge base's API path if on KB Site 2.0. Replace example domain with your specific Document360 or custom domain.

## 863. What happens next?

Duplicate content issue arises after configuring knowledge base in a custom subdirectory (e.g., `example.com/docs`). A redirect from the original site URL (`example.document360.io`) to the new subfolder URL is required. Contact `support@document360.com` to implement this redirect.

## 864. Microsoft - IIS server

Integrate knowledge base into existing website via subfolder (`/help`). Pre-requisites include Application Request Routing and URL Rewrite IIS modules. Replace example domain with your Document360 or custom domain.

## 865. Troubleshooting

TLDR of common NGINX setup issues and their solutions:

- **Invalid "location" Directive**: Ensure location blocks are within a server block. Example configuration:

```nginx
server {
listen 80;
server_name example.com;
location /docs {
      proxy_pass https://example.document360.io/docs;
      proxy_set_header Host example.document360.io;
}
}
```

- **Certbot Package Unavailable**: Enable EPEL repository and install Certbot:

```bash
sudo yum install epel-release
sudo yum install certbot
```

- **NGINX Configuration Test Failed**: Run `sudo nginx -t`, check error messages, and fix syntax issues. Example correction:

```nginx
# Incorrect
proxy_pas https://example.com;

# Correct
proxy_pass https://example.com;
```

- **SSL Certificate Issue**: Verify certificate with OpenSSL and ensure correct NGINX configuration:

```bash
openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout
```

Example configuration:

```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
}
```

Each resolution includes essential steps and examples for quick troubleshooting.

## 866. What happens next?

To avoid duplicate content issues, a URL redirect is required from your original project URL (e.g., `yourcompany.document360.io`) to the custom subfolder (e.g., `yourcompany.com/help`). Contact `support@document360.com` to enable this redirect. Using a custom subfolder on your existing domain prevents duplicate content impacting search engine rankings.

## 867. Sitemap generation

Configure a web server to proxy requests for sitemap.xml files (e.g., `/sitemap.xml.en`), forwarding them to an internal or external server hosting the actual sitemap data. This hides the internal location of the sitemap file. The configuration example uses `example.document360.io` as a placeholder.

## 868. What happens next?

The knowledge base is now accessible via two URLs (project URL + custom subfolder). To avoid duplicate content issues, a URL redirect (from project URL to custom subfolder) is necessary. Contact support to enable the redirect.

## 869. Setting up a sub-folder path

To set up a sub-folder path for hosting documentation, follow these steps:

1. **Install Required Modules**:

- Install the [URL Rewrite module for IIS Server](https://www.iis.net/downloads/microsoft/url-rewrite).
- Install and enable the Application Request Routing (ARR) module.

2. **Configure web.config**: Add the following rewrite rules to your `web.config` file to proxy requests to your documentation:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
   <rewrite>
      <rules>
            <rule name="ReverseProxy_HomePage" enabled="true" stopProcessing="true">
               <match url="^help$" />
               <action type="Rewrite" url="https://example.document360.io/v1" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
            <rule name="ReverseProxy_DocsPage" enabled="true" stopProcessing="true">
               <match url="^help/(.*)" />
               <action type="Rewrite" url="https://example.document360.io/help/{R:1}" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
      </rules>
   </rewrite>
</system.webServer>
</configuration>
```

**Important Considerations**:

- Backup your `web.config` file before making changes.
- If using KB Site 2.0, ensure you define both the Subfolder path and the Site API path.

## 870. Readers self-registration

Users can independently create reader accounts on knowledge base sites by following a self-registration process. Share the knowledge base URL. Users enter name & email, then verify the email for password set-up. Project members control reader access. Email verification is a one-time process usable across projects.

## 871. Readers self registration

The self-registration feature is available for Business and Enterprise plans when the Knowledge base site access is set to Private or Mixed.

## 872. Apache HTTP server

The Apache HTTP server is a free, open-source solution offering flexibility and customization for hosting Document360 knowledge bases as subfolders. Key steps include enabling necessary modules (proxy, headers, substitute, etc.), configuring VirtualHost for proxying and URL substitutions, setting up redirects, and restarting the server. Substitutions ensure links reflect the subfolder structure, and redirects manage URL paths seamlessly.

## 873. Accessing the Reader self-registration option

Enable reader self-registration in Document360 settings to allow users to register themselves. Configure default reader groups and/or restrict access by email domain (allow or block specific domains). Newly registered readers are added to default groups unless their domain is already assigned.

## 874. Adding a domain restriction

Configure knowledge base self-registration by domain. Specify email domains (allowing or blocking) and assign reader groups to those domains. Domain-specific settings override default reader groups.

## 875. Creating a Reviewer account

Create Reviewer accounts individually by selecting "Reviewer" in the portal role during team account creation. Bulk import is possible by using a CSV file with email addresses. Ensure correct roles (portal and content) are selected in both methods. Specify content access permissions as needed.

## 876. FAQs

- **No default reader group selected:** Self-registered readers get unrestricted access to the knowledge base.
- **Multiple group memberships:** Readers receive the highest level of access for each content item.
- **Individual vs. group access:** The highest privilege from both settings is granted to the reader.
- **Access prioritization:** The highest privilege at each content level determines access.
- **Self-registration not working with SSO:** Self-registration requires the Document360 login page, which is bypassed by SSO.

## 877. Managing reviewer accounts

The **Reviewer** role in Document360 allows users to view articles, add comments, and update workflow statuses without editing content. This role is available across Professional, Business, and Enterprise plans, providing controlled access to the Documentation module for streamlined content review.

## 878. Managing Reviewer accounts

Manage reviewer accounts in the "Team accounts & groups" section of settings. Edit/delete existing accounts, convert to/from reader accounts, and purchase reviewer add-ons through the billing section. Conversion to reader involves content access permissions selection and optional mapping to reader groups.

## 879. Reviewer role functionality

Reviewer role enables content review without editing. Reviewers access articles (in draft mode), leave comments, suggest edits, and update workflow statuses. Access is controlled (usually by category/article). Specific number of Reviewer accounts depend on plan tier (Professional: 5, Business: 10, Enterprise: 20). No direct content edits are permitted.

## 880. Account locked

Five incorrect password attempts lock an account for 30 minutes. User receives "Account locked due to multiple failed attempts! Please try again after 30 minutes" message.

## 881. Reviewer permissions and access

Reviewers have access to the Documentation module, enabling them to view articles in Draft or workflow states, add comments (inline or general), update workflow statuses, set due dates, and manage assignments. They can also perform bulk updates across multiple articles. However, they cannot add comments when an article is in Read only mode, and only one Reviewer can review an article at a time, with others notified when a Reviewer is active.

## 882. New password requirements

Password must be ≥8 characters, containing at least 1 uppercase, 1 lowercase, 1 number, and 1 special character.

## 883. Resetting your password

To reset your password, follow these steps: Click "Forgot password?", enter your email, check your inbox for the reset link, click the link, set your new password, and confirm. Password changes apply to your entire account.

## 884. Block inheritance

No information about block inheritance plan features is provided in the table. The table is empty.

## 885. Changing your current password

To change your current password, follow the instructions in the [Change password article](https://docs.document360.com/v3/docs/change-password).

## 886. Block inheritance

Block inheritance lets you override inherited content access permissions, allowing granular control over who can see specific content (like workspaces, languages, categories, articles) within a system, regardless of broader team permissions. Administrators selectively grant access to targeted accounts on a per-content-level basis. Removing inherited permissions isolates access to only the accounts explicitly added in the content access list.

## 887. IP restriction

Project-level IP restriction controls access to a knowledge base by allowing/blocking specific IP addresses (IPv4 and IPv6). Restrictions apply to all workspaces and languages within a project.

## 888. FAQs

Disabling inheritance restricts access to only specified team accounts and groups, and the team account performing the action is automatically selected and cannot be removed.

## 889. Allow inheritance

To enable inheritance, navigate to the desired category/article in the Documentation section, access Security settings via the More icon, toggle off **Block inherited account**, confirm by clicking **Yes**, and then close the blade. This allows inherited team accounts and groups to access the content, streamlining permission management.

N/A - No Think section needed as per instructions, moving to output.

## 890. IP restriction page

- **Overview**: Navigate to Settings > User & Security > IP Restriction to manage IP access.
- **IP Details**: View Friendly name, IP address (IPv4/IPv6), Allow/Block status, and Remove/Save options.
- **Add IP**: Enter a name, IP or range, and save; supports specific IPv6 formats.
- **Permissions**: Set IPs to Allow or Block access; avoid duplicates to prevent conflicts.
- **Deletion**: Permanently remove IPs using the Remove icon.

## 891. Single Sign-On (SSO)

Single Sign-On (SSO) plans are not yet defined for Professional, Business, or Enterprise tiers. More details are needed to create a descriptive TLDR.

## 892. What is SSO?

**Single Sign-On (SSO)** enables users to access multiple applications/websites with a single login. Users log in once and gain access to all connected applications without repeatedly entering credentials. SSO operates via a central authentication service (the service provider).

## 893. Reasons to configure Single Sign-On (SSO) in your project

- **Enhanced Security:** Reduced credential storage points, harder for attackers.
- **Increased Productivity:** Faster access to systems/apps, fewer passwords.
- **Improved UX:** Fewer login prompts, less frustration.
- **Simplified IT:** Centralized credential management, easier access control.
- **Compliance Support:** Adherence to industry/sector mandates.
- **Cost Reduction:** Less need for redundant systems and support staff.

## 894. FAQ(s)

**What is an IP address?**\
An identifying number for a computer or network on the internet, enabling communication.

**What is an IPv4 format?**\
Four numbers (0-255) separated by dots (e.g., 49.206.113.170).

**What is an IPv6 format?**\
Eight groups of hexadecimal digits, colon-separated (e.g., FE38:DCE3:124C:C1A2:BA03:6745:EF1C:683D).

**What is an IPv6 unicast address?**\
Identifies a single interface for direct communication, unlike multicast or anycast.

## 895. How does SSO work?

Single Sign-On (SSO) works through a collaboration between a **Service Provider** (e.g., Document360) and an **Identity Provider (IdP)**. When a user accesses the Service Provider, they are redirected to the IdP to authenticate using their credentials. Upon successful authentication, the IdP issues an **Access/ID token**, which the Service Provider validates. This establishes a trust relationship, allowing the user to access SSO-enabled applications without additional sign-ins. Document360 supports multiple IdPs, offering flexibility for users to choose their preferred authentication method.

## 896. What is an IdP?

An **Identity Provider (IdP)** is an external entity that manages user identities and authenticates users, enabling Single Sign-On (SSO) to access multiple services with one login. It stores credentials and handles logins for various applications. Each stored entity is called a **principal**. Examples include **Okta**, **Entra ID**, **Google**, **ADFS**, and **OneLogin**.

## 897. Logging in using SSO

Access the Document360 Knowledge base portal using SSO. Enter email/domain, click "Continue with SSO," authenticate via your Identity Provider (IdP) login.

- **Step 1:** Navigate to the Knowledge base portal URL.
- **Step 2:** Input your email or subdomain.
- **Step 3:** Click "Continue with SSO."
- **Step 4:** Log in to your IdP.
- **Result:** Automatically logged into the Knowledge base portal.

## 898. IdP initiated sign-in

Document360 login is possible directly from the Identity Provider (IdP) dashboard if configured. Find the Document360 app within the IdP's dashboard to initiate SSO login, bypassing the need for a separate portal visit. Uses existing SSO credentials.

## 899. SSO Standards on Document360

Document360 supports Single Sign-On (SSO) through SAML 2.0 and OpenID Connect. SAML 2.0 is a robust standard enabling secure cross-application authentication, while OpenID Connect offers a modern, user-friendly alternative. Both protocols support various Identity Providers (IdPs) such as Okta, ADFS, Google, and others, with comprehensive configuration guides available for setup and removal.

## 900. Login using SSO - Knowledge base portal

SSO enables access to the Knowledge base portal using existing credentials from an identity provider, eliminating the need for multiple passwords. The document does not specify which plans (Professional, Business, Enterprise) support SSO.

## 901. Login using SSO - Knowledge base site

Document360's Knowledge base site supports single sign-on (SSO), allowing users to log in with their existing credentials from another identity provider (IdP), eliminating the need for separate passwords.

## 902. Logging in using SSO

Use your existing identity provider (IdP) credentials to log into the Document360 Knowledge Base. Visit the site, select your IdP's login button, log into your IdP, and you'll be automatically logged in. SSO login buttons vary based on configurations.

## 903. Troubleshooting

The HTTP 500 error during SSO login likely stems from an outdated SAML certificate or incorrect attribute mappings. Update the IdP with the latest metadata from Document360 to ensure the correct certificate is used. Verify that SAML attributes like email and name match exactly between the IdP and Document360. If issues persist, contact support for further assistance.

## 904. Adding a new team account as an SSO user

To add a new team account linked to SSO, follow the standard Document360 team account creation process in the Knowledge Base portal, but additionally: 1) Ensure the user email matches the SSO domain; 2) Select the desired SSO configuration; 3) Optionally, skip the invitation email. Only Owners/Admins can add accounts.

## 905. IdP Initiated Sign-In

Enable the **Allow IdP initiated Sign-In** feature during SSO setup to log in directly from your IdP's dashboard—find the Document360 application, click to initiate login, and securely access the Knowledge base with your SSO credentials.

## 906. Inviting or Adding SSO users

After configuring Enterprise SSO using SAML or OpenID, users can authenticate via identity providers like Okta, Azure AD, or Google Workspace. You can add new SSO users directly or invite existing users to use SSO.

## 907. Deleting an SSO user

To delete an SSO user in Document360, navigate to Team accounts & groups, hover over the SSO account, click "Delete", then confirm. SSO users are identified by the SSO label. Deleting an SSO user does _not_ delete the associated team account.

## 908. FAQ

You can't add a user twice as an SSO reader account in a project. If the user exists as an SSO reader, the "Create reader account" button is disabled. SAML is used for single sign-on.

## 909. Inviting an existing user

To invite existing users to login via SSO in Document360, follow these steps: log in, navigate to **Settings > Users & Security > SAML/OpenID**, edit the SSO configuration, select **All users** or **Selected users only**, and save. Users receive an invitation email, and an additional SSO account is created alongside their existing one.

## 910. Mapping an existing SSO configuration to other projects

To map an existing SAML/OpenID SSO configuration to another Document360 project, log in, navigate to project settings, and select "Create SSO," then choose the existing configuration from a dropdown. Existing IdP and SSO protocol (SAML/OpenID) must match.

## 911. Disabling the Document360 login page

To bypass the Document360 common login page in a specific project, enable the "Disable Document360 login page" toggle within the project's SAML/OpenID settings. This affects SAML and OpenID SSO setups.

## 912. FAQs

Turning on the "Disable Document360 login page" toggle forces users to log in via single sign-on (SSO) using SAML, eliminating email/password login.

## 913. Automatically assigning SSO readers

To automatically assign SSO readers to a Document360 knowledge base, configure SAML/OpenID settings in the project's "Users & security" section. Enable the "Auto assign reader group" option and select the desired existing reader groups. Ensure reader groups are already created.

## 914. Disable Document360 login page

Organizations using only SSO users can disable the Document360 login page, redirecting users directly to the SSO login. This feature is supported in certain plans, though specifics aren't detailed. Caution is advised if both SSO and regular accounts are present, as disabling the login page may prevent regular users from accessing their accounts.

## 915. Convert Document360 account to SSO account

Convert Document360 team/reader accounts to SSO accounts for single sign-on access, simplifying login. SAML/OpenID projects only. Select accounts, click "Convert to SSO account," confirm. Previous contributions remain but appear as "Anonymous." Owner accounts become both Document360 and SSO, preserving access. SSO accounts cannot be converted back.

## 916. Auto assign reader group

The Auto assign reader group feature simplifies knowledge base access by automating reader access for those using SSO, supported across Professional, Business, and Enterprise plans, eliminating manual invitations.

## 917. FAQ(s)

Document360 account owners/admins and team account managers can convert to SSO accounts. JWT projects cannot be converted. Accidental SSO conversions require manual recreation of Document360 accounts and roles.

## 918. Convert to SSO account

- Single Sign-On (SSO) is typically supported in Business and Enterprise plans, while availability for Professional plans may vary by provider.

## 919. FAQs

User accounts logging into the Knowledge Base via SSO will timeout after 2 hours of inactivity. This timeout is configurable. SAML is the SSO standard used.

## 920. SAML

SAML 2.0 enables single sign-on (SSO) for Document360. Users can log in with their existing identity provider (IdP) credentials. Document360 supports multiple SSO endpoints for teams and readers.

## 921. Sign out idle SSO team account

The **Sign out idle SSO team account** feature enhances Document360 security by automatically logging out inactive SSO accounts (SAML/OpenID) after a idle period, preventing unauthorized access and streamlining management.

## 922. How to enable the 'Sign out idle SSO team account' option?

To enable the feature, follow these steps in the Knowledge base portal:

1. Navigate to **Settings > Users & Security > SAML/OpenID**.
2. Hover over an existing SSO configuration and click the **Edit** icon.
3. Under the **More settings** tab, toggle **ON** the **Sign out idle SSO team account** option.
4. Set the idle timeout duration in **hours:minutes** format.
5. Click **Save** to apply the changes.

> **Note**: Applies only to SSO team accounts, not Document360 team accounts.

## 923. Troubleshooting

Document360 SAML SSO login problems often stem from using an incorrect or expired certificate in your Document360 settings. To fix this: 1) Obtain the _active certificate_ from your Identity Provider (IdP). 2) Replace the certificate in Document360's settings. If issues persist, use the SAML Tracer extension to capture logs, then contact support with screenshots of IdP configuration, certificate details, and the logs.

## 924. SAML SSO with Okta

Document360 users with Owner or Admin Project roles can configure SAML SSO with Okta. Users authenticate once in Okta, then access Document360. The configuration requires switching between Okta and Document360 multiple times. Use separate browser tabs for this process.

## 925. Configuring SSO using SAML

- Set up SSO via SAML by selecting an identity provider in Document360, configuring both service provider (SP) and identity provider (IdP) settings using the provided details, enabling SSO access for users alongside traditional email/password login.

## 926. Supported identity providers

Document360 supports the following identity providers: Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and others.

## 927. Okta to Document360 SAML SSO configuration

To configure SAML SSO between Okta and Document360, first gather the required parameters from Okta's Application settings (Sign-on URL, Identity Provider Issuer, and X.509 Certificate). Next, on the Document360 side, enter the Okta-provided mappings (Sign-on URL, Identity Provider Issuer) into the relevant fields, upload the downloaded X.509 certificate, configure optional settings (Idle sign-out, auto-assign reader groups, custom login button text), and then complete the configuration by clicking "Create". The process involves mapping Okta's Identity Provider data to Document360's Service Provider, and allowing the selected SSO methods to manage user accounts on Document360.

## 928. Sign up for Okta

Sign up for an **Okta** account by visiting <https://developer.okta.com/signup/>. After signing up, you'll receive an email with your **login credentials** and an **activation link**. Click the link to activate your account, then log in to your **Okta Domain** and access the **developer console**.

To add a Document360 application in Okta for SSO, follow these steps:

1. **Log in as Admin**: Access Okta with admin credentials and switch to the admin role.

2. **Create App Integration**: Navigate to Applications and click "Create App Integration," selecting SAML 2.0 as the sign-in method.

3. **Configure SAML Settings**:

- Enter the app name and optional logo/app visibility.
- Obtain parameters from Document360's Service Provider page.
- Map parameters to Okta fields: Callback path to Single sign-on URL and Service provider entity ID to Audience URI.
- Set Name ID format to EmailAddress and Application username to Email.
- Add Attribute Statements for email and name, ensuring case sensitivity.

4. **Finish Configuration**: Complete the setup in Document360 using Okta's application details.

## 929. Other configuration settings in the Azure AD portal

Customize Azure AD for SSO by editing User Attributes & Claims (add new/group claims), managing SAML signing certificates (add/import), configuring multiple notification emails, and testing the configuration with user credentials.

## 930. SAML SSO with Entra

Learn how to configure SAML Single Sign-On (SSO) in Document360 using Microsoft Entra as the Identity Provider. Only users with Owner or Admin roles can perform this setup. It’s recommended to use separate browser tabs for Document360 and Entra to streamline the configuration process.

## 931. Adding a custom SAML app on Google

To add a custom SAML app to Google, create the app, download the certificate, note the SSO URL & Entity ID, enable the service for all users. These details will be used to configure the Identity Provider in another system (like Document360).

## 932. Adding an application in the Azure portal

To add an application and configure SAML-based SSO with Document360 in the Azure portal, follow these key steps:

1. **Access the Azure AD Portal**: Sign in to your Azure account and navigate to the Azure portal at [portal.azure.com](https://portal.azure.com).

2. **Add a New Application**:

- Click on "+ New application" and select "Non-gallery application."
- Enter your application name and click "Add."

3. **Set Up Single Sign-On**:

- In the "Getting started" section, choose "Set up single sign-on" and select "SAML."
- Configure SAML settings using the parameters from Document360.

4. **Configure Service Provider (SP) in Document360**:

- Navigate to Document360 Settings > Users & security > SAML/OpenID.
- Click "Create SSO" and select "Entra ID" as your Identity Provider to auto-configure SP settings.

5. **Map Azure AD Fields to Document360**:

- Copy and paste the required SP parameters (e.g., Identifier, Reply URL, Sign-on URL, Logout URL) from Document360 to Azure AD.

6. **Complete Identity Provider (IdP) Configuration in Document360**:

- Input the corresponding Values from Azure AD (e.g., Sign On URL, Entity ID, Logout URL, and certificate).
- Optionally enable "Allow IdP initiated sign-in."

7. **Finalize More Settings**:

- Assign a name to your SSO configuration.
- Customize the login button and other optional settings.

8. **Save and Complete**:

- Click "Create" to finalize the SSO configuration, enabling seamless authentication between Azure AD and Document360.

## 933. SAML SSO with Google

To configure Google SAML SSO, log in to Document360, select your project, and ensure you have an Owner or Admin project role. Log in to your Google Workspace account, navigate to the Admin console, and follow the SSO configuration steps, switching between Document360 and Google Workspace as needed.

## 934. SAML SSO with OneLogin

Configure Document360 Single Sign-On (SSO) with OneLogin using SAML. Only users with Owner or Admin Project roles can configure SSO. Keep both Document360 and OneLogin open during the configuration process.

## 935. Identity Provider configuration

Configure the Identity Provider (IdP) by navigating to the appropriate page in Document360, entering the necessary SAML details from Google (Sign on URL, Entity ID, and certificate), adjusting toggles for features like IdP-initiated sign-in, and completing the setup with additional settings such as SSO naming and user assignments.

## 936. Service Provider configuration

To configure SSO with Google Workspace, follow these steps:

1. Navigate to **Settings > Users & Security > SAML/OpenID** and click **Create SSO**.
2. Select **Google** as your Identity Provider.
3. Copy the **ACS URL** and **Entity ID** from Document360's **Configure Service Provider** page.
4. In Google Workspace:

- Paste the copied ACS URL and Entity ID into the Google custom SAML app.
- Set **Name ID format** to **EMAIL** and select **Primary email** for **Name ID**.

5. Map Google Directory attributes:

- Add **Primary email** for `name`, `email`, and `urn:oasis:names:tc:SAML:2.0:nameid`.
- Click **Add Mapping** for each attribute and then **Finish**.

## 937. Adding an Application in OneLogin

To configure Document360 SSO in OneLogin, add a SAML Custom Connector application with the name "Document360 SSO," following the OneLogin Admin interface steps.

## 938. Document360 SSO Configuration

Configure Document360's Single Sign-On (SSO) by populating fields in the service provider configuration with details from your identity provider (IdP). Match the `Issuer URL`, `SAML 2.0 Endpoint`, and `SAML Certificate` fields from your IdP with corresponding fields in Document360. Enable/disable IdP-initiated sign-in as needed, and proceed to the more settings page. This establishes the connection between your IdP and Document360 for SSO functionality.

## 939. More Settings

Configure SSO settings including: SSO name, custom login button text, auto-assign reader groups, idle account sign-out, and existing account invitation. Click "Create" to finish.

## 940. Adding an Application in ADFS

Create a new claims-aware Relying Party Trust in ADFS, naming it (e.g., "Document360 SAML SSO"), and enabling SAML 2.0 WebSSO protocol support.

## 941. Configuring SAML in OneLogin

- Configure SAML in OneLogin using Document360 parameters.
- **Document360 Steps**:

1. Navigate to **Settings > Users & security > SAML/OpenID**.
2. Click **Create SSO**, select OneLogin as IdP.
3. From the SP page, gather: Service provider entity ID, Callback path.

- **OneLogin Configuration Tab**:
- Audience (EntityID): Service provider entity ID.
- Recipient: Callback path.
- ACS (Consumer) URL Validator: Callback path.
- ACS (Consumer) URL: Callback path.
- **Parameters Tab**:
- Add fields:
- `urn:oasis:names:tc:SAML:2.0:nameid` = Email.
- `email` = Email.
- `name` = Email.
- Ensure **Include in SAML assertion** is checked.
- **SSO Tab**:
- Download X.509 Certificate (select SHA256 and PEM format).
- Copy Issuer URL and SAML 2.0 Endpoint (HTTP).

## 942. Document360 Service Provider (SP) Configuration

Configure ADFS for Document360 SSO using SAML. Retrieve Subdomain, Callback, Signed-out Callback, Metadata, & Service Provider Entity ID from Document360. Enter these values into ADFS's Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL, Relying Party Trust Identifier and Metadata URL). Complete ADFS wizard, review, and finalize.

## 943. Configuring Claim Rules

Configure claim rules to map Active Directory LDAP attributes (User-Principal-Name, E-Mail-Addresses, Display-Name) to Name ID, Email, and Name claims, respectively. This translates LDAP data into a usable format.

## 944. SAML SSO with ADFS

To set up Single Sign-On (SSO) between Document360 and ADFS using SAML, ensure you have **administrative access** to both platforms. Only users with **Owner** or **Admin** roles in Document360 can configure SSO. Open both **Document360** and **ADFS** in separate tabs for easier switching during setup.

## 945. SAML SSO with other configurations

Configure SSO with non-listed IdPs using Owner/Admin project roles in Document360. Keep Document360 and IdP in separate tabs for easier navigation during configuration.

## 946. Configuring SAML in your Identity Provider

To configure SAML in your identity provider, get the Callback path, Service Provider Entity ID and potentially the Single Sign-On URL from Document360. Configure these in your IdP's SAML settings. Often, attribute mapping (like email, name, and user ID) is needed; consult your IdP's documentation and Document360 for specific requirements. Save your settings after verification.

## 947. Document360 SAML SSO Configuration

Configure SAML SSO in Document360 by mapping ADFS values, uploading the X.509 certificate, enabling/disabling IdP-initiated sign-in, and customizing additional settings like SSO name and login button text before finalizing the setup.

## 948. Adding an Application in your Identity Provider

- Log in to the Identity Provider admin console.
- Navigate to the application management section (e.g., Applications or Enterprise Applications).
- Create a new application and configure the basic settings:
- Application Name: Choose a descriptive name (e.g., "Document360 SSO").
- Application Type: Select SAML 2.0 as the sign-in method.
- Save the application settings.

## 949. Enabling the IdP-initiated sign in

To enable IdP-initiated sign-in in Document360, navigate to Settings > Users & security > SAML/OpenID, edit an existing SSO configuration, enable the "Allow IdP initiated sign in" toggle in IdP configurations. Users then use a dedicated IdP sign-on URL to access Document360, authenticating via their IdP.

## 950. FAQs

Document360 supports Okta, Microsoft Entra, Google Workspace, OneLogin, and ADFS identity providers. To access Document360 from Okta, ensure "Allow IdP initiated sign in" is enabled. Document360 is a knowledge base platform allowing content creation, file management, and site configuration.

## 951. Document360 SSO Configuration

Configure Document360 SSO by following these steps: Enter Identity Provider (IdP) details, including SSO URL, Entity ID, and SAML certificate. Upload the X.509 certificate, enable or disable IdP-initiated sign-in, and configure additional settings such as SSO name, login button text, auto-assigning reader groups, idle sign-out, and user invitations. Complete the setup to enable SSO with your chosen IdP.

## 952. Identity Provider (IdP) initiated sign in

Document360 supports IdP-initiated sign-in using SAML for Single Sign-On (SSO) with the following identity providers: Okta, Entra ID, Google Workspace, OneLogin, and ADFS.

## 953. OpenID

OpenID Connect (OIDC) is an open standard for single sign-on (SSO). Document360 users can log in with existing identity provider accounts, eliminating multiple passwords and improving security. Document360 supports multiple SSO endpoints for both team accounts and readers.

## 954. Removing a configured SAML SSO

To remove a SAML SSO configuration in Document360:

1. Go to your project's Knowledge base portal.
2. Navigate to **Settings > Users & security > SAML/OpenID**.
3. Hover over the configuration, click the Delete icon, and confirm by clicking Proceed.

> **Important Note:** Deleting an SAML SSO configuration also removes all associated users.

**SAML (Security Assertion Markup Language):** A standard for Single Sign-On (SSO) that allows users to access multiple applications with a single set of credentials.

## 955. Configuring SSO using OpenID

To configure SSO using OpenID in Document360, navigate to settings, select OpenID, and input details from your identity provider (IdP) and Document360 (SP) into the respective configuration screens. This allows users to log in via either their existing credentials or the external SSO provider.

## 956. Supported identity providers

Document360 supports Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and other identity providers.

## 957. Troubleshooting

Document360 OpenID SSO error (IDX20803) likely stems from a wrong IdP Authority URL. Fix it by: 1) finding the correct "issuer" from your IdP's discovery document (`.well-known/openid-configuration`); 2) pasting this "issuer" into Document360's SSO settings Authority field; 3) verifying the URL, network/firewall, and IdP certificate validity.

## 958. Adding an Application in Okta

Log in to Okta as admin, navigate to Applications, click "Create App Integration," select OIDC and Web Application, and proceed to next step.

## 959. Document360 Service Provider (SP) Configuration

Configure Document360 SSO with Okta by creating a new OpenID connection in Document360, selecting Okta as the identity provider. Copy the provided subdomain name, sign-in, and sign-out redirect URIs from Document360. Paste these into the corresponding fields in Okta's new web app integration setup. This establishes the SSO connection.

## 960. Sign up for Okta

An Okta account is required to configure Single Sign-On (SSO) with Document360. If you don't already have one, sign up at [Okta Developer Sign-Up](https://developer.okta.com/signup/).

## 961. Okta with OpenID SSO Setup and Configuration

To configure Single Sign-On (SSO) between Document360 and Okta using OpenID, you need administrative access to Okta. Only users with **Owner** or **Admin** as their **Project role** in Document360 can set up SSO. For a smoother configuration process, open both Document360 and Okta in separate tabs or browser windows to easily switch between them.

## 962. Creating an application in Auth0

To create an Auth0 application, log in, navigate to Applications, create a new application, specify the name, select "Regular Web Application" type, and click create.

## 963. Configure Auth0 OpenID with Document360

To configure Auth0 OpenID with Document360, navigate to Document360 settings, choose "OpenID" as the protocol, and enter the Auth0 "Sign in redirect URI" and "Sign out redirect URI" in Document360's corresponding fields. Save the changes to complete the setup.

## 964. Document360 OpenID SSO Configuration

Configure Document360 SSO by entering Okta's Client ID, Client Secret, and Issuer URI in the Identity Provider settings. Enable or disable IdP-initiated sign-in based on project needs. In More Settings, customize the SSO name, login button text, auto-assign reader groups, idle sign-out, and SSO invitations. Complete by saving the configuration.

## 965. Auth0 with OpenID SSO

To integrate Auth0 with OpenID SSO in Document360, an Auth0 account is required. Configuration is limited to users with Owner or Admin project roles. It's advised to use separate tabs for Auth0 and Document360 during setup. The document notes empty SSO plan details and includes incorrect steps for Microsoft Entra instead of Auth0.

## 966. ADFS with OpenID SSO

To configure SSO between Document360 and ADFS using OpenID, ensure you have administrative access to both systems. Document360 users with Owner or Admin project roles can configure this. Open both Document360 and ADFS in separate browser windows during setup, due to switching between them.

## 967. Document360 Service Provider (SP) Configuration

Configure Document360 with ADFS for SSO using OpenID. Obtain subdomain, sign-in/sign-out URIs from Document360. Enter these into ADFS Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL). Complete the ADFS setup wizard, review settings, and enable user access.

## 968. Configuring Claim Rules

Configure claim rule to send LDAP attributes as claims. Select "Send LDAP Attributes as Claims" template. Map LDAP attributes (User-Principal-Name to Name ID, E-Mail-Addresses to Email, Display-Name to Name) using Active Directory as the attribute store. Click "Finish" and "Apply" to save.

## 969. Adding an Application in ADFS

Log in to the ADFS Management console, navigate to Relying Party Trusts, and add a new Relying Party Trust. In the wizard, select "Claims aware," choose to enter data manually, provide a display name, and optionally configure a certificate (can skip if not needed).

## 970. Document360 OpenID SSO Configuration

Configure Document360's OpenID SSO by following these key steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter your Identity Provider's **Client ID**, **Client Secret**, and **Authority** (domain).
3. Enable/disable **IdP initiated sign-in** as needed.
4. Configure **More Settings**:

- Provide an **SSO name**.
- Customize the **login button text**.
- Toggle **Auto assign reader group** and **Sign out idle SSO team account**.
- Choose whether to invite existing accounts to SSO.

5. Click **Create** to complete the configuration, enabling secure OpenID-based authentication.

## 971. Other configurations with OpenID SSO

To configure SSO with an _unlisted_ OpenID Identity Provider in Document360, users with Owner or Admin Project roles need access to both Document360 and the chosen IdP. Keep Document360 and the IdP open in separate browser tabs for smoother configuration.

## 972. Configuring OpenID in Your Identity Provider

Configure OpenID in your IdP by accessing Document360's SSO settings, selecting "Others" as IdP and choosing "OpenID". Document360 provides the Subdomain name and Redirect URIs (sign-in/sign-out). Crucially, include the scopes _openid_, _email_, and _profile_ and map claims (_sub_, _email_, _name_) according to Document360's specifications. Review and save your configuration in your IdP.

## 973. Document360 OpenID SSO Configuration

Configure Document360 SSO by providing Identity Provider (IdP) Client ID, Secret, and Authorization URL. Enter details like SSO name, custom login text, and enable/disable auto-assignment of reader groups, IdP initiated logins, and account sign out. Upload certificates/keys where needed. Then, click 'Create' to finalize the configuration.

## 974. Adding an Application in Your Identity Provider

To create a new OpenID application in your Identity Provider:

1. Log in to the admin console.
2. Navigate to the Applications or Enterprise Applications section.
3. Create a new application, naming it (e.g., "Document360 OpenID SSO") and selecting OpenID Connect as the sign-in method.
4. Save your settings.

## 975. Document360 OpenID SSO Configuration

To configure OpenID SSO in Document360, follow these steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page in Document360.
2. Enter the **Client ID** and **Client Secret** from ADFS into the corresponding fields.
3. Ensure the **Client Identifier** matches the **Relying Party Identifier** in ADFS.
4. Toggle the **Allow IdP initiated sign in** option based on project needs.
5. Enter the **Issuer URL** from ADFS as the **Authority** in Document360.
6. Proceed to the **More settings** page and configure:

- **SSO Name**: Enter a descriptive name.
- **Customize login button**: Provide user-friendly text.
- **Auto assign reader group**: Enable/disable based on access policies.
- **Sign out idle SSO team account**: Set according to security requirements.
- Choose to invite existing users to SSO.

7. Click **Create** to complete the configuration.

This setup integrates Document360 with ADFS for seamless user authentication.

## 976. Enterprise SSO using \***\*JWT\*\***

**Key Information:** Document360's JWT SSO leverages a customer application for user authentication. User logs in to customer app, which requests an auth code via backchannel from Identity Provider (using client credentials). Document360 receives the auth code and requests an ID token/access token. Document360 creates a session, automatically renewing it within a configurable timeframe (5 to 1440 minutes). No separate Document360 reader account is required (only app account). This approach is exclusive to other SSO methods (SAML, OpenID).

## 977. Removing a configured OpenID SSO

Delete an SSO configuration in Document360 by accessing the project's Knowledge base, navigating to Settings > Users & security > SAML/OpenID. Hover over the SSO configuration to reveal the Delete icon. Confirm deletion in the popup, understanding it removes associated user accounts.

## 978. SSO configuration

Configure SSO in Document360 by creating a JWT under Settings > Users & security > JWT, then copy the Client ID, Callback URL, and Client secret for your application. Enable/disable JWT SSO login, configure the login URL, and set up redirection using the `redirectUrl` parameter in the URL. Note: Client secret is only available once and must be regenerated if lost.

## 979. Setting up JWT SSO

To set up JWT-based Single Sign-On (SSO) in Document360, follow these steps:

1. **Understand JWT**: A JSON Web Token (JWT) securely transfers authentication and authorization data between applications. It consists of a header, payload, and signature.

2. **Check SSO Plan Compatibility**: Verify if your subscription plan supports SSO. While the table provided is empty, typically higher-tier plans like Enterprise include such features.

3. **Generate JWT Token**: Upon user login, generate a JWT token. Include necessary claims (e.g., user ID, email) and set an expiration time for security.

4. **Configure Secret Key**: Use a strong secret key to sign the JWT. Ensure this key is shared with Document360 for token verification.

5. **Set Up Redirect Flow**: When accessing Document360, users are redirected to your login page. Post-login, generate the JWT and redirect them back with the token.

6. **Test the Flow**: Validate the entire process, ensuring smooth user authentication without additional logins.

7. **Consult Documentation**: Refer to Document360’s API documentation for specific requirements and endpoints.

This setup enhances user convenience and security, streamlining access to Document360.

## 980. Reader groups in Document360

Document360 reader groups grant precise access to private knowledge base content. Users must log in. Groups can be created to restrict access to specific categories (e.g., sales team only sees pricing/billing). Members are then assigned to those groups.

To resolve the 401 Unauthorized error during JWT testing in Postman, follow these organized steps:

1. **Authorize the Request**:

- In Postman, navigate to the Authorization tab of your request.
- Set the authorization type to **Basic Auth**.
- Enter your **Client ID** as the Username and **Client Secret** as the Password.

2. **Verify Request Format**:

- Switch to the Body tab.
- Select **raw** and ensure the format is set to **JSON**.
- Include all required parameters, such as **grant_type**, in your JSON payload.

3. **Confirm Credentials**:

- Double-check that the Client ID and Secret are correct and properly entered.

4. **Check Endpoint URL**:

- Ensure you're using the correct token endpoint URL as specified in the documentation.

5. **Inspect Server Response**:

- If an error occurs, examine the response body for additional details that can indicate the issue, such as "invalid grant type" or "bad credentials."

6. **Review System Configuration**:

- Verify with your system administrator that the Client ID and Secret are correctly registered on the server side.

By systematically addressing each of these areas, you can identify and resolve the cause of the 401 error.

## 981. JWT reader groups

JWT reader accounts can be linked to existing Document360 reader groups, inheriting their restriction settings to control knowledge base access. These groups function like regular reader groups, with support for single sign-on (SSO) across Free, Professional, Business, and Enterprise plans.

## 982. Reader group IDs

For JWT SSO-enabled projects, Reader group IDs can be found in **Settings > Users and Security > Readers & groups**. Each reader group displays a **Group Id** below its name, with a copy icon for easy pasting into the payload. Note: Available only for JWT-configured projects, not regular private knowledge bases.

## 983. Enabling JWT reader groups

Configure JWT reader access by providing a user's details (name, email) and a list of reader group IDs in a specific JSON format. Changes to reader groups only apply after the current JWT session expires (token validity). Use comma-separated IDs in the `readerGroupIds` array. Min token validity is 5 minutes, max is 1 day.

## 984. How to change the highlighted search result color in articles?

To customize highlighted search results in knowledge base articles, navigate to Knowledge Base site > Customize site > Custom CSS & JavaScript. Modify the provided CSS snippet (different for KB Site 1.0 and KB Site 2.0) changing the `background-color` and `color` properties. Save the changes. This allows altering the highlight color from the default yellow, to any desired color.

## 985. How to hide the project's workspace dropdown in the Knowledge base site?

To hide the project workspace dropdown in the knowledge base site, add the CSS `header .header_bottom .header_bottom_nav ul li.versions-selection { display: none; }` to the site's custom CSS. This removes the dropdown, requiring users to navigate to workspaces using direct URLs.

## 986. How to change the color of the hyperlinks in Dark mode?

Access the Custom CSS section in your Knowledge Base settings, add a CSS snippet targeting hyperlinks in Dark mode, and customize the color to your preference. Save changes to apply the new hyperlink color in Dark mode.

## 987. How to enlarge the pdf preview in the article?

To enlarge the PDF preview, access your Knowledge Base site settings, navigate to the Custom CSS section, and apply the CSS snippet to adjust the PDF container width. This ensures the preview expands to full width, improving visibility across different browsers.

## 988. How to add a vertical scrollbar to the code blocks?

Add vertical scrollbars to code blocks by either:

1. Wrapping specific code blocks in `<div class="scroll">` and adding custom CSS to set height and enable scrolling.
2. Applying global CSS to all code blocks using `.code-toolbar` selectors.

Outcome: Scrollbars appear for code blocks exceeding the specified height, keeping content within a fixed area.

## 989. How to vertically align table contents at the top in the Knowledge base?

To vertically align table content to the top in your knowledge base, add this CSS code to custom CSS settings: `table td, table th, table tr { vertical-align: top !important; }`. This overrides the default alignment. Follow the Knowledge base customization steps to save the changes.

## 990. How to make the table border bold in knowledge base?

To make table borders bold, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript. Add the CSS snippet:

```css
table td,
table th,
table tr {
  border: 3px solid #000000 !important;
}
```

Adjust the `3px` thickness and `#000000` color as needed, then save. This will apply the changes to all tables in the knowledge base.

## 991. How to restrict the readers from copying the content?

Prevent content copying by intercepting the "cut," "copy," and "paste" events using JavaScript on specific HTML elements (`content_block`, `d360-article-content`). This solution uses custom CSS and JavaScript, is adjustable to different content areas, and has minimal disruption on user experience. User selection of content is allowed but prevents copying with Ctrl+C or alternative actions. This is a mitigation strategy, not a foolproof solution.

## 992. How to set the default height and width of the embedded PDF?

To set custom dimensions for embedded PDFs, navigate to the CSS settings in your knowledge base site and add the provided CSS snippet with your desired height and width in pixels.

## 993. Center align Headings in Markdown

To center-align headings in Markdown, use HTML `<hN style="text-align:center;">` tags. Markdown lacks built-in centering. Document360 provides a WYSIWYG editor and markdown editor for content creation and formatting. It's a platform for knowledge base management and content creation.

## 994. How to center align the text in Markdown?

To center-align text in Markdown, use the HTML `<p>` tag with `style="text-align:center;"`. Replace "Text_content" with your desired text. Example: `<p style="text-align:center;">Sample text</p>`. You can also apply basic formatting inside the paragraph.

## 995. How to change the color of the text in Markdown?

Use an HTML `<span style="color:desiredColor;">` tag to change text color. Markdown doesn't directly support inline styles, so HTML is needed. Replace `desiredColor` and the text within the span tags with your desired values.

## 996. How to change the language name text in code blocks?

To change the language name in code blocks to a custom name (e.g., "Example") across your entire knowledge base, modify the site's Custom CSS, specifically targeting the code block toolbar. Hide the default language name, and display a new "Example" label. This is a global change.

To set dark mode as the default for your Knowledge Base site, you can use custom JavaScript. Here's how:

1. **Access Customization Settings**: Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.

2. **Add JavaScript**: Paste this snippet into the JavaScript tab to trigger dark mode on page load:

```javascript
$(document).ready(function () {
  setTimeout(function () {
    document.getElementById('darkTheme').click();
  }, 100);
});
```

Then save your changes.

3. **Disable Theme Switching (Optional)**: To enforce dark mode, navigate to **Settings > Knowledge base site > Customize site**, select **Dark only** under **Site theme**, and save.

This ensures dark mode is the default, with the option to prevent users from switching to light mode. The script reliably triggers dark mode if the 'darkTheme' element is present, and testing post-implementation is recommended to ensure compatibility.

## 997. How to center align the heading in the articles?

To center-align headings (H2, H3, H4) in Document360 articles, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript, paste the CSS snippet `H2, H3, H4 { text-align: center; }`, and save. This globally centers all specified headings.

## 998. How to change the color of the table header?

To change table header color in a knowledge base site, navigate to customization settings, add custom CSS targeting either `table th` (KB site 1.0) or `.editor360-table th` (KB site 2.0). Change the background color in the CSS to meet your requirements and save. This modifies the header color across all tables on the site.

## 999. How to change the callouts color in dark mode?

To change the callout colors in dark mode, navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, then add the provided CSS snippet. Modify the `background-color`, `color`, and `border-left` properties for `.infoBox`, `.errorBox`, and `.warningBox` classes to update the callout colors in dark mode. Remember to use `!important` to override default styles.

## 1000. How to add extra space in Markdown?

To add space in Markdown, use HTML tags: `<br>` for vertical space between lines, and `&nbsp;` for horizontal space between words within a line. Markdown doesn't natively support extra spacing.

## 1001. How to align the image in Markdown?

Images are left-aligned by default in Markdown. Markdown lacks built-in image alignment. The document suggests a workaround, but the details are missing.

## 1002. How to add accordion in Markdown?

To add an accordion in Markdown, use HTML's `<details>` and `<summary>` tags. Wrap your content within `<details>`, use `<summary>` for the title, and place content inside `<p>`. You can include headings by using `<h2>`, `<h3>`, etc.

**Code Example**:

```html
<details>
  <summary><strong>Accordion Title</strong></summary>
  <p>Content here...</p>
</details>
```

**Caution**: Adding headings in the summary may affect text alignment. You can nest lists, headings, and other HTML within the content section.

## 1003. Advanced customizations for accordions

Enhance accordions with colors, dotted borders, and icons using CSS. Add header colors via CSS, create hover effects with border transitions, and set accordions to always open with the `open` HTML attribute. Use CSS to add rotating plus icons. While Markdown can create basic accordions, advanced styling requires CSS/HTML.

## 1004. How to add a background image for a text content?

To add a background image to text in a knowledge base site, use custom CSS (via Custom CSS & JavaScript settings). Apply a CSS class to the text element, specifying the background image URL. Then, apply that class to your desired text in HTML. This approach works in the site's editor, either through code view or directly applying the styled element. Web-accessible images are required.

## 1005. How to sort the contents of a table?

To sort tables on a knowledge base site, add custom CSS (to style headers and display sort indicators) and JavaScript (to handle the sorting logic). The CSS styles headers for clickability and displays ascending/descending icons. JavaScript code sorts table rows based on selected column content, maintains current sort state (ascending or descending), and updates the sort indicator in the header. Users click on headers to initiate sorting.

1. Use the HTML `<p>` tag with inline styling to align images. For center alignment, use:

```html
<p style="text-align: center"><img src="[Image-URL]" /></p>
```

2. Replace `[Image-URL]` with the image URL from Document360 Drive. To find the URL:

- Navigate to the image in Drive.
- Click "View details" and copy the URL from the file details.

3. Adjust alignment by changing the `text-align` value to `left` or `right`.

4. This method works for any image file type, including buttons and logos.

## 1007. How to make all links open in new tab?

To open all links in knowledge base articles in new tabs, customize the site's CSS & JavaScript. Insert provided JavaScript code targeting specific HTML elements containing links (`content_block_text a` or `block-article a`) setting the `target` attribute to `_blank`. Save the changes. This will force all links within those elements to open in new tabs.

## 1008. How to change the color of the table of contents?

To change the table of contents color, use custom CSS. For **KB Site 1.0**, target `.content_block .content_container .page-action .article_action_links ul li a` and set the color. For **KB Site 2.0**, use `d360-table-of-content .toc-item .toc-toggle-icon, d360-table-of-content .toc-item a` for all items and `d360-table-of-content .toc-item.selected a` for selected headings. Replace color values as needed and save changes.

## 1009. How to set a default featured image in knowledge base?

In Document360, set a default featured image for knowledge base articles to ensure consistent thumbnails on social media shares. This replaces a random article image if no specific featured image is defined for an article. The default image must be publicly accessible.

## 1010. How to customize the hyperlink size?

To customize hyperlink size, use custom CSS available in the Enterprise plan:

1. Go to **Settings** > **Knowledge Base Site** > **Customize Site** > **Custom CSS & JavaScript**.

2. Add CSS:

```css
.CustomLink {
  font-size: 25px;
}
```

3. Apply the class to hyperlinks:

```html
<a class="CustomLink" href="your-link">Link Text</a>
```

4. Adjust the font-size value and save changes.

## 1011. How to add borders to an image in Markdown?

Use HTML within Markdown. Add a `style="border: [width]px [style] [color];"` attribute to the `<img>` tag. Example: `<img src="image.jpg" alt="description" style="border: 2px solid grey;">` Adjust width, style, and color as needed. Alternative, consult linked article for shadows.

## 1012. How to embed YouTube Shorts?

To embed a YouTube Short, use an iframe. Replace `/shorts/` with `/embed/` in the Short's URL. Use the provided iframe code, adjusting the `src` attribute with the embed URL. The optimal size is 315px x 560px, but you can vary it as needed.

## 1013. How to add shadows to an image in Markdown?

Use HTML within Markdown to add shadows with `box-shadow` CSS. Example:

```html
<img
  src="image.jpg"
  alt="Image description"
  style="box-shadow: 3px 3px 3px gray;"
/>
```

Customize horizontal offset, vertical offset, blur radius, and color to your preference.

1. Navigate to Knowledge base portal Settings () > Knowledge base site > Integrations.
2. Under Custom HTML, click Add.
3. Paste the meta tags with your image URL:

```
<meta property="og:image" content="Image_URL" />
<meta property="og:image:secure_url" content="Image_URL" />
```

4. Replace "Image_URL" with your image link (e.g., from Document360 drive) and click Add.

This sets a default image for social media shares when articles don't have a featured image.

## 1015. How to embed an Excel file?

Document360 allows embedding Excel files directly into articles, making documentation more engaging and informative. Specific features and availability likely vary by plan level (Professional, Business, Enterprise).

## 1016. Embedding an Excel file

Embed an Excel file in Document360 by: 1) sharing the Excel file in Excel (File > Share > Embed). 2) Copying embed code. 3) Pasting the code into the Document360 editor (Markdown or Advanced WYSIWYG). Screenshots and sample code provided.

## 1017. Solution

Change the colors of "Yes" and "No" feedback buttons in a knowledge base site (Document360) by adding custom CSS code targeting specific classes and elements. Navigate to settings > Knowledge base site > Customize Site > Custom CSS & Javascript, add the given CSS snippets, update color values, save, and the buttons will change color. Before/after screenshots demonstrate the change.

## 1018. How to change the color of Feedback buttons?

To change the color of feedback buttons, follow these steps:

1. **Access Custom CSS/JS**: Ensure you're on an Enterprise plan, as this feature is only available there.
2. **Target Feedback Buttons**: Use CSS to select the feedback buttons using their class or ID.
3. **Apply Color**: Define a new color using a hex or RGB value within your CSS rules.
4. **Save and Test**: Implement the changes and test the appearance of the buttons.

Example CSS:

```css
.feedback-button {
  background-color: #ff6b6b; /* Replace with desired color code */
}
```

## 1019. How to hide footer in mobile view?

Hide custom footers on mobile for better user experience. Mobile-optimized layouts prioritize content above the footer on smaller screens.

## 1020. How to embed a Loom video?

To embed a Loom video into your Document360 page:

1. Access your desired video in Loom.
2. Click **Share** > **Embed**, select the fixed size, and copy the embed code.
3. Paste the code into the editor you're using:

- **Markdown editor**: Paste directly.
- **WYSIWYG editor**: Use the Insert video > Embedded code option.
- **Advanced WYSIWYG editor**: Go to Insert > Video > Embed code.

The video will then be embedded in your article.

## 1021. Solution

To change the hover color of knowledge base header menu options, add specific CSS targeting those elements, in the Knowledge Base site's custom CSS settings. The example provided uses red, but you can adjust as needed. The documentation shows both the initial state and the state after the CSS changes are applied.

## 1022. How to change the hover color of the header options?

To customize the hover color of header options, users with Business or Enterprise plans can use custom CSS. Apply a CSS rule targeting the header elements' hover state. For example:

```css
.header-link:hover {
  color: #yourdesiredcolor;
}
```

## 1023. How to move the related articles above the feedback section?

To move the related articles above the feedback section, follow the unspecified steps and likely utilize custom CSS or Javascript to change the default placement.

## 1024. Solution

To hide the footer on mobile devices for a Knowledge Base site, follow these concise steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Choose the correct CSS snippet based on your site version:

- **KB site 1.0**: Use CSS targeting `.custom-footer` with `max-width: 469px`.
- **KB site 2.0**: Use CSS targeting `site-footer-section` with `max-width: 767px`.

3. Paste the selected CSS snippet into the CSS tab and click **Save**.
4. **Test the site** to ensure the footer is hidden on mobile without affecting other elements.

## 1025. Solution

To remove the "Change Password" option for knowledge base readers, customize the site's CSS by hiding related HTML elements. This edits `.user-dropdown-content .user-detail .portal-link a` and `.nav-bar-profile button.dropdown-item` selectors to hide the link in the user dropdown; save the change.

## 1026. How to hide the category manager?

Project-specific solution (impacting all workspaces) uses custom CSS/JS to restrict article access to specific URLs. Readers can only view articles with matching URLs . This hides the category manager.

The solution involves adding a JavaScript snippet to your Document360 Knowledge Base 1.0 site to move the related articles section above the feedback section. Here's a concise overview of the steps:

1. Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Under the JavaScript tab, paste the provided snippet:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Save the changes to implement the modification.

This script appends a separator line to the content block and moves the related articles above the feedback section.

1. Access **Settings**, navigate to **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. In the JavaScript section, paste the following code:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Click **Save** to apply the changes.

To hide the change password option for readers using custom CSS or JS on Business or Enterprise plans:

1. **Identify the Element**: Locate the HTML element (e.g., button or link) for the change password option. Use browser developer tools to find its class or ID.

2. **CSS Implementation**: Write CSS to hide the element. For example:

```css
.change-password-link {
  display: none;
}
```

3. **JavaScript Enhancement**: If the element is dynamically loaded, use a Mutation Observer to detect and hide it when it appears. Alternatively, remove it directly after DOM loads:

```javascript
window.addEventListener('DOMContentLoaded', function () {
  document.querySelector('.change-password-link').remove();
});
```

4. **Consider Dynamic Content**: If the site uses AJAX, ensure your script runs after content loads or use a mutation observer for real-time changes.

5. **Test Across Scenarios**: Verify functionality across browsers, devices, and page scenarios, ensuring no accessibility issues arise.

6. **Security Note**: Hiding the UI doesn't prevent direct URL access. Consider backend restrictions for full security.

By following these steps, you can effectively hide the change password option while maintaining site functionality.

## 1028. How to configure a custom font in the knowledge base?

To configure a custom font in Document360, obtain the font details, add the font link to Custom HTML, and add the font family details to Custom CSS. Example: configuring a Google font in Document360.

## 1029. Solution

Hide the category manager in Knowledge Base by adding custom CSS. For version 1.0, target `.left_sidebar` and `.left-sidebar-toggle`. For version 2.0, use `site-docs-left-panel-container`. Navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, paste the relevant code, and save.

## 1030. How to hide the left navigation bar in the knowledge base site?

Custom CSS/JS can hide the knowledge base's left navigation bar, but users can still display it by clicking a "Show category" icon.

## 1031. Plans and pricing

To configure a Google font in Document360, follow these concise steps:

1. **Get the Font Code**: Select your font on Google Fonts, then obtain the embed link under the "Get font" section.
2. **Add to Custom HTML**: In Document360, navigate to Settings > Knowledge base site > Integrations > Custom HTML, and paste the embed link in the Header section.
3. **Apply via Custom CSS**: Update your CSS by adding `font-family: 'YourFont', sans-serif;`, replacing "YourFont" with your chosen font name.

Embed Google Fonts in Document360 by adding the font link to Custom HTML and specifying the font family in Custom CSS.

## 1032. Solution

To hide the left sidebar on your Knowledge Base site:

1. **Access Customization**: Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. **Add CSS Code**: In the CSS tab, paste the following snippet:

```css
site-docs-left-panel-container {
  display: none !important;
}
```

3. **Save Changes**: Click **Save** to apply the changes.

After implementing, the left sidebar will be hidden by default.

## 1033. Accessing Billing overview page

To access billing, navigate to Settings > Knowledge base portal > Billing. Key tabs: My Plan (change via support), Payment Information, Invoice History. Changing plans requires support for legacy users. Free plan is discontinued. Check the pricing page for current details.

## 1034. Upgrading your subscription plan

Document360 users can upgrade their Professional, Business, Enterprise, Legacy, or Legacy Free plans. Upgrades incur a prorated cost for the remainder of the current billing cycle. Legacy plan upgrades may include credits. Only Owners or users with Billing & Invoice permissions can make changes to the plan.

## 1035. Plans available in Document360

Document360 offers five subscription plans tailored to different needs: **Professional**, **Business**, **Enterprise**, **Enterprise +**, and a **Startup program**. The **Professional**, **Business**, and **Enterprise** plans differ in features such as storage capacity, translation credits, workspace count, sandbox availability, and team/reader accounts. The **Enterprise +** plan provides dedicated servers for enhanced performance and security, while the **Startup program** offers six months of free access to select plans, followed by a discounted rate. Additional add-ons for storage, languages, and customizations are available across all plans.

## 1036. Plan comparison

Document360 offers tiered plans (Professional, Business, Enterprise) with increasing feature sets. Business offers more storage, team collaboration (readers/reviewers), advanced analytics, Workflow Designer, Ticket Deflector, & various AI features compared to Professional. Enterprise expands on Business with substantially more storage, larger teams, a sandbox, IP restrictions, comprehensive AI (including premium support), and health checks. Upgrading from Professional to Enterprise provides all Business and Enterprise features.

## 1037. Pricing page

To upgrade your subscription plan in Document360, navigate to **Settings > Knowledge base portal > Billing** and click **Change plan**. Choose from Professional, Business, or Enterprise plans. Compare features in the **Compare plans and features** section, then select your plan and click **Let’s talk** to contact the sales team for assistance. [Upgrading from a trial version](/help/docs/upgrading-from-trial-version) directs to specific guidance.

## 1038. Upgrading for users on legacy pricing plans

Users on legacy pricing plans (pre-August 31, 2024), can't upgrade directly; they need support assistance. Navigate to Billing > Change Plan > Let's Talk > Raise Request. Support team processes upgrade within 2 business days. Contact support for questions.

## 1039. FAQs

Upgrading gets you more features, storage, and support. Billing adjusts immediately or at the end of your cycle, with a prorated credit for unused portion when upgrading mid-cycle. Trials are available. Data and settings are preserved. Minimal setup is usually required. Downgrading is possible but may result in feature loss.

## 1040. Upgrading for users on legacy free plan

The Free plan was discontinued as of November 2024, but existing users retain access. To upgrade, navigate to **Settings > Billing > My plan**, click **Change plan**, compare features, and select your preferred plan. Click **Let’s talk**, and the Document360 sales team will assist with the upgrade process.

## 1041. Pricing page

To downgrade from your current Document360 plan, navigate to settings, select "Change plan," and choose from Professional, Business, or Enterprise. Compare features and limits to ensure your current usage fits the new plan. The sales team will assist and discuss add-ons for features lost in the downgrade. Check the pricing page for details on plan limitations.

## 1042. Downgrading your subscription plan

To downgrade your Document360 plan, note that some features may no longer be available. Only users with **Owner** permissions or **View and Update** access for **Billing & Invoice** can make changes. You can downgrade from:

- [Enterprise to Business](/help/docs/downgrading-your-plan#enterprise-to-business)
- [Business to Professional](/help/docs/downgrading-your-plan#business-to-professional)
- [Enterprise to Professional](/help/docs/downgrading-your-plan#enterprise-to-professional)

## 1043. Plan comparison

Downgrading loses features and capacity. Enterprise to Business: Reduced storage, users, reviewers, and some AI tools (with reduced credits). Business to Professional: Losses in workflow tools, analytics, integrations, AI summarization, and reduced storage and users. Enterprise to Professional loses all Enterprise and Business features. Storage, user limits, and AI credits decrease significantly. Some features are retained with reduced capacity or access to specific tools.

## 1044. Important considerations for all downgrades

Downgrading retains most existing data and some features but limits new content creation, removes access to some features, and restricts add-on usage based on the lower plan's capabilities. Data exceeding plan limits may be lost. Existing articles, tags, feedback, and PDF exports are generally preserved, but new creation, editing, and customization are restricted. Widget and custom JS/CSS functionality are also affected by the reduced plan.

## 1045. FAQs

Downgrading preserves data but may limit features and storage. Billing adjusts with a potential credit. Features tied to the higher plan might be lost, but data remains. Upgrade is possible later, but limits from the lower plan apply until upgraded again. Review new plan details before downgrading and consult support if needed.

## 1046. Downgrading for users on legacy pricing plans

Legacy pricing plan users (subscribed before 31st August 2024) must contact support to downgrade. Navigate to the Billing page, select "Change plan," click "Let's talk," and raise a request. Support will review and process within two working days. For additional help, contact support via email, live chat, or phone.

## 1047. Post-downgrade tips

- After downgrading, review your content and update workflows, communicate changes to your team, monitor usage, and consider future needs. Downgrading doesn't reduce quality or performance, and support is available if needed.

## 1048. Changing your plan during the trial period

During the 14-day Document360 trial, you can freely switch between plans to evaluate different features. Navigate to Settings > Billing, choose "Try other plans," select your desired plan, and confirm. Downgrading may result in loss of certain features. This process is free and allows informed subscription decisions.

## 1049. Subscribing to a Document360 plan

To subscribe, navigate to Settings > Knowledge base portal > Billing. Click "Buy now" to view plans. Select a plan and click "Let's talk." Document360 sales will help with the purchase.

## 1050. Purchasing add-ons

Document360 offers various add-ons to enhance your documentation setup, available across Professional, Business, and Enterprise plans. Add-ons include workspaces, languages, translation credits (1M chars), storage (50GB), team accounts, readers (5000 per unit), and PDF export limits. Business users can add Crowdin and Phrase extensions, while Enterprise users can purchase Salesforce extensions and additional sandbox environments. To buy add-ons, visit the Billing section under Settings, select add-ons, and confirm payment. Note: A saved card is required. Legacy plan users can purchase select add-ons; contact support for offline purchases.

## 1051. Upgrading from trial version

Document360 offers a 14-day trial with full access to all features. Users can switch plans during the trial and upgrade anytime. Only project owners can access billing features.

## 1052. Changing payment information

This document describes how to change payment information. Specific instructions are needed for a comprehensive TLDR.

## 1053. FAQs

You can't delete your primary payment card, but you can edit it. Secondary cards can be deleted. To change your primary card to a secondary, select "Set as primary". To edit any card, navigate to Settings > Billing > Payment information, and follow the on-screen instructions for the action you need (edit, delete, or set primary). The platform is a knowledge base management tool for content creation, team management, and site configuration.

## 1054. FAQs

- **Trial Features:** Access all features during the trial to evaluate the platform thoroughly.
- **Downgrading:** Data remains, but features and limits adjust based on the new plan.
- **Trial Extension:** Possible in some cases; contact support.
- **Post-Trial:** Project is held and scheduled for deletion if not subscribed; action can be taken before deletion.
- **Trial Limitations:** None; same as paid plans.
- **Support:** Available via chat, demo, or direct contact.
- **Auto-Charge:** Manual subscription required post-trial.
- **Currency Pricing:** Varies by currency selection.
- **Exchange Rates:** Fixed pricing, changes notified via email.

To change your payment information, follow these steps:

1. **Access Settings**: Log into the Knowledge base portal and navigate to the Settings section.
2. **Billing Section**: Click on **Billing** to enter the billing area.
3. **Payment Information Tab**: In the My plan section, switch to the **Payment information** tab.
4. **Edit Payment Details**: Under the Credit card tile, you can update your payment method and billing address.
5. **Add Secondary Card (Optional)**: If needed, add another card by clicking **Add another card**. The secondary card will be used if the primary card fails.

Remember that only the team account owner can access and modify billing information.

## 1055. Manage your Channel

Configure a custom notification channel to monitor specific events. Navigate to **Settings -> Notifications > Event Mapping** to enable alerts for changes in areas like custom domains, CSS/JavaScript, backups, and project members. Also, monitor documentation, landing pages, articles, and payments. This ensures timely notifications for maintaining functionality and content.

## 1056. Notification History

The 'History' section in Document360's Notification feature allows users to view all previously sent notifications across configured channels.

## 1057. Hiding Category

The feature allows hiding categories from the Knowledge base and search results, maintaining privacy for categories under development, including their subcategories and articles.

## 1058. Custom Footer

Document360's custom footers offer two configuration paths: (1) a blank layout for complete HTML/CSS customization, or (2) predefined themes A & B with pre-built styles.

## 1059. Category tree enhancement

Improved emoji library loading speed in the category manager, enhancing user performance.

## 1060. Viewing the status of your ticket

To view your Document360 support ticket status: 1) Log in to support.document360.com; 2) Search for your ticket using keywords; 3) Filter by status (All, Open/Pending, Resolved/Closed, Archive); 4) Click the ticket; 5) The status will be displayed on the right, along with the ticket history.

## 1061. Support ticket

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              | ✓        | ✓          |

Need support? Visit the [Document360 support page](https://support.document360.com/support/login) to raise and track tickets. Our experts respond within minutes for Business and Enterprise plans.

## 1062. Raising a support ticket

To raise a support ticket in Document360, log in via the [support page](https://support.document360.com/support/login) using your credentials or SSO. Customers without support credentials can log in using their Document360 account. Once logged in, click "Submit a ticket," fill in the required fields (Requester, Subject, Group, Description), attach any relevant files, and submit. After submission, you'll be redirected to a status page with your Ticket ID and other details.

## 1063. Exporting tickets

Export Document360 tickets as **.csv** or **.xls** files by logging in, selecting Tickets, and configuring export settings like date range, format, and fields before downloading.

## 1064. What is an HAR file?

A HAR (HTTP Archive) file is a JSON log of a web browser's interaction with a webpage, capturing requests, responses, timings, cookies, and other metadata for debugging and performance analysis. Web browsers and tools can generate them. Used by Document360 team.

## 1065. Generate HAR files in web browsers

To troubleshoot Document360 issues, generate a HAR file capturing network activity in your web browser's developer tools. Open dev tools, enable network recording, reproduce the problem, stop recording, and save the generated HAR file. Follow browser-specific UI variations. Instructions are similar across Chrome, Firefox, Edge, Safari, and Opera. Targeted at Document360 users.

To generate a HAR file, follow these steps in your browser:

1. **Chrome**:

- Open Developer Tools (F12 or right-click > Inspect).
- Navigate to the Network tab.
- Begin recording (Ctrl+E or the record button).
- Refresh the page or perform the desired actions.
- Once done, right-click on the request list and choose "Save All As HAR" to export.

2. **Firefox**:

- Open Developer Tools (F12 or right-click > Inspect).
- Go to the Network tab.
- Start recording (toggle the record button).
- Carry out the necessary actions.
- Right-click anywhere in the Network tab > Select "Save All As HAR" to save.

**Tips**:

- Clear your browser cache before recording to capture accurate data.
- Be cautious as HAR files contain sensitive data; ensure personal information is removed before sharing.

This method effectively captures network traffic for troubleshooting using built-in browser tools.

</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/docs/d363.py
# Language: python

import re

def refactor_markdown_headings((input_filename, output_filename)):
    """ Refactors Markdown headings in the input file to a more logical H1-H5..."""


<document index="21">
<source>docs/d364.md</source>
<document_content>
## Document360 Overview

### Introduction

Document360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases. Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform.

### Key Components: Knowledge Base Portal

Document360 Knowledge Base Portal is a platform to create, manage, and configure knowledge base sites. Features include: creating/managing categories, articles, templates; managing files, teams, readers; configuring branding, domain, security. Portal provides dashboard (project overview, individual contributions), documentation (tree-view structure, bulk actions), API documentation (interactive testing), analytics (user engagement metrics), widgets (in-app search), drive (cloud storage), settings (customization), search (universal across project), and site opening. Unified search and interconnected functions streamline knowledge base maintenance.

### Documentation Guide: Table of Contents

A comprehensive documentation guide for Document360, covering platform overview, project creation, editor tools (Markdown and WYSIWYG), article management (publishing, SEO, access control), AI features (Eddy AI tools, machine translation, search analytics), security measures (SSO, authentication, CSP), file management, collaboration tools (workflow, templates), branding options, and customizations. Also includes release notes from 2019 to 2025, detailing updates and feature enhancements over time.

### Project Management: My Projects

The project dashboard in Document360 displays all your owned, team-associated, and reader-associated projects upon login. Each project features a visibility tag indicating its status as public, private, or mixed.

### Additional Resources and Support

Document360 is a knowledge management platform with a public feedback portal, a feature explorer for trial projects, and in-app support. The knowledge base allows creation of categorized articles, templates, and management of files, teams, and readers. Features include analytics, AI assistance (Eddy AI), and article revision history. Support is available through in-app chat, email, documentation, and tutorials. Scheduled maintenance may impact knowledge base access.

### AI Integration: Document360 AI (Eddy AI)

Eddy AI is an AI-powered writing assistant in Document360, offering features like **article writing**, **SEO descriptions**, and recommendations for **tags**, **titles**, and **related articles**. It also enhances the knowledge base site with **assistive search** and an **article summarizer** to improve reader experiences.

### Getting Started: Account Creation

To use Document360, create an account by navigating to the signup page.

### Key Components: Knowledge Base Site

The Knowledge base site is a website where end-users access articles and find answers. It offers three access settings: **Public** (open to everyone), **Private** (login-restricted), and **Mixed** (combine public and private access). A screenshot preview of the site is provided.

### System and Browser Requirements

**Document360 Knowledge Base Portal Requirements:** Supports Windows 7+, OSX Mavericks+, Linux, Android 5+, and iOS 12+ operating systems. Minimum 2-core CPU and 4GB RAM. Supported web browsers include Google Chrome 91+, Firefox 79+, Safari 13.1.2+, and Microsoft Edge 88+. JavaScript, Cookies, Session/Local Storage, IndexedDB, and HTTPS-TLS v1.2+ are browser-level requirements. Internet Explorer is not supported. Contact support@document360.com for issues.

### Troubleshooting and Support

Document360 knowledge base login issues (reCAPTCHA, blocked access, loading) are often resolved by: 1) Switching browsers/networks, clearing browser cache; 2) Checking VPN connection, system time; 3) Providing HAR files/console errors to support@document360.com if problems persist. Document360 is a web application. Incorrect system time can cause callback URL issues.

### 11. System and browser requirements

#### Hardware Requirements

- **Operating System**: Windows 10 or later, macOS High Sierra or later, Ubuntu 18.04 or later.
- **Processor**: Dual-core processor, 2 GHz or faster.
- **RAM**: Minimum 4 GB, 8 GB recommended.
- **Disk Space**: 500 MB available space.
- **Graphics**: Integrated graphics card (dedicated GPU recommended for intensive tasks).
- **Network**: Stable internet connection with TLS 1.2 or higher; ports 80 and 443 open.
- **Dependencies**: Java Runtime Environment 8 or later, .NET Framework 4.7.2 or later.
- **Security**: HTTPS required, SAML support for single sign-on.

#### Software Requirements

- **Supported Browsers**: Chrome 90+, Firefox 88+, Safari 13+, Edge 90+.
- **Plugins/Extensions**: Adobe Acrobat for PDF viewing.
- **Resolution**: Minimum 1280x720 pixels.
- **JavaScript and Cookies**: Enabled for full functionality.
- **Mobile Support**: Responsive design compatible with iOS and Android browsers.

#### Additional Requirements

- **Testing**: Tested on virtual machines and physical hardware; resolve any conflicts with admin privileges.
- **Updates**: Auto-update feature available; ensure network policies allow updates.
- **Accessibility**: Compatible with screen readers; supports keyboard navigation.

### Getting Started: Signing Up

Signing up to Document360 involves navigating to the signup page and providing basic details, then verifying your email with a 6-digit code (note: 5 incorrect attempts lock access). Set a password meeting specific security criteria. Choose your primary use case (e.g., knowledge base, software documentation) and select up to two templates. Personalize your knowledge base with a URL and brand guidelines. Set privacy settings (Private, Public, Mixed). Complete setup to access the portal with pre-loaded content. A free trial is available, with paid plans post-trial. FAQs cover language support, plans, verification issues, migration, and data access post-trial.

### Project Management: Navigating 'Your Projects'

Document360's "Your projects" dashboard displays project tiles for owned, team, and reader projects. Users can create new/sandbox projects, view project details (logo, name, access, settings), access documentation/knowledge bases, manage their profile, view release updates, and access help resources (documentation, issue reporting, feature requests, system status). The dashboard streamlines project management.

### Project Management: Project Dashboard

Document360's "Your Projects" serves as a centralized dashboard for users to view and manage projects they are associated with, categorized by roles such as owner, team member, or reader. It offers essential navigational tools. The access tiers are as follows:

| Professional | Business | Enterprise |
| --- | --- | --- |
| Access to "Your Projects" | Enhanced team management features | Advanced features with unlimited project associations |

This dashboard provides a streamlined interface for users to manage their documentation projects efficiently across different plans.

### User Profile: Accessing Profile Options

Access profile options (My profile, View Access/Permissions, Change Password) via your profile picture in the top-right corner. My profile lets you edit personal info (image, name, email, author page, bio, portal language, role, content access). View Access/Permissions shows your portal and content role permissions, editable via Team accounts (admin privileges needed). Change password requires entering current password, strong new password (8+ chars, upper/lower/number/special character), and confirming. Password change logs you out. Strong password recommendations detail dos and don'ts of password creation.

### User Interface: Top-Right Menu

The top-right menu provides quick access to essential portal features, including profile management, access level checks, password changes, updates, and Document360 help resources. A table outlining plan-based access to the My profile page is included but currently empty.

### Updates and Releases

Release notes for Document360 are accessible via a button in the Knowledge base portal, summaries, or through the dedicated Document360 Updates - Changelog page. Full details are available at a link provided.

### User Interface: Top-Right Menu Features

- **My profile**: View/edit personal info, profile picture, biography, portal/content roles, and permissions.
- **View access and permissions**: Check assigned roles and permissions.
- **Change password**: Update login credentials securely.
- **Release updates**: Stay informed about Document360's latest features and updates.
- **Help menu**: Access documentation, support portal, or contact support directly.

### User Interface: Help Menu

The Help menu offers tools for user assistance, including searching answers, accessing documentation (`https://docs.document360.com/docs`), chatting with support, creating tickets, submitting feature requests, and checking system updates (`https://status.document360.com/`). Authenticated users can access the feedback portal. For language preferences, the portal adheres to user settings over browser defaults. Contact support directly at <support@document360.com>.

### Project Management: Switching Projects

Document360 allows easy project switching via a dropdown menu or a dashboard. Projects can be public, private, or mixed; sandbox projects are for testing. Access control manages permissions and roles. Article revisions provide version control. Check project display for current project, and contact an administrator for access requests. Dropdown shows project details (name, access, sandbox). Dashboard displays a list of all associated projects.

#### Creating a New Knowledge Base Project

1. **Access the Dashboard**: Log in to the Document360 portal. If you're already in a project, click the Document360 icon to return to the dashboard. Click **+ Project** to start a new project.

2. **Select a Use Case**: Choose your primary use case (e.g., Knowledge Base Platform, Software Documentation, SOP Documentation, User Manual, API Documentation, or Others) by clicking **Get Started**.

3. **Choose Templates**: Based on your use case, select up to two templates to structure your content (e.g., Getting Started Guides, How-to Guides, FAQs for Knowledge Base; Release Notes, SDD, Software Requirement Documentation for Software/Technical Documentation).

4. **Personalize Your Knowledge Base**:

- **URL**: Enter your preferred website URL or skip for a default domain.
- **Branding**: Customize with a logo, brand colors, and language. These can be auto-populated from your URL or manually edited.

5. **Set Privacy Settings**: Choose access level (Private, Public, or Mixed) to control who can view your content.

6. **Access the Portal**: After setup, access the Document360 Knowledge Base portal with pre-loaded articles tailored to your selected use case and templates, providing a head start for content creation.

### Project Management: Project Creation

Document360 project centralizes all documentation (articles, categories, home page, teams, readers, groups, custom settings) for organized, accessible, and scalable knowledge base management.

### Project Management: Overview Tab

The Overview tab provides project-level insights for Owners/Admins, showing contributions, performance, storage details, user data, and issues (e.g., broken links, search failures). Metrics include article counts (created, published, draft), team accounts, readers, drive capacity, broken links, failed searches, and last backup date. Filtering by workspace and language is possible. Clicking "View all" links to relevant settings/analytics pages.

### Localization: Multilingual Knowledge Bases

Multilingual knowledge bases provide information in multiple languages, improving user experience. Document360 supports internationalization of knowledge base sites.

### Project Dashboard

The Document360 Dashboard offers insights into your project, team members, and tasks. It features two tabs: **My Contribution** for personal contributions and **Overview** for team-related information. A plans table is present but without detailed specifics.

### User Contributions: My Contribution Tab

The **My Contribution** tab provides a comprehensive overview of your work in Document360, offering insights into your articles, tasks, and performance metrics. It features:

- **Article summary**: Track created, published, and draft articles, along with performance metrics like views, reads, likes, and dislikes. Filters allow viewing data by date range.
- **Assigned to me**: View articles assigned to you, including workflow status and due dates.
- **Review reminders**: See stale articles needing updates, marked with the date they became stale.
- **Feedback**: Access user feedback assigned to you, with status and assignment dates.
- **Broken links**: Identify articles with broken links, showing workspace, language, and link count.

Filters at the top enable focusing on specific workspaces, languages, or all of them, while date filters refine article statistics.

### Project Management: Creating a Sandbox Project

Document360's Sandbox project provides an isolated testing environment for safely experimenting with features, refining workflows, and training teams without affecting live users. It enables testing new features, identifying issues early, and optimizing setups.

### Frequently Asked Questions (FAQ)

- **Languages per Plan:** Professional (2), Business (3), Enterprise (5). Add-ons available for more languages.
- **Knowledge Base:** A self-service platform with articles and information on products/services, managed by teams through categories, branding, and security settings.

### Localization: Adding Multiple Languages

To add multiple languages to a workspace, navigate to **Settings > Knowledge base portal > Localization & workspaces**. Use either Method 1: editing the workspace and selecting languages through the "New language" option, or Method 2: using the "Add new language" icon on the overview page. After adding, translate content manually or via tools like Crowdin. Languages other than English display in native scripts. Manage settings like default language, display name, and direction as needed.

### Security and Infrastructure: Overview

Document360 data is securely stored in a MongoDB Atlas three-server cluster with encrypted storage and TLS traffic. Daily/weekly/monthly backups, lasting one month, and backups in Azure Blob Storage across multiple locations ensure data integrity. Authenticated API tokens secure data access.  Hosted on Microsoft Azure Cloud, it leverages their security protocols and DDoS mitigations. A strong technical team, coordinated with an offshore team, safeguards the system.

### Security and Infrastructure

Document360 prioritizes data security, collaborating with industry leaders like Algolia, MongoDB Atlas, and Microsoft Azure Blob Storage to ensure robust protection. Data is encrypted in transit using TLS standards, and backups are safeguarded with strong security protocols, aligning with the latest SaaS security practices.

### Security and Infrastructure: Integrations and Partners

- **Algolia (Search):** SOC2/SOC3 compliant, HTTPS/TLS encryption (rated A by Qualys), customer data isolation.
- **MongoDB Atlas (Database):** Network isolation via VPC and firewalls, independent security verification, end-to-end encryption (TLS), encryption at rest.
- **Azure Blob Storage:** Encryption in transit (HTTPS), encryption at rest (storage-side and client-side), advanced threat protection.

To create a Sandbox project in Document360, follow these organized steps:

1. **Access Settings:**

- Navigate to **Settings** > **Knowledge base portal** > **General**.

2. **Create Sandbox:**

- In the Sandbox section, click **Create Sandbox** to open the creation panel.

3. **Configure Project Details:**

- **Project Name:** Enter a name using allowed characters (letters, numbers, hyphens, spaces) and ensure it's ≤30 characters.
- **Language:** Select from the dropdown menu.
- **KB Site 1.0:** Check if needed (optional).

4. **Visibility and Access:**

- Default visibility is Private.
- Click **Next** to proceed.

5. **Invite Team Members:**

- Optionally, add email addresses (comma-separated) and assign roles.

6. **Finalize Creation:**

- Click **Create project** and then **Open Sandbox** to access it.

7. **Post-Creation Notes:**

- A Sandbox badge appears, indicating the environment.
- SSO users cannot create sandboxes; use a non-SSO account.

**Additional Considerations:**

- **Subdomain:** Defaults to include "sandbox"; can be customized via [custom domain mapping](https://docs.document360.com/docs/custom-domain-mapping).
- **Migration:** Not directly supported; manual export/import required.
- **SSO Access:** Non-SSO accounts needed for sandbox access.

By following these steps, you can efficiently set up a Sandbox project for testing, training, and risk-free experimentation.

### Best Practices

- Secure API keys by not sharing them publicly and deleting compromised keys immediately.
- Assign only necessary permissions to API keys.
- Use predefined roles to manage team access rights effectively.
- Regularly back up projects automatically and manually to prevent data loss.
- Set document visibility as private when needed to control access.

### Business Continuity and Disaster Recovery

Document360 prioritizes high availability & data safety via geographically replicated databases & multiple service instances. DevOps employs code reviews, QA testing, and version control for security and reliability. Disaster recovery involves daily/weekly/monthly backups, incident management, and Azure CDN for rapid service delivery.

### Compliance: GDPR

Document360 is fully GDPR compliant, collecting and storing only essential data with explicit customer consent. [Learn more](https://document360.com/gdpr-compliance/).

### Security: X-Frame Options

X-Frame options control embedding of the knowledge base in frames/iframes on other domains. Enabling this security feature prevents malicious sites from embedding the knowledge base. Iframe embedding of unauthorized domains will be blocked.

### Support and Help

Document360 offers expert support for security and infrastructure inquiries. The document defines an API as a communication protocol between software applications and mentions X-Frame-Options for security.

### Security: Content Security Policy (CSP)

CSP feature restricts external CSS, scripts, and frames to prevent malicious content from external domains. The `Content-Security-Policy` header controls allowed domains for each resource type (e.g., CSS, scripts, frames). Different tiers (Professional, Business, Enterprise) may have varying implementation levels of CSP.

### Security: Enabling CSP

Enable Content Security Policy (CSP) in your Knowledge Base to prevent XSS attacks. Specify allowed domains for stylesheets, JavaScript, and frames in the portal's security settings. Use correct URL format (e.g., `https://example.com`) and commas to separate entries. Add nonce attributes to custom HTML scripts.

### Security: Configuring X-Frame Options

Enable X-Frame options to prevent your knowledge base from being embedded in iframes, frames, or other tags on external domains. Navigate to **Settings > Users & Security > Security** and toggle on the **Enable X-Frame options** setting to block unauthorized embedding. This helps protect against clickjacking attacks. If needed, specific domains can be allowed via the content security policy. Not enabling this feature risks embedding on malicious sites, exposing users to security threats like clickjacking.

### Security: Testing CSP Settings

Document360's CSP is implemented via meta elements, not response headers. To verify CSP, check the page source for `Content-Security-Policy`. Video playback issues often indicate differing CSP settings across articles; ensure the video source is allowed in the correct Frame sources in Document360 settings.

### Security: Bot Management

Bots are internet software programs that can be helpful or harmful. The table showing plans with bot management capabilities is empty.

### Security: Troubleshooting CSP

Blocked content on the Knowledge Base site is often due to incorrect CSP configurations. To resolve, update Knowledge Base portal CSP settings to whitelist affected domain URLs. Clear your browser cache, test in different environments/browsers. If the problem continues, contact support providing CSP response header details from browser developer tools' Network tab. Also, ensure application's CSP settings for the knowledge base widget are correct.

### Security: Understanding Bot Management

Bot management is crucial for online safety & efficiency. It filters malicious bots, allowing legitimate access, preventing server strain, and stopping potential threats. Key focus is identifying and blocking bad bots, while letting good bots operate.

### Security: CSP and Whitelisting for Widgets

This document provides guidelines for implementing Content Security Policy (CSP) and whitelisting for the Document360 widget. Key points include:

- **supported plans**: Only Enterprise plans support widget addition.
- **CSP Directives**: Add trusted sources to `connect-src`, `script-src-elem`, `font-src`, and `style-src-elem` directives for both US and EU users.
- **US Sources**:
- `connect-src`: Includes Algolia, Document360 APIs, and Azure Monitor domains.
- `script-src-elem`: Includes CDN resources and nonce for script security.
- `font-src`: Includes Google Fonts and Document360 CDN.
- `style-src-elem`: Allows inline styles, CDN resources, and Google Fonts.
- **EU Sources**:
- Similar to US sources but with EU-specific Document360 domains.
- **Widget Configuration**:
- Update the widget JavaScript with the correct nonce value and API key.

### Security: Bot Detection Methods

Cloudflare uses heuristics (rules based on patterns) and machine learning to analyze traffic and user-agent data, proactively identifying and blocking malicious bots, thus strengthening security against sophisticated attacks.

### Security: Bot Blocking Techniques

Cloudflare blocks bots using unusual user agents, unsupported ports, and suspicious IP/ISP traffic patterns. This protects against attacks but may affect automated scripts. Essential security measures to protect platforms.

### Security: Bot Categorization

Bots are categorized into Good Bots and Bad Bots. Good Bots, such as GoogleBot, BingBot, and GPTBot, are transparent and serve beneficial purposes. Bad Bots, including those used in DDoS attacks, web scraping, and credential stuffing, engage in malicious activities.

Document360 offers enhanced security with built-in bot detection and blocking in Block mode, proactively preventing unwanted traffic to safeguard data integrity.

### Fair Usage Policy: Overview

Document360's fair usage policy implements rate limiting to control user request volume, preventing bot traffic and DoS attacks while ensuring a positive user experience for all.

### Fair Usage Policy: Bot Management Rules

(This section needs the actual policy content to be filled in.) No details provided in the given text about the specific rules for bot management. A general document exists and applies to specific plans (Professional, Business, Enterprise). Lacking details, a concise summary is not possible.

### Fair Usage Policy: Rate Limiting

Cloudflare enforces rate limits of 1,500 requests per minute or 300 requests per 10 seconds per IP address. This is supplemented by bot detection using heuristics and machine learning.

### Content Creation: Editor Options

Document360 offers three editors: 1) Markdown for syntax/HTML customization, 2) WYSIWYG for rich text formatting (no custom code), and 3) Advanced WYSIWYG (hybrid of Markdown/WYSIWYG). Editors are crucial for knowledge base article creation and management; supporting various formatting and custom needs.

### Fair Usage Policy: Compliance

Adhering to this Fair Usage Policy is crucial for maintaining system health, preventing server overload, ensuring responsive service for all users, and protecting against abuse or unintended high-volume requests. Contact support for higher limits if needed.

### Content Creation: Markdown Editor

The Markdown editor facilitates article writing and customization with a split-screen for typing and previewing. It ensures consistent formatting for professional documentation, aiding creation through guided flexibility and supporting image insertion with adjustable sizes using Markdown syntax.

### Content Creation: WYSIWYG Editor

A WYSIWYG editor is an HTML-based editor (like WordPress) that displays the article's formatting as you type. Easy for users familiar with HTML editing; offers extensive formatting options for code, media, and text. Recommended for articles with lots of code/media content.

### Fair Usage Policy: Purpose

The policy ensures equitable access by preventing any single entity from monopolizing resources, thereby maintaining consistent performance and availability for all users.

### Content Creation: Switching Editors

Document360 allows switching between Markdown, WYSIWYG, and Advanced WYSIWYG editors at article level. Article-level switching is possible between Advanced WYSIWYG and WYSIWYG(only in Edit mode), but not to Markdown or back. Advanced WYSIWYG is the irreversible choice once set. Project-level default settings are modifiable by project administrators. Unsupported HTML elements are flagged in the Advanced WYSIWYG editor, but preserved for user review. Supported tags for formatted text, lists, forms, links, and media are outlined. Key takeaways: Editor switching, limitations, unsupported HTML handling, and supported tags outlined in the Advanced WYSIWYG.

**Changing the default editor at the project level**

- Navigate to **Settings > Knowledge base portal > General**.
- In the Editor section, select the desired editor (WYSIWYG/Advanced WYSIWYG).
- Click **Save** to apply changes. This setting affects new articles only.

### Content Creation: Advanced WYSIWYG Editor

A lightweight, powerful editor combining Markdown syntax support with WYSIWYG-like visual editing. Ideal for text-centric, code-heavy, or media-rich content. Type '/' to access commands. For more details, refer to the [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview) documentation.

### Content Creation: Editor Interface

- **Fluid Interactions:** Intuitive interface for switching between projects (with icon-based type identification), workspaces, and languages (now in a unified dropdown).
- **Unified Workspace/Language:** Workspace and language selection is merged in a single dropdown, displaying the workspace name and language flag. The dropdown option "Manage workspace & language" links to the settings page for fine-tuning localization.
- **Content Creation:** The "Create" button is accessible from the header, allowing users to create categories, articles, articles from templates, or import existing content.
- **Accessibility:** Visual cues (icons) help users discern different project types.

### Content Creation: Using the Markdown Editor

Markdown editor converts shorthand text (Markdown) to HTML, ideal for text-rich documents. Use cases include professional, business, and enterprise settings. Refer to the "Basic Markdown syntax" article for comment details.

### User Interface: Left Navigation Bar

-Left navigation bar includes sections like Dashboard, Documentation, API Documentation, Analytics, Widgets, Drive, and Settings. The Categories & Articles section contains options such as All articles, Workflow assignments, Starred, Recycle bin, Site builder, and Content tools. The Site builder now redirects to Customize site in Settings. Recent updates have improved the usability of the More options menu.

### 61. Article editor’s header section

- Displays the article's URL/slug for easy reference.
- Shows the article's status (New, Draft, Published, Stale) prominently.
- Provides article information, including contributors, stats, and dates; manage contributors with the Manage option.
- Includes a preview feature to view the article's appearance.
- Allows modification of title, slug, and description with an Update button.
- Offers AI Glossary recommendations via a dropdown.
- Enables workflow status updates.
- Contains a More menu (•••) for additional actions like clone, move, hide, delete, SEO, tags, and Related articles.
- Facilitates discussions with a comments section.
- Provides a full-screen view option.

### Related Resources

Markdown is a lightweight text-to-HTML conversion tool used to format content like lists, headers, images, videos, and links.

### Content Creation: Markdown Usage

- Use Markdown syntax manually or via the toolbar for formatting.
- Ensure correct syntax: no spaces in bold (`**Text**`) and spaces in headings (`### Heading`).
- Refer to [Editor choices](/help/docs/using-the-text-editor) and [Markdown syntax guide](https://www.markdownguide.org/basic-syntax/) for more info.

### Content Creation: Markdown Toolbar Features

A comprehensive overview of the Document360 Markdown editor, detailing its features and functions:

- **Toolbar Sections**:

- Headings (H2, H3, H4)
- Text formatting (bold, italic, strikethrough, blockquote)
- Lists (unordered, ordered)
- Inserts (tables, images, files, links)
- Callouts (info, warning, error)
- Private notes
- LaTeX support
- Find and replace
- Content reuse (variables, snippets)
- Code blocks
- Glossary
- Video embedding
- Scroll functionality

- **Additional Features**:

- Spell checker with browser-native corrections.
- Seamlessly integrates with HTML content.

- **FAQs**:
- Explains Markdown basics, key features, beginner-friendliness, and how to add ASCII/code blocks or HTML content.

Keyboard shortcuts and real-time previews enhance the editing experience, catering to both novices and experienced users.

### Content Creation: Markdown - Heading Levels

Use `##`, `###`, or `####` (with a space between the `#` and the text) to create Heading 2, 3, or 4 respectively. Ensure a blank line before the heading tag.

### Content Creation: Markdown - Styling Text

Markdown supports various text styles: bold (`**text**`), italics (`*text*` or `_text_`), strikethrough (`~~text~~`), highlight (`==text==`), superscript (`text^superscript`), and subscript (`text~subscript`). Avoid spaces between syntax and text for proper formatting.

### Content Creation: Markdown - Basic Syntax

Document360's Markdown editor enables users to create organized content. Markdown is a lightweight markup language that simplifies text formatting using special characters, requiring no coding knowledge. It supports basic formatting like headings, lists, and links, making it easy to create professional content.

### Content Creation: Markdown - Commands

- **Headings (H2-H6)**: Use `##` to `######`. H1 is reserved for titles.
- **Bold**: Use `**text**` (Ctrl+B/Cmd+B).
- **Italics**: Use `*text*` or `_text_` (Ctrl+I/Cmd+I).
- **Strikethrough**: Use `~~text~~`.
- **Numbered List**: Use `1.` for automatic numbering.
- **Bulleted List**: Use `*` or `-`.
- **Link**: Use `[text](URL)` for clickable text.
- **Blockquote**: Use `>` for quotes.
- **Horizontal Line**: Use `***` to separate sections.

### Content Creation: Markdown - Horizontal Line

A horizontal line is created in Markdown using three asterisks (`***`).

### Content Creation: Markdown - Lists

- **Numbered Lists**: Use `1.`, `2.`, `3.` etc. to create lists that automatically increment.
- **Bulleted Lists**: Use `*`, `-`, or `+` to create bullet points. Examples include `* Item`, `- Item`, and `+ Item`.

### Content Creation: Markdown - Links and Blockquotes

Create links using `[text](URL)` syntax (e.g., [Document360](https://docs.document360.com)) and blockquotes by prefixing text with '>' (e.g., > This will quote the entire line of text).

### Content Creation: Markdown - Emoji Usage

Copy and paste emojis from the table (📝, ✍️, etc.) or use FontAwesome HTML code for icons in documents.

### Content Creation: Markdown - Additional Elements

A concise summary of additional Markdown features:

- **Image**: `![Alt text](URL "Title")` for adding images.
- **Reference Link**: `[Link text][ref]` paired with `[ref]: URL` for reference-style links.
- **Escaping Characters**: Use `\` to prevent special characters from being processed.
- **YouTube/Vimeo Videos**: Embed using `<iframe>` tags with specific video IDs and dimensions.

### Content Creation: Markdown - Unicode Characters

Use Unicode characters in Markdown via copy/paste or HTML entity codes (e.g., `&#xXXXX;`). Find characters in online resources like unicode-table.com or unicode.org. Examples include stars, checkmarks, and currency symbols.

### Content Creation: Markdown - Beginner Tips

- Use headings (`##`, `###`) to structure content.
- Highlight key points with **bold** or _italics_.
- Organize info with lists (bullet points `*` or numbered `1.`).
- Include **links** for additional resources.

### Content Creation: Using the WYSIWYG Editor

Document360 offers a WYSIWYG editor (What You See Is What You Get) for creating content that displays exactly how it will appear on published articles. Switching between WYSIWYG and Markdown is not possible; conversion to WYSIWYG is permanent.

### Content Creation: WYSIWYG Toolbar

The WYSIWYG toolbar provides a range of text editing and formatting options, including media file insertion. It is organized into sections with specific functions, starting with heading options like "Normal."

### Content Creation: Example - Creating an Article

The example provided demonstrates how to structure an article in Document360 using Markdown. It includes sections on the benefits of using Markdown, such as its ease of learning and clean formatting, along with practical tips like using headings, links, and dividers. The article also references additional resources for learning advanced Markdown syntax, emphasizing structured formatting for enhanced readability and professionalism. By following these guidelines, users can effectively format their articles to convey information clearly and efficiently.

### Content Creation: WYSIWYG - Heading 2

Rich text editor offering features for text formatting, inserting various media (images, videos, files), advanced features like LaTeX and callouts, content reuse, glossary integration, and additional formatting options for images, videos, PDFs, Word files, and tables. Provides detailed instructions and examples for each supported function. Offers a switch to an advanced WYSIWYG editor, code view, undo/redo, and find/replace capabilities; supports various lists, alignments, and additional visual elements like emoticons.

### Content Creation: Advanced WYSIWYG - Usage

The Advanced WYSIWYG editor utilizes slash commands for quick content insertion (headings, images, links, lists, etc.) and standard Markdown syntax for more complex formatting. Features include: Eddy AI access via slash menu & various format, insert, and content-reuse types. Markdown syntax works only when typed directly; copying and pasting won't work. Refer to help for unsupported syntax or details.

### Content Creation: Advanced WYSIWYG Editor Overview

A lightweight, rich-text editor with Markdown support, offering a more visual experience than traditional Markdown editors and more flexibility than standard WYSIWYG editors. Switching between Advanced WYSIWYG and WYSIWYG is allowed only for Draft/New articles; switching from Markdown to Advanced WYSIWYG is irreversible.

### Content Creation: Advanced WYSIWYG - Toolbar

Advanced WYSIWYG editor with categorized toolbar for formatting (text styles, headings, typography, colors, lists) and inserting diverse elements (images, videos, links, files, tables, code, FAQs). Supports inline comments, pasting from Word, LaTeX, and various formatting options. Customizable FAQs, and code view for HTML editing are available.

### Content Creation: Choosing the WYSIWYG Editor

- **Best for**: Document360 users familiar with HTML editors who prefer a Word-like experience.
- **Ease of use**: Functions like Microsoft Word or Google Docs, allowing direct content pasting without special syntax.
- **Advantages**: Offers a single editing pane in preview mode and supports pasting large tables.

### Content Creation: Advanced WYSIWYG - Basics

This document provides an overview of the Advanced WYSIWYG editor basics, highlighting the supported plans: Professional, Business, and Enterprise. A table structure is included for details, though specific plan features and support levels are not provided.

### Content Creation: Advanced WYSIWYG - Typography

This table defines input syntax for various typographic symbols (em dash, ellipsis, quotes, arrows, copyrights, fractions, mathematical symbols, currency, and more) and how they appear in the Advanced WYSIWYG editor. It details the conversion from input code to the displayed output, essential for accurate formatting.

### Content Creation: Advanced WYSIWYG - Keyboard Shortcuts

The Advanced WYSIWYG editor offers keyboard shortcuts for efficient editing. To access the overview, navigate to the desired article, click the **More** icon, and select **Keyboard shortcuts**. Key shortcuts include: general commands like Copy (Ctrl+C/+C), Paste (Ctrl+V/+V), Undo (Ctrl+Z/+Z), and Redo (Ctrl+Shift+Z/+Shift+Z); text formatting options such as Bold (Ctrl+B/+B), Italic (Ctrl+I/+I), and Underline (Ctrl+U/+U); paragraph formatting commands including Heading styles (Ctrl+Alt+1-6/+Alt+1-6), Lists (Ctrl+Shift+7-9/+Shift+7-9), and Alignment options (Ctrl+Shift+L, E, R/+Shift+L, E, R); and text selection commands like Complete article (Ctrl+A/+A). Refer to the tables for the full list of Windows and Mac shortcuts.

### Content Creation: Advanced WYSIWYG - Unsupported Syntax

The Advanced WYSIWYG editor does not support markdown tables, subscript, or superscript syntax. Users must utilize Format tools to manually apply subscript and superscript styles.

### Content Creation: Advanced WYSIWYG - Conditional Blocks

Conditional content blocks in Advanced WYSIWYG editor allow personalized content delivery based on user characteristics (IP, country, device, reader groups, or dates). This feature customizes user experiences, streamlines content management for diverse audiences, and boosts user engagement. Crucially, this function is only available for KB site 2.0 and won't be indexed by search engines.

### Content Creation: Advanced WYSIWYG - Movable Blocks

Movable blocks enable easy content rearrangement in the Advanced WYSIWYG editor. Users can drag blocks, insert new ones above or below, and delete blocks with subsequent content shifting up. Dividers and FAQ sections are fixed, with the latter treated as a single block. This feature enhances editing efficiency but has specific restrictions.

### Content Creation: Advanced WYSIWYG - Creating Tables

Two table creation methods exist: 1) The `/table` command automatically inserts a 3x3 table with a header row; or 2) The Format menu's Insert option lets you choose table size (up to 10x10). Slash command is faster, Format menu offers more control.

### Content Creation: Advanced WYSIWYG - Setting Up Conditional Blocks

- Navigate to the desired article in the Advanced WYSIWYG editor.
- Enable conditional content via the settings icon and choose **Show** or **Hide**.
- Use **AND** for requiring all conditions and **OR** for any condition.
- Select parameters like country, date, device, workspace, reader groups, or IP address, set conditions (e.g., equals, not equals, in, not in), and specify values.
- Save conditions for reuse and manage up to 25 conditions per article for efficiency.
- Conditions are version-specific and carry over when moving articles.

### Content Creation: Advanced WYSIWYG - Table Overview

- The Advanced WYSIWYG editor supports table creation across Professional, Business, and Enterprise plans (see table for specific details).
- Tables are essential for organizing and presenting data in a clear and structured manner, enhancing readability and understanding.
- The editor offers comprehensive table formatting tools, including options for adding rows and columns, customizing cell colors, and applying advanced table styles.

### Content Creation: Advanced WYSIWYG - Customizing Tables

Customize table appearance in the editor by changing background color, border color/style (solid, dashed, dotted), hiding/showing header rows, alternating row colors (banded rows), and using CSS for advanced styles. Copy/delete tables, use slash commands, and paste tables from Microsoft Word/Excel web app (Excel desktop paste isn't supported).

### Content Creation: Advanced WYSIWYG - Formatting Table Content

- **Insert/delete rows/columns**: Select row/column, use menu to insert above/below or left/right, or delete.
- **Merge cells**: Select multiple cells, click "Merge cells" to combine them.
- **Cell alignment**:
- **Vertical**: Align text to top, middle, or bottom.
- **Horizontal**: Choose left, center, right, or justify (spreads text across cell).
- **Fit to page width**: Select table, click option to adjust table width and content distribution.

### Content Creation: Advanced WYSIWYG - Image Formatting

- **Image Formatting:** Offers alignment (left, center, right, inline), captions, alt text, hyperlinking with new tab option, styling (rounded, bordered, shadow).
- **Advanced Editing:** Provides resizing, cropping, flipping, rotating, drawing (lines, shapes), adding icons & text, and filtering (grayscale, blur, etc.).
- **Actions:** Replace, copy, delete image, undo/redo/reset edits.
- **Access:** Click image to open a floating menu with options.
- **Hyperlinking:** Allows image linking, opens in new tab option, edit/unlink options.

### Content Creation: Advanced WYSIWYG - Editing Tabs

To edit tabs, use the "Edit" icon. Duplicate: click "Duplicate tab." Rename: click "Change tab name" and type the new name (max 50 chars). Delete: click "Delete tab" (can undo with Ctrl+Z). Cannot delete if only two tabs.

### Content Creation: Advanced WYSIWYG - Customizing Tabs

Customize tab appearance by selecting background/border color (preset, HEX, RGB) in the tab content block. Rearrange tab order by dragging/dropping tabs in the "Tabs" section, utilizing the drag icon and noting scrolling/replacement/positioning behaviors (blue line indicators, grey scrolling areas). Background/border changes affect the entire tab content block.

### Content Creation: Advanced WYSIWYG - Tabs Overview

- **Tabs**: Organizes content into separate sections within an article, enhancing readability. Typically supported in **Business** and **Enterprise** plans.

### Content Creation: Advanced WYSIWYG - Tabs on Site

Tabs in the Knowledge Base site are consistent across devices, can be switched without page refresh, and maintain their style and layout. On mobile, tabs function seamlessly. When exported to PDF, tab contents appear sequentially with headings. Key limitations include: no nested tabs, tab headings excluded from the table of contents, disabled page breaks within tabs, and tabs cannot be embedded inside other editor components like tables or accordions.

### Content Creation: Advanced WYSIWYG - Creating Tabs

To create tabs, use the Insert option in the editor, which adds a default structure with two tabs. Add more tabs by clicking the + button on the tab bar and enter titles. Each tab supports text, images, tables, links, callouts, code, and other enhancements. Tabs require at least two, with a maximum of ten.

### Content Organization: Categories and Subcategories

Document360 categories and subcategories are organizational tools that structure articles into logical groups, improving user navigation and accessibility. Categories represent broad topics, while subcategories provide more specific divisions. They can be customized, including renaming and changing icons, and articles can be assigned to multiple categories. Best practices include clear naming, logical hierarchy, and user-centric organization. Access permissions can be applied, and categories can be reordered. Visibility issues may arise if articles are unpublished or absent; troubleshooting includes checking browser settings and cache. Proper structuring enhances knowledge base usability and user experience.

### Content Organization: Creating a Category

Document360 allows category creation via four methods: top-bar "Create", "Flywheel", "More" icon, and within a Folder/Index. Fill in name, nesting level, and type (Folder, Index, Page, or GitHub), then click "Create". Favor a maximum of 3 subcategory levels for optimal navigation. Alternative content finding tools include tags, search, and related articles.

### Content Organization: Changing Category Icons

To customize category icons in a knowledge base, navigate to the Documentation section, select the desired folder/index category, search for/browse emojis, choose one, and confirm. Emoji selection isn't possible for "Page" type categories.

### Content Organization: Managing Categories

- Document360 supports category management across Professional, Business, and Enterprise plans.
- Key features: create, rename, delete, move, clone, reorder, star categories, customize icons.
- Benefits: well-organized, accessible knowledge base for teams and users.

### Content Organization: Hiding and Unhiding Categories

Document360 allows restricting team access to categories and subcategories within documentation. Hidden items are marked, and users can hide/unhide using the "More" menu in categories/folders/index. Hiding one category hides everything under it. Four methods are described for hiding/unhiding in various contexts (single items, groups, folders, etc.), through the navigation menus and visual aids.

### Content Organization: Renaming a Category

Document360 allows renaming categories within the knowledge base via two methods: directly on the category page or via the "More" menu. This action doesn't change the category's URL slug; simply update the displayed name.

### Content Organization: Deleting a Category

There are four methods to delete categories in the Knowledge base portal:

1. **Categories & Articles section**: Hover over the category, click **More** > **Delete**, then confirm.
2. **Folder/Index category**: In the desired category, click **More** > **Delete**, then confirm.
3. **Multiple articles/subcategories**: Select checkboxes, click **Delete**, confirm.
4. **Specific article/subcategory**: Hover, click **More** > **Delete**, confirm.

**Note**: Deleting a root category removes all subcategories and articles, stored in the recycle bin for 30 days.

### Content Organization: Cloning a Category

Clone categories in Document360 by selecting the "More" then "Clone" option on your target category or item within a category. Choose target workspace/category, optionally update linked files automatically. Security restrictions apply depending on destination. Three methods are available: in the main category list, within a folder/index, or on a specific article/subcategory in a folder/index.

### Content Organization: Understanding Category Types

Categories and subcategories in Document360 serve as organizational tools to group similar articles, resembling folders for related content. The document references a comparison table for Professional, Business, and Enterprise plans, though specific details in the table are unspecified.

### Content Organization: Starring a Category

To star a category for quick access, go to the Documentation section, select the category, and click the Star icon. You can also star subcategories and articles. To unstar, either click the Star icon again or remove them from the Starred section by selecting checkboxes and clicking "Remove from starred." The Starred section acts like a favorites list, enhancing navigation efficiency.

### Content Organization: Moving a Category

You can move a category or subcategory across workspaces using 5 methods:

1. **Drag and Drop**: Drag the category within the same workspace.
2. **More Icon in Categories & Articles**: Use the More icon to access the Move option and select a destination.
3. **More Icon in Folder/Index**: Similar to Method 2 but initiated from within a specific folder.
4. **Move Multiple Items**: Select multiple articles/subcategories and use the Move icon.
5. **Move Specific Item**: Use the More icon on a specific item within a folder.

**Key Considerations**: Moving affects all subcategories/articles; cannot move root categories into subcategories; link updating is recommended when moving across workspaces.

### Content Organization: Drive Folder Mapping

**Drive folder mapping** automatically places images uploaded by contributors to articles into specific Drive folders based on the article's category and subcategory.

### Content Organization: Types of Categories

Three category types for organizing a Document360 knowledge base: **Folder** (container for articles/subcategories, no URL), **Index** (generates a URL, lists articles with details), and **Page** (functions like an article with content creation). Categories can be switched anytime without data loss.

### Content Organization: Linking Drive Folders

To link a Drive folder to a Document360 category, navigate to the category, click "More" (•••), "Set drive folder," select the desired folder, and click "Update." Subcategory mappings take precedence over parent mappings for image uploads. Changes only affect new images.

### Content Organization: Category-Drive Mapping

Implement a system to map categories to Google Drive folders by setting up categories as metadata or labels, and use the Drive API or scripts (for Business/Enterprise) to automate file organization into corresponding folders. Enterprise versions likely offer enhanced automation and management features.

### Content Export: Downloading Categories and Articles

This feature allows users to export entire categories and articles into PDFs with customizable templates. It is exclusive to private projects and workspaces. Enable the "Download as PDF" button in Settings > Knowledge base site > Article settings. Users can select templates during export. Note the 500 MB daily limit, with options to purchase additional capacity. Customization in the KB site does not affect PDFs, and visibility settings may restrict export options.

### Content Creation: Creating an Article

Document360 users can create articles via four methods: a top-bar "Create" button, "Flywheel" icon, "More" icon, or "Create" button within folders/indexes. Article creation involves navigating to the Documentation section, naming the article, and selecting the category. Plan-based article limits exist (Professional: 5,000; Business: 5,000; Enterprise: 10,000).

### Content Management: Managing Articles

| Feature                  | Professional | Business | Enterprise |
| ------------------------ | ------------ | -------- | ---------- |
| Create/Edit/Publish      | ✅           | ✅       | ✅         |
| Basic Organization       | ✅           | ✅       | ✅         |
| Version Control          | ❌           | ✅       | ✅         |
| Multi-user Collaboration | ❌           | ✅       | ✅         |
| Advanced Access Controls | ❌           | ❌       | ✅         |
| Custom Workflows         | ❌           | ❌       | ✅         |

Document360 offers tiered article management features. Professional includes basic article handling. Business adds version control and collaboration. Enterprise provides advanced access controls and custom workflows for large organizations.

### Content Management: Locking Articles

Article locking prevents simultaneous edits, crucial for team collaboration. Auto-unlocks after 15 minutes of inactivity. Manual unlocking is achievable through the portal's "Lock" icon. Navigation away from the article also automatically unlocks it.

### Content Management: Creating Article Templates

Document360 allows users to create, save, and reuse article templates for streamlined content creation. This feature is particularly useful for maintaining consistency, especially for repetitive structures like troubleshooting guides. Articles can be created from templates using three methods: via the Flywheel icon, the More option, or the Create button on the top bar. Each method involves selecting a template and customizing the article name and category. Additional features include automatic population of slugs and accessing template management from the Templates overview page.

### Content Management: Deleting Articles

Five methods for deleting articles in a knowledge base portal are detailed. These include: (1) deleting single articles via the "More" icon in "Categories & Articles"; (2) deleting articles while in editing mode; (3) bulk deleting articles within "Folder/Index" categories; (4) deleting a single article within specific "Folder/Index" categories; and (5) bulk deleting across all articles using the "All articles" section. Each method involves navigating to the correct location, selecting the article(s), and confirming the deletion. Helpful links are provided to related documentation.

### Content Management: Renaming Articles

To rename an article, navigate to the article in the Knowledge base portal's Documentation section, click the article name (or hover, click "More", select "Rename"). Enter the new name and click "Update". A confirmation is required if the article is published.

### Content Management: Moving Articles

Five methods exist to move articles in the knowledge base: 1) drag-and-drop categories; 2) using the "More" menu; 3/4) moving from folders/index; 5) moving from "All articles". Select destination workspace/category and choose whether to update referenced links. Security restrictions apply.

### Content Management: Editing Articles

Editing a published article is crucial for maintaining accurate and up-to-date content. Here's a concise summary:

- **Publishing Changes**: When an article is published, it becomes live on the Knowledge base site, and its status changes to "Published" in the portal.
- **Editing Process**: To edit, select the article, click the **Edit** button (changing its status to "Draft"), make necessary changes, and click **Publish** to update the live version.
- **Markdown View**: For articles created with Markdown, you can view the formatting by selecting **View markdown** from the **More** menu without creating a new version.

This process ensures seamless updates and easy access to content formatting.

### Content Management: Replicating Articles

Replicate articles in a knowledge base to multiple categories. Navigate to the article, select "Replicate," choose the target category & click. Source article edits only; replicated article settings may be restricted due to security.

### Content Management: Hiding and Unhiding Articles

In Document360, users can hide articles to restrict access to team accounts only, indicated by a strikethrough in the Documentation window. This feature is useful for internal content, such as sales team access to pricing details without public visibility.

There are four methods to hide/unhide articles:

1. **Categories & Articles Section**: Hover over an article, click the More icon, and select Hide/Unhide.
2. **Folder/Index Category**: Select multiple articles, click Hide/Unhide.
3. **Specific Article in Folder/Index**: Hover over the article, click More, then Hide/Unhide.
4. **All Articles Section**: Filter if needed, select multiple articles, and click Hide/Show.

Hidden articles are marked with a strikethrough, making them easily identifiable. This feature helps manage content access efficiently for internal and public documentation.

### Content Import: Importing Word Files

Document360 imports .docx files (under 15MB) for direct knowledge base content transfer, streamlining article import.

### Content Management: Cloning Articles

To clone an article in the Knowledge base portal, choose one of two methods:

**Method 1: Via Categories & Articles**

- Navigate to **Documentation**.
- Hover over the article in the left pane to show the **More** icon.
- Click **More** > **Clone**, fill in details (name, workspace, category, auto-update links), and confirm.

**Method 2: Within a Folder/Index Category**

- Navigate to **Documentation** and go to the desired folder/category.
- Hover over the article, click **More** > **Clone**, fill details, and confirm.

**Key Considerations:**

- Articles can be cloned within or across workspaces.
- Security restrictions apply based on destination settings.
- Auto-update links adjust references to the new location.

### Content Import: Importing Word Files

Document360 allows importing Word (.docx) files as either a single article or multiple articles based on headings. Single article imports the whole document. Multiple articles create new articles for each H1 (and optionally H2, etc.) heading within the file. Media and hyperlinks are preserved during the import.

### Content Import: Troubleshooting Word Imports

When the errors `documentation.categoriesAndArticles.maxArticlesCountReached` or `documentation.categoriesAndArticles.articleLimitExceedsPerCategory` occur, it indicates that the article limit for a category or project has been exceeded. This typically happens when creating many articles, bulk importing, or adding subcategories. **Steps to resolve:** Check if the issue affects all categories, verify the plan limits (100 articles per category; 5,000 per workspace for Pro/Business, 10,000 for Enterprise). Reduce articles or upgrade the plan if needed. If unresolved, contact Document360 Support.

An image overview of the error message is available in the document.

### Content Publishing: Publishing from the Editor

Publish articles from Document360 editor by clicking Publish, optionally adding a comment, configuring settings (tags, SEO, related articles, status indicator – manually or with AI), and clicking "Yes." AI-assisted tagging, descriptions, and related articles enhance discoverability. New/updated status indicators can be automatically set. Follow visual instructions through screenshots.

### Content Publishing: Bulk Publishing

To publish multiple articles in Document360, select them, then click "Publish." Ensure only unpublished articles are chosen. AI features (tags, descriptions, related articles) require minimum article lengths (50/200 words respectively). Hidden or restricted articles won't appear in search. Verify publication by checking for hidden status, restrictions, and workspace settings ("Public").

### Content Publishing: Publishing Process

The process of making drafted and reviewed articles available to end-users. Key plans for publishing include:

- **Professional**: Basic customization and SEO support.
- **Business**: Advanced audience targeting and analytics.
- **Enterprise**: Premium features like custom domains and multi-language support.

### Content Import: Choosing Editors for .docx Import

The editor used for importing .docx files is determined by selections in the Knowledge base portal settings. To configure this, navigate to **Settings > Knowledge base portal > General > Editor**, and choose between Markdown, WYSIWYG, or Advanced WYSIWYG editors. Note that Markdown does not support .docx imports.

Best practices include splitting large documents into multiple articles for efficiency and ensuring files are under 15MB. Troubleshooting common errors involves addressing issues like TOC header conflicts, firewall blocks, password-protected files, and style mismatches between Word and Google Docs. Additionally, the "maximum articles" error can be resolved by adjusting heading tags to reduce article count during import.

### Collaboration: Adding Inline Comments

To add inline comments to a knowledge base article, select text, click the comment icon, type your comment, and click send. Mention collaborators using the @ symbol. Enable comment notifications in the settings to receive updates. Published articles automatically delete unresolved comments.

### Content Enhancement: Adding Images

Adding images to articles improves comprehension, engagement, and user experience, simplifying instructions and clarifying complex information. Methods for image insertion exist in both Markdown and WYSIWYG editors.

### Collaboration: Article Review with Comments

Document360's inline comment feature, exclusively available in the Advanced WYSIWYG editor, streamlines article reviews and feedback, fostering efficient collaboration and maintaining documentation quality.

### Content Enhancement: Inserting Images - Markdown

Insert images in a Markdown editor using 4 methods: 1) Upload from local; 2) URL; 3) File Picker; 4) Drag & Drop. Specify dimensions {height="x" width="y"}. Upload to Document360 Drive recommended for image permanence. Drag-and-drop saves automatically to Drive.

### Content Enhancement: Inserting Images - Advanced WYSIWYG

Insert images using the Advanced WYSIWYG editor via `/image` command, `Insert` menu (upload from device, Drive, or URL), or copy/paste/drag-and-drop. Uploaded images are saved in Document360 Drive; local changes don't affect inserted images. Refer to "Image formatting" for further details.

### Collaboration: Managing Comments

- **Viewing comments**: Click on highlighted areas or the comment icon.

- **Resolving comments**: Only the creator can mark comments as resolved.

- **Editing/deleting**: Only available for the user who added the comment.

- **Replying**: Team accounts can respond in the "Write a reply" field.

- **Filtering**: Options include All, Mentioned me, Open, and Resolved.

- **Limits**: 20 replies per comment, 500 comments per article, and 500 character limit per comment.

### Content Enhancement: Adding Videos

Document360 allows adding videos to articles and categories via the "Insert video" and "Insert file" toolbar options. Videos enhance understanding of complex concepts, instructions, and processes, and increase user engagement.

### Content Enhancement: Inserting Videos - Advanced WYSIWYG

Insert videos in the Advanced WYSIWYG editor via 3 methods: 1) Embed URL (self-hosted, platform URLs); 2) Embed code; 3) Upload from drive. Use `/video` slash command. Broken link detection available via link analytics. No caption searching.

### Content Enhancement: Troubleshooting Broken Images

**Broken Image Troubleshooting**: A broken image occurs when the image URL is incorrect, or the image is missing. To fix, retrieve the image URL from the article's code view or by inspecting the element. Check the URL in a browser—if it shows a 404 error, the image is missing. Ensure the image exists at the correct path. Best practice: Upload images to Document360 Drive to prevent broken links. FAQs address image alignment, recommended insertion methods, customization options, accessibility tips for alt text, adding icons via HTML, and storage of pasted images. Direct image uploads to Document360 Drive ensure stability and avoid broken links from external sources.

### Content Enhancement: Inserting Videos - Markdown

Two methods allow video insertion in Markdown editor:

1. **URL Insertion**: Supports YouTube, Wistia, and Vimeo links. Paste the URL and add alt text.
2. **Drive File Insertion**: Upload a video file and adjust dimensions as needed.

Both methods offer straightforward integration, with the WYSIWYG editor also supporting similar video additions.

### Content Enhancement: Adding Files

To embed files directly in articles, upload them to the Drive, then use either the Markdown editor's "Insert file" button or the Advanced WYSIWYG editor's `/Insert file` command, drag-and-drop, or file selector. Filtering options exist in Drive. A "Download" option is available after insertion.

### Content Enhancement: Adding Hyperlinks

Document360 allows adding hyperlinks to text, images, or files for better user navigation. Hyperlinks connect to related content, external resources, or internal sections. Replicated articles cannot be linked within other articles.

### Content Enhancement: Adding Files to Articles

Files can be added to Document360 articles and category pages using two methods: adding files or attaching files, which help clarify and expand content for better understanding.

### Content Enhancement: Managing Hyperlinks

To edit/unlink a hyperlink:

- **WYSIWYG:** Click hyperlinked text, select "Edit" to modify or "Unlink" to remove. There's also an "Open Link" and "Copy Link" option.
- **Markdown:** Manual hyperlink editing needed.

### Content Enhancement: Adding Hyperlinks - Process

Add hyperlinks by selecting text, opening the 'Link' panel, specifying the link type (internal to article, internal heading, or external URL). Optionally, open in new tab. Methods differ slightly between Markdown and Advanced WYSIWYG editors, but the core procedure is the same. Utilize the included visuals for step-by-step guidance.

### Content Enhancement: Attaching Files to Articles

To attach files to an article, you can either upload a file or provide a URL, and they will appear on the right side above tags and the Table of Contents. Follow these steps: click the More icon, access Attachments, choose your method (URL or upload), arrange files if needed, and save. If files don't appear, ensure Show article files is enabled in settings.

### Content Enhancement: Creating Bookmark Links

Create bookmark links to specific headings (H2, H3, H4) within articles/pages using the Advanced WYSIWYG editor's "Link to the current article heading" function. Select desired text, choose a heading from the dropdown, and optionally open in new tab. H3/H4 support depends on settings.

### Localization: Machine Translation and Hyperlinks

- **Machine translation automatically updates internal hyperlinks** to point to translated versions of linked articles.
- **Consistent article slugs across languages are important** to avoid broken links.
- **Relative and absolute paths are explained and examples are provided**, with emphasis on the role of relative paths for internal links.
- **FAQ covers linking to articles before publishing, linking to headings, and troubleshooting hyperlink issues after heading changes,** providing practical insights and workarounds.

### Content Enhancement: Adding Email Links

To add an email link, select the desired text. In the Markdown editor, use the format `[link_text](mailto:email_id)`, e.g., `[Email support](mailto:test@gmail.com)`. In the Advanced WYSIWYG editor, highlight the text, press `Ctrl + K` or use `/link`, and type `(mailto:email_id)` in the Link field.

### Content Formatting: Code Blocks

Document360 uses Prism.js for syntax highlighting. Supported languages include HTML, C#, Java, JavaScript, XML, JSON, CSS, SQL, Python, Markdown, PHP, PowerShell, and Text. Refer to Prism.js documentation for a complete list.

### Content Management: Heading Changes and Hyperlinks

Changing an article heading breaks existing hyperlinks as they rely on the heading's text. To prevent this, use the WYSIWYG editor to modify the HTML: add an anchor tag within the heading to separate the hyperlink name from the visible text. This keeps the hyperlink functional even when the heading is updated.

### Content Formatting: Code Blocks - Markdown

Create code blocks using triple backticks (\`\`\`\`\`) before and after the code, or the `Ctrl+Shift+P` keyboard shortcut (or the insert code block icon).

### Content Formatting: Code Blocks - Advanced WYSIWYG

Create code blocks using three methods: 1) Insert > Code Block, 2) Triple backticks \`\`\`\`\`+ Enter, 3)`/code block` Enter. A floating menu allows selecting language (predefined or custom) and copying/deleting blocks. Custom languages are created by inputting a title(WYSIWYG) after the backticks (Markdown). Indentation (4+ spaces) creates code blocks w/o highlighting. Syntax highlighting supported for numerous languages (c, c++, c#, css, html, etc.). Ctrl+Shift+V preserves pasting formatting. FAQs cover supported languages, indentation methods, custom languages, and Markdown editor use.

### Collaboration: Using Private Notes

Private notes, used for reminders, future updates, and team context in articles, are excluded from downloads via the Knowledge Base's PDF option but are included in browser-generated PDFs. Use the browser's print/save function consistently for inclusion.

### Collaboration: Adding Private Notes

Document360 allows users to add private notes visible only to specific reader groups or project team members, while remaining hidden from the public. Private notes can be created in both Markdown and Advanced WYSIWYG editors across Professional, Business, and Enterprise plans, enhancing collaborative content management.

### Content Formatting: Code Blocks - WYSIWYG

- Navigate to the desired article in the WYSIWYG editor.
- Click the **Code block** icon to open the panel.
- Select the desired programming language from the dropdown menu.
- Enter your code in the provided field.
- Click **Insert** to add the code block.
- Use the **Edit** or **Delete** icons on the code block to modify or remove it.

[![Creating code blocks in WYSIWYG HTML editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)

### Collaboration: Private Notes - WYSIWYG

To add/manage private notes, navigate to the article in the WYSIWYG editor, click the private note icon, then use the floating menu options (visibility, copy, delete). Image shows the process.

### Content Enhancement: Embedding Stream Videos

Document360 articles can now embed Microsoft SharePoint Stream and recent stream videos, using both Markdown and WYSIWYG editors. No specific professional/business/enterprise implementation details are outlined.

### Collaboration: Private Notes - Markdown

To add a private note in the Markdown editor, use the syntax `:::(Internal) (Private notes)\nOnly visible to team accounts\n:::`, which is visible only to team accounts and not in the public version. Notes can be edited by modifying the content and deleted by removing the syntax.

### Content Enhancement: Embedding SharePoint Videos

Embed a SharePoint Stream video by navigating to the video, selecting "Share" then "Embed code." Customize the embed with start time, size, autoplay and responsive options. Crucial: manage access permissions for viewers to view the video.

### Collaboration: Private Notes - Advanced WYSIWYG

Create private notes in Document360's Advanced WYSIWYG editor via `/Private note` or the Insert menu. Manage visibility (all team, security groups, reader groups) in WYSIWYG/Advanced editors. Notes can be copied, edited, or deleted (except in published articles). Ideal for internal comments, not visible publicly. Access visibility settings, copy, or delete via floating menu.

### Content Enhancement: Embedding Google Forms

Google Forms can be embedded within knowledge base articles using embed HTML code blocks.

### Content Enhancement: Embedding Draw.io Diagrams

To embed a Draw.io diagram in Document360, use the HTML embed link generated within the Diagrams.net application. Ensure the diagram's privacy settings in its storage location (e.g., Google Drive) are set to public. Diagrams.net is a web-based diagramming tool.

### Content Enhancement: Embedding Google Forms

To embed a Google Form in your knowledge base article, navigate to the form, copy the embed HTML code (iframe src), and paste it into your article's Markdown or WYSIWYG editor. This allows readers to interact and submit data after publishing.

### Content Enhancement: Embedding Stream Videos

You can embed Microsoft Stream videos in articles using Markdown or the Advanced WYSIWYG editor. In Markdown, paste the embed code directly. In WYSIWYG, use Code View or the Insert Video feature with the embed code. Videos can be embedded on external pages using an iframe. The embed code snippet is typically:

`<iframe src="<Stream video URL>" width="640" height="360" frameborder="0" scrolling="no" allowfullscreen title="<Video_file_name>"></iframe>`

### Content Management: All Articles Overview

Document360's new "All articles" feature allows for bulk actions on multiple articles and page categories. Actions include publishing, previewing, copying links, hiding, moving, deleting, setting reminders, checking status, tagging, translation, PDF download, deprecating. This streamlines article management, especially for large-scale operations such as product launches.

### Content Management: Bulk Actions with All Articles

The "All articles" feature in Document360 allows efficient handling of many articles by enabling bulk actions. Users can filter articles by status, date, tags, etc. Bulk operations include publishing, scheduling, previewing, copying links, hiding, moving, deleting, reviewing, setting live statuses, adding tags/labels, machine translation, and exporting as PDFs. Important considerations include article status (draft, published) and exceptions when working with categories that include subcategories or child articles (hide, move, delete options are restricted if subcategories exist).

### Content Management: Filtering in All Articles

No information is available regarding filters for bulk operations on all articles. The table is empty.

### Content Enhancement: Embedding Draw.io Diagrams

Two methods embed Draw.io diagrams into Document360:

1. **Embed Option**: Generate and copy an image tag from Diagrams.net, paste it into Document360's Markdown or Code view editor. Adjustable dimensions.
2. **Export as Image**: Save diagrams in formats like PNG/SVG, then upload to Document360 via Insert Image.

Choose embed for interactivity; static images for fixed visuals. Consider size and optimization for performance.

### Content Management: Accessing All Articles Filters

Filter knowledge base articles by status, review reminders, stars, visibility, read receipts, contributors, categories, dates, tags, and labels. Save custom filters for reuse. Custom filters can be shared with team members. All articles filtering process is described with clear steps and illustrative screenshots.

### Content Management: Exporting All Articles

Export all articles in a knowledge base (.csv) via platform interface by navigating to "All articles," filtering by various criteria (status, category, etc.), and clicking "Export." Exported file contains article title, category, status, date, and URLs. Draft articles cannot be individually exported; export the containing category instead. API endpoint exists for programmatic retrieval of article lists & URLs.

### Content Management: Review Reminders

Review reminders alert project members when articles need review, ensuring accuracy and timeliness for customers and internal teams. Facilitates the review process.

### Content Management: Clearing Filters

Clear filters by clicking "Clear all," using the Filter dropdown, or removing individual filters via the X. Custom filters can be saved, and Read receipts are limited to specific projects.

### Content Management: Exporting Article Lists

Document360 allows users to export a list of articles and their status as a .csv file, enabling filtering by specific fields like contributor or date. This feature is supported across plans, providing flexibility in managing and analyzing article data.

### Content Management: Review Reminder FAQs

To set review reminders for articles, go to Documentation > Content tools > Documentation > Article review reminders.

### Content Optimization: Article SEO

Search Engine Optimization (SEO) is crucial for knowledge base articles. Adding SEO titles and descriptions improves article visibility and indexing by search engines.

Create review reminders for articles to flag them for immediate review or set a future date, with options for Now, 30 days, 3 months, or Custom. Add a brief reason (up to 100 characters) for context, and apply reminders individually or to multiple articles. A red "Needs review" tag appears, showing the reason on hover. To clear, click the tag and mark as reviewed, removing the tag and updating the status.

### Content Management: Setting Review Reminders

Create and apply review reminders to flag articles for review, setting reminders to trigger immediately or on a specific date. You can apply reminders individually or to multiple articles. A red "Needs review" tag appears next to the article slug, showing the review reason on hover. To clear the reminder, click the tag and select "Mark as reviewed," removing the tag and updating the status.

### Content Management: Bulk Review Status Updates

Two methods are available to mark multiple articles.

1. **All Articles Method**:

- Navigate to Documentation > All articles.
- Use the Filter option to select "Stale" under Review reminder.
- Choose articles, then click "Mark as Reviewed" or set reminder days for "Needs review".

2. **Content Tools Method**:

- Go to Documentation > Content tools > Article review reminders.
- Create a new reminder, specify details, select workspace, language, and desired articles.
- Use filters (category, contributor, etc.) to manage selection efficiently.

Both methods allow efficient management of article review statuses.

### Content Optimization: Excluding Articles from Search

Document360 allows users to exclude articles or categories from search engine results, maintaining confidentiality of sensitive or internal content. No plan details are provided in the table.

### Content Optimization: Adding SEO Metadata

- Navigate to the article in the Knowledge Base portal.
- Click on the More icon and select SEO.
- In the SEO tab, enter a meta title (5-60 characters) and a meta description (150-160 characters).
- Use AI generator if the article has at least 200 words.
- Update meta titles for article name changes.
- Manually update SEO descriptions for each language version.

### Content Optimization: Excluding from External Search

To exclude articles from external search engines, navigate to the desired article, click the More icon (•••), select SEO settings, check "Exclude from external search engine results," and save your changes.

### Content Optimization: Excluding from Internal Search

To exclude articles from search results and Eddy AI assistive search:

- Navigate to the article or category page.
- Use the **More** icon to access **Article settings**.
- Under **Search Visibility**, select desired exclusion checkboxes: **Exclude from knowledge base search** and/or **Exclude from Eddy AI assistive search**.
- Save changes.

Exclusion is available based on pricing plans. Excluded articles remain accessible via URL or navigation menu. Cloned articles retain their parent's search visibility settings.

### Content Management: Changing Article Slugs

Change an article's URL slug (part of the article's address) in Document360 using two methods: 1) portal settings (SEO tab) or 2) article editor. **Essential:** Create a redirect rule for the new slug to prevent broken links. Special characters (e.g., ä, ö, ü) require proper encoding, copy URLs from the portal, and refer to the support page if issues persist.

### Content Management: Changing Article URLs

_No summary available for this section._

### Content Organization: Article Tags

Article tags are keywords for searching, filtering, sorting, and bulk actions on knowledge base articles and categories by team accounts. Tags apply to articles, categories, and drive files; drive file tags are only visible in the knowledge base. The "Tags" page manages all project tags.

### Content Organization: Adding Tags

To add tags: Navigate the portal, click "More" > "Tags," create/choose tags, optionally generate AI-suggested tags (minimum 200 words), save, and publish. Configure article settings; readers can then click tags to find related materials. Tag limits: 30 characters (spaces included), permissible symbols.

### Content Navigation: Related Articles

Related articles will be added to the bottom of knowledge base articles. These links will only point to published articles within the knowledge base and won't appear in any widgets.

### Content Navigation: Adding Related Articles

Add related articles to knowledge base articles via the Knowledge Base portal or Publish checklist. Manual selection involves searching and adding articles. Eddy AI can suggest related articles (requires 50+ word article). An automated "Auto relate" option is available. Access restrictions limit which related articles are shown.

### Content Organization: Article Labels

The Knowledge Base portal allows adding article labels to streamline content management across Professional, Business, and Enterprise plans, enabling efficient sorting and filtering of articles, such as quickly locating release notes.

### Content Organization: Adding Labels

The Knowledge Base portal offers **five methods** to add labels to articles:

1. **Article Editor**: Navigate to the article, click **More** > **Labels**, enter the label, and click **Add**.
2. **All Articles Section**: Select articles, click **More** > **Add labels**, enter the label, and apply filters to sort.
3. **Workflow Assignments**: Select articles, click **Add labels**, enter the label, and use filters.
4. **Starred Section**: Select articles, click **Add labels**, or hover over an article and use **More** > **Add labels**.
5. **Folder/Index Category**: Navigate to the category, select articles, and add labels via **More** or bulk selection.

**Limits**:

- Up to **10 labels per article** and **10,000 per project**.
- Labels are **internal only**, **not visible on the site**, and cannot be used for searches but can filter articles.

**Key Differences**:

- **Tags** are visible and aid in search/navigation, while **labels** are for internal organization.

### Content Enhancement: Adding Featured Images

To add a featured image to a Knowledge base article, click "More article options," then "Featured image" and "Upload an image." Use high-quality JPEG or PNG images with optimal dimensions (1200x800 - 2000x1200 pixels) for clarity and responsiveness across devices.

### Content Enhancement: Featured Image Overview

In Document360, featured images enhance SEO and improve link previews without appearing on the article itself. Only available in Business and Enterprise plans.

### Content Enhancement: Adding Attachments

To add attachments to a knowledge base article: navigate to the article, open "More article options," select "Attachments," add a URL or upload a file from Drive, select and insert, arrange, and remove attachments as needed. Attachments appear near the Table of Contents and Tags on the knowledge base site.

### Content Status: Status Indicators

A knowledge base site will display a status indicator ("New", "Updated", or "Custom") near article titles. No specific implementations or relationships between status and category (Professional, Business, Enterprise) are detailed.

### Content Enhancement: Attachment Support by Plan

**Plans supporting for adding attachments**

| Professional | Business | Enterprise |
| --- | --- | --- |
| Basic attachment support (up to 5MB) | Standard attachment support (up to 10MB) | Advanced attachment support (up to 20MB) |

The Professional plan offers basic attachment capabilities with a limit of 5MB. The Business plan provides standard support up to 10MB. The Enterprise plan includes advanced features with a 20MB limit, catering to larger organizations.

### Content Status: Manual Status Updates

To change the status indicator for an article in the knowledge base, navigate to the article, select "More article options," then "Article settings," and change the status. Customize indicator text by editing localization variables, and its color in "Article settings." Specify duration of status display in the article settings.

### User Interface: Knowledge Base Site View

A public knowledge base website allows end-users to access articles. Project members manage content (articles, categories, templates, files, users, site settings), and article status is indicated visually (new=green, updated=orange, custom).

### Content Status: Understanding Article Status

Article status feature in knowledge base portal allows quick identification of article statuses (Draft, Needs review) to streamline content management. Readers see update/new indicators. Improves efficiency and user clarity.

### Content Status: Article Statuses

Knowledge base articles have four statuses: 1) **New**: Draft, accessible only to team members; 2) **Draft**: Published article being updated in a draft, original remains live; 3) **Published**: Publicly accessible; 4) **Needs review**: Flagged for review by a contributor or automated system. Applies to category pages as well.

### Content Preferences: Plan-Based Options

No preferences are defined for Professional, Business, or Enterprise plans in the provided table.

### Content Status: Automatic Status Updates

To enable automatic status updates, go to **Settings** > **Knowledge base site** > **Article settings & SEO**. Turn on "Automatically set article status" in the Category manager accordion. Set the number of days the status should appear. For more details, refer to the [Category manager](/help/docs/knowledge-base-category-manager) article.

### Content Status: Hidden Article Status

Hidden articles are marked with a strikethrough and inaccessible on the Knowledge base site, only viewable via the portal. They can be hidden in any status (New, Draft, Published, Needs review). Articles flagged as Needs review are marked for review by contributors or automated reminders. Hidden categories also hide articles on the site. Category pages display article statuses, aiding in Knowledge base maintenance.

### Content Structure: Managing Table of Contents

Control table of contents visibility at the knowledge base site or individual article level using settings in the software interface. Site-wide settings control visibility for all articles. Individual article settings allow for hiding the TOC on a per-article basis. Only headings (H2, H3, H4) are included in the TOC, not bold text.

### Content Status: Deprecated Articles

**Deprecated articles are outdated.** Marked as obsolete, they may be replaced by newer content due to subject removal, changes, or new concepts. Deprecation tagging now occurs at the article/page category level, signifying the article's status clearly. A custom message explaining the reason and links to updated versions are optional, improving user experience.

### Content Status: Marking Articles as Deprecated

The document content is not provided, but based on the structure, it appears to relate to plans supporting a "mark as deprecated" feature, typically used to indicate plans that are being retired or phased out.

### Content Customization: Article Preferences

To update an article's preferences, navigate to the desired article, click the More icon (•••), select Preferences in Article settings, adjust the checkboxes for comments, table of contents, and feedback, then save. This process is article-specific and may require additional setup for features like Disqus.

### Content Status: Bulk Deprecation

To deprecate multiple knowledge base articles simultaneously, select them, click "Deprecate," add a reason, and click "Apply." Deprecation will be indicated with a visual tag on the articles' knowledge base site view.

### Content Status: Marking Articles as Deprecated

To mark an article as deprecated, navigate to it in the Knowledge base portal, access Article settings via the More icon, enable the Deprecated toggle in the dedicated tab, optionally add a formatted reason, and save your changes.

### Content Publishing: Scheduled Publishing

Document360 allows scheduling content publication for specific dates/times, improving content calendar planning, consistency, and reducing last-minute publishing issues.

### Content Management: Updating Contributors

Document360 automatically tracks contributors based on their actions (create, update, publish) and displays them publicly. Readers can view contributors' other articles. The Enterprise plan allows manual addition or removal of contributors, while Professional and Business plans do not support this feature.

### Content Publishing: Setting Up Scheduled Publishing

To schedule an article or page category's publication in the knowledge base, navigate to the item, select "Publish later," choose date, time, and timezone, optionally add comments, and click "Schedule." This feature works for articles and categories.

### Content Management: Managing Contributors

To manage contributors in Document360, access the contributor list via the Article information icon, then use the Manage popup to add (via search) or remove contributors using icons. If no contributors are listed, assign one by searching and adding; contributors persist until their team account is deleted.

![add contributor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Add_delete_contributors.gif)

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-No_contributor_error_resolving.gif)

### Content Publishing: Editing Scheduled Publications

To edit a scheduled publication, navigate to the article in the Knowledge Base portal, click the **Scheduled** dropdown, and select **Edit schedule**. Modify the date, time, and timezone in the panel, add comments if needed, and click **Schedule** to save changes. Optionally, publish immediately by selecting **Publish now** from the dropdown.

### Content Publishing: Bulk Scheduled Publishing

To schedule multiple knowledge base articles for later publishing, select them, choose a date/time/timezone in the "Publish later" panel, and click "Schedule." Scheduled articles display a "Publish later" icon. Instant publishing of a scheduled article is possible. Editing a scheduled article is not allowed; cancelling the schedule is required for edits. Scheduled articles cannot be published via API. Moving scheduled articles to another workspace will clear the schedule.

### Content Publishing: Cancelling Scheduled Publishing

To cancel scheduled publishing, navigate to the article, click the **Scheduled** dropdown, select **Cancel**, and confirm with **Yes**.

### Collaboration: Discussion Feed

A discussion feed feature allows users across different roles to collaborate, converse, and review articles and categories within the platform. The platform supports peer reviews and approvals. Discussion feed functionality is available across different plans (professional, business, enterprise), but the specific details/features for each tier are unknown.

### Collaboration: Deleting from Discussion Feed

Users can delete their own comments from a discussion feed by hovering over the message, clicking the delete icon. Undo is available. Feed disabled after article publication.

### Collaboration: Discussion Feed FAQs

Comments on articles in Document360's Knowledge Base are enabled during draft/edit mode, but disabled after publishing. Inline comments are possible in the Advanced WYSIWYG editor. Users can access and manage articles, categories, versions, and languages.

### Content Management: Article Revisioning

Document360 article revision creates a new unpublished version when edited, preserving the old version in history until published. Team accounts can compare/revert versions but must manually delete older versions. Versioning supports collaboration, audit, and access to accurate information.

To access the discussion feed, go to the desired article, click "Discussion" or "Comments" at the top right, compose your message in the text box, and send. Use @ to tag team members, triggering an email notification with article details.

### Content Management: Creating Article Versions

Two methods exist for creating new article versions. **Method 1:** Edit a published article directly. **Method 2:** Fork an older revision to create a new version with that content. Both require publishing the newly created draft.

### Content Management: Revision History Features

| **Features**           | Professional | Business | Enterprise |
| ---------------------- | ------------ | -------- | ---------- |
| Version Control        |              |          |            |
| Change Tracking        |              |          |            |
| Collaboration Features |              |          |            |

### Content Management: Comparing Article Versions

Document360 allows comparing article versions by highlighting additions, removals, and formatting changes. Users can swap comparison views, view revision history, and revert to previous versions (with caveats about published articles needing deletion). Published article dates are automatically generated, and cannot be changed.

### Analytics: Article Analytics

**Document360's Article Analytics** provides article-specific insights (reads, views, likes, dislikes, link status) across Professional, Business, and Enterprise tiers. Use this data to optimize content strategy and improve user experience.

### Content Management: Article Revision Actions

- **Fork**: Create a new version for editing.
- **Delete**: Permanently remove an unpublished version.
- **Open**: Access previous versions to restore or publish.
- **Workflow history**: Tracks stages, assignees, comments, and dates.
- **Publish**: Make any version public from the editor.

Version details include number, contributor, date, and visibility. An image of the workflow history is referenced.

### Security: Article Access Control

Granular access control to knowledge base articles is offered via team/reader accounts and groups, allowing varying levels of access (Professional, Business, Enterprise) for different users.

### Content Optimization: Health Check Metrics

Health check metrics analyze articles and category pages (English only) to identify readability issues (e.g., long sentences, missing internal links). These metrics help improve content quality and SEO.

### Analytics: Accessing Article Analytics

Access article analytics by clicking the **More (•••)** icon in the editor and selecting **Analytics**. Metrics include **Reads** (engagement-based, updated daily), **Views** (unique browser clicks), **Likes**, **Dislikes**, and **Link Status** (working, broken, unknown, ignored). Use the link validation tool to maintain reliable links. Analytics update in real-time, with reads reflecting unique user sessions. Access project-wide insights via **Go to Analytics**. Metrics help refine content engagement strategies.

### Content Optimization: SEO Metrics

Optimize SEO by keeping article titles (50-70 characters), descriptions (120-160 characters), and a featured image present. One to three external and internal links are ideal; exceeding these numbers warrants review/adjustments. Tool provides categorization (Problems, Suggestions, Good Work) based on metric evaluations, guiding users toward improvements.

### Security: Managing Article Access Control

To manage article access control:

1. Navigate to the desired article.
2. Click **More** > **Security**.
3. Choose between **Knowledge base portal** (for team accounts) or **Knowledge base site** (for readers).

- **Portal**: Manage team access for content updates and settings.
- **Site**: Control viewer access for published articles.

For more details, refer to the linked sections and FAQs for troubleshooting access restoration and category-specific access management.

### Content Optimization: Readability Score

The Readability score from the Health Check Metrics measures how easy text is to understand, using a scale from 0-100. Higher scores indicate easier readability.

### Content Optimization: Checking Readability

To check article readability in the Knowledge base, open the article, then click "More" -> "Health check metrics". Expand "Readability metrics" to see the score. Scores below 30 are problematic, 30-59 suggest improvement, and above 59 are good. Update the "Health check metrics" panel and click "Check now" for immediate results.

### Content Optimization: Accessing Health Check Metrics

To access health check metrics for an article, navigate to the article in the Knowledge Base portal, click **More** (•••), and select **Health Check Metrics**. The panel includes:

- [SEO metrics](/help/docs/health-check-metrics#seo-metrics) and [Readability metrics](/help/docs/health-check-metrics#readability-metrics).
- Metrics are classified into **Problems** (need immediate action), **Suggestions** (require improvement), and **Good Work** (optimal parameters).
- If parameters are updated while the panel is open, click **Check now** for the latest insights.

![Health check metrics panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Health_check_metrics_in_the_Knowledge_base_portal.gif)

### Content Optimization: Understanding Readability Metrics

- **Readability Score (0-100)**: Higher scores mean better readability. Categorized as Problems (below 30), Suggestions (30-59), or Good Work (above 59).
- **Paragraph Length**: Optimal ≤150 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sentence Length**: Recommended ≤20 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sub-heading Distribution**: Absence appears under Suggestions; presence under Good Work. Uses H2, H3, H4 tags in Document360.

> NOTE: Metrics exclude LaTeX and code blocks.

### SEO: Accessing the Sitemap

Document360 allows managing sitemaps for SEO. Find the sitemap URL in _Settings > Knowledge base site > Article settings & SEO > SEO_. Choose update frequency (e.g., Daily). Submit the generated XML sitemap to Google Search Console via their instructions for best results. The sitemap lists URLs and potentially metadata (e.g., last modification times).

### Collaboration: Public Article Comments

Document360 enables public article comments via the Disqus plugin. Configure Disqus integration for automatic comment activation on all articles. Refer to the Disqus integration help article for details.

### SEO: Sitemap Support by Plan

A Sitemap is an XML file detailing a website's structure and page URLs, aiding search engines like Google in crawling and indexing. The table below indicates which plans support sitemap generation:

| Professional | Business  | Enterprise |
| ------------ | --------- | ---------- |
| No support   | Supported | Supported  |

The sitemap feature is only available for public projects.

### SEO: Robots.txt Support

_No data available to generate a `Robots.txt` entity-dense TLDR. Document is a table template and lacks any information needed to produce meaningful details about robots.txt support._

### SEO: Understanding Robots.txt

A Robots.txt file is a website file that instructs web crawlers (e.g., search engine bots) on which parts of your site they are allowed to access and index. It prevents crawlers from accessing specific files or directories, maintaining control over the content visibility in search results. Key: controls web crawler access; prevents indexing; text file; site-specific rules.

### Content Management: Read Receipts

Read receipt feature confirms article acknowledgment, crucial for tracking communication, notably important updates. Available exclusively in KB site 2.0 for private and mixed projects, but not for JWT configured projects.

### Collaboration: Enabling Public Comments

To enable comments on a public article, ensure Disqus integration is active. Navigate to the article, click the More icon, select More article options, go to the Preferences tab, check the Enable feedback checkbox, and save. Disabling comments requires deselecting this checkbox. Removing Disqus disables all comments and requires reconfiguration to restore.

### Content Management: Managing Read Receipts

Manage read receipts for your knowledge base articles and categories via bulk actions on all articles, individual article settings, or category rules in the settings. Settings rules have priority. Republishing an article forces re-acknowledgment. Category visibility can be controlled using rules.

### SEO: Managing Robots.txt

To access and edit Robots.txt in Document360, navigate to **Settings** > **Knowledge base site** > **Article settings & SEO** > **SEO** tab, then click **Edit** under Robots.txt. Use it to set crawl rules, block access to specific pages/folders, or add crawl delays. Examples include blocking admin data, preventing tag pages from indexing, or allowing sitemap access. Follow best practices by including sitemap links and ensuring no duplicate Robots.txt files. For specific needs, refer to FAQs on excluding content from search engines or restricting crawlers like Googlebot or Bingbot.

### Content Management: Reader Acknowledgment

After configuring read receipts, readers see a banner prompting acknowledgement. Scrolling to the bottom, checking a box, and clicking submit acknowledges reading. Successful acknowledgement displays a confirmation message.

### Content Management: Read Receipt Management Page

A detailed interface for managing read receipt rules, allowing users to:

- Create new rules for Knowledge base categories
- Rearrange rules (priority-based execution)
- View/edit rule details (name, visibility, categories)
- Modify rule dependencies
- Edit or delete existing rules
- Set visibility (Show/Hide) for each rule
- Organize and manage rules effectively.

### Content Sharing: Private Article Links

Document360 KB Site 2.0 (projects created after June 10th) enables sharing articles with external users via private links. Generate a unique link for any article, even unpublished ones. External users don't need access to the portal. Manage links by deleting or regenerating as needed. Private links expire if the article is deleted and won't work on the article after it's deleted.

### Content Management: Acknowledgment Tracking

The Knowledge Base site features an Announcement icon on the top-right of the home page, indicating pending acknowledgements. Clicking this icon leads to the **Acknowledgement required** page, where users can filter articles by workspace (Current, All, or Specific) and acknowledgement status (Required or Acknowledged). This allows users to efficiently manage and track article acknowledgements across workspaces.

### AI Integration: Customizing Eddy AI

Eddy AI customization is available for different user plans (Business/Enterprise). Customization includes response tone/length, and for Enterprise, AI assistant name changes. Legacy users can also customize. Renaming Eddy possible for branding. Certain Document360 users can adjust the Eddy AI term.

### Analytics: Monitoring Read Receipts

To monitor read receipts in Analytics:

- Navigate to **Analytics** () > **Articles** and click **View all** in the **Top articles** section.
- The **Read Receipt** field in the **All Articles** page displays acknowledgment details.
- Changes reflect in analytics within 15 minutes.

Key points:

- Maximum 20 read receipt rules can be created.
- Reader acknowledgment rules do not carry over when cloning articles/categories across workspaces.
- Readers must acknowledge republished articles again if acknowledgment is enabled.

### Localization: Machine Translation Prerequisites

Machine translation requires credits. Check your balance in Settings > Knowledge base portal > Localization & Workspaces > Machine translation. Purchase more if needed. Credits are consumed at a rate of one per translated character.

### Localization: Using Machine Translation

Two methods for machine translation exist: bulk translation of multiple articles via the "All articles" section (involving WYSIWYG editor switch) or for individual articles from within the editor. Both involve setting the translation status. Retranslating is required if the main language article is updated.

### Localization: AI Machine Translation Overview

Document360's AI machine translation enables seamless localization of content, with benefits including time efficiency, consistency, and scalability. Key points include automatic conversion from Markdown to WYSIWYG and specific behaviors regarding article deletion vs. hiding.

To customize the Eddy AI, go to **Settings () > AI features > Customization**. On the **Customize Eddy AI** page, you can:

1. **Rename the AI**: Enter a desired name (up to 15 characters) in the **AI assistant name** field.
2. **Adjust Response Tone**: Choose from options like Default, Professional, Friendly, Casual, or Straightforward to match your preferred style.
3. **Set Response Length**: Select between Default, Long and detailed, or Short and concise for varying levels of detail.

Once done, click **Save**. Note: The AI name is subject to moderation checks; override if prompted.

**TL;DR**: Personalize Eddy AI by renaming it, adjusting tone, and response length via the customization page.

### Localization: Translation Status Indicators

Multilingual knowledge base articles have translation status indicators (🌐 for "Needs translation") above formatting tools. Filtering by "Needs translation" or "Translated" in the Knowledge Base portal allows users to locate and update translation status, including machine translation. The main language article doesn't show status.

### Localization: Troubleshooting Machine Translation

- **Large articles:** Split articles exceeding 50,000 characters (HTML) into smaller sections for translation.
- **Content updates:** Manually trigger updates in secondary languages using the "Machine translation" feature in the "All articles" section. New content doesn't automatically update.
- **Supported languages:** Machine translation supports many languages (list provided).
- **Character limit:** Be mindful of the 50,000 character limit and potential error messages.
- **Reversibility:** Translating changes the article status, but the original content is not recoverable. Backups are recommended.
- **Costs:** Machine translation is included in the subscription, but excessive character counts may incur additional charges.
- **Language management:** Deleting or hiding articles in one language affects the main and other language versions. Changing/Adding languages isn't automatic, requiring specific actions.

### Localization: Machine Translation Examples

Document360 offers two machine translation methods. **Scenario 1** allows translating existing English articles to other languages (e.g., German, Spanish) via the "All articles" section, requiring selection, confirmation, and automated translation. **Scenario 2** involves adding a new language (e.g., French) post-content creation; English articles are replicated but must be translated manually. If languages were added before content creation, manual translation from "All articles" is needed. The timing of language addition affects content replication and translation requirements.

To manage machine translation credits effectively, start by navigating to **Settings > Knowledge base portal > Localization & Workspaces > Machine translation** to monitor your project's usage. The dashboard includes Limit (total credits), Usage (consumed credits), Remaining (leftover credits), and Usage meter (percentage used). Note that individual articles must be under 50,000 characters, including formatting; split larger articles if necessary. Subscription plans determine credit limits: Professional (1M), Business (2M), and Enterprise (5M). Additional credits can be purchased in 1M increments for $50.

Machine translation credits are managed via the settings portal, with metrics for limit, usage, remaining, and usage percentage. Articles must be under 50k characters, including formatting. Subscription tiers set limits (Professional: 1M, Business: 2M, Enterprise: 5M), with options to buy additional 1M credits for $50.

### AI Integration: Eddy AI Compliance

Eddy AI complies with GDPR for EU data privacy and SOC 2 Type 2 for security, availability, and confidentiality.

### AI Integration: Eddy AI Subprocessors

Eddy AI utilizes subprocessors including MongoDB (vector database), OpenAI (AI capabilities), Azure (cloud infrastructure), Stripe (payment processing), and Segment (product analytics) to enhance service quality and user experience.

### AI Integration: Eddy AI Trust and Transparency

Eddy AI's trust page highlights Document360's commitment to transparency, detailing how AI enhances user experience. It provides an overview of Eddy AI's functionality and outlines related security and privacy practices to ensure trust and accountability.

### AI Integration: Eddy AI Data Security

Eddy AI encrypts data at rest and in transit using industry-standard protocols to ensure data integrity and confidentiality.

### AI Integration: Eddy AI Data Privacy

Eddy AI uses OpenAI models via API. Data is sent to OpenAI and retained for 30 days for analysis, then deleted. A DPA outlines privacy commitments. Consult OpenAI's and Document360's privacy policies for full details.

### Security: Information Security Policy Framework

Document360's comprehensive information security policy framework involves categorized data handling (Confidential, Restricted, Public), strong encryption (AES-256, hash functions), a robust incident response plan including root cause analysis, defined roles and responsibilities for all personnel, secure development practices embedded in the SDLC (secure-by-design), operations security procedures covering change management, capacity planning, and data leakage prevention, access control focused on least privilege, and regulated data retention. Policy enforcement involves documented procedures, audits, and potential disciplinary action for violations. The policies cover all systems and data, whether internal or external.

### AI Integration: AI Writer Suite

Document360's AI writer suite is a collection of AI-powered tools for content creation within a knowledge base portal. Features include writing assistance, SEO optimization, FAQ generation, and related content recommendations, designed to improve productivity and reader experience.

### AI Integration: AI Writer - Plan Availability

- **Plan access:** Freemium lacks AI Writer Suite; Professional, Business, & Enterprise have full access.
- **Credit limits (monthly):** Most features: 5,000 credits; SEO/Title generator: 1,000 credits.
- **Unlimited:** Within Professional, Business, & Enterprise plans, some features have unlimited usage.
- **Notifications:** Users get warnings when approaching credit limits.

### AI Integration: AI Writer Overview

Document360's AI writing suite, "Eddy AI," is accessible via Ctrl+Space. All features are enabled by default in trial accounts. The document outlines plans for different access levels (professional, business, enterprise) but does not currently detail specific functionalities per level.

### AI Integration: AI Writer Features

- **AI Writer**: Generates outlines, adjusts content length, changes tone/voice, splits sentences, converts speech, improves writing clarity, and converts text into tables.
- **AI FAQ Generator**: Automatically creates FAQs from article content.
- **AI Title Recommender**: Suggests engaging and SEO-friendly titles.
- **AI SEO Description Generator**: Produces search engine-friendly descriptions.
- **AI Tag Recommender**: Provides relevant tags for better content categorization.
- **AI Related Articles Recommender**: Suggests additional relevant content for users.
- **AI Chart Generator**: Creates pie charts, flow charts, and tables from content.
- **AI Alt Text Generator**: Generates alt text for images and videos to enhance accessibility and SEO.

### AI Integration: AI Writer - Language Support

Eddy AI writer suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Features like search suite are unavailable in unsupported languages such as Chinese.

### AI Integration: AI Writer - Prerequisites

Enable the AI writer feature by toggling it on in the AI features section of your project settings. Ensure browser extensions are disabled if issues arise.

### AI Integration: AI FAQ Generator

Document360's AI FAQ Generator, part of the Eddy AI content suite, automatically creates FAQs from article content. Requires purchase of the Eddy AI content suite and enabled AI writer suite.

### AI Integration: AI FAQ Generator in Advanced WYSIWYG

Advanced WYSIWYG editor now includes AI-powered FAQ generation. Minimum 150 words required. Generated FAQs appear at end of article. Customizable titles, settings, and regenerations are possible. Users can add/edit/delete FAQs, lock specific questions, and manage templates separately.

### AI Integration: Using the AI Writer

The AI writer provides tools to enhance content, including outline creation, improving text, changing tone, converting speech, altering voice, expanding or condensing text, converting to tables, and splitting sentences. These features are accessed by selecting text in the Advanced WYSIWYG editor, clicking the Eddy AI option, and choosing the desired action. The AI writer is limited to 5000 uses per month for most features and requires at least 10 words for generation. It’s available in Professional, Business, and Enterprise plans, with data handled according to OpenAI’s privacy policies. Key features include:

- **Actions**: Outline creation, improve text, change tone, convert speech, change voice, expand/condense text, convert to table, split sentences.
- **Usage**: Select text (min. 10 words), click Eddy AI, and choose action.
- **Availability**: Advanced WYSIWYG editor only.
- **Limits**: 5000 uses/month (most features).
- **Plans**: Professional, Business, Enterprise.
- **Data Security**: Adheres to OpenAI’s policies.

### AI Integration: AI Title Recommender

Document360's article title recommender generates 3 AI-suggested titles. Click "Ask Eddy AI" to use it. One credit is consumed per suggestion attempt (whether saved or not). Minimum 50 preprocessed words are needed. Suggestions are generated using OpenAI, adhering to their privacy policy. Credit limits apply; contact support for more.

### AI Integration: AI Title Recommender Overview

The Article Title Recommender in Document360 uses NLP to generate optimized titles. It requires content over 50 words and consumes 1 credit for three options. Language support is available; see [here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) for details.

### AI Integration: Configuring the AI FAQ Generator

To customize the FAQ generator, navigate to **Settings > Knowledge base site > Article settings & SEO**, and expand the FAQ accordion. Options include:

- **Expand/Collapse**: Choose to expand first, expand all, or collapse all FAQs.
- **Style**: Select with border for clear separation or without border for a cleaner look.
- **Arrow Position**: Set the expand arrow to the right or left.
- **Icons**: Choose between arrow up/down or plus/minus for expand/collapse actions.

The AI FAQ generator supports English only, generates 5-10 questions, and allows editing. Custom FAQs can be inserted between generated ones, and usage is limited to 5000/month.

### AI Integration: AI SEO Description Generator

An AI-powered tool designed to automate the creation of meta descriptions for articles and category pages, enhancing SEO optimization and improving click-through rates. It supports Professional, Business, and Enterprise plans, ensuring efficient content alignment with SEO best practices while saving time.

### AI Integration: AI SEO Description Generator - Usage

Use Eddy AI to generate SEO meta descriptions for articles/categories in the knowledge base portal. Click "More" > "SEO" > "Ask Eddy AI" in the Article settings panel. Review & save the generated meta description. Manual review is recommended for accuracy & relevance.

### AI Integration: AI SEO Description Generator - Prerequisites

- Ensure sufficient credits for generating SEO descriptions.
- Confirm preprocessed content exceeds 200 words after excluding non-text elements.
- Verify user permissions to access the AI feature.
- Check Eddy AI's supported languages for non-English content.

### AI Integration: Bulk SEO Description Generation

Document360's SEO description generator lets you batch-generate meta descriptions for articles/categories in English. Filter by various criteria (date, contributor, tags), generate for articles with at least 200 preprocessed words, and use AI to optimize for keywords/user intent in 155-160 characters. Limited by language support (English only) and credits, with a monthly limit (1000 descriptions) per plan. Manual updates and titles possible.

### AI Integration: AI Tag Recommender

The AI tag recommender suggests relevant tags for article or category content using AI. Requires preprocessed content exceeding 50 words and proper access privileges. Supported languages are available elsewhere.

### Content Management: Tagging Best Practices

Establish consistent, specific, and limited tags for your knowledge base articles. Review and update them regularly. Group related content using tags. Utilize the AI tag recommender, which doesn't cost credits. Teams with 'update article settings' or 'manage tags' permissions can create and edit tags. Manual tagging is still an option, but AI recommendations are always active. Keep tags relevant to avoid clutter and optimize content retrieval.

### AI Integration: Accessing AI Related Articles

Eddy AI recommends related articles to improve knowledge base navigation. Users can (1) add related articles to individual articles via manual selection within the article details, or (2) from the publish checklist. Eddy AI recommends up to 3 related articles; minimum 50-word article length required. Manual additions do not overwrite existing ones. "Auto relate" feature creates mutual relationships between articles.

### AI Integration: Accessing AI Tag Recommendations

To access AI-recommended tags for an article via Eddy AI in Document360, navigate to the article, click **More**, select **Tags**, and use the **Ask Eddy AI** button. Articles need at least 200 words; preprocessing removes HTML tags, images, URLs, and code blocks. Tags also appear during publishing in the confirmation prompt. Tagging improves content organization, searchability, and discoverability.

### AI Integration: AI Related Articles Overview

Document360's AI-powered related articles recommender automatically suggests relevant articles based on content, enhancing user experience. Requires articles over 200 words and proper permissions; [language support details](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) available.

### AI Integration: Creating Charts from Text

Eddy AI tool in an advanced WYSIWYG editor lets you create charts (pie, flow, table) from highlighted text. Up to 10 regenerations are available. Charts can replace or be inserted below the selected text. Error handling is provided.

### AI Integration: AI Chart Generator Overview

The AI Chart generator in Document360 automatically converts text into visual formats like pie charts and flow charts, streamlining the creation of visual aids without the need for third-party tools.

### AI Integration: Creating Charts from Tables

Highlight table in document, click Eddy AI > Generate, choose chart type (pie, flow, table). Regenerate up to 10 times for better chart. Final chart is saved in Document360 Drive for reuse. Output may be inserted below table or replace the table.

### AI Integration: AI Chart Generator - Prerequisites

- Requires an active subscription to the Eddy AI content suite.
- AI writer suite must be enabled in Document360.
- Text/table must be within the main article body (excludes comments or captions).
- [Supported languages](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) information available.

### AI Integration: Customizing Generated Charts

Document360 charts are customizable _after_ insertion via image editing tools (alignment, cropping, resizing, annotations). While not directly editable, you can regenerate, undo, or update chart content.

### AI Integration: AI Alt Text Generator

Document360's Eddy AI generates alt text for images, saving time and boosting accessibility & SEO. Works best with smaller images (under 20MB) in JPEG, JPG, PNG, or WEBP formats. Limited to English and may have issues with certain image types. Free with AI writer enabled, but usage is capped at 5000 alt texts per month.

### AI Integration: AI Chart Generator - File Naming

All generated charts follow a naming convention where the AI-generated filename is appended with the chart type (e.g., **sales_data_pie_chart.png**). Charts are saved in Document360 Drive under **Images** > **Documentation**.Chart regeneration is limited to 10 times, and only the final chart is saved. Each generation consumes Eddy AI credits.

### AI Integration: AI Chart Generator - Supported Types

- **Pie charts**: Visualize proportions like task completion percentages. Example: Display team members' contribution percentages.
- **Flow charts**: Map processes or decision sequences. Example: Document approval steps.
- **Tables**: Present structured data for comparison. Example: Compare product features.

### AI Integration: AI Alt Text in Drive

Generate AI alt text for images uploaded to Drive either during upload (manually or automatically) or after upload by navigating to the image, clicking "File details," "Generate," and "Update". Options for single or multiple images are available.

### AI Integration: AI Search Suite

An AI search suite (Ask Eddy AI assistive search, API, and article summarizer) improves search and content discovery. No specific implementation plans are provided for professional, business, or enterprise levels.

### AI Integration: AI Alt Text in Editor

Generate AI alt text in the Advanced WYSIWYG editor by uploading images via device, Drive, drag-and-drop, or external URL—Eddy AI auto-generates alt text for uploads except Drive, where existing alt text persists (regenerate by clicking the image and using the Alt text icon). For multiple images, regenerate alt text individually. Copy-paste images, click the Alt text icon, and use Generate. Review and edit alt text before inserting. For more details, see [Inserting images guide](https://docs.document360.com/docs/adding-images-to-articles#inserting-an-image-advanced-wysiwyg-editor).

### AI Integration: AI Search Suite Features

The AI search suite offers intelligent search (Ask Eddy), API integration (Ask Eddy AI API), article summarization, and text-to-voice capabilities. Ask Eddy provides AI-assisted querying for quick answers. The API lets developers integrate AI search into their products. Summarization condenses lengthy articles for quick comprehension. Text-to-voice lets users listen to articles.

### AI Integration: AI Alt Text Generator - Usage

- Generate up to **5000 AI alt texts monthly** per project.
- **Enabled by default** if AI writer is active.
- **Review and edit** generated alt texts before accepting.
- **Generation process**:
- Click the **Generate** button when uploading images to Drive.
- Regenerate by deleting existing text and clicking **Generate** again.
- **Credits**:
- **Generate** button is disabled when monthly credits are exhausted.
- Insufficient credits for multiple images disables **Generate all**; select images within credit limit.
- **Formats**: Supported for **JPEG, JPG, PNG, WEBP** images under **20 MB**.
- **Pasted images**: Generate alt text via the floating menu in the Advanced WYSIWYG editor.
- **Counting**: Only images from articles, templates, snippets, and glossary count toward limits.

### AI Integration: AI Search - Plan Limits

- **Business Plan:** 2,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search.
- **Enterprise Plan:** 5,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search/API call/summarization.
- Additional credits purchasable. Features help businesses with AI-driven search and summarization tasks.

### AI Integration: AI Search - Language Support

Eddy AI search suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Workspaces using unsupported languages, like Chinese, will not have access to search suite features.

### AI Integration: Enabling Ask Eddy AI

Enable Eddy AI's assistive search on your knowledge base site by navigating to Settings > AI features > Eddy AI and toggling on the AI assistive search. This indexes your knowledge base content, adding the Ask Eddy AI button to your site search and home page. The feature can also be enabled for KB widgets, extensions, and public API endpoints.

### AI Integration: Using Ask Eddy AI

Ask Eddy AI, a conversational AI, is exclusive to KB site 2.0. Access it through the search bar. Review generated results, source articles, and continue conversations. Configure Eddy AI localization in KB site 2.0 settings. Filtering workspaces will reset results.

### AI Integration: Ask Eddy AI Overview

Ask Eddy AI is an AI-powered search feature available on the home page and Knowledge base site's search bar, providing contextual answers to user queries. It extracts information from textual content, code blocks, tables, content reuse elements, and LaTeX. By default, it retrieves answers from the main workspace, but users can switch workspaces using filters. Updated content takes approximately 15 minutes to reflect in search results. For more information on supported languages, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Dynamic Related Articles

Dynamic related articles are automatically recommended in a knowledge base. This feature improves user experience by providing additional relevant information and enhances navigation. It applies to the entire knowledge base.

### AI Integration: Dynamic Related Articles Overview

KB site 2.0's Dynamic related articles feature, powered by Eddy AI, automatically adds relevant related articles to all articles. Enabled via Settings > AI features > Eddy AI, this feature can be further customized with manual addition through Eddy AI and automatic reciprocal linking. Users can identify automatically generated recommendations by the icon next to the article name (not displayed for manually added articles). The feature enhances navigation and user experience, requiring no additional user interaction outside of initial enabling to function.

### AI Integration: Eddy AI in KB Widget

Eddy AI can be seamlessly integrated into a Knowledge Base (KB) widget, offering support for multiple languages including English (en-US, en-GB), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), and Danish (da). This ensures users can interact with the AI in their preferred language, enhancing accessibility and user experience.

### AI Integration: Eddy AI Credit Notifications

To enable Eddy AI credit balance alerts, go to **Settings > Knowledge base portal > Notifications**, switch to the **Notification mapping** tab, and turn on the **Credit usage alert** toggle. Notifications are sent via configured channels when credits drop to 20%, 10%, or expire. Document360 and OpenAI comply with GDPR, and the platform is SOC 2 compliant. For configuration details and purchasing additional credits, refer to the [**Notifications**](/help/docs/notifications) and [**SMTP notification channel**](/help/docs/smtp-email-notification-channel) articles.

### AI Integration: Eddy AI Chatbot Configuration

Enable AI assistive search in Knowledge Base settings. Create a chatbot widget, customize it (styling, connection, security, content access), regenerate its key and configure JWT authentication. Deploy the widget's script to your Knowledge Base site or a custom site. Secure access via domains. Crucial steps: enabling AI search, widget creation, connection setup, security configuration.

### AI Integration: Eddy AI Chatbot Overview

_No summary available for this section._

### AI Integration: Eddy AI Chatbot Security

Secure Eddy AI Chatbot access for private/mixed projects using JWT. Configure JWT in Knowledge base widget, obtaining a unique Client ID, Widget ID, and crucial client secret (regenerate and store securely!). Set the correct Token endpoint and Authorize URL. Embed the authorized URL in webpage script. Thoroughly test the implementation.

### AI Integration: Eddy AI Chatbot Styling

To style the Eddy AI chatbot widget, adjust its icon (upload image or choose from icon set), background color (using color picker or hex/RGB/HSL), position (left/right, spacing), and visibility (hide/show). Changes are saved automatically. The Knowledge Base portal is used for configuration.

### AI Integration: Using the Eddy AI Chatbot

To use the Eddy AI Chatbot, click the icon, type your query, and send it. Get answers from the Knowledge base. Hover for options to copy, like, or dislike responses. Clear conversations with the Clear icon. View feedback in Analytics > Eddy AI using the Application filter. Unlike Widgets, which require manual navigation, the chatbot offers direct, conversational answers.

### AI Integration: Eddy AI Chatbot Styling

Styling the Eddy AI chatbot improves user experience through customization of colors, icons, and brand alignment. It supports multilingual capabilities, with more details available [here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Adding External Sources to Ask Eddy

To add external sources to the Knowledge Base AI search, navigate to settings, select "Add new," choose "Webpage" or "Sitemap," input source name and valid URL (HTML5 format with <article> or <main> tags). Limit 50 webpages and 1 sitemap.

### AI Integration: Managing External Sources

Manage indexed external sources in Eddy AI. Control content access (All or selected workspaces, languages, categories), filter sources (type, errors), sync (manually up to 4 times/day), add/edit/delete sources, and handle errors (view, remove, or remove all). AI access can be limited to specific workspaces and content categories. Ensuring sources use Server-Side Rendering (SSR) is important for accurate indexing.

\*\*

### AI Integration: External Sources for AI Search

The Enterprise plan supports adding external sources for AI assistive search, enhancing answer accuracy by incorporating external resources. This feature is also available to Legacy users with the AI add-on, aiding support agents in providing efficient and comprehensive solutions.

### AI Integration: Troubleshooting External Sources

Eddy AI Assistive search troubleshooting for external sources. Issues arise from unsupported sitemaps (nested, large files, wrong format), forbidden access (by bot detection), or insufficient HTML5 tags on webpages. Solutions include verifying format/size limits, requesting access from website owners, and updating the webpage HTML. Manual syncing is available up to four times daily, with automatic syncing hourly. Sources can be deleted or disabled temporarily. Analytics for external source performance are available.

### AI Integration: External Source Display

Eddy AI displays numbered source URLs in the "Source articles" section, with hover functionality showing title and description, and allows clicking to open sources in a new tab.

### AI Integration: Ask Eddy AI API

Eddy AI Public API allows businesses to deeply integrate AI-powered search into their platforms, customizing the user experience. The API supports various languages and offers efficient extraction of answers from Eddy AI.

### AI Integration: AI Article Summarizer

The AI article summarizer in Document360 uses NLP to condense lengthy articles into concise summaries, helping users save time. It requires articles to be over 250 words and is available based on subscription plans since May 27, 2023. For language support, refer to the [help docs](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Enabling the Article Summarizer

To enable the article summarizer in Document360, navigate to **Settings > AI Features > Eddy AI** and toggle on the **Article summarizer**. The summary will appear at the top of articles. Ensure articles have over 250 preprocessed words (excluding HTML, images, etc.) for the summarizer to work. Data privacy is maintained as per OpenAI's policies, with no use of customer data for training.

### AI Integration: Using the Eddy AI API - API Docs

Use the Document360 API docs (link provided) to interact with Eddy AI. Input your API token, a question/query (prompt), the version ID, and language code. Click "Try it & see response" to get results. Requires API token and inputting the prompt, version ID, and language code in the provided fields.

### AI Integration: Using the Eddy AI Public API

Enable Public API in Settings under AI Features; if disabled, expect 500 or 400 errors. Create an API token with POST method access via API Tokens. Each API call consumes a credit. Visit the API hub for structure details.

### Accessibility: Read Out Loud Feature

Knowledge Base site 2.0 offers a read-out-loud feature for improved accessibility and engagement. Available on all plans except for older pricing plans which need the AI assistive search add-on for Enterprise. Users benefit by listening to content while multitasking or preferring auditory learning.

### AI Integration: Using the Eddy AI API - Swagger

Authorize using your API token in Swagger, navigate to `/v2/ProjectVersions/ask-Eddy AI`, enter the required parameters (prompt, version ID, and language code), and click Execute to get the response.

### Accessibility: Read Out Loud - FAQs

Feature reads glossary, snippets, variables, headings (H2-H4), lists, callouts, private notes, accordions, FAQs, link text, emojis. Skips tables, inline code, code blocks, images, videos, LaTeX, and attached files. Audio playback allows seeking.

### AI Integration: AI Premium Suite

AI-automated business glossary generation in the premium suite streamlines glossary creation, maintaining consistent terminology, improving team communication, and ensuring documented accuracy. _Available only in English._

### AI Integration: AI Glossary Generator

AI Glossary generator is a tool that creates a centralized glossary of business terms to improve understanding, data collection, team collaboration, and communication within an organization. It standardizes definitions across departments.

### Accessibility: Using Read Out Loud

- Begins reading from the article heading and body content, excluding the summary.
- Reads alt text for images and videos; indicates presence if alt text is missing.
- **Listen** button located in the article header, changes to **Listening** during playback and opens the Player window.
- Player controls (bottom right): play, pause, skip 10 seconds forward/back, close.
- Enable or disable the feature via Settings > Knowledge base site > Article settings > Accessibility.
- Disabled by default for users on trial plans.

### AI Integration: AI Premium Suite Overview

The AI premium suite enhances user experience by automating key business processes and improving workflow efficiency through advanced AI-powered tools. It offers tailored plans for **Professional**, **Business**, and **Enterprise** users, each designed to meet specific needs and optimize productivity.

### AI Integration: AI Glossary Generator - FAQs

AI Glossary generator treats singular/plural and synonymous terms as separate. Rescan is manual, recommended every 7 days, updating suggestions and notifying users.

### Content Optimization: Writing for GenAI

For optimal GenAI content, use clear, concise headings (keyword-rich), short paragraphs, tables (structured data), code snippets (commented), bullet/numbered lists, descriptive alt text, contextual links (descriptive anchor text), SEO best practices (keyword optimization), consistent business glossary terms, natural language, conversational tone, and human-friendly writing. Test with AI tools and review generated output. Prioritize examples, elaborated text, and frequent FAQs to avoid hallucination. Use Document360 glossary for consistent terminology.

### AI Integration: Enabling AI Glossary Generator

To enable the AI Glossary generator, follow these concise steps:

1. Go to **Settings () > AI Features > Eddy AI**.
2. Locate the **AI Glossary generator** option.
3. Toggle the switch to enable the feature.

### AI Integration: Using the AI Glossary Generator

- Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Glossary**. Click **Take action** on the Eddy AI banner to access the glossary generator.
- The tool shows suggestions only for published articles.
- Use the left navigation bar to view and search glossary terms, and sort them as needed.
- Definitions can be edited (up to 500 characters).
- Use the **Add to** dropdown (default: English) and enable **Update in articles** to apply changes.
- Click **Show Articles** to see where terms will be used and **+ Add to glossary** to save terms.
- Terms can be ignored and moved between lists.
- The generator can be used in the advanced WYSIWYG editor by selecting **Glossary** under **Insert**.
- Keyboard shortcuts: ARROW keys to navigate, ENTER to add terms, BACKSPACE to ignore.

### AI Integration: Enhancing Content with Eddy AI

Use Eddy AI to categorize articles, document error messages, create best practices guides, and generate troubleshooting steps for your knowledge base. Focus on specific prompts like "Suggest categories for \[article topic]" or "Generate explanations for \[error message]" to get effective results. This improves knowledge base structure and user support.

### AI Integration: Prompt Engineering Best Practices

For optimal Eddy AI results, use precise, step-by-step prompts, compare features, summarize sections, add context to recommendations. Natural language, detailed context, customized personas, and creative prompts unlock personalized insights. Key entities: Eddy AI, prompt engineering, Document360, knowledge base, summaries, comparisons, recommendations, article sections.

### AI Integration: Prompt Engineering Tips

Document360's Eddy AI employs prompt engineering to enhance AI-driven tools, boosting content creation accuracy, efficiency, and relevance. This guide helps users optimize Eddy AI for tailored content generation.

### File Management: Document360 Drive

Document360 Drive is a cloud-based file storage & management system for teams. Features include adding/managing folders and files, viewing recent/starred/deleted files, and accessing an overview of all content. Centralized storage and collaboration-focused.

### File Management: Adding Folders and Files

Document360 Drive allows users to create and manage folders/subfolders mirroring knowledge base structure for better file navigation and accessibility. This improves document organization within the system. Different user plans may have varying Drive functionalities.

### File Management: Storage Limits by Plan

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
| 50 GB        | 100 GB   | 500 GB     |

Document360 Drive is a centralized, cloud-based storage solution with tiered storage limits: Free (1 GB), Professional (50 GB), Business (100 GB), and Enterprise (500 GB).

### AI Integration: Eddy AI Use Cases

Eddy AI is a versatile tool designed to enhance content creation and management across multiple industries, offering tailored solutions to improve efficiency and engagement. Key applications include:

- **Learning Management Systems (LMS):** Streamlines course creation, offers adaptive learning paths, and generates engagement tools like quizzes and summaries.
- **Customer Support:** Develops structured knowledge bases with troubleshooting guides and FAQs for effective problem resolution.
- **Compliance Documentation:** Assists in creating and updating compliance checklists and SOPs for regulated industries.
- **Product Development:** Supports tech companies with API documentation, release notes, and user guides.
- **Retail & E-commerce:** Automates product guides, comparisons, and procedure documentation for customer support.

Each application leverages Eddy AI's capabilities to automate, organize, and enhance content, ensuring accuracy and relevance.

### File Management: Adding New Folders

Create new Drive folders using either the '+' flywheel icon or a 'New Folder' button. Navigate to the desired location, enter the folder name, and click 'Create'. For easier maintenance, align folder structure with knowledge base categories.

### File Management: Understanding System Folders

Document360 projects include **System folders** like Images, Settings, and Documentation, marked by a shield icon. These folders are essential, restrictions prevent deletion or renaming, but allow actions like adding files, customizing colors, and setting defaults.

### File Management: Adding Files to Drive

Add files to a drive folder using drag-and-drop (into empty folders) or via the "More" menu. Specify file location, optional tags and alt text (for images). Avoid file names with +, %, #, =. Check supported file types.

To add subfolders, choose between two methods in the Drive section:

1. **Using the 'More' option**:

- Click the More icon next to a folder.
- Select "Add folder," name it, and set its location.

2. **Using the '+' option**:

- Hover between folders until the '+' icon appears.
- Click '+,' name the folder, and set its location.

Ensure root folders are expanded to correctly create subfolders. Deleting a root folder also removes its contents.

### File Management: Managing Folders in Drive

Organize Drive folders and subfolders logically (like your documentation categories) for efficient file storage, maintenance, and retrieval. Document360 allows both individual and bulk folder management. Different service tiers (Professional, Business, Enterprise) are implied but not detailed.

### File Management: Setting Default Folders

Set a default folder for new uploads in a system by selecting it from the Drive. This setting is overridden by existing category-to-folder mappings. Default folders are indicated by an edit icon.

### File Management: File Limits and Restrictions

- **File Limits**: Each folder can hold up to 5000 files, with subfolders treated as separate folders. Single file uploads are capped at **150MB**, while multiple files cannot exceed a combined size of **160MB**.
- **File Type Restrictions**: Users can restrict allowed file types by navigating to **Settings > Knowledge base portal > General > Drive settings**. They must specify media types using the format `media type/extension` and provide lowercase extensions (e.g., .png, .jpg). Multiple types can be added and changes must be saved.

### File Management: Troubleshooting Drive Issues

The Document360 folder has a 5000-file limit, including direct uploads and images from articles or Docx files. To resolve, use another folder, delete unused files, or clear cache. Alt text for images, limited to 140 characters, aids accessibility. File upload errors may stem from unsupported types, so check settings to ensure allowed media types are selected and avoid special characters in filenames.

### File Management: Starring Folders

To star a folder in the drive, click the star icon next to it. Starred folders appear in a dedicated "Starred" section in the navigation, regardless of their location. Clicking the star again removes it from the starred list.

### File Management: Moving Folders

To move a folder within the Drive, excluding System folders, use either the **More option** or **drag and drop**:

- **More option method**: Select folder(s), click More > Move, choose destination via search, and confirm.
- **Drag and drop method**: Drag folder to desired location in left navigation.

### File Management: Renaming Folders

To rename a folder in Drive, navigate to the desired folder in the tree-view, click the More icon, select Rename, enter the new name, and confirm. Note: System folders cannot be renamed.

### File Management: Changing Folder Colors

Change folder color by hovering over the folder, clicking "More", then "Change Color". Choose from the color palette, enter a hex code, or use a color picker. Default is gray.

### File Management: Folder Navigation

The breadcrumb trail in the Drive window shows the folder hierarchy, allowing navigation. Clicking on a level navigates back. Setting a folder as default multiple times has no effect. Renaming, copying, moving, or reordering folders does not change file URLs, keeping related image links intact. Folders act as categories in Document360 for organizing articles.

### File Management: File Actions

File actions in Google Drive are not detailed in this document. Missing data in the provided table prevents any summary of support plans for specific user groups.

### File Management: Deleting Folders

To remove or delete a folder, follow these steps:

1. Click the Drive icon in the left sidebar.
2. Use either the More () icon next to the folder or select the folder's checkbox to reveal the Remove option.
3. Click Remove and then confirm by clicking Yes in the Delete prompt.

Key considerations:

- Deleting a folder breaks media reference links and may take up to a minute to clear the CDN cache.
- System folders (marked with a shield icon) cannot be deleted.
- Accidentally deleted folders can be restored from the Recycle bin within 30 days.

### File Management: Troubleshooting File Replacement

Document360 file replacement error occurs when trying to swap files of different types. Verify file types match, clear browser cache, and test in different browsers. Back up files before replacement as they are permanently overwritten. Contact support if problem persists, providing error screenshots, file details, and a HAR file. No file version history is available.

tag, create a markdown heading called "Bulk folder actions," and provide a concise, entity-dense TLDR of the document. Finally, I need to close the

### File Management: Performing File Actions

- **Navigate to Drive**: Access Drive from the left menu and select the desired folder. Choose between **List view** or **Grid view** to manage files.

- **File Actions**:

- **Move**: Transfer files between folders without changing their links.
- **Copy**: Duplicate files in another folder.
- **Add Tags/Alt-text**: Enhance file discoverability by adding tags and alt-text for images.
- **View Details**: Access file metadata, dependencies, and actions like move, copy, or download.
- **View Dependencies**: Track how files are linked to articles or other content.
- **Download**: Export single or multiple files as a .zip.
- **Remove**: Delete files, moving them to the Recycle Bin.
- **Replace**: Update a file with a new version without changing its name or URL.

- **Important Notes**:
- Moving files does not break image links.
- Deleted files are moved to the Recycle Bin but cannot be restored if overwritten.
- Use the **Filter** option to identify files with or without dependencies.

### File Management: All Files View

The All Files overview in Document360 Drive consolidates all project files into a centralized location, enabling efficient bulk operations like moving, copying, or deleting files across multiple folders and subfolders, thus streamlining file management and saving time.

### File Management: Recent, Starred, and Deleted Files

Document360's Recycle Bin temporarily stores deleted files, folders, categories, and articles. Users can restore deleted content from the Recycle Bin.

### File Management: Managing All Files

The **All files** page in Document360's Knowledge Base portal displays up to 20 files per page, with options to switch between grid and list views, filter files by criteria like dependencies, upload date, uploader, type, and tags, and view storage usage. Users can perform bulk operations (move, copy, download, remove) on selected files, with pagination for navigating beyond 20 files. Best practices include regular cleanups, using categories for organization, and checking dependencies before deletion.

### File Management: Using the Recycle Bin

Recycle bin allows restoring or permanently deleting Drive files/folders. Restore in bulk or individually. Select items using checkboxes (max 20 with 'Select All'). 'Select all {N} items' for more than 20. Permanently delete individual items or the entire bin. Deletion is irreversible.

### File Management: Viewing Recent Uploads

The "Recent" folder in a Drive window automatically displays the latest uploaded files and folders, simplifying access. Navigate to the Drive icon, then the "Recent" folder to view.

### Workflow Management: Benefits of Workflow

Document360's workflow facilitates collaboration, consistency, and accountability among writers, editors, illustrators, and subject matter experts throughout the documentation lifecycle. Its two modules (Workflow designer & Workflow assignments) structure the process.

### Workflow Management: Workflow Designer Overview

Documentation platform feature enabling project teams to create & manage step-by-step workflows for documents (e.g., Draft, Review, Publish). Admins/owners customize workflows. Access via Documentation > Content tools > Workflow designer. Allows adding, editing, and reordering workflow statuses.

### File Management: Starred Items and Recycle Bin

- **Starred Folders/Files**: Mark folders or files as starred for quick access via the **Starred** option in the left navigation pane.
- **Access**: Click the Drive icon, then **Starred** folder to view starred items with a ★ icon.
- **Remove Star**: Click the star icon again to unstar.
- **FAQs**:
- **Recycle Bin**: Items auto-delete after 30 days if unused.
- **File Recovery**: Cannot recover permanently deleted files; use backups if needed.

### Workflow Management: Workflow Designer

A Document360 workflow designer is a tool for managing knowledge base documentation processes, including creating, editing, reviewing, and publishing articles. It allows the establishment of internal business processes for document management and may vary across plans:

| Professional | Business | Enterprise |
| --- | --- | --- |
| Essential workflow automation | Advanced collaboration features | Custom automation and analytics |

It streamlines documentation workflows and enhances team collaboration.

### Workflow Management: Troubleshooting Workflow Issues

Article editing blocked due to read-only workflow status. To resolve, access the Knowledge base's Workflow designer, locate the locked (read-only) status, disable the read-only toggle, and update the status. Requires admin permissions or admin intervention if the user lacks the required permissions.

### Workflow Management: eBook - Documentation Workflow

This eBook provides a step-by-step guide to establishing a documentation workflow, outlining best practices for high-quality content creation that meets customer expectations.

### Workflow Management: Understanding Workflow Statuses

- **System Status**: Predefined (e.g., Draft, Published), cannot be deleted or reordered.
- **Custom Status**: User-defined, flexible (create, edit, reorder, delete), can be set as read-only to restrict editing.

### Workflow Management: Adding Workflow Statuses

Step-by-step guide to manage workflow statuses:

1. **Add Status**: Access the workflow designer, choose between two creation options, set name/description, enable/disable read-only, and save.
2. **Edit Status**:Navigate to the status, make necessary changes (name, description, read-only for eligible statuses), and update.
3. **Reorder Status**: Drag and drop custom statuses (system ones cannot be moved).
4. **Delete Status**:Remove permanently with a confirmation (system statuses are non-deletable).

### Workflow Management: eBook - Quality Documentation

This eBook guides users through creating quality documentation workflows. It covers procedural steps, best practices for content quality, and ensuring documentation meets customer expectations.

### Workflow Management: Managing Workflow Statuses

Managing workflow status can be handled through the Documentation editor, where statuses can also be assigned directly to team members. Brief plans for Professional, Business, and Enterprise are noted, with details to be filled in later.

### Workflow Management: Workflow Assignments

Document360 allows for workflow assignment of document statuses to team members, improving visibility and control over each stage of an article's lifecycle.

### Workflow Management: Assigning Articles

To assign an article in the Knowledge base portal, navigate to the article, select the desired workflow status, click "Assign owner," choose the team member, and click "Assign." Removing an assignee or setting due dates is also possible. Assigned team members receive notification emails. One team member may be assigned to multiple statuses; only one can be assigned to a single status.

### Workflow Management: Workflow Status Actions

The Workflow status option, located at the top right of the Documentation editor, allows users to manage an article's workflow. Key actions include:

- **Viewing status**: Displays current and past statuses, with strikethrough indicating completion.
- **Setting due dates**: Assign or clear dates via a calendar.
- **Assigning team members**: Search and assign users, with notifications sent if enabled.
- **Activating next status**: Move through workflow stages with optional comments.
- **Viewing history**: Access past statuses and comments for each article revision.

**Notifications**: Ensure team accounts receive updates by enabling workflow events in Settings > Notifications under Documentation editor and category workflow sections.

### Workflow Management: eBook - Documentation Workflow

Platform facilitates documentation workflow management, enabling creation of categories, articles, and templates. Users can manage files, teams, readers, branding, domains, and security settings for knowledge base content. Focuses on creating high-quality documentation for customers.

### Content Templates: Overview

Document360 offers pre-designed article templates (professional, business, enterprise) for consistent knowledge base articles (user guides, FAQs, release notes). Users can also create their own custom templates for repeated use.

### Content Templates: Creating Templates

To create a new template in the knowledge base portal, navigate to Content reuse > Templates, click "Create template", name it, select editor type, add description, and save. Edit existing templates by hovering, clicking "Edit", updating name/description (max 250 characters), and saving. Default templates are automatically created based on onboarding.

### Workflow Management: Workflow Assignments Overview

The Workflow assignments overview page provides a centralized view of articles and category pages in a knowledge base project, allowing team accounts to track workflow statuses, due dates, and assigned articles. Accessible via the Knowledge base portal under Documentation > Workflow assignments, it displays the number of articles in each workflow status and enables users to view their assigned articles from the left navigation menu.

To create an article from an existing template, follow these steps:

1. Hover over the desired category in the left navigation and click the () icon.
2. Select "Article from template" and enter the article name.
3. Choose the category location from the dropdown.
4. Select a template from the list, previewing it on the right.
5. Click **Create** to complete the process.
6. If needed, manage templates by clicking the **Manage templates** link.

![Creating a template from existing article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Creating_an_article_from_an_existing_template.gif)

### Content Templates: Saving Articles as Templates

To create a template from an existing article in the documentation editor, click the "..." icon, select "Save as template", then confirm. Templates can be viewed, edited, or deleted via the "Manage templates" page.

### Content Templates: FAQs

Templates can be cloned (within the same language) to create new ones, saving time and effort. Deleting a template doesn't affect existing articles. Saved templates are shareable with team members. Updating a template has no effect on previously created articles; a local copy is utilized. Templates cannot currently be cloned across different languages. To utilize a template in a different language, manually recreate and translate it.

### Content Reuse: Variables

Variables in Document360 are reusable elements for frequently changing text content (e.g., contact info, addresses). Updating a variable in one place automatically updates it throughout the document, maintaining consistency and reducing redundant effort. Key benefit: central updates for consistent data across multiple documents.

### Content Reuse: Managing Variables

Manage variables in a knowledge base portal. Find, view, edit, and delete variables. See which articles use a variable and how edits propagate. Modify links and their styles. Bulk delete possible. Navigation path detailed.

### Localization: Translating Variables

Translate variables in documentation to localize content. Create new variables selecting target languages, filling content (default language first), and translating to other languages. Existing variables can be translated, retranslated, or removed by language. Global variables cannot be translated.

### Content Reuse: Creating Variables

To create a variable, follow these steps:

- Navigate to **Documentation () > Content tools > Content reuse > Variables**.
- Click **Create variable** and select the desired language (default is Global).
- Enter a **Name** (30 characters max, letters, numbers, hyphens, underscores allowed).
- The **Merge code** will be generated as `{{variable.Name}}`.
- Choose a **Language** (Global or language-specific).
- Add **Content** (100 characters max, with formatting options like bold, italic, links, and more).
- Use **Snippets** for longer text or media.
- Click **Create variable** to save.

![Creating a new variable](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_variables.gif)

### Content Reuse: Using Variables

Insert variables into your article or category page using two methods:

1. **Markdown Syntax**: Use `{{variable.MergeCodeValue}}` in the Markdown editor, ensuring the exact merge code is typed correctly.
2. **Toolbar Method**:

- For Markdown and WYSIWYG editors, click the Content reuse icon.
- For Advanced WYSIWYG, use Insert > Variables or the slash comando. Select variables from the right pane, which allows previewing by hovering.

Both methods allow variable insertion, with the toolbar method supporting multiple variable selection in non-Advanced editors. The exact merge code is essential for functionality.

built-in variables in Document360 streamline documentation by enabling single-source updates, ensuring consistency across articles. They are customizable, update in real-time, enhance team collaboration, and support translations. Variables improve efficiency and accuracy, making them a best practice for technical documentation.

### Content Reuse: Using Snippets

Two methods to insert snippets into articles: 1) Use specific merge code in Markdown editor; 2) Select from toolbar (Markdown, WYSIWYG, Advanced WYSIWYG) using search. Method 2 allows for preview & selection from a pane, enabling insertion of local copies (static snippets). Knowledge base portal compatible.

### Content Reuse: Snippets Overview

Document360 uses "Snippets" for reusable content blocks (text, images, etc.). Authors/managers store these in a library and insert them easily into articles. Readers see the content seamlessly, unaware it's a reusable element.

### Content Reuse: Managing Snippets

Manage reusable content (snippets) in a knowledge base. Find, view, edit, and delete snippets. See articles using a snippet, its language, and last modification date. Edits automatically update using articles. Bulk delete snippets possible.

### Content Reuse: Snippet FAQs

- **Snippet limit:** 200 per project; additional available as add-on.
- **Snippet renaming:** Not possible after creation.
- **Snippet placement:** Always starts on a new line to facilitate multiple lines of content.

### Localization: Translating Snippets

Manage snippets in multiple languages to ensure consistency across translations. Global snippets cannot be translated. To create a new snippet: navigate to Snippets, select language, add name/content, translate into other languages, and save. Existing snippets can be translated by selecting the target language and translating or re-translating as needed. The default language is marked as Main, with translations indicated by a green tick.

### Content Consistency: Glossary

A glossary improves knowledge base readability and consistency by providing quick definitions for frequently used terms. This reduces confusion, ensures consistent terminology, saves writer time, and enables product-specific education using reusable terms. Glossary terms are viewable within the knowledge base and assistant.

### Content Reuse: Creating Snippets

To create a snippet, access the Snippets section via Documentation > Content tools > Content reuse. Click "Create snippets," name your snippet (up to 30 characters with letters, numbers, hyphens, and underscores), set the language (Global by default), choose the WYSIWYG or Markdown editor, add content, and click "Create snippet."

### Content Consistency: Glossary Management Navigation

Manage glossary terms: add/edit/delete single/multiple, import, link overview page (header, footer, menu, homepage). Filter by language. Terms are project-wide, not workspace-specific. Use content tools > content reuse. Check article usage before deleting terms. Bulk import is possible. Terms deleted from articles.

### Content Consistency: Managing Glossary Terms

Access the glossary via **Content tools > Content reuse > Glossary**. Key features: language filtering, creating/editing terms, bulk import/export (CSV), term search with preview, tracking usage across articles, and AI-powered glossary generation with Eddy AI. SEO benefits include improved search relevance through keyword definitions.

### Content Consistency: Adding Glossary Terms

Add glossary terms by navigating to Content tools > Content reuse > Glossary. Create a new term, filling out Name (max 100 chars), Language, Term (max 100 chars), and Content (max 500 chars). Use the "Create Glossary" button. Translate terms by using the Name field for reference. Global terms can't be language-specific. Import options (CSV) are available.

### Content Consistency: Troubleshooting Glossary Import

CSV upload issues are often caused by non-English Excel regional settings. Change Excel regional settings to English (United Kingdom), ensure CSV headers match the template, and save/re-upload. Use HTML tags (`<img src="...">`, `<a href="...">`) to embed images and hyperlinks in glossary definitions for proper import and display. Contact support if issues persist.

### Content Consistency: Adding Glossary Terms

In Document360, easily add glossary terms by navigating to the glossary section via the left menu or search. Use an "Add Term" button to create entries, selecting from Professional, Business, or Enterprise categories. Organize terms alphabetically for better accessibility. Ensure clear definitions and consider proofreading. Manage entries with edit/delete options, and use bulk import for efficiency.

### Content Consistency: Importing Glossary Terms

Prepare a CSV file with glossary terms and definitions, using either a downloaded template (with or without sample data) or creating one. Use software like Excel or Google Docs for editing. Navigate to Content tools > Content reuse > Glossary, click Import terms, upload your CSV, and wait for validation. Address any errors (e.g., duplicate terms or long definitions) by downloading the error log, then import valid terms to streamline glossary management and save time.

### Content Consistency: Glossary Management

(No data provided, unable to generate a concise summary.)

### Content Consistency: Editing Glossary Terms

Edit glossary terms in Document360 by navigating to Content reuse > Glossary. Hover over a term, click "Edit". Update term/definition, translate to desired languages (via "Translate" or "Translate again"). Remove translations with "Remove language". Save changes with "Update". Global glossaries can be translated.

### Content Consistency: Using Glossary Terms in Articles

- **Glossary terms** enhance reader understanding by providing instant definitions when hovering over them. They are marked with a dotted underline.

- **Markdown Editor**:

- Use the Glossary icon in the toolbar to select and insert terms.
- Alternatively, use Markdown syntax `{{glossary.Term_name}}`, ensuring exact case matching.

- **WYSIWYG Editor**:

- Click the Glossary option in the toolbar to select and insert terms.

- **Advanced WYSIWYG Editor**:

- Access via the Insert menu, select terms, and insert merge codes like `{{glossary.Term_name}}`.
- Preview required to see rendered glossary terms.

- **Key Notes**:
- Terms are case-sensitive and must match exactly.
- Preview in Advanced WYSIWYG to view rendered terms.

### Content Consistency: Deleting Glossary Terms

Delete glossary terms individually (hover/click) or in bulk (select/click). Check for dependencies; manually remove from articles before deleting from glossary to avoid data loss. View references in the glossary before deleting, then open and manually remove the term to prevent content loss in associated articles.

### Localization: Translating Glossaries

Create and manage glossaries in multiple languages to ensure consistency and localization. Navigate to the glossary section, create a new one, select the language, enter terms and content, translate into other languages, and save. The default language is marked as Main, and completed translations are indicated with a green tick.

### User Feedback: Feedback Manager

Document360's Feedback manager is a content tool to track, evaluate, and respond to user feedback on knowledge base articles. It aims to address user concerns and improve content quality. No specific features or functionalities are detailed in the provided text beyond this general purpose.

### Content Consistency: Glossary Landing Page

Learn how to add a glossary overview page link to your Knowledge Base site's header, footer, or secondary navigation. Use the URL `https://yourdomain/docs/glossary-overview` (replace `<yourdomain>` with your site domain) to direct users to the glossary. Follow step-by-step instructions to customize your site and improve accessibility to the glossary terms.

### Content Consistency: Exporting Glossary Terms

To export glossary terms, navigate to **Documentation > Content tools > Content reuse > Glossary**, select a language, click **Export CSV**, and wait for the download. The CSV includes Glossary Name, Definition, Dependencies, Updated By, and Updated On.

### User Feedback: Managing No Search Results Feedback

The "No search results feedback" tab allows users to report searches that yielded no results. Review user queries, understand the context, assign tasks, and take action (create/update content, add relevant keywords). Track progress using status updates, and notify users of replies. This improves search experience and fills content gaps.

### User Feedback: Feedback Manager Overview

The Feedback manager in Document360 helps users gather and analyze reader feedback to improve content quality. It is accessed via **Documentation > Content tools > Documentation > Feedback manager**.

The tool features two tabs:

- **Article feedback tab**: Collects reader ratings (Yes/No) and comments on specific articles, aiding in content evaluation and improvement.
- **No search results feedback tab**: Captures feedback from users who couldn't find information, highlighting content gaps and areas to enhance search functionality.

### User Feedback: Managing Article Feedback

The Article feedback tab allows you to handle user feedback on knowledge base articles. Readers can rate articles as helpful or not, provide comments, and choose to be notified of updates. You can respond by reviewing feedback, opening the related article, assigning tasks, discussing with the team, and updating the feedback status (Open, Planned, In Progress, Complete, Closed). Enabling the notify toggle automatically closes feedback.

### Site Customization: Custom Pages

Document360's "Custom pages" feature lets users create standalone pages (separate from articles) for their knowledge base, useful for policies, terms, etc. Customization, multilingual support, and navigation options are available. Only KB site 2.0 projects can use this feature.

### User Feedback: Feedback Management Features

- **Filters, bulk actions, and CSV export**: Manage feedback efficiently with filtering options, apply bulk updates, and export data (up to 90 days) for analysis.
- **Status clarification**: "Complete" allows reopening, while "Closed" signifies all actions are resolved and cannot be reopened.

To create a custom page, users with Draft Writer or Editor roles can navigate to Documentation > Content Tools > Custom Pages, click Create Page, enter details, and use the editor to add and format content. Set SEO details, collaborate via comments, and publish when ready.

### Site Customization: Managing Custom Pages

Manage custom pages via the "Content tools" > "Custom Pages" list. Edit pages by selecting and clicking "Edit", making changes, and saving/publishing. Delete pages by selecting and clicking "Delete", confirming, viewing dependencies, and clicking "Delete" again. Clone pages by selecting and clicking "Clone". Clones are prefixed with "Clone -". Deleted pages cannot be restored.

### Site Customization: Custom Pages - Usage

Custom pages can be added to a knowledge base site's header or footer for easy access. Up to 5 custom pages are initially available per project. Access can be restricted by user role, but deleted pages are unrecoverable.

### Localization: Multilingual Custom Pages

Translate custom pages into multiple languages by selecting a language from the dropdown, viewing translation details, and clicking to translate.

### Content Organization: Understanding Tags

**Tags:** Simple labels (letters, numbers, words, phrases) describing content (articles, categories, files). Example: "Installation" tag for a software installation article. **Benefits:** Improved navigation, grouping similar content, better keyword searches, and increased visibility on external search engines. **Best Practices:** Concise tags, broad category terms, consistent naming (no spelling errors), avoid overusing/irrelevant tags. AI tool available for tag recommendation.

### Content Organization: Tag FAQs

Document360 allows multiple tags per article/file for better content grouping and search. Tags improve search results. There's a limit of 1000 tags per project, but no limit on tags per item. Bulk tag import is not currently supported.

### Content Organization: Tag Support by Plan

In Document360, the Professional plan offers basic tag support, the Business plan provides advanced tag management, and the Enterprise plan includes premium tag features with enhanced customization and analytics.

### Content Organization: Managing Tags - Features

Manage project tags by creating, searching, viewing creation info (creator, date), and examining dependencies (Articles, Page category, Files). Edit, move, merge, or remove tag references. Export tags to CSV; filtering available by associations, creation date, and creator. **Cannot delete a tag with dependencies (Articles, Page category, Files).** Remove dependencies first.

### Content Organization: Creating Tags

Document360 team accounts can use tags to organize articles, pages, and files for better content management and improved search. AI tag recommendations assist in suggesting or creating relevant tags for efficient content classification.

### Content Organization: Managing Tags - Overview

The **Manage tags** page in Document360 is the central hub for managing tags. It allows assigning tags to articles, category pages, and files, as well as organizing tag groups to consolidate related tags and view their dependencies. Access the page via **Documentation** > **Content tools** > **Documentation** > **Tags**.

### Content Organization: Adding Tags - Methods

Four methods exist to add tags to the knowledge base project: 1) Manage Tags overview page (creating new); 2) Documentation editor; 3) Drive file tagging; 4) All articles page. Each method has specific steps, utilizing a dropdown/search to select or create tags.

### Content Organization: Managing Tags - FAQs

- **Tag Management**: All tag-related actions are managed through the **Manage tags** overview page, accessible under _Content tools_ > _Documentation_ > _Tags_.
- **Viewing Tags**: The page displays all tags and allows viewing of associated articles or files by clicking on the reference numbers.
- **Editing Tags**: Users can edit or delete tags directly from the Manage tags page.
- **Merging Tags**: Similar tags can be merged using the **Merge tags** option.
- **Managing Dependencies**: Dependencies can be removed individually or in bulk using the **Remove dependencies** option.

### Content Organization: Tag Naming Guidelines

Tag names can contain uppercase, lowercase, numbers, spaces, and select special characters (\_ + - @ # % ^ & ! ()). **Forbidden** characters include: \ / : \* ? " < > |.

### Content Organization: Tag Groups Overview

Document360's tag groups help organize related tags (e.g., articles, page categories, files in Drive), making large tag libraries easier to manage by showing tag relationships and dependencies.

### Content Organization: Tag Limitations

Document360 tags: Up to 1,000 tags per project. Tag names max 30 characters; descriptions max 100. Descriptions appear as tooltips on hover in the portal/site and below titles on the Tags page.

### Content Organization: Using Tag Groups

Two ways to add tags to groups: 1) Assign a tag to a group when creating it. 2) Select tags and move them to a group within the tag library.

### Content Organization: Deleting Tag Groups

Deleting a tag group permanently removes the group and all its tags from the project, severing links to associated articles, page categories, and files. Tags cannot be added to articles; tag groups are for organizing tags only.

### Content Organization: Managing Tag Dependencies

Tag dependencies allow tracking and managing where tags are applied to various project elements (articles, categories, files) for efficient tag usage and cleanup.

### Content Organization: Creating Tag Groups

To create a tag group, follow these steps:

1. Log in to the **Knowledge base portal** and select the **Documentation** tab from the left sidebar.
2. Navigate to **Content tools > Documentation > Tags**.
3. Under the **Groups** tab, click **Create group**.
4. Enter the **Tag group name** and **description**, then click **Create**.

This process allows you to organize tags effectively for easy content management.

### Content Management: Find and Replace

Find-and-replace tool allows searching and replacing keywords/phrases (words, numbers) across articles and categorized pages within a project. Replaces can include words, numbers, and selected characters.

To view tag dependencies, navigate to **Documentation** > **Content** Tools > **Documentation** > **Tags**. Click on the number in the **Articles**, **Page Categories**, or **Files in Drive** columns to open the **Tag Dependencies** window, which displays detailed usage information.

### Content Organization: Viewing Tag Dependencies

To view tag dependencies,

1. Navigate to **Documentation** > **Content tools** > **Documentation** > **Tags**.
2. Click the number under the **Articles**, **Page category**, or **Files in drive** columns to open the **Tag dependencies** window.
3. Review the detailed information about the selected tag's usage in the **Tag dependencies** window.

##### Tag Dependency Information

- **For articles**: Article title, status, workspace, language, creator, and creation date.
- **For page categories**: Page category title, status, workspace, language, creator, and creation date.
- **For files**: File name.

### Content Organization: Removing Tag Dependencies

To remove tag dependencies, follow these steps:

- Select the desired items (articles, page categories, or files) using checkboxes.
- Click "Remove dependencies" to delete the tag from the selected items.
- For bulk removal, click "Select all" before clicking "Remove dependencies."

This process efficiently manages tag associations, ensuring accuracy and simplicity.

### Content Management: Using Find and Replace

To find and replace text in articles/categories, access the "Content tools" > "Documentation" > "Find and replace" section. Enter the text to find (and optionally use filters) and enter replacement text. Select articles to be updated and choose publish/draft status. Click "Replace" to implement changes. Precise control by whole-word matching, as well as advanced filtering like workspace, language, and status are available.

### Content Optimization: Managing SEO Descriptions

SEO descriptions can be added to individual articles or generated for multiple articles/categories using the Content tools SEO description tool. Settings vary by plan (Professional, Business, Enterprise).

### Content Optimization: Generating SEO Descriptions

Generate SEO descriptions for knowledge base articles via the portal's Content tools > Documentation > SEO description section. Select articles; click "Ask Eddy AI." Review and save generated descriptions (adjusting as needed). Descriptions should be concise (155-160 chars), keyword-rich, align with user intent, and actionable. Filters for selecting articles based on various criteria (e.g., category, contributor) are available. Best practices for titles (50-60 chars) include relevant keywords, engaging language. Individual article descriptions can be generated via alternative editor tools.

### Content Management: Find and Replace Within Editor

The Find and replace tool in the editor allows users to locate and modify text within a specific article. Access it via the icon in the editor; it operates only on the current article.

### Content Management: Find and Replace FAQs

- **Find and replace** is available only to team accounts with the **Editor** content role or custom roles with **Perform Find and replace** permission.
- Replace can be done with an empty **Replace with** field; the found text will be removed.
- Markdown/HTML syntax in the editor is not affected; only the visible text is replaced.
- Search results exclude articles in the **Recycle Bin**.
- Up to 1000 articles can be edited per replacement event.

### Content Export: Downloading Project ZIP

To download the Document360 project ZIP, navigate to "Import & Export project," find the latest exported file under "Recent files," and click "Download" or "Copy link".

### Content Export: Project Export API

Business/Enterprise plan-only API endpoint for exporting Document360 project content. Limited to 2 exports per day. Overwrites previous downloads. Markdown (.md) articles, WYSIWYG (.html) articles, or JSON for multi-language exports.

### Content Export: Exporting a Project

To export a Document360 project as a ZIP file, navigate to **Documentation ()** > **Content tools** > **Import & Export** > **Import & Export project**, then:

- Click **Export**
- Choose articles by modification date (All, 7/30/90 days, or Custom)
- Select workspaces, languages, and categories
- Include media files as needed
- Click **Export** and wait for completion notified via popup

The exported ZIP includes selected content, with media optionally added. Export times vary based on content size, allowing background task handling. Project contents are downloadable upon completion.

### Content Export: Project Export as ZIP

Document360 allows you to export your project as a ZIP file, including articles, category pages, and optional media files. The ZIP can be imported into another Document360 project. The table detailing supported plans is empty, so plan-specific capabilities may need confirmation.

### Content Import: Importing a Project ZIP

Import Document360 project ZIP files into the Knowledge Base portal. Matching workspace slugs merge data; differing slugs create a new workspace. To avoid conflicts, modify the workspace slug in the project ZIP file before importing. Verify supported features, file formats, and destination workspace before importing. Check FAQs for common errors like unsupported features or mismatched slugs. Maximum file size is 1GB. Only Document360 project ZIP files are supported.

### Content Migration: Migrating from Other Platforms

Document360 offers migration support across Professional, Business, and Enterprise plans for over 100+ knowledge base platforms, including Zendesk, Freshdesk, and more. Initiate a migration request via a website form (or within Document360) by providing the URL of your current knowledge base and the platform. Document360's experts will handle the migration.

### Content Migration: Migration Process

Document360 migration involves three steps: 1) expert consultation & estimate, 2) automated & manual knowledge base transfer, and 3) thorough quality assurance, including SEO-friendly redirect rule setup. Redirect rules are crucial to maintain user experience and SEO (search engine optimization) by ensuring old URLs redirect to the new Document360 platform. Failure to implement redirects results in broken links, 404 errors, and diminished search rankings.

### Content Import: Importing Project ZIP Files

The Document360 project ZIP file import feature is supported across Professional, Business, and Enterprise plans. It allows migration between projects or restoration from backups, importing articles, category pages, and media. Requires Editor role or custom role with Update and Publish access.

### Content Export: PDF Templates Overview

Users access PDF templates via Knowledge base portal's **Content tools > Import & Export > Export to PDF**. Viewable templates are listed, sortable by date, and include system & custom templates. Actions include cloning, editing, deleting (with confirmation). A dedicated button creates new templates. Default templates cannot be deleted, and only one available template makes it the default.

### Content Export: Creating PDF Templates

Create new PDF templates with customizable options: name, layout, margins, cover page (title, description, logo, image), terms & conditions (existing/custom), table of contents (includes headings), watermark (text/image), header/footer images & text, page numbers, and text formatting (font, size, color). Character limits, image sizes, and alignment options vary.

### Content Export: Setting Default PDF Templates

Any PDF template can be set as default, automatically used for exports without selection. Click "Set as default" before saving. Default templates cannot be deleted.

### Content Export: PDF Template Design

PDF templates (previously "Design templates") define the design, styling, and formatting for exported PDFs, ensuring brand consistency. Available across Professional, Business, and Enterprise plans, templates can be selected or created during the PDF export process.

### Content Export: Exporting to PDF

All plans support exporting content to customized PDF documents. PDFs can be named, templated, and password-protected.

### Content Export: Managing Exported PDFs

Exported PDFs can be downloaded, regenerated, cloned, edited, details viewed, and deleted. Sharing draft articles and exporting SVG images are addressed. A known limitation exists with SVG rendering in PDFs due to the SelectPDF plugin, and workarounds are provided (convert to PNG/JPG).

### Content Export: PDF Template FAQs

PDF templates offer customizable layouts for creating professional PDF documents, saving time and effort while ensuring visual appeal and branding consistency. They can be tailored to specific needs and content. The knowledge base platform allows users to manage content creation, categories, articles, templates, files, team accounts, and site settings, including branding, domain, and security.

### Analytics: Overview

Document360 offers various analytics (article, search, reader, team, feedback, links, page not found, Eddy AI, ticket deflection) categorized by Professional, Business, and Enterprise plans. Analytics data is specific to the active workspace and language, and presented in UTC time. Professional plan features are limited. Business and Enterprise plans include more analytics options.

### Content Export: Exporting to PDF - Process

To export published articles and category pages to PDF:

1. Navigate to **Documentation** > **Content tools** > **Import & Export** > **Export to PDF**.
2. Only published content is available for export.
3. Click **Create new PDF** and enter a name, optional password, and select a template, workspace, and language.
4. Preview the template and select categories/articles to include.
5. Click **Export** and await completion (status: _Success_).

### Analytics: Accessing Article Analytics

Access knowledge base article analytics by navigating to the Analytics > Articles section. Data shows article views, reads, likes, and dislikes, filtered by date range, user type (Team accounts or readers), and JWT authentication. Metrics distinguish between simple views and user engagement (reads). Location- and category-based analytics are also available. Data, potentially including deleted articles, is presented graphically and in lists; export options exist. Detailed FAQs clarify factors influencing data presentation and user roles.

### AI Integration: Accessing Eddy AI Search Analytics

Use Eddy AI's analytics dashboard to track knowledge base search performance (conversations, answered/unanswered queries, conversation depth, popular/unanswered queries, referenced articles). Filter data by date. Address unanswered queries to improve search accuracy. Data aggregation occurs across multiple chatbots/widgets/languages but some metrics are language-specific.

### Analytics: Understanding Article Analytics

**Plans supporting article analytics**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              |          | ✓          |

Document360's Articles analytics provides insights into article performance, including user engagement, geographic distribution, and top-performing content, helping improve your Knowledge Base with data-driven decisions.

### Analytics: Search Analytics

Search analytics tracks user search behavior to optimize content and identify documentation gaps, monitoring search trends, successful queries, and no-result searches to enhance user experience.

### AI Integration: Eddy AI Search Analytics Overview

Eddy AI search analytics offers insights into AI search performance, supporting Professional, Business, and Enterprise plans. It provides metrics like unanswered searches, visualizations, and supports multiple languages. Conversational metrics require KB site 2.0.

### Analytics: Search Analytics - User Feedback

Users can provide feedback on search terms that don't return results. Analyzing "no results found" searches helps identify knowledge base content gaps and optimize the site for user needs. Understanding popular search terms ensures relevant content creation aligning with user queries. "Bounced search" refers to searches with no result clicks.

### Analytics: Accessing Reader Analytics

Access reader analytics from the Knowledge base portal's Analytics > Reader page. Filter by date, reader type (self-registered, SSO, JWT, invited), and knowledge base/widget analytics. Data includes total readers, self-registered readers, frequent readers, and detailed reader information (views, reads, likes, dislikes, articles accessed, last login). View individual reader contributions filtered by date and article. Export data as CSV. Data refresh can take up to 15 minutes.

### Analytics: Accessing Search Analytics

_No summary available for this section._

### Analytics: Reader Analytics Overview

The Reader analytics tool provides insights into reader activity for Private or Mixed access projects, enabling tracking of user engagement to optimize content strategy.

### Analytics: Team Accounts Analytics

This page provides detailed analytics on team members' account types, content access/creation, contributions, and last logins.

### Analytics: Accessing Feedback Analytics

Access Feedback analytics in the Knowledge base portal's Analytics section. Filter data (date, widget type, JWT). Analyze metrics (article feedback, likes, dislikes, comments) via graphs and tables. View specific articles, feedback, and export data as CSV. Important: Only feedback with comments are included. Data refresh can take up to 15 minutes.

### Analytics: Understanding Feedback Analytics

Feedback analytics allows tracking of total comments, likes, and dislikes for articles or pages, with data visualized in charts and graphs. The features are supported across all plans, including Professional, Business, and Enterprise.

The Team accounts analytics page is accessed via the Knowledge base portal under the Analytics section. Users can filter data by date ranges, with updates taking up to 15 minutes. The page displays metric tiles for total team accounts, articles published, and top performers. Clicking on a team account provides detailed contribution metrics and article performance. Data can be exported as CSV for further analysis.

### Analytics: Viewing Team Account Analytics

To view Team accounts analytics, navigate to the Analytics section in the Knowledge base portal and select Team accounts. Use date filters to customize the data range, noting a 15-minute delay for updates. The page features three metric tiles and detailed contribution data, accessible by clicking on team accounts. Export options are available for both overall and individual data, enabling efficient analysis and reporting.

### Analytics: Accessing Link Status Analytics

To access Link status analytics, navigate to the "Analytics" section of the Knowledge base portal and select "Link status". Visual aid available.

### Analytics: Link Status Overview

Document360's knowledge base link status overview page displays internal and external links, classifying them by status (working, broken, redirect, ignored). A detailed list shows article name, link type, URL, status, and filtering options. Broken links display 404 errors or broken image thumbnails. Users can filter, export (CSV), and identify articles with deleted links. This page tracks and reports on all links within a workspace, ensuring knowledge base links are functional and accurate.

### Analytics: Understanding Link Status Analytics

Document360's "Links status analytics" is a broken link checker under the Analytics section. It validates internal, external, and media links, offering scheduled, manual, and article-level validations to improve SEO and user experience.

### Analytics: Managing Links

Manage links by searching, filtering by type/dependency/status (included/ignored). Add/remove links to ignore/include lists via checkboxes/dropdown or button. Export links as .csv.

### Analytics: Link Validation Methods

Link validation can be performed in three ways:

1. **Scheduled Validation**: Automatically runs based on plan tier; access via Analytics > Links status > Scheduled validation.
2. **Manual Validation**: On-demand; accessible via Analytics > Links status > Manual validation > Validate links (note 24-hour report generation and overwrite behavior).
3. **Article-Level Validation**: Unlimited checks performed from the article editor via More > Analytics > Validate now.

Key notes: Manual validation requires permission and overwrites previous reports within 24 hours; article-level validation is done per article.

### Analytics: Troubleshooting Link Validation

Document360's link validation has a 5-second timeout. If links appear broken but work in a browser, use Postman to check the HTTP response (200 is good). Error codes like 404, 500, or 502 can indicate true link problems. If issues persist, contact support. Links can be excluded from validation for cases like placeholders, and validation limits exist.

### Analytics: Link Status - Actions

- **Validation types**: Scheduled (weekly), Manual, and Article-level.
- **Report date**: Displays generated report dates with tooltips for upcoming scheduled validations.
- **Manage links**: Button opens a window showing all links, including ignored or included ones.
- **Validate links**: Initiates manual validation with a confirmation prompt about remaining validations.
- **Manual validation usage**: Shows remaining manual validations (resets monthly) for internal and external links.
- **Link analytics usage**: Displays used links vs. limit (Business: 5000, Enterprise: 10000).
- **Limit exceeded**: If links exceed the limit, only up to the limit are validated; contact support to increase capacity.

### Analytics: Ticket Deflector Analytics - Sections

The Ticket Deflector tab provides performance analysis of the form and knowledge base. It includes: 1) **Satisfaction Analysis:** Shows form submissions and knowledge base answers, interactable graphs. 2) **Frequently Selected Questions:** Top 5 most frequent questions from the form. 3) **Satisfaction Summary:** Pie chart of form submissions vs. knowledge base answers. 4) **Most Useful Articles:** Top articles resolving user queries, showing count of answered questions. 5) **Keywords:** Shows keywords, search counts, and whether answers were found, exportable as CSV. 6) **Search Success Rate:** Percentage of successful vs. unsuccessful searches, visualized in a graph. All sections allow image exports for data visualization.

### Analytics: Accessing Ticket Deflector Analytics

_No summary available for this section._

### Analytics: Ticket Deflector Analytics Overview

Analyzes key metrics for ticket deflector forms in Knowledge base sites/widgets, with support across Professional, Business, and Enterprise plans (table currently empty).

### API Documentation: Generating API Docs

Document360 supports API documentation generation from URLs, JSON/YAML files, or via a CI/CD flow. Users select the source, input the API specification (URL or file path), provide an API token (for CI/CD), and click "Publish" to generate documentation. CI/CD requires Node.js and installing `d360` npm package. Review drafts are possible before publishing.

### Analytics: Ticket Deflector - Feedback Tab

The Feedback tab displays user feedback on ticket deflector forms, labeled by source (e.g., Form Submitted, Answered from Knowledge Base) with timestamps. Users can view feedback content by clicking on an entry. The FAQs explain that a ticket deflector reduces support tickets by suggesting knowledge base articles based on user queries. The 'Answered from Knowledge Base' metric tracks resolved queries without ticket submission. Effectiveness can be improved by maintaining an up-to-date knowledge base, using relevant keywords, reviewing frequently selected questions, and analyzing the Search Success Rate, which measures the percentage of successful searches returning relevant articles. A chart legend explains data series differentiation.

### API Documentation: Regenerating API Docs

Document360 API docs can be automatically regenerated from updated API specifications (URLs, JSON/YAML files). Custom content is preserved. CI/CD integration using d360 npm packages is recommended for automated updates. Manual regeneration is possible via the web UI or command line. Draft saving and article relocation are restricted.

### API Documentation: API Doc Management

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
| ✓            | ✓        | ✓          |

Document360 offers API documentation generation across all plans, enabling users to create interactive and detailed API docs by uploading specification files, covering endpoints, methods, and responses.

### API Documentation: d360 npm Package Links

- [**d360 npm package link**](https://www.npmjs.com/package/d360)
- [**Source code**](https://github.com/document360/d360)

The d360 npm package offers an API (Application Programming Interface) which facilitates communication between software applications. The package and its source code are accessible via the provided links.

### Widgets: Managing Widgets

Manage your Knowledge Base widget in Document360 with options to edit, clone, or delete it. The table below indicates which plans support this feature (belum terisi). For the latest details on plan-specific features, refer to the official documentation.

| Professional    | Business        | Enterprise      |
| --------------- | --------------- | --------------- |
| \[Plan details] | \[Plan details] | \[Plan details] |

### Widgets: Editing Widgets

To edit a Knowledge base Widget, navigate to it in the Knowledge base portal, hover over it, click "Edit", update configurations in the "Configure & connect" tab, and click "Save."

### Widgets: Deleting Widgets

To delete a knowledge base widget, navigate to the widget in the knowledge base portal, hover over the desired widget, click "Delete," confirm the action in the prompt, then click "Yes".

### Widgets: Widget Management Overview

The document describes managing and customizing a knowledge base widget, but crucial information like which plans support the widget (Professional, Business, Enterprise) is missing from the table.

### Widgets: Customizing Widgets

Customize the knowledge base widget's appearance and behavior by changing its color, icon, position (left/right, spacing), hiding the widget itself, or hiding the most searched articles. Access widget customization options through the 'Configure & connect' and 'Style widget' sections, selecting 'Edit', and clicking 'Save'. Color changes also update the icon color. Icons can be replaced with images or other icons. Hiding frequently searched articles disables URL mapping functionality.

### Widgets: Adding Ticket Deflectors

To add a ticket deflector to a knowledge base widget, enable the "Show ticket deflector" toggle in the widget's configuration, select the desired deflector, and save changes. This adds a ticket deflector to the knowledge base widget. Requires logging into the Knowledge base portal, selecting a project, and navigating to the widget's configuration page.

### Widgets: Domain Restriction

Restrict Knowledge Base Widget to specific domains. Add desired domains to "Widget security" list in widget settings. Widget accessible on any domain if no domains are specified. "www" is excluded from domain input; only the suffix is required (e.g., document360.com).

### Widgets: Cloning Widgets

1. Navigate to the **Knowledge base Widget** section in the portal.
2. Hover over the desired widget and click the **Clone** button.
3. Provide a title and update configurations in the **Configure & connect** tab.
4. Click **Save** to complete the cloning process.

![2_KBWidget_clone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_KBWidget_clone.png) ![5_KBWidget_confirmclone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_KBWidget_confirmclone.png)

### Widgets: Adding Custom Links

Add custom links (e.g., downloads, contact) to your Knowledge Base Widget. Navigate to "Widget Settings", add the link title, display text, URL, and optional icon in "Add Custom Links" section. Edit or delete links using the respective sections. Use `mailto:` for email links.

### Widgets: URL Mapping

URL Mapping lets you customize the knowledge base widget's display based on user location (URLs). This includes showing/hiding the widget and customizing search bar placeholders. Configurations are possible per user role (Professional, Business, Enterprise).

The documentation explains how to control content visibility in the Knowledge Base widget through options like Project, Workspace, and Category. Here's how to do it:

1. **Edit the Widget**: Navigate to the Knowledge Base widget, hover over it, and click Edit.

2. **Content Access Options**:

- **Project**: Shows all articles in the Knowledge Base.
- **Workspace**: Select specific workspaces or languages to display.
- **Category**: Choose specific categories from one or multiple workspaces.

3. **Considerations**:

- **URL Mappings**: Changes to content access can disable existing URL mappings if the articles are no longer accessible.
- **Autosave**: Navigating between tabs saves changes automatically.

By carefully selecting these options, you can tailor the widget's content while being mindful of its impact on URL configurations.

### Widgets: JWT Authentication

Enable JWT authentication for the widget by navigating to the Knowledge Base portal, configuring client ID, widget ID, token endpoint, and client secret. Embed the authorization URL in your code and implement an auth endpoint to handle token requests, ensuring reader group IDs are included for proper widget rendering. Troubleshoot issues like category visibility and widget loading by checking permissions and API keys.

### Widgets: Configuring URL Mapping

Configure URL mapping to control the Knowledge Base widget's behavior on specific URLs via four actions: showing an article, listing articles, displaying search results, or hiding the widget. Requires the Knowledge Base widget to be installed. Supports path, query, and hash URL parameters, with optional regex for advanced matching.

### Widgets: Deleting URL Mappings

To delete a URL mapping in a Knowledge base widget, navigate to the widget, click "Edit," find the URL mapping, click "Delete," and confirm the action.

To edit a URL mapping, follow these steps:

1. Navigate to the **Widget** section in the Knowledge base portal.
2. Hover over the desired Knowledge base widget and click the **Edit** icon.
3. In the **URL mapping** tab, locate the mapping you wish to modify.
4. Hover over the target URL mapping and click the **Edit** icon.
5. Make the necessary changes in the **Update URL mapping** blade.
6. Click **Update** to save your modifications.

This process will allow you to update the URL mapping efficiently within the portal interface.

### Widgets: Adding URL Mappings

To integrate a widget into your knowledge base, follow these concise steps:

1. Navigate to the **URL Mapping** tab in the **Widget** section of the portal.
2. Click **New URL mapping** and specify:

- **Name**: Internal label.
- **URL structure**: Choose from path, query, or hash.
- **URL**: Exclude domain (e.g., `/ebook/...`).
- **Action**: Select desired behavior.
- **Workspace**: Choose version if multiple exist.
- **Language**: Select if multiple languages are available.
- **Article**: Search and select page/index categories.

3. Click **Create**.

The widget will display the mapped content when the specified URL is accessed, maintaining consistency across tabs within the same version and language.

### Widgets: URL Matching with Regex

This document explains how to use regular expressions (regex) to match various URL components (protocol, domain, path, query parameters, fragment). Examples show matching specific paths, query parameters, optional parameters, and wildcards. Regex patterns for subdomains and complete URLs are given. Crucially, understanding URL matching is essential for effective URL mapping in web applications, allowing dynamic extraction of information from URLs.

### Widgets: URL Mapping Settings

Configure URL mapping behavior for unmapped URLs in the Knowledge base widget: Navigate to Widget > Configure & connect, expand URL mapping settings, choose to either display the page help/knowledge base or retain the last opened article, and save.

### Widgets: Advanced Customization

Customize the knowledge base widget's appearance and behavior using CSS/JavaScript. Methods include modifying the icon, buttons, implementing show/hide callbacks, and customizing styling and localization to match your branding or functionality needs.

### Widgets: Customizing the Widget Icon

Create a custom button, add JavaScript callbacks to control its visibility based on Knowledge Base widget load status and URL mappings. Integrate these callbacks into the widget's JavaScript snippet. Use JavaScript to make the button open the widget on click. Customize the button's appearance with CSS. Key details include custom button HTML, CSS, JavaScript for callbacks, and integrating them into the widget config.

### Widgets: Customizing Dark Theme

**Method:** Custom CSS. **Target:** Knowledge Base Widget. **Action:** Modify Custom CSS to change background and text colors of the widget's modal and its elements (divs, paragraphs, buttons) to black and white, respectively. The feedback button's hover style and background also modified.

### Widgets: Customizing Displayed Fields

Customize knowledge base widget text by modifying HTML with JavaScript. Replace "Page help", "Knowledge base", "Top search articles" etc., with localized alternatives in the widget's tabs & search area. Use `$(document).ready` to execute JavaScript after page load. Replace placeholder text via jQuery. Save settings after updating.

To remove the Page help and Search bar from the widget when URL mapping for a single article is configured, follow these steps:

1. **Access the Widget Editor**: Navigate to the Widget section in the Knowledge base portal and edit the desired widget.

2. **Add Custom CSS**: In the Custom CSS tab, add the following code to hide the Page help tab, back icon, and search container:

```css
li#page-help-tab {
  display: none;
}
.article-header .article-back-icon {
  display: none;
}
.search-container {
  display: none !important;
}
```

3. **Add Custom JavaScript**: In the Custom JavaScript tab, add the following code to ensure the search container is hidden after a delay and to handle any dynamic loading:

```javascript
setTimeout(function () {
  $('.search-container').hide();
}, 2000);
setTimeout(function () {
  $('#knowledge-base-tab').click();
}, 2000);
```

4. **Save Changes**: Click Save to apply the changes.

5. **Cache Considerations**: Note that changes may take up to 15 minutes to appear due to caching. For immediate updates, clear the application cache.

This approach combines CSS for styling and JavaScript for dynamic adjustments, ensuring the elements are hidden as intended.

### Widgets: Auto-Opening the Widget

To automatically open the Knowledge Base widget, add custom JavaScript to the widget's settings. The script simulates a button click after a 2-second delay, ensuring the page fully loads before opening.

### Site Customization: Knowledge Base Site 2.0

Knowledge Base Site 2.0 offers an enhanced UI, AI-powered search, streamlined content, real-time updates, and interactive elements for better user experience. The migration guide from KB 1.0 to 2.0 is available [here](/help/docs/kb-site-20-migration).

### Site Customization: Knowledge Base Site 2.0 Overview

Knowledge base site 2.0 features a redesigned header with logo, workspace navigation, customizable primary/secondary navigation, announcements, acknowledgment requests, theme/language options, and search. The left pane offers search, navigation (tree view), article status, follow/export options. Article sections include breadcrumbs, title, links, status, date, contributors, sharing, summary, and acknowledgment. Image viewers support zooming, downloading, and navigating. A right pane displays attachments, tags, and a table of contents feature. Footer sections enable feedback, navigation to related/previous/next articles. Improvements include Eddy AI search and summarization.

### Site Customization: Customizing the Site

Document360's "Customize site" feature lets users tailor their Knowledge Base site's appearance (themes, colors, layouts) to match their brand and enhance user experience. This project-level setting affects the entire project. KB Site 2.0 supports customization with accessibility features; migration from KB Site 1.0 is required.

### Widgets: FAQs

The Knowledge Base widget is a tool that allows users to find answers within your app or site, supporting up to 10 configurations. It helps with onboarding, troubleshooting, and learning new features. Key features include customizable positions, the ability to hide the top search, URL mapping with regex support, custom links, ticket deflector, domain restriction, and default language detection. Available on Enterprise plans, it enhances user experience by providing in-app assistance and efficient content access.

### Troubleshooting: Common Issues and Solutions

- **Website Fails to Load**: Check URL, clear browser cache, disable VPN, and verify system date/time.
- **504 Gateway Timeout**: Review server configuration changes and revert Sub-folder Configuration if necessary.
- **Page Unresponsive While Editing**: Clear cache, reduce article length, and fix unclosed HTML tags.
- **Too Many Redirects**: Correct JWT Login URL and remove domain URL from configuration.
- **Project Not Found**: Ensure CNAME record is correct and verified.
- **/home/error/ Message**: Contact support with HAR file and console errors.
- **Icons Not Rendering**: Check FontAwesome settings in custom CSS.
- **Site Without CSS**: Whitelist Document360 domains.
- **Secure Connection Issues**: Verify CAA records and update DNS settings.
- **ResourceNotFound & AuthenticationFailed Errors**: Ensure SaaS tokens are added and not expired.

### Site Customization: Advanced Customization

Centralized customization of Knowledge Base site. Customize branding (logo, favicon), header/footer, homepage, login, error pages, and CSS/JavaScript. Uses a preview feature for interactive changes. Options for light/dark themes, favicon uploads/URLs, logo changes (images or text), logo URLs, custom CSS/JavaScript for advanced styling. Specific FAQs address theme settings, favicon issues, logo customization (different logos for different themes), font selection (article and site font), button styles, and site layout. Clear instructions and visual aids (GIF) are provided.

### Site Migration: Migrating to KB Site 2.0

KB Site 2.0, a customizable knowledge base upgrade, offers enhanced features (following articles/categories, private sharing) and improved configuration options for various project tiers (Professional, Business, Enterprise). Projects created after June 10th, 2024 gain automatic access.

### Site Customization: Basic Customization

Customize your Knowledge Base site by navigating to Settings > Knowledge base site > Customize site. Choose from three themes (light, dark, or both) and brand your site with a logo, favicon, and custom logo redirect link. Automatically apply WCAG-compliant colors or manually adjust brand colors, hyperlink colors (with options to use standard, brand, or custom colors), and fonts for articles and the site. Select button styles (rounded, sharp, bubble) and site layout (full width or centered). Save changes to apply. Existing logos and favicons remain unchanged until updated in settings.

### Accessibility: WCAG Compliance

Document360 ensures accessibility by providing text alternatives for images/icons, enabling full keyboard navigation, and ensuring readable text with sufficient contrast and clear language.

### Site Customization: Customizing KB Site 2.0

Navigate to Settings > Knowledge Base Site > Customize Site to access the 2.0 preview. Choose to go live immediately (retaining 1.0 settings) or customize further (including headers, footers, and CSS/JavaScript). Preview changes before publishing, with a 30-day rollback option to revert to 1.0. Integrations remain intact during the switch.

### Accessibility: Understanding WCAG

_No summary available for this section._

### Accessibility: WCAG 2.1 Principles

WCAG 2.1 ensures web content is accessible to everyone. **Perceivable** content uses text alternatives for non-text, **Operable** interfaces are usable via keyboard, provide sufficient time, and include clear navigation. **Understandable** content is readable, with predictable operation. **Robust** content is compatible with various user agents (including assistive tech). This promotes a more inclusive web experience.

### Site Customization: Secondary Navigation

A secondary navigation header in Document360 allows customization with menus below the logo, providing quick access to frequently visited pages (e.g., Pricing, Documentation, Support). This improves user navigation, especially on large knowledge bases, enabling easy access to key information.

### Site Customization: Configuring Secondary Navigation

Customize your knowledge base's header secondary navigation by selecting Settings > Knowledge base site > Customize site. Create single-level, multi-level, or ticket-deflector menus from within the header settings, adding titles, links (hyperlinks, email, phone), and the ability to open in new tabs. Manage and reorder items, and optionally display this secondary navigation on the home page, before publishing changes.

### Site Customization: Primary Navigation

Document360's primary navigation header is the bar located next to the logo at the top of your site, enabling users to add menus for easy navigation between pages on the Home or Knowledge base site. This feature supports customization across different plans, with varying degrees of functionality depending on the plan (Professional, Business, Enterprise).

### Site Customization: Configuring Primary Navigation

To customize the primary navigation header in Document360, follow these key steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select **Site header & footer** from the left pane, then expand **Header** and choose **Primary navigation**.
3. Add up to 6 new items (types include Home, Custom URL, Call to action, RSS feed, Ticket deflector, Glossary, API documentation, and Custom page).
4. Customize colors, edit, delete, or reorder items using the left navigation options.
5. Preview changes, then save and publish to activate them.

**Notes:** Use custom CSS & JavaScript for advanced customization, such as adding social media icons or feedback links.

### Site Customization: Custom Footer Support

No plans for customization of the knowledge base site are detailed in the provided table. The table is empty for all listed tiers (Professional, Business, Enterprise).

### Site Customization: Creating Custom Footers

Customize your knowledge base site's footer via the Knowledge Base portal's settings. Choose a blank or themed custom footer, add HTML/CSS or external links, preview, save, and publish changes. Incorporating external files (like PDFs) also detailed in the steps.

### Site Customization: Footer Navigation Settings

To access footer navigation settings, navigate to **Settings** > **Knowledge base site** > **Customize site**, select **Header & Footer** > **Footer**, and choose between **Basic footer** or **Custom footer**. Preview changes before saving and publishing. The **Custom footer** allows HTML input for advanced customization.

### Site Customization: Footer Customization

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              |          |            |

- Added footer to knowledge base site.
- Up to six custom links on the left for essential resources (e.g., pricing, contact, free trial).
- Social media links on the right included to drive engagement.
- Available across Professional, Business, and Enterprise plans.

### Site Customization: Removing RSS Feeds

To remove the RSS feed from your Knowledge base site, navigate to Settings > Knowledge base site > Customize site, select Site header & footer, locate the RSS feed in the desired header/footer section, and click Delete. Note: Existing subscribers will still receive updates and a 404 error for the RSS feed might be seen if the project is private. Public project access is necessary for the feed to work.

### Site Features: RSS Feeds

RSS (Really Simple Syndication) is an XML-based format that provides automatic updates, enabling readers to stay informed about new or modified articles in a Knowledge Base. By integrating RSS feeds into the header or footer, subscribers can effortlessly stay updated. For instance, a software company can use RSS feeds to keep customers informed about product releases and bug fixes without manual checks, ensuring engagement and informed readers.

### Site Features: Adding RSS Feeds

Add RSS feeds to enhance your Knowledge Base's functionality by providing readers real-time updates accessible via various RSS tools.

- **Primary Navigation**:

- Navigate to the customization settings, select Primary Navigation, add a new RSS Feed item with a title, and choose to open in a new tab.

- **Secondary Navigation**:

- Similar process, but select Single Level, enter the RSS title, and paste the XML URL.

- **Footer**:

- Add via Basic Footer by including a new link, or use Custom Footer by embedding the XML URL directly into HTML.

- **Usage**: RSS Feeds allow readers to stay updated using browser extensions (like Feeder.co) or apps (Feedly, Inoreader). Readers can subscribe by accessing the XML file through the provided links.

### Site Customization: Home Page Customization

The Document360 knowledge base home page can be customized through the **Customize site** settings, offering various body blocks like rich text, image sections, and custom code. Users can choose from themes (Engage, Innovate, Learn, Default) and configure SEO with meta titles, descriptions, and featured images. The recommended hero image size is 1920x415 pixels. Customization includes reordering sections, previewing, and publishing changes. Themes are available on Professional, Business, or Enterprise plans.

### Site Structure: Main Pages

This document outlines the main pages of a Knowledge base site, with a focus on the Home page's customization features, including adding links, changing colors, and incorporating categories. It also presents a structured comparison table for Professional, Business, and Enterprise plans.

### Site Customization: Login Page Customization

Document360 knowledge base login page customization guide. Allows users to modify the login page's appearance (images, styles) and add extra elements (buttons, video loaders, search bars). Handles homepage and documentation page customization too. Emphasizes using HTML, CSS, and JavaScript for personalization.

### Site Customization: Hero Section

The Hero section of Document360's knowledge base homepage is a customizable, visually-prominent area. It allows companies to introduce their knowledge base with engaging text, buttons, and search. This creates a strong first impression and directs users to key resources, like a software company showcasing updates and navigation.

### Site Customization: Documentation Page

Customize the Documentation page by adjusting the search bar position (Left panel or Secondary Header) and applying a background color to the left navigation panel. Access settings through **Settings > Knowledge base site > Customize site**, select Documentation, make changes, preview, save, and publish to apply them live.

### Site Customization: Multicolumn Cards

Homepage section for showcasing features, "About," or "Contact." Columns have icons, titles, and descriptions to highlight key offerings. Visually appealing, allows for quick information access; useful for promoting software features (icon, title, description).

### Site Customization: Rich Text Blocks

Customize knowledge base home page with rich text blocks by adding headings and paragraphs with formatting options (colors, bold, italics, links). Follow steps: navigate to settings, customize site, add rich text block, edit heading/paragraph content, choose styles & alignment, reorder, and save. Markdown support and a delete option are also discussed.

### Site Customization: Configuring the Hero Section

- Navigate to **Settings** > **Knowledge base site** > **Customize site**.
- Select the **Home** page from the left dropdown to find the **Hero section** at the top.
- Configure the **Hero section** by setting the background (image, color, gradient, or pattern) and customizing elements like text, buttons, and search functionality.
- **Welcome text**, **Promo text**, **Buttons**, and **Search** can be edited or hidden as needed.
- After making changes, **Save**, **Preview**, and **Publish** to apply them.

### Site Customization: Adding Multicolumn Cards

To add multicolumn cards, customize your Knowledge Base site home page, add a multicolumn card section. Edit titles, icons (Document360 or Font Awesome), and descriptions for each column by clicking elements. Reorder, hide, and customize element appearance. Detailed steps are provided for deleting and using Font Awesome icons. Visual aids improve understanding of the process.

### Site Customization: Image with Text Blocks

The **Image with text** block allows combining visuals with text to enhance a knowledge base site's homepage, differing from the **Rich text** block by adding imagery. It's ideal for showcasing features or announcements, such as highlighting a new feature with its description.

### Site Customization: Adding Image and Text Blocks

Customize your knowledge base homepage by adding image and text blocks. Select "Image with text" block, upload or update the image, edit heading and paragraph text (format, align, color), save, and publish. Deletion instructions also provided.

### Site Customization: Adding Custom Code Sections

To add custom HTML/CSS to a knowledge base homepage: 1. Navigate to Customize Site. 2. Select the Home page. 3. Add a Custom Code Section. 4. Edit HTML/CSS. 5. Preview, Save, Publish. To delete, follow similar steps, selecting "Delete" then "Yes." The platform lets you manage content, files, and site settings.

### Site Customization: Custom Code Section Overview

Document360's **Custom code section** enables users to enhance their Knowledge base site by embedding custom HTML and CSS, ideal for adding visuals or interactive elements. For instance, it allows embedding dynamic banners or countdown timers for promotions, making it a versatile tool for site customization.

### Site Customization: Widgets Block

Widgets are embeddable blocks on the platform, placed below the header of the homepage. They serve various functionalities.

### Site Customization: Knowledge Base Categories Block

The **Knowledge base categories block** enhances a site's home page by displaying popular categories as cards, improving navigation and user experience. Ideal for managing documentation, it helps users quickly find relevant sections like "Getting Started" or "Troubleshooting Articles," reducing search time and boosting satisfaction.

### Site Customization: Adding Category Blocks

A step-by-step guide to adding and configuring a Knowledge Base Categories block on the home page of a Knowledge Base site:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select the **Home** page and click **Add section**, choosing **Knowledge base categories**.
3. Customize the block by adding categories from your Knowledge Base, reordering elements, and toggling visibility.
4. Edit category elements by selecting icons (Document360 or Font Awesome), adding titles, descriptions, and choosing colors for icons and text.
5. Save, preview, and publish changes.

This feature enhances content organization and user navigation.

### Site Customization: Error Pages

Custom error pages for Document360's knowledge base improve user experience by providing branded messages and clear next steps when users access broken, unauthorized, or restricted links, instead of generic error messages. This feature applies across all plans.

### Site Customization: Deleting Widget Sections

To delete a widget section or individual widgets in the Knowledge Base site, follow these concise steps:

1. Navigate to **Settings > Knowledge base site > Customize site > Customize site**.
2. Select **Widgets** from the Home dropdown.
3. Click **Delete** at the bottom; confirm by clicking **Yes**.
4. For individual widgets, repeat the process.
5. Save and Publish changes to apply them.

**Key FAQs:**

- Hide widgets by hovering and clicking the Hide icon.
- Rearrange widgets using drag-and-drop.
- Recently Created and Modified Articles may overlap if articles are both new and edited.

Refer to the FAQs for additional guidance on hiding, rearranging, and understanding widget behaviors.

### Site Customization: Adding Widgets to Home Page

To add widgets to your Knowledge base home page:

1. Navigate to Settings > Knowledge base site > Customize site.
2. Select Home page from the left menu.
3. Click Add section and choose Widgets.
4. Select from the available widget options: Most Viewed, Most Liked, Most Read, Recently Modified, or Recently Created articles.
5. Edit widget headings and preview changes.
6. Click Save and Publish to apply the changes.

**Key Notes:**

- New articles appear in both Recently Created and Recently Modified sections.
- Widget content is filtered based on user access permissions.
- Use the reorder and preview icons to arrange and hide elements as needed.

Refer to the provided screenshots for visual guidance on both the portal and site views.

### Site Customization: Understanding 404 Pages

A 404 page appears when a user requests a non-existent webpage. Customize this error page with a message, imagery, and links to improve user experience and guide them to appropriate content. Customization is irreversible.

### Site Customization: Configuring Error Pages

To customize error pages, navigate to **Settings > Knowledge base site > Customize site**. Choose the error page type from the dropdown menu (404, Access denied, Unauthorized, IP restriction). Select **Basic style** to change images or **Custom style** for HTML/CSS editing. Use the preview toggle to view changes. Save, preview, and publish to activate. Note that once configured, you can't revert to the default static page. The Access denied page appears for permission issues, while Unauthorized appears for unauthenticated users. FAQs address image uploads, project availability, multimedia support, and the inability to revert to default.

### Site Customization: 404 Page Support

This document outlines the plans supporting error pages, with Business and Enterprise tiers typically offering custom 404 page support, while the Professional tier does not.

### Site Customization: Access Denied Page

The "Access denied" page in a knowledge base redirects users with insufficient permissions. Customizable pages improve user experience by clearly explaining why access is denied and how to get permission. Only Private and Mixed knowledge bases support this feature, and a custom page prevents reverting to the default version.

### Site Customization: Access Denied Page Support

**Plans supporting error page**

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              | ✅       | ✅         |

The Business and Enterprise plans support the access denied page, as indicated in the table above.

### Site Customization: Customizing the 404 Page

- To customize the 404 page, navigate to **Customize site** in the Knowledge base portal and choose the **404 page** option.
- **Basic style**: Customize image, heading, paragraph, and add up to three buttons with suggested links like Home, Contact, or Sitemap.
- **Custom style**: Use HTML and CSS with a preview feature for tailored design.
- Use **Page Not Found analytics** and **Link status** tools to monitor and fix broken links.
- Best practices include consistent design, clear language, navigation options, search bars, feedback mechanisms, and mobile-friendliness.

### Site Customization: Unauthorized Page Support

No information is provided about plans for an error page in the provided data. The table displaying possible plans (professional, business, enterprise) is empty.

### Site Customization: Customizing the Access Denied Page

To customize the Access Denied page in the Knowledge Base, navigate to Settings > Knowledge base site > Customize site. Select the Access Denied page, choose either Basic or Custom style, and modify elements like images, headings, and paragraphs. For advanced changes, use custom HTML/CSS. Preview and publish your changes. Note that once customized, you cannot revert to the default page. Refer to FAQs for additional guidance and best practices for clear messaging and responsive design.

### Site Customization: Understanding the Unauthorized Page

The Unauthorized page appears when users lack proper permissions to access restricted content. It can be customized with messages like requesting admin access, but customization is irreversible once implemented.

### Site Customization: Customizing the Unauthorized Page

Customize your knowledge base's unauthorized access page by selecting either a "basic style" option (modifying default images, headings, and paragraphs) or a "custom style" option (adding custom HTML and CSS). Basic style allows changing visuals, while custom style provides full control over the page's design for a more tailored experience. Instructions for both options, including image changes, heading updates, and paragraph editing, are available. Save, preview, and publish changes for implementation on the knowledge base site.

### Site Customization: IP Restriction Page Support

**Plans supporting error page:** Information not provided in the document.

### Site Customization: Customizing the IP Restriction Page

Customize your knowledge base's IP restriction page by adjusting basic styles (images, texts) or creating custom HTML/CSS. Use the "Preview" toggle to test changes. Save, preview, then publish to apply changes. Basic style lets you change existing elements; custom style allows for full HTML/CSS customization. Key info includes navigating to site customization settings, selecting "IP restriction" page, modifying elements, previewing, and publishing.

### Site Customization: Understanding the IP Restriction Page

The **IP Restriction page** appears when users access the Knowledge base from restricted IP addresses. It can be customized to inform users (e.g., "Your IP address is not authorized. Please contact your admin for access.") and is exclusive to **Enterprise plan** projects. Once customized, the default version cannot be restored, so creating a tailored page is recommended for improving user experience.

### Site Customization: Custom CSS & JS Support

Insufficient data to provide a TLDR. The table lacks any details on custom CSS and JS plans for the Knowledge Base site. A summary requires actual plans, not empty cells.

### Site Customization: Using JavaScript Snippets

Customize website JavaScript by navigating to site settings, adding code to the JavaScript tab, and saving. Example code reorders elements.

### Site Customization: Troubleshooting Custom JavaScript

Document360's SPA transition requires updating custom JavaScript, which previously relied on page refresh events. Instead, use the `articleload` event for updated content. Adjust existing JavaScript to include `window.addEventListener('articleload', function() { ... });`. Contact support for further assistance with persistent issues. Custom CSS is supported. Multiple brands can be accommodated via separate workspaces or by applying separate stylesheets to differing projects within the same workspace while recognizing any CSS added to the projects will apply universally across all workspaces.

### Site Customization: Using CSS Snippets

CSS snippets are reusable code blocks for common CSS functionalities, helping save time and reduce errors. An example is the `.shadow` snippet adding box-shadows. To use, go to Settings, add custom or preloaded snippets (7 available), and save. For more details: [CSS Snippets](/help/docs/css-snippets).

### Site Customization: CSS Snippets

Customize Document360 Knowledge Base site using pre-loaded or custom CSS snippets. Navigate to Settings > Knowledge base site > Customize site > Custom CSS, select CSS tab, add snippets (including preloaded ones for body font, headings, tables, images, hero sections, callouts, and back-to-top), save changes. Custom CSS can also be added.

### Site Customization: Custom CSS/JS by Plan

The document outlines plans (Professional, Business, Enterprise) supporting custom CSS and JS in a knowledge base site, presented in a comparative table.

### Site Customization: Callout Styles by Plan

No data available for callout styles across Professional, Business, and Enterprise plans.

### Content Enhancement: Understanding Callouts

A "Callout" is a feature in Document360 used to highlight important content, available in four types: Info, Warning, Error, and Success. Each offers a title and content section, accessible via Markdown or WYSIWYG editors.

### Site Customization: Body Font Styling

Document360 plans to allow custom CSS and JS for body font styling in knowledge base content. This will improve the reader experience.

### Site Customization: Setting Body Font Style

To change the body font in Document360's knowledge base, use Custom CSS & JavaScript. Navigate to Knowledge base site > Customize site > Custom CSS & JavaScript. Click the "Custom CSS" tab and "Add code snippets." Select the "Change body text font" snippet, modify the code as needed to customize the font face and color, then save the changes.

### Site Customization: Styling Callouts

Steps to customize callout styling:

1. Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.
2. Under CSS, click **Add code snippets** and select **Change callout colors**.
3. Edit the code with your branding colors and **Save** for site-wide application.

For dark mode styling, refer to [How to change callouts color in dark mode](/help/docs/how-to-change-the-callouts-color-in-dark-mode).

### Content Enhancement: Image Alignment

Image alignment controls image placement (left, right, center) and maintains image-content proportions when resizing. Default alignment is left.

The GIF demonstrates changing the body font style from Nunito to a custom font and color using CSS, with changes applying globally across the Knowledge base.

### Site Customization: Header Font Style

Document360 allows customization of header fonts (`<h1>`, `<h2>`, `<h3>`, `<h4>`) for knowledge base sites. Sans-serif fonts are common for technical documentation.

### Site Customization: Changing Header Font Style

To change Document360 header fonts, navigate to Custom CSS in Knowledge Base settings, add/edit the "Change heading font" snippet, customize the CSS, and save. This change applies to all headers throughout the knowledge base. Default font is Montserrat.

### Site Customization: Image Resizing

To maintain image proportions while zooming, navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**. Paste one of the following code snippets based on your site version:

- For KB 1.0:

```
.content_block .content_container .content_block_text img {
height: auto !important;
}
```

- For KB 2.0:

```
article img {
height: auto !important;
}
```

Click **Save** to apply changes, ensuring images resize proportionally during zooming.

### Site Customization: Centering Images

To center images, navigate to **Custom CSS** in your Knowledge base settings, add the provided CSS snippet, and save. Centering uses `margin: 0 auto` and `display: block`. For alignment, use left or right margins as needed. Remember to delete previous snippets before adding new ones to avoid conflicts.

Key CSS snippets:

- **Center**: `.content_block .content_container .content_block_text img { margin: 0 auto; display: block; }`
- **Left**: `margin: auto 0 0 0 !important;`
- **Right**: `margin: 0 0 0 auto !important;`

### Content Structure: Importance of Tables

Tables allow for organized, structured presentation of data, enhancing understanding of complex information by arranging it in rows and columns.

### Site Customization: Styling Tables with CSS

To style tables in Document360, navigate to the Custom CSS & JavaScript section in Settings. Add or modify CSS snippets to customize table borders, padding, background colors, font styles, and potentially hide empty headers. Save changes for them to take effect. Custom CSS can be added in addition to the pre-built snippets.

### Site Customization: Table Styles and Plan Support

The document highlights the importance of table styles in Document360 for creating rich layouts, with Document360 offering robust table and table element customization options. A table compares three plans—Professional, Business, and Enterprise—regarding their support for custom CSS and JS in knowledge base sites.

| Professional | Business | Enterprise |
| --- | --- | --- |
| Limited CSS/JS customization | Advanced CSS/JS customization | Full CSS/JS customization with priority support |

### SEO: Editing Redirect Rules

To edit a knowledge base article redirect rule, navigate to Knowledge base > Article redirect rules. Filter to find the correct rule, hover over it, click "Edit", update the fields, and click "Update".

### SEO: Adding Redirect Rules

Configure URL redirects for articles in a knowledge base system. Two methods are provided: 1) for redirects based on article slugs at the end of the URL ("Ends with") and 2) for replacing segments of the URL ("Replace with"). Crucially, specify correct paths (starting/ending with `/`) and consider multilanguage/multi-project contexts for broader applicability. Site-level redirects are also described.

### SEO: Article Redirect Rules

The Enterprise plan supports article redirect rules, enabling redirects for any published or draft article URL to prevent broken links and maintain cross-references. Bulk import of redirect rules is also supported.

### SEO: Filtering Redirect Rules

Filter redirect rules by searching source/destination URLs, selecting rule type (Ends with, Replace with, or Both), and filtering by modification date (preset timeframes or custom date ranges).

### SEO: Importing Redirect Rules

Import redirect rules in bulk by uploading a properly formatted CSV file (Source, Destination, RedirectionType, max 1MB) to the Knowledge Base portal's Settings > Knowledge base site > Article redirect rules. Review valid/invalid rules, download a list of invalid rules if applicable, and finally import the accepted rules.

### SEO: Exporting Redirect Rules

Export redirect rules as a CSV from Document360 knowledge base settings > article redirect rules. Rules manage broken links and redirects for articles. Maximum 10,000 rules per project, import limits apply. Redirects can be customized with JavaScript, replace workspace names, or send to homepage. Errors, like too many redirects, are addressed. Key to resolving issues is validating and correcting redirection rules within the system.

### SEO: Deleting Redirect Rules

To delete an article redirect rule in the Knowledge base portal:

- Navigate to **Settings** > **Knowledge base site** > **Article redirect rules**.
- Use the **Filter** to find the rule.
- Hover over the rule and click the **Delete** icon, or select multiple rules using checkboxes and click **Delete**.
- Confirm by clicking **Yes** in the pop-up.

> **Note**: Deleted rules cannot be retrieved.

![Screenshot of deleting a redirect rule](https://cdn.document360.io/.../Documentation/5_Screenshot-Delete_a_redirection_rule.png)

Access redirect rules via Settings, filter or select the rule(s), delete, and confirm to permanently remove them.

### Site Settings: Article Settings

Configure various Knowledge Base article settings (accessibility, headers, sidebars, footers, categories, search, FAQ) at the site level with global impact. Customize individual article elements like read-aloud, table of contents, comments, statuses, and related articles. Support for localization is provided for consistent language use across the site. Adjust search options and FAQs separately. Individual article settings can override global site level configurations, but site level overrides often take precedence.

### Site Settings: Article Header Customization

Knowledge base article settings will be updated to include customizable header elements like contributor lists, estimated read times, and sharing options, improving user engagement.

### Site Settings: Article Settings and SEO

The **Article settings & SEO** section in Document360 enables customization of Knowledge base sites, improving user experience through features like headers, footers, search options, and accessibility. Companies can tailor settings to display contributor names, read times, social sharing, and related articles, enhancing engagement and user feedback.

### Site Settings: Enabling Article Header Elements

To enhance article headers across your knowledge base, enable the following settings in the Article settings panel: contributors, read time, follow button, share, print, dates, and PDF download. This project-wide change affects all articles and requires verification.

### 590. Accessing the What’s new feature

View recently published knowledge base articles by clicking the announcement icon, selecting workspace & language, and filtering by date range (last 24 hours, 7 days, or 30 days).

The "What's New" feature in Document360 allows users to access recently published or updated articles. It can be enabled or disabled via Settings > Knowledge base site > Article settings & SEO by toggling the 'Show What’s New' option. The feature's availability across Professional, Business, and Enterprise plans is currently unspecified as the provided table is empty.

### Site Features: Article Header Elements

The article header includes contributors, read time estimate, follow button, share icon, print option, published/updated dates, and PDF export. Localization allows customizing text per language. FAQs cover hiding breadcrumbs, exporting drafts, setting default email apps, and disabling print/PDF options.

### User Engagement: Following Articles and Categories

The Document360 "Follow articles and categories" feature notifies users of new/updated knowledge base articles. Available only for Private/Mixed projects in KB site 2.0 (projects created after June 10th).

### Site Features: Search Functionality

The knowledge base site's search function allows fast, relevant searches across articles, categories, and PDF attachments. Advanced search filters and keyword operators improve efficiency for users, essential for large organizations with extensive documentation.

### Site Features: Search Attributes

Knowledge base search utilizes article & category titles, tags, slugs (articles and categories), breadcrumbs, and content text. Search prioritizes article titles, then tags, slugs, breadcrumbs, and finally content.

### 595. Enabling the ‘Show Follow button’ from KB Portal

To enable the 'Show Follow button':

1. Go to **Settings** > **Knowledge base site** > **Article settings & SEO**.
2. In the **Article header** section, toggle on **Show Follow button**.

- This feature is enabled by default for new Private and Mixed projects.

![Reader notification](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_Reader_Notification.png)

### User Engagement: Using Follow Feature

_No summary available for this section._

### Site Features: Searching Attachments

Search attachments lets users search PDF files (up to 10MB) within a knowledge base. This finds relevant content even if file names don't match search terms, filtering by categories, articles, API docs and files. Enable via Knowledge base portal settings and requires the "Show article files" toggle. Search is limited to article content, titles, slugs and tags if the "Show attachment tab" is off.

### Site Features: Advanced Search

Advanced search allows users to filter results across multiple workspaces and languages, with features like workspace, language, tags, contributors, date, and category filters. Enable it in settings under the Knowledge base portal to access these options. Filters include Workspace (current, all, or specific), Language (current, all, or specific), Tags, Contributor, Date (preset or custom range), and Categories.

### Site Features: Search Filters

Knowledge base search filters allow refining results by category, attachments, workspace (current, all, or specific), and language (current, all, or specific). Filters are located to the left of the search bar.

### Site Features: Search Operators

Implementing search operators (double quotes for exact phrases and minus signs for excluding terms) significantly improves search precision and user satisfaction. Double quotes find exact phrases, while the minus sign excludes results containing a specific word. Crucial to understand the difference between using "-" for excluding versus its use as part of the word itself.

Step-by-step explanation:

To enable the 'No search result feedback' in Document360:

1. **Access Settings**: Click on the gear icon located at the top right corner to open the Settings menu.

2. **Navigate to Knowledge Base Settings**: In the Settings menu, select "Knowledge base site".

3. **Open Article Settings**: Within the Knowledge base site section, go to "Article settings & SEO".

4. **Locate Search Settings**: In the Article settings, find the "Search settings" section, which is usually in an accordion menu. Click to expand it.

5. **Enable Feedback Form**: Toggle the switch next to "No search result feedback" to activate it.

6. **Configure Behavior**:

- When enabled, users who perform a search with no results will see a feedback form.
- If disabled, they will see a blank results page.

7. **Review Feedback**: The feedback submissions can be viewed in the "Search analytics" module under the analytics section to help improve the knowledge base.

This setup ensures that your team can gather user feedback when searches yield no results, aiding in content improvements. The feedback form appears on both the knowledge base site and its widget.

### Site Features: Advanced Search FAQs

Advanced search allows combined searches across all workspaces/languages with filters. To hide the home page search, customize the header. Exclude articles by hiding, and external search engines are handled by a separate article. Include API documentation by selecting "All workspaces" in the search filter. For RTL languages (Hebrew, Arabic), search bar adjusts to right-to-left alignment. Search behavior depends on default language selection when mixing RTL/LTR languages. Enable "Include all workspaces in site searches" in Article settings within Knowledge base site settings for Document360 1.0 to search all workspaces.

### Site Features: Smart Bars

Customizable banners/bars in Document360's knowledge base site. Convey information/announcements/updates, tailored to user location, browser, or project language. Enhance user engagement and highlight critical info updates.

### User Feedback: Liking/Disliking Articles

Users can like or dislike articles in Document360 to provide feedback, helping improve content quality. Feedback can be submitted multiple times. The undo feature for likes/dislikes is only available in KB Site 2.0 projects, requiring migration for its use.

### Site Features: Creating Smart Bars

Create a custom banner for a knowledge base. Configure its content (text, formatting), appearance (position, color theme), and visibility rules (based on URLs, IP, browsers, devices, language, project). Edit/delete created Smart bars. Supports global or language-specific display.

### User Feedback: Liking/Disliking - Process

Like or dislike articles in the Knowledge base by clicking respective icons at the end of an article. Liking is straightforward, while disliking requires a comment. Both actions open feedback panels with options to provide comments and enable update notifications via email. Users can undo their action within 30 days unless cache is cleared. Dislikes without comments aren't counted. Analytics only record active interactions. Feedback can be updated by switching like/dislike, retaining previous comments. The process is consistent across the Knowledge base widget, with a 30-day window for undoing actions in the Public site.

### Site Features: Smart Bar Management

The Smart bar overview page provides a centralized interface to manage Smart bars, with features including language selection, status toggles, detailed previews, show/hide rules, editing and deletion options, filters for organization, and the ability to create new Smart bars.

### Support: Ticket Deflectors

Ticket deflectors are a feature that reduces support tickets by enabling users to resolve issues independently through self-service options in a knowledge base. This improves user satisfaction and reduces support workload.

### Support: Managing Ticket Deflectors

The Ticket Deflectors overview page lets you manage ticket deflection forms in the knowledge base. You can view titles, status, update history, create/clone/edit/delete forms, and integrate with helpdesks. Forms can be previewed before publication and copied for sharing. Key limitation: only usable in the main workspace and its languages. Important: set to offline before deleting.

### Compliance: Cookie Consent

A cookie is a small data piece stored by websites in users' browsers. Consent is required for using cookies, especially under GDPR. Document360 allows adding a cookie consent bar or popup to ensure compliance.

### Compliance: Adding Cookie Consent

Enable cookie consent in Settings > Knowledge base site > Cookie consent. Customize the message for all or specific languages, format it with basic tools, choose between a bar or popup banner, select position and theme (light, dark, or custom colors), add a CTA (text, button, or icon), preview, and save.

### Support: Adding Ticket Deflectors to Header/Footer

Add ticket deflector forms to your knowledge base's header and footer navigation, and other relevant sections. Instructions cover adding link via primary/secondary navigation in header or to basic/custom footer. Forms must be activated. Use copied links for other placements like articles or home pages. Clone to duplicate forms, preview changes before publishing, and delete inactive forms. Copy link from settings>> Knowledge base site >> Ticket deflectors.

### Support: Creating Ticket Deflectors

Ticket deflectors route users to self-service resources (FAQs, guides) for issue resolution. If users can't find a solution, they are directed to a tailored contact form. Business and enterprise plans support multiple deflectors (up to 10).

### Integrations: Helpdesk Configuration

Ticket deflectors allow integration with **Freshdesk** and **Zendesk** for direct ticket creation. Configuration involves navigating to **Settings** > **Knowledge base site** > **Ticket deflectors**, selecting the helpdesk platform (Freshdesk or Zendesk), and entering required credentials (API key, domain URL, and agent email for Zendesk). Validate and save to complete the integration.

### Integrations: Adding New Integrations

To integrate a third-party app into Document360, navigate to Integrations in Settings > Knowledge base site. Select the desired app, choose Basic or Custom configuration, provide required information (e.g., Description, App ID), and click "Add." Details may vary; check the "Learn more" link for specific app instructions.

### Integrations: Overview

Document360 is a knowledge base platform offering over 25 third-party integrations across categories like analytics, chat, comments, and marketing automation, supported by Professional, Business, and Enterprise plans.

### Support: Creating Ticket Deflectors - Detailed

To create a ticket deflector in Document360's Knowledge Base:

1. Navigate to **Settings** > **Knowledge base site** > **Ticket deflectors**, then click **New ticket deflector**.
2. **Configure Form Title, Slug, and Description**: Edit the title (max 150 chars), adjust the auto-generated slug if needed, add a description, and ensure the deflector is online.
3. **Set Up Context Questions**: Add qualifying questions (phrased as statements or prompts) to guide users, enabling search options and defining next actions (e.g., contact form or article).
4. **Add Suggestions**: Optionally, include block steps like additional questions, answers, or links to knowledge base articles for further user guidance.
5. **Customize Contact Form**: Define fields (mandatory: Email, First Name, Description; optional: Last Name, Telephone), allow attachments (max 5 files, 2MB each), enable CAPTCHA, and set a post-submission thank-you message (max 250 chars).
6. **Configure Ticket Submission Settings**: Set email notifications (custom subject, recipients), map deflectors to specific emails, and optionally connect to a helpdesk (e.g., Freshdesk) for automatic ticket creation.
7. **Localize Text**: Translate variable texts in the deflector through **Localization & Workspaces** > **Localization variables**.

This setup ensures efficient user guidance, reduces support tickets, and integrates seamlessly with existing systems.

### Integrations: Managing Integrations

Update integration credentials, description, status (on/off), App ID/URL on the Integrations page by clicking "Edit." Delete integrations by clicking "Delete" after confirmation. Troubleshooting involves checking App ID/URL, internet connection, and app-specific instructions (Learn more). Best practices include periodic review and keeping integrations up-to-date. Add analytics scripts via Custom HTML in site settings.

### Integrations: Integration Overview Page

The **Integration overview** page lets you manage integrations by toggling status, viewing type, description, and user involvement. Categories include Analytics (9 tools), Chat (11 tools), Commenting (2 tools), and Marketing automation (3 tools), with notable options like Google Analytics, Intercom, Disqus, and Zoho PageSense.

### Integrations: Code Filtering

Document360 integrations allow code filtering. Configure conditions (IP address, workspace, language) to control where/how integrated apps run, targeting specific users or cases. Use AND/OR logic to combine conditions. Example: filter Google Analytics data by IP address, workspace, or language, enabling targeted data collection.

### Integrations: LiveChat

To integrate Document360 with LiveChat, configure the integration within the Document360 Knowledge Base portal by selecting LiveChat, adding a description, entering the LiveChat ID, and potentially using conditional code. This allows LiveChat users to access Document360 knowledge base information, likely through a chat interface.

### Site Customization: Custom HTML Integration

Add custom HTML snippets for third-party integrations by navigating to **Settings > Knowledge base site > Integrations**. Choose the insertion point (Header, Begin Body, or End Body), paste the code, and save. The snippet appears on the Integrations overview page, enabling widgets like analytics or chat support based on placement.

### Integrations: Olark

**Olark** live chat tool integrates with Document360 for enhanced customer support. Key features include visitor co-browsing, geolocation, visitor insights (browsing history), and chat transcripts. This improves communication, troubleshooting, and support quality. Plans are likely tiered (Professional, Business, Enterprise).

### Integrations: LiveChat Overview

LiveChat is an AI-powered customer service tool that enables real-time communication, allowing businesses to respond to customer needs efficiently. When integrated with Document360, it provides instant support to customers while they browse the knowledge base, enhancing user experience and reducing costs. The document includes a comparison table for Professional, Business, and Enterprise plans, though details are not specified. A screenshot illustrates the integration.

### Integrations: Getting the LiveChat ID

For existing LiveChat customers:

- Access the LiveChat dashboard.
- Click on "Install" and locate the LiveChat ID in the manual installation snippet using the prefix `window.lc.license=`.

For new LiveChat users:

- Copy the LiveChat ID during the initial account setup process.
- Integrate the ID into your Document360 knowledge base for chat functionality, enabling bots to handle common queries.

### Integrations: Getting the Olark ID

To get the Olark ID, log into Olark, go to Settings > Channels > Installation Code, copy the code, find the `olark.identify()` function, copy the 13-digit ID following it. Use this ID for Document360 integration.

### Integrations: Freshchat

Freshchat is a messaging platform for sales & customer engagement, supporting AI-powered chatbots and integration with WhatsApp, Apple Business Chat, Facebook Messenger, and LINE for a unified messaging experience across websites & apps. Key features include a consolidated inbox and AI-powered self-service chatbots to improve efficiency.

### Integrations: Integrating with Olark

To integrate Document360 with Olark, log in to the Document360 Knowledge Base portal, navigate to Settings > Knowledge Base Site > Integrations, select Olark, enter your Olark ID, add a description, and click Add.

### Integrations: Integrating with Freshchat

To integrate Document360 and Freshchat, access Document360's Knowledge Base portal settings, choose "Freshchat" integration, enter a description, paste the Freshchat token (obtained on Freshchat's dashboard under Settings > Admin settings > Configuration and Workflows > Web Chat Settings > Integration Settings), optionally configure code inclusion/exclusion rules, and click "Add." This enables searchable knowledge articles to be available directly within Freshchat for users.

### Integrations: Chatra

Chatra, a real-time chat software, integrates with Document360's knowledge base to provide instant customer support during content navigation. This integration helps reduce operational costs and improve customer satisfaction.

To integrate Crisp with Document360, navigate to Settings > Knowledge base site > Integrations, select Crisp, enter a description and your Crisp website ID, which can be found in Crisp's Settings > Website Settings. Use code inclusion/exclusion conditions if needed, then click Add. This integration allows chatbot functionality with email campaign and mobile app support.

### 630. Integrating **Document360** and \***\*Chatra\*\***

Integrate Document360 knowledge base with Chatra live chat. Get Chatra ID. Configure integration in Document360 Settings > Knowledge base site > Integrations. Add Chatra ID to Document360. Optional: Use code inclusion/exclusion conditions. Chatra ID retrieval instructions for existing and new users are included. This integration enables real-time user support, targeted chats, and visitor tracking within the Document360 knowledge base.

### Integrations: Crisp and Plan Support

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
| Zendesk, Slack, Trello | Salesforce, Mailchimp, HubSpot | Jira, Google Analytics, Advanced CRM |

**Crisp** is a centralized shared inbox platform designed to streamline customer interactions. It offers features like cost efficiency through simultaneous conversation handling, predefined answers for common queries, and enhanced communication tools such as images and GIFs to improve customer engagement.

**Key Features:**

- Cost Efficiency: Manage multiple conversations simultaneously.
- Predefined Answers: Automated responses for common customer inquiries.
- Enhanced Communication Tools: Include visuals in messages for better interaction.

This platform integrates third-party tools across Professional, Business, and Enterprise plans, scaling from essential to advanced integrations based on organizational needs.

### Integrations: Gorgias

Gorgias is a multi-channel helpdesk solution integrating with business applications and communication channels, providing support agents a unified customer view. Integrates with Document360 knowledge base for streamlined customer query management.

### Integrations: Integrating with Gorgias

To integrate Document360 and Gorgias, obtain the Gorgias ID from Gorgias, then add it as a new integration in Document360's Knowledge Base portal settings. Optional: Configure conditional code inclusion based on IP address, Workspace, or Language.

### Integrations: Doorbell

Doorbell is a user-friendly chat software for collecting, managing, and analyzing customer feedback, designed to enhance feedback with features like screenshot attachments. It integrates seamlessly with Document360, providing valuable insights to improve customer interactions and conversions.\
![003_Screenshot_Doorbell_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Screenshot_Doorbell_Integration.png)

### Integrations: Integrating with Doorbell

_No summary available for this section._

### Integrations: Getting the Gorgias App ID

For existing Gorgias users, log in, go to **Settings > Channels > Chat**, add a new chat integration, and install manually. For new users, copy the Gorgias ID during LiveChat setup and integrate it with Document360. This allows team collaboration and Ticket management.

### Integrations: Sunshine Conversations

Sunshine Conversations is an API-based CRM tool on AWS for customer communication via social media & messaging. Integration with Document360 knowledge base is possible to streamline customer communication and boost engagement.

### 638. Integrating **Document360** and **Belco**

Integrate Document360 knowledge base with Belco platform by obtaining Belco Shop ID via Belco application setup or initial installation. Configure the integration within the Document360 Knowledge base portal, adding a description and Shop ID. Optionally, use code inclusion/exclusion rules, then log in to Belco to manage chats. This links a chatbot interface to Document360's structured knowledge base for e-commerce users.

### Integrations: Belco

Belco is a real-time chat software that integrates with Document360 to offer instant customer support. It allows agents to manage multiple conversations simultaneously, enhancing efficiency and reducing operational costs.

### Integrations: Kommunicate

Kommunicate's integration with Document360 knowledge base provides real-time customer support via chat, powered by AI chatbots, to improve efficiency, reduce operational costs, and enhance customer satisfaction. Integrates AI-powered chatbots for faster query resolution and improves support experience within knowledge base.

### 641. Integrating Document360 and \***\*Sunshine Conversations\*\***

To integrate \***\*Sunshine Conversations\*\*** with \***\*Document360\*\***, follow these steps: navigate to the Knowledge base portal, go to Settings > Knowledge base site > Integrations, select \***\*Sunshine Conversations\*\***, add a description, and enter your unique \***\*App ID\*\***. Optionally, use code inclusion/exclusion conditions. Click Add to complete the integration.

### 642. Obtaining the \***\*Sunshine Conversations\*\*** ID

To obtain the Sunshine Conversations ID, follow these key steps: Access the dashboard, create a new app, fill in the details, save the app, navigate to the app's settings, and locate the App ID in the App Details section. Optionally, API keys can be generated in the same settings menu.

### Integrations: Integrating with Kommunicate

To integrate Document360 and Kommunicate, navigate to Document360's Knowledge Base Settings > Integrations, select Kommunicate, add a description, enter your Kommunicate ID (obtained from the Kommunicate app), and optionally configure code inclusion/exclusion conditions based on IP, workspace, or language. Click "Add" to complete.

### Integrations: Google Analytics

Integrate Document360 with Google Analytics via Basic (standard ID) or Custom (snippet) configurations. Basic requires Google Analytics ID; Custom needs a snippet. Optional code inclusion/exclusion conditions based on IP, Workspace, and Language are possible. Document360 Settings -> Integrations -> Google Analytics(New) to get started.

### Integrations: Getting the Google Analytics ID

To get the Google Analytics ID for your Document360 knowledge base, navigate to your Google Analytics account, find the "Tracking ID" in the property settings, and input that ID into the Document360 portal's corresponding field. This integration allows tracking key user metrics like views, location, and behavior.

### Integrations: Getting the Kommunicate App ID

Obtain your **Kommunicate** App ID by navigating to **Settings > Install** in your account (for existing users) or during the installation process (for new users). This ID is crucial for integrating **Kommunicate** with your **Document360** knowledge base portal, enabling efficient customer chat management, lead qualification, and 24/7 support.

**Step-by-Step Explanation:**

1. **Create a Google Analytics Account:**

- Navigate to the Google Analytics website (analytics.google.com) and sign in with your Google account. If you don’t have an account, create one.

2. **Set Up a Property:**

- In the Admin section, select "Create Property." Choose "Website" and fill in the required details about your knowledge base site, such as name, URL, and industry category.

3. **Retrieve the Google Analytics ID:**

- In the Admin section, go to "Property Settings" for your newly created property. The Google Analytics ID (Tracking ID) is listed under "Property." Copy this ID.

4. **Log in to Document360:**

- Access your Document360 account with administrative privileges.

5. **Navigate to Integrations:**

- In the Document360 dashboard, locate the "Integrations" or "Analytics" section. This is typically found under settings or site configuration.

6. **Input the Google Analytics ID:**

- Paste the copied Google Analytics ID into the specified field within Document360's integration settings. Save the changes.

7. **Verify Integration:**

- After implementation, monitor Google Analytics to ensure data is being collected. Check real-time reports to confirm activity from your knowledge base.

8. **Compliance and Privacy:**

- Review your site's privacy policy to include information about Google Analytics tracking. Ensure compliance with data protection regulations applicable to your audience.

By following these steps, you can successfully integrate Google Analytics with your Document360 knowledge base, enabling insights into user behavior and interactions.

### Integrations: Google Analytics (GA4)

Document360 supports GA4 integration through different plans, offering tracking for metrics like conversions, traffic, and user behavior. GA4 uses a Measurement ID starting with 'G-', replacing GA3's 'UA-' Tracking ID, and marks the latest evolution in analytics with enhanced data capabilities.

### Integrations: Getting the GA4 Measurement ID

To get your Google Analytics Measurement ID (G-XXXXXX): Go to Google Analyti cs Admin > Property Settings > Data Streams. Select your stream, click Configure tag settings. Copy the 'G-' ID from the top right of the "Your Google Tag" section. Paste this into your Document360 portal's Google Analytics ID field.

### Integrations: Google Tag Manager

Google Tag Manager is a tag management system for easily updating website/app tags (measurement codes) for better analytics, marketing, and potentially site analytics/remarketing.

### Integrations: Integrating with GA4

Learn how to integrate GA4 with Document360 to track user interactions, popular articles, and locations. Requires a Google Analytics account and ID. Follow steps to enable integration via Settings > Knowledge base site > Integrations. Choose between basic configuration (using Measurement ID) or custom configuration (adding custom events). Optional conditions for code inclusion based on IP, workspace, or language.

### Integrations: Integrating with Google Tag Manager

To integrate Google Tag Manager with Document360's Knowledge Base, select either Basic or Custom configuration. Basic requires a Google Tag Manager ID. Custom allows custom snippet code and conditional code inclusion (by IP, Workspace, Language). Both methods add tracking.

### Integrations: Heap

Heap is a product analytics tool for analyzing user behavior. It provides event feeds and analytical tools (funnels, retention, etc.) to improve product and marketing effectiveness.

### Integrations: Integrating with Heap

To integrate Document360 with Heap, select "Heap" in Document360's Integrations settings. Choose between basic configuration (needs Heap App ID) or custom configuration (allows custom event snippets and conditional code inclusion, e.g., by user IP). Essential information includes providing a description and the Heap App ID for basic integration.

### Integrations: Getting the Google Tag Manager ID

To obtain your Google Tag Manager ID, follow these steps:

- **For Existing Users**: Navigate to the workspace section in your Google Tag Manager account. Here, you'll find the code snippet that contains your ID.
- **For New Users**: During the initial setup, after creating your container, you'll receive a code snippet that includes your Google Tag Manager ID.

This ID is essential for integrating Google Tag Manager into your platform, enabling features like conversion tracking and site analytics.

### Integrations: Segment

Segment is a data platform that simplifies the integration of third-party tools with a knowledge base site, enabling efficient customer data collection, transformation, and analysis. It streamlines data management, allowing teams to spend more time utilizing insights rather than data collection. Key value proposition: enhanced user behavior understanding and competitive advantage from detailed analytics.

### Integrations: Getting the Segment ID

To get your Segment Account SID, navigate to the Segment dashboard, find the "Develop" section on the left toolbar, and copy the Account SID from the "Account info" section. This SID is needed for Segment integration in the Document360 system, enabling better user understanding and knowledge base enhancement.

### Integrations: Getting the Heap App ID

For **existing Heap customers**:

- Navigate to Account > Install in the dashboard.
- Select Web and copy the Heap ID from the provided snippet.

For **new Heap customers**:

- The App ID is provided during the integration setup.
- Access your Heap account post-setup to view the ID and manage user interactions.

**Note**: Heap integration enables advanced analytics, allowing user behavior analysis for product improvements.

### Integrations: Hotjar

Hotjar is a user behavior analytics tool offering heatmaps, session recordings, and surveys to understand user interactions and provide product insights. No specific integration details for a knowledge base are provided.

### Integrations: Integrating with Segment

Integrate Segment with your Document360 knowledge base through Settings > Integrations. Choose between Basic setup (using your Segment ID) for standard tracking or Custom setup (with snippet code) for advanced event tracking. Optional conditions can control code execution. Complete the setup and verify integration functionality.

### Integrations: Integrating with Hotjar

Integrate Hotjar with Document360 to track user behavior via Heatmaps and recordings, enhancing insights into knowledge base interactions.

Steps:

1. Navigate to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **Hotjar** and choose between Basic (using your Hotjar ID) or Custom (with custom event codes) configuration.
3. Enter a Description and Hotjar ID for Basic setup or add custom snippet code for advanced tracking.
4. Optional: Set inclusion/exclusion conditions based on IP, Workspace, or Language.
5. Save the configuration to enable Hotjar tracking on your Document360 portal.

### Integrations: Integrating with Amplitude

To integrate Amplitude with Document360's knowledge base, use either Basic or Custom configuration, providing an Amplitude API key and optional code inclusion/exclusion conditions (IP, Workspace, Language). Basic config is straightforward, while Custom config allows for custom events and advanced integrations. Implementing Session Replay with Autocapture involves adding a specific JavaScript snippet to enable this feature.

### Integrations: Getting the Hotjar ID

To obtain the Hotjar ID, navigate to the Hotjar setup section by clicking "Set up Hotjar" from the left sidebar. Locate the snippet containing the `hjid` variable and copy the ID. This ID is essential for enabling Hotjar's analytics tools like heatmaps and surveys.

### Integrations: Amplitude

Amplitude is a product analytics tool that helps analyze product usage data and user behavior. It offers real-time analytics, flexible user segmentation, and a feature called Microscope. Integration plans for third-party tools in a knowledge base site are organized as follows:

- **Professional Plan**: Integrates with essential third-party tools such as basic analytics tools and SEO optimizers.
- **Business Plan**: Includes a broader range of integrations, such as advanced analytics and customer support software.
- **Enterprise Plan**: Provides extensive integration with custom tools, APIs, and advanced analytics solutions.

### Integrations: Amplitude FAQ

Amplitude is a collaborative analytics platform for product tracking. It provides reports for product optimization and helps track visitors. A knowledge base platform (separate from Amplitude) lets teams manage content and users.

If you're new to Amplitude, sign up and obtain your API key during the initial setup. For existing users, navigate to your project dashboard, go to the General section under Projects to find and copy your API key.

### Integrations: Getting the Amplitude API Key

To obtain an Amplitude API key:

- **New customers**: Register at [Amplitude](https://amplitude.com/amplitour/register) and receive the API key during account setup.
- **Existing customers**: Access the key in the project dashboard under **Projects > General** section.

### Integrations: FullStory

FullStory is a user-experience intelligence tool offering real-time analytics, retention tracking, and unique features like Magic Moments for reviewing user sessions. Integration is available across all tiers: Professional includes basic metrics, Business adds advanced analytics, and Enterprise provides unlimited access to all features.

### Integrations: FullStory FAQ

Integrate FullStory for website analytics & recording. Document360 uses a FullStory ID for this integration, and manages knowledge base content (categories, articles, etc.).

### Integrations: Getting the FullStory ID

For existing users, navigate to the dashboard, click the work name dropdown, select **Settings**, and under **Install your FullStory snippet**, find your FullStory ID using `window['_fs_org']`. For new users, after completing the integration in Document360, access your FullStory account segment to view analytics and track your knowledge base site behavior.

### Integrations: Integrating with FullStory

Integrate FullStory with Document360 by navigating to **Settings** > **Integrations**, selecting FullStory, configuring with basic (description + ID) or custom (snippet code), and optionally setting inclusion/exclusion conditions. Click **Add** to save.

### Integrations: Mixpanel

Mixpanel is an event-based analytics tool integrated with Document360 to track user activity, including conversions from feature pages, sales funnel drop-off rates, and effective referral sites. It focuses on user event tracking for understanding user journey, not general site data.

### Integrations: Integrating with Mixpanel

To integrate Document360 with Mixpanel, navigate to Integrations in the Knowledge Base settings, select Mixpanel, and choose either Basic or Custom configuration. Basic requires adding JavaScript via Document360's Customize site after basic setup. Custom allows adding JavaScript directly within the integration configuration. Both options permit conditional code inclusion based on IP, workspace, or language.

### Integrations: Getting the Mixpanel ID

To get your Mixpanel ID: 1. Log in to your Mixpanel account. 2. Go to Settings > Set up Mixpanel. 3. Copy the Mixpanel ID displayed.

To integrate Mixpanel with Document360, choose between Basic or Custom configuration. Basic requires minimal setup but needs manual JavaScript code addition later. Custom offers advanced tracking with direct code input during setup. Remember, data transmission to Mixpanel only occurs after JavaScript implementation. Tailor your code to specific needs and ensure thorough testing, possibly in a sandbox environment. Technical expertise may be necessary for customization.

### Integrations: VWO

VWO is an all-in-one optimization platform for businesses, enabling feature testing, user intent extraction, push notification management, and product roadmap creation/optimization.

### Integrations: Integrating with VWO

Integrate Document360 knowledge base with VWO for website A/B testing. Obtain VWO Account ID from VWO account (new or existing). Configure Document360 integration with basic or custom settings, potentially adding custom events. Optionally use code inclusion/exclusion based on conditions (IP, workspace, language.) Manage and run website optimization and tests through VWO interface after successful integration.

### Integrations: Mixpanel - Sample Code

These examples provide foundational code snippets for integrating **Mixpanel** tracking into **Document360**, focusing on page view and button click tracking. They require customization for specific use cases, with a **Mixpanel ID** needed for implementation. Integrating **Mixpanel** allows for enhanced event-based analytics to optimize user behavior insights.

### Integrations: Zoho PageSense

Zoho PageSense is a platform for website optimization and personalization. It enables tracking, analysis, optimization, and personalization to boost conversion rates. No pricing or specific features are detailed in the provided document.

### Integrations: Integrating with Zoho PageSense

Integrate Document360 and Zoho PageSense by navigating to Document360's Integrations settings, selecting Zoho PageSense, inputting the Zoho PageSense ID (obtainable from the Zoho PageSense Interface application), and optionally applying code inclusion/exclusion conditions. This unified platform offers complete conversion rate optimization (CRO) solutions by tracking, testing, analyzing, and optimizing product elements (heatmaps, A/B testing, form analytics, session recordings) to boost conversions.

### Integrations: Freshmarketer

Freshmarketer is a cloud-based marketing automation tool offering A/B testing, heatmaps, and funnel analysis to enhance conversion optimization. Its features provide insights into user behavior and identify drop-offs, aiding in improving user experience. The integration with Document360's knowledge base allows seamless access to these analytics, enhancing documentation effectiveness.

To integrate Freshmarketer with Document360, follow these steps:

1. Obtain the Freshmarketer Script Tag Src by logging into your Freshmarketer account. Navigate to Admin settings > Tracking and Integrations > CRM Code Library, and retrieve the script URL.

2. In Document360, go to Settings > Knowledge base site > Integrations, select Freshmarketer, and provide a description along with the script tag.

3. Optionally, set inclusion/exclusion conditions for targeted tracking.

4. Save the integration to enable features like contact management, campaigns, and automated emails.

This integration enhances marketing efforts by leveraging knowledge base analytics for personalized campaigns. Ensure correct permissions and test post-integration for functionality.

### Integrations: Integrating with GoSquared

To integrate GoSquared with Document360, obtain the GoSquared Project Token from your GoSquared account. Add this token to the Document360 Knowledge base portal integrations settings. This enables behavioral data analysis and chat features in GoSquared, using Document360 user data for insights.

### Integrations: GoSquared

GoSquared is a platform that helps businesses turn visitors into loyal customers through an integrated suite of tools. Key features include **Analytics**, **Live Chat**, **Automation**, and **Customer Data Hub**, along with the **Now dashboard** for real-time insights and the **Trend dashboard** for historical insights. [Learn more](https://www.gosquared.com/support/articles/1604607-what-is-gosquared).

### Integrations: Commento

Commento, a modern commenting system, can be integrated into a knowledge base website. It's fast, bloat-free, and visually appealing. Integration details across differing subscription tiers are not yet provided.

### Integrations: Commento FAQ

Why should I integrate GoSquared with Document360?\
Integrating GoSquared allows you to engage with customers via multi-channel messaging, live chat for conversions, and web analytics.

Document360 is a knowledge base platform that enables project members to create and manage content, including categories, articles, and templates. It also supports file management, team account administration, and site settings configuration for branding, domain, and security.

### Integrations: Disqus

Disqus is a multilingual commenting platform for Document360 articles, offering design integration and moderation features. Suitable for Professional, Business, and Enterprise users.

### Integrations: Disqus FAQ

To fix the '_This domain is not registered with Commento_' error on your Knowledge base site, disable the Commento integration by navigating to **Settings > Knowledge base site > Integrations** and turning off the Commento toggle.

To integrate Commento with Document360, choose between two methods:

**Method 1: Direct Integration**

1. Navigate to Document360's Settings > Knowledge base site > Integrations.
2. Under Comments, select Commento and click Add.
3. Enter a description and set inclusion/exclusion conditions if needed.
4. Click Add to complete the setup.
5. Check Commento for analytics and import Disqus comments if applicable.

**Method 2: Custom HTML Integration**

1. In Commento, go to the Staging tab and click Installation Guide.
2. Modify the Universal Snippet's URL to your project's domain.
3. Copy the code, then in Document360, navigate to Settings > Knowledge base site > Integrations.
4. Under Custom HTML, paste the code and select insertion at the end of the body.
5. Click Add to finalize.

Choose Method 1 for simplicity or Method 2 for more customization.

### Integrations: Accessing Extensions

Access extensions in the Knowledge base portal's Settings > Knowledge base portal > Extensions. Filter by category (All extensions, Helpdesk, Team collaboration, Code repositories, Translation & browser). Click "Connect" on the desired extension tile.

**Categories:** Helpdesk (Freshdesk, Zendesk, Intercom, Salesforce), Team collaboration (Slack, Microsoft Teams, Drift, Zapier, Make), Code repositories (GitHub), Translation & browser (Chrome, Crowdin, Phrase).

To integrate Disqus with Document360, navigate to the Integrations section in Document360's settings, add the Disqus integration, and paste the Disqus URL obtained from your Disqus account. This URL is found in the Universal code snippet. After adding, Disqus commenting will be enabled on your Document360 articles, allowing for user interactions and admin moderation.

### Integrations: Freshdesk

Freshdesk integrates with Document360 knowledge base, enabling support agents to access and use articles directly within Freshdesk, improving efficiency. Agents can also create articles in Document360 from within Freshdesk.

### Integrations: Document360 Extensions Overview

Document360 Extensions enhance your Knowledge Base by integrating with third-party platforms, enabling connected workflows. Available across Professional, Business, and Enterprise plans, they allow direct access, management, and sharing of content from other tools, reducing switching between apps and improving team collaboration.

### Integrations: Freshdesk - Features

Freshdesk now seamlessly integrates with Document360, enabling agents to search, share, and even create knowledge base articles directly within Freshdesk. This integration streamlines support workflows by providing relevant information quickly and allowing for knowledge base updates directly from ticket responses.

### Integrations: Freshservice

_No summary available for this section._

### Integrations: Freshservice - Setup

To integrate Document360 & Freshservice, generate a Document360 API token, copy it, access Freshservice, find the Document360 app in the marketplace, paste the token, and click "Install". Repeat for multiple Document360 knowledge bases.

### Integrations: Zendesk

Zendesk integrates with Document360's knowledge base, allowing support agents to access and create articles directly within Zendesk, improving customer support response times and article creation efficiency.

### Integrations: Zendesk - Basic Setup

_No summary available for this section._

### Integrations: Zendesk - Setup Guide

To connect Document360 to Zendesk, first install the app from the Zendesk Marketplace. Then, generate an API token in Document360 and paste it into the Zendesk setup. Enter a title and desired restriction settings (optional). This configures the connection.

### Integrations: Freshservice - Features

- **Search and Share Articles:** Access Document360's knowledge base sidebar from Freshservice tickets to search for articles. Features include auto-suggestions based on ticket titles, +Link to add URLs, and +Content to paste full articles. Automated search recommends articles using the ticket title.

- **Create Articles:** Directly create and publish knowledge base articles from Freshservice. Includes a text editor with formatting options (H2/H3, bold, italic, lists) and insert features (code blocks, hyperlinks, images). Note: New categories cannot be created via Freshservice.

### Integrations: Zendesk - Creating Articles

Create Zendesk knowledge base articles directly from the Document360 app without needing extra team accounts. Click "Create Article," input title and category. Write content in Markdown, and publish. A quick launch feature allows for linking/inserting articles into Zendesk chat replies.

### Integrations: Zendesk - Article Search and Sharing

The Document360 app in Zendesk allows agents to instantly search and share Knowledge Base articles while responding to tickets. The app automatically searches articles based on the ticket title or via a search bar. Agents can preview articles and choose to link them, insert their full content, or open them in a new tab, enhancing efficiency without switching between tabs.

### Integrations: Zendesk - Federated Search

To set up Zendesk Federated Search in Document360, navigate to **Settings** > **Knowledge base portal** > **Extensions** > **Zendesk**, then click **Setup** and configure under **Zendesk federated search**. Provide your Zendesk subdomain, admin email from Zendesk's support addresses, and API token generated from Zendesk API settings. Validate the details, select the workspace and language for syncing, and save the configuration. This allows searching Document360 articles within Zendesk as external sources.

### Integrations: Intercom

Intercom integrates with Document360 to enable real-time customer support by allowing agents to search and share knowledge base articles within Intercom chats. Requires a valid Intercom account and workspace ID.

### Integrations: Zendesk - Uninstallation

To uninstall Document360 from Zendesk, navigate to **Apps and integrations** > **Zendesk Support apps**, locate the Document360 app, hover to access the settings icon, click **Uninstall**, and confirm in the prompt.

### Integrations: Zendesk - FAQ

**Can I push multiple articles from Zendesk to Document360 simultaneously?**

You can transfer articles from Zendesk to Document360, but only one at a time.

### Integrations: Intercom - Article Search and Sharing

To share knowledge base articles with customers in Intercom chat, click the Document360 icon, search for the relevant article, choose the desired article from the list, and send it to the customer. Customers can click on the article assistant to open it in a new tab. Alternatively, send an Article search app assistant for customer-initiated article searches within the chat.

### Integrations: Intercom - Article Creation

Document360 app assistant integrates with Intercom for creating new articles. Users create articles by filling in title, body, and category in the app. This process mirrors the creation of articles in the Document360 portal.

### Integrations: Salesforce

Document360 integration with Salesforce is an add-on feature for Enterprise plans only. This integration allows support agents to access and create knowledge base articles directly within the Salesforce console.

To integrate Intercom with your Document360 Knowledge base portal:

1. Navigate to **Settings > Knowledge base portal > Extensions**, and locate Intercom under the Helpdesk section.
2. Click **Connect** on the Intercom tile to generate an API token.
3. Sign in to Intercom if prompted, then authorize access on the authorization page to allow Document360 to integrate.
4. After redirecting back to Document360, click the **Edit** icon on the Intercom tile.
5. Select the desired workspace and language from the dropdowns to finalize the integration.

To uninstall:

1. In Intercom, go to **Settings > Integrations > App Store > Your installed apps**.
2. Find the Document360 app, then click **Uninstall** to remove the integration.

### Integrations: Salesforce - Setup

To connect Salesforce with Document360:

1. **Create a Salesforce account** via the [signup page](https://www.salesforce.com/in/form/signup/freetrial-sales/), verify your account, and choose a plan.
2. **Install the Document360 app** from the [AppExchange page](https://appexchange.salesforce.com/listingDetail?listingId=a0N4V00000GYmjZUAT&tab=e), selecting your environment (Production/Sandbox) and user access level.
3. **Add a Visualforce page** in Salesforce Developer Console using the provided code snippet to integrate Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Salesforce.png)

### Integrations: Salesforce - Authorization

To connect Document360 to Salesforce, navigate to Settings > Knowledge Base Portal > Extensions > Salesforce. Purchase the Salesforce add-on if needed. Choose live or sandbox environment. Click "Connect" and "Allow" in the authorization window. Confirm connection status in the Salesforce assistant. View configuration details and delete connection if needed. Salesforce is a separate purchase within your Document360 project.

### Integrations: Salesforce - Content Management

Use the **Knowledge Base** tab in Salesforce to search and view articles and categories. Select workspaces and languages via dropdown menus. Search by name, content, tag, or slug, then filter results by name. Clicking an article or category opens it in **Reader View**, where you can copy links, open articles on your site, or copy specific excerpts for reuse. Use the **Copy link** and **Open site** icons for quick access. The **Filter** field helps refine searches, and the category manager aids in organizing content.

### Integrations: Salesforce - Cases Integration

Enterprise Salesforce plan supports integrating Document360 with Cases to provide agents direct access to knowledge base articles, accelerating case resolution. Other plans do not.

### Integrations: Salesforce - Cases Integration Setup

Integrate Document360 into Salesforce Cases by embedding a Visualforce component. Customize the component size in Lightning App Builder to match Document360 page specs. Create and manage knowledge base articles directly within Salesforce, accessible from cases. Articles are initially drafted and require admin/owner approval for publishing on Document360.

### Integrations: Salesforce - Article Recommendations

Document360 automatically recommends relevant articles based on case subject keywords, displayed with title, snippet, copy options, and open in new tab links. Users can customize workspace and language to filter recommendations. Displays up to 5 articles at a time.

### Integrations: Salesforce - FAQs

- The Document360 and Salesforce integration uses REST APIs for data transfer, with authentication via API keys, OAuth tokens, or other secure methods.
- Custom fields in Document360 can be mapped to custom objects in Salesforce for tailored integration.
- Document versioning is handled by tracking changes and updating corresponding Salesforce records accurately.
- Security measures include encryption, secure API authentication, role-based access, and industry compliance.
- Upgrading involves reviewing API changes, testing in staging, and ensuring compatibility before deployment.
- Salesforce can act as an Identity Provider (IdP) with SAML or OpenID for Single Sign-On.

### Integrations: Slack - Commands

Document360 integrates with Slack via `/doc360` commands. Search knowledge base articles by keyword (`/doc360 search query`). Select version/language for search results. Open or link articles directly in Slack. Create articles (`/doc360 create Title`) within Slack using Markdown. Choose version and category. Articles are created in draft form. Cannot create categories from Slack.

### Integrations: Slack

Slack is a cloud-based communication platform enabling team collaboration. Integrating Slack with Document360 allows agents to access the knowledge base directly, search articles, create documentation, and use the Markdown editor for any version or language.

### Integrations: Slack - Setup

To connect Document360 with Slack, navigate to Knowledge base portal settings, select Extensions, find Slack, click Connect, grant workspace access, and confirm the connection.

### Integrations: Slack - Uninstallation

To remove the Document360 app from your Slack workspace, access the Slack App Directory, select Manage, choose Document360, find "Remove application," and click it. Contact support@document360.com if needed.

### Integrations: Microsoft Teams

Integrate **Teams** with **Document360** for seamless article searching and sharing within Teams, eliminating context switching.

### Integrations: Microsoft Teams - Setup

To connect Document360 to Microsoft Teams: 1) Add the Document360 app to Teams. 2) Generate an API key in Document360's knowledge base portal. 3) Add the API key in the Teams app. Access the knowledge base in Teams using `/Document360` command. Uninstall by right-clicking the app.

### Integrations: Microsoft Teams Overview

Microsoft Teams is a collaboration platform that streamlines messaging, document sharing, and team discussions. The Enterprise plan supports MS Teams extensions integration with Document360, while Professional and Business plans do not.

### Integrations: Microsoft Teams - Article Search

Search and share Document360 articles within Microsoft Teams using either the app logo or `/Document360search` command. Select articles from search results and customize share messages before sending to contacts or channels.

### Integrations: Drift

Integrating Drift (conversational messaging) with Document360 (knowledge base) allows support agents to share relevant articles directly within Drift chats, improving response time and streamlining customer support.

### Integrations: Microsoft Teams - FAQs

Microsoft Teams does not have a built-in Knowledge base feature, but you can integrate platforms like Document360 for this purpose. You can share content from your Knowledge base, such as articles, links, or files, directly in Teams chats or posts. Additionally, you can add a Microsoft Teams extension for non-readers using an API token, enabling communication between different software applications.

### Integrations: Zapier - Setup

To integrate Document360 with other apps using Zapier, you need a Zapier account and a connected account in the other app. Zapier automates workflows (Zaps) between the applications. Refer to Zapier's getting started guide for detailed setup instructions.

### Integrations: Drift - Setup

To integrate Drift with Document360, follow these steps:

1. **Obtain JavaScript code**: Sign up for Drift, log in, go to Settings > App Settings > Install, select JavaScript, and copy the script. Existing users can skip steps 1 and 2.

2. **Set up Drift Chat**: Paste the JavaScript code into Document360's Custom CSS & JavaScript section under Knowledge base settings.

3. **Configure knowledge base**: Connect Document360 to Drift via the Extensions section, authorize, and use /doc360 slash commands to search and share articles.

### Integrations: Zapier - Use Cases

Zapier connects Document360 to various applications, enabling workflow automation. Key integrations include Google Docs, Sheets, Drive; Trello, GitHub, Confluence, CRM platforms (Zoho, Pipedrive, Hubspot, Asana, monday.com); Typeform, email (Gmail, Mailchimp), and more, to streamline document management and task/project execution. This allows for automated data transfer, updates, and notifications between Document360 and connected apps using API rules.

### Integrations: Zapier - Google Docs (Trigger)

Automate content flow from Google Docs to Document360 using Zapier. Connect the platforms via Zapier, map relevant Google Docs fields (title, content, etc.) to Document360, and test the connection. Configure trigger events in Google Docs (e.g., new documents) to create new articles in Document360. This saves manual transfer time and effort.

To generate an API key in Document360 for connecting your knowledge base with third-party applications via Zapier, follow these steps:

1. **Access the Project**: Navigate to your desired Document360 project.
2. **Open Settings**: Click on the settings cog.
3. **Select Extensions**: Go to Knowledge base portal > Extensions.
4. **Team Collaboration**: In the Extensions section, select Team collaboration.
5. **Connect Zapier**: Locate the Zapier extension tile and click Connect.
6. **Retrieve API Key**: A popup will appear with a generated Token (API key); use the copy icon to copy it.

This token enables integration with third-party services on Zapier, facilitating automated workflows and data synchronization.

### Integrations: Zapier - Google Docs

Document360 supports integration with Google Docs via Zapier extensions, available exclusively on the Enterprise plan. This integration enables seamless document management, automates workflows, and enhances collaboration by centralizing documents. Organizations can leverage this setup to streamline operations but must ensure appropriate security measures and plan requirements are met.

tag and provide a markdown heading "## Zap overview". 6. Create a concise TLDR that captures the essential information from the document, focusing on the main actions and steps outlined. 7. Close the

### Integrations: Zapier - Google Sheets

Use Zapier to automate syncing Document360 article additions to a Google Sheet. Connect Document360 and Google Sheets via Zapier creating a "Zap" that triggers on new articles, automatically adding details (mapped article attributes) to the specified Google sheet. Requires signing into Zapier, Document360 & Google accounts, selecting trigger/action events and mapping columns. Re-selection required if Google Sheet names change.

To integrate Google Sheets with Document360, you can use Zapier to automate workflows, such as creating a new article in Document360 when a new row is added to a Google Sheet. This feature is supported in Document360's Business and Enterprise plans.

### Integrations: Zapier - Zap Management

To delete a Zap, navigate to the Zapier dashboard, locate the desired Zap, click the arrow, and select "Turn off and delete Zap". This action permanently removes the Zap. Note: Google Sheets setup is required for Zap integration, detailed in separate documentation.

### Integrations: Zapier - Google Drive

Document360 integration with Google Drive enables seamless file access, linking, management, and sharing within the Document360 knowledge base, improving collaboration and documentation workflows.

### Integrations: Zapier - Google Sheets FAQ

**How is a spreadsheet different from a worksheet?**

A spreadsheet is the overall file you create or open in Google Drive, whereas a worksheet is a specific tab within that file where data is entered and managed.

<a id="google-drive-document360"></a>

### Integrations: Zapier - Zap Management

Zapier is a no-code automation tool connecting web apps. View/edit/delete Zaps (automated workflows) on the Zap overview page. To delete, navigate to the Zapier dashboard, click the arrow next to desired Zap, and select "Turn off and delete Zap".

### Integrations: Zapier - Trello

Automate documentation task management by connecting Trello and Document360 using Zapier. This syncs article publishing events from Document360 to Trello cards, including attributes like content, contributor, and publish date. Users configure triggers (Document360 article publishing) and actions (Trello card creation) via Zapier, ensuring consistent updates in both platforms. This streamlined workflow improves efficiency for documentation teams.

### Integrations: Zapier - Google Drive

Automate workflows between Document360 and Google Drive using Zapier. Create a Zap by connecting Document360 as the trigger and Google Drive as the action. Obtain an API token from Document360's Zapier extension, configure the action to upload files to a specific Google Drive folder, and test the integration. Publish the Zap to enable automatic file syncing, saving time and streamlining document management.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit Zaps. To delete a Zap, navigate to the Zapier dashboard, click the Zap actions icon () on the desired Zap, and select Delete.

### Integrations: Zapier - Trello

_No summary available for this section._

### Integrations: Zapier - GitHub

Automate Document360 content creation triggered by GitHub commits using Zapier. Connect GitHub via Zapier trigger, then connect Document360 via API token; map fields (Title, Content, Version, Language, Category, Publish Status) between platforms for seamless synchronization. Test the Zap, then activate it to automate creation of articles in Document360 reflecting GitHub code changes.

### Integrations: Zapier - Zap Management

Zaps automate Document360 article creation from GitHub commits. Delete Zaps via the Zapier dashboard by finding the Zap, selecting "Zap actions", then "Delete". View Zaps from the Zap overview page.

### Integrations: Zapier - Confluence Server

The provided text describes Confluence, a wiki platform, but does _not_ describe any integration with Document360. This integration is missing from the supplied content.

### Integrations: Zapier - Zap Management

Zaps create Document360 articles from Confluence Server pages. To delete, navigate to the Zapier dashboard, locate the Zap, click "Zap actions" -> "Delete."

### Integrations: Zapier and GitHub

_Document360's Enterprise plan supports Zapier extensions, enabling automation between GitHub and Document360. Use Zapier to create workflows (Zaps) that trigger actions in Document360 based on GitHub events like commits or pull requests. Connect repositories through API tokens, automating tasks such as article creation for new features or updates for resolved issues. Ensure security by limiting permissions and monitor the integration for smooth operation._

### Integrations: Zapier - Zoho CRM

Automate knowledge base article creation in Document360 when new leads/contacts are added in Zoho CRM using Zapier. Connect Zoho CRM as the trigger, Document360 as the action, configure API tokens, map fields (version, language, article, publish status), test, and publish the Zap. Results in a new Document360 article corresponding to the Zoho lead/contact.

### Integrations: Zapier - Confluence

Automate content synchronization between Confluence Server and Document360 using Zapier. Create a Zap with **Confluence Server** as the trigger (e.g., "New Page or Blog Post") and **Document360** as the action (e.g., "Create Article"). Connect both platforms to Zapier by authenticating accounts and generating an API token for Document360. Customize the Zap by mapping fields like workspace, language, category, and publish status. Test the integration to ensure seamless article creation in Document360 whenever Confluence is updated, eliminating manual effort.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit existing Zaps. To delete a Zap, navigate to the Zapier dashboard, select the desired Zap, click the arrow icon, and choose "Turn off and delete Zap" to remove it permanently.

### Integrations: Zapier - Pipedrive Plan Support

<table>
<thead>
   <tr>
      <th>Professional</th>
      <th>Business</th>
      <th>Enterprise</th>
   </tr>
</thead>
<tbody>
   <tr>
      <td></td>
      <td>✓</td>
      <td>✓</td>
   </tr>
</tbody>
</table>

Integrate Pipedrive with Document360 using Zapier extensions, available in Business and Enterprise plans, enabling efficient automation of CRM and knowledge base processes.

### Integrations: Zapier - Zoho CRM

To integrate Zoho CRM with Document360 via Zapier, ensure you're on the Enterprise plan. Connect both platforms to Zapier, create a zap with Zoho CRM as the trigger and Document360 as the action, map fields, test, enable, and monitor. This automation enhances data synchronization and customer support efficiency.

### Integrations: Zapier - HubSpot

Integration of HubSpot with Document360 via Zapier extensions is available in tiered plans (Professional, Business, Enterprise). The integration automates workflows, manages marketing efforts, and controls sales processes. More details on functionality and pricing are needed.

### Integrations: Zapier - Pipedrive

Connect **Pipedrive** and **Document360** via **Zapier** to automatically create Knowledge Base articles in **Document360** when new leads/contacts are added in **Pipedrive**. **Authenticate** both platforms in Zapier, **customize field mappings** (Title, Content, Version, Language, Category, Publish), **test** the integration, and **publish** the Zap. This ensures seamless documentation of lead/contact information.

### Integrations: Zapier - HubSpot

Automate support ticket resolution by creating Document360 knowledge base articles based on new HubSpot tickets. Zapier connects platforms, enabling automated workflows when a related article isn't found. Key steps involve connecting HubSpot and Document360 accounts in Zapier, mapping fields (ticket title/description, workspace, language), testing, and activating the Zap. Use Document360 API token for connection.

### Integrations: Zapier - Zap Management

Automatically creates a Document360 article for each new Pipedrive sales deal. Zaps can be managed and deleted from the Zapier dashboard.

### Integrations: Zapier - Asana

Automate adding Asana-created articles to the Document360 Knowledge Base using Zapier. Connect Asana and Document360 accounts, map article fields (title, content), configure trigger/action within Zapier, test, and publish. Key steps include obtaining API tokens, selecting Asana project/workspace, and choosing the Document360 location for the article.

### Integrations: Zapier - Zap Management

- Automatically create **Document360** articles from new **HubSpot** support tickets.
- Manage and edit Zaps via the **Zapier dashboard**.
- Delete Zaps by navigating to the dashboard, clicking the Zap actions icon, and selecting **Delete**.

### Integrations: Zapier and Asana

Integrate Asana with Document360 via Zapier to automate workflows, ensuring documentation efforts align with task management. Check if your Document360 plan supports Zapier, set up Zaps to trigger actions like creating Asana tasks when articles are published, and streamline your workflow for improved efficiency.

### Integrations: Zapier - Zap Management

This Zap creates articles in Document360 from new Asana tasks. Users can manage and delete Zaps through the Zapier dashboard by navigating to the Zap overview page, selecting the desired Zap, and clicking delete.

### Integrations: Zapier - Monday.com

Automate transferring content from Monday.com to Document360 using Zapier. Connect both platforms via API tokens, map necessary fields (title, content, etc.), and test the automated article creation process within Document360. Publish the Zap for continuous content flow. Key tools are Monday.com, Document360, and Zapier.

### Integrations: Zapier - Monday.com

Integrate Monday.com with Document360 via Zapier to streamline workflows, especially for documentation teams. Common use cases include automating document creation or updates when tasks are added or completed. Key benefits: reduced manual work, improved collaboration, and minimized errors. Setup involves defining triggers in Monday.com and actions in Document360 within Zapier. Ensure both platforms support the integration, check for pre-made Zaps, and secure data transfer. This integration enhances productivity by keeping tasks and documentation in sync.

To integrate Typeform with Document360, utilize Zapier as a middleware. Set up a trigger in Typeform that activates when a form is submitted, then connect it to an action in Document360, such as creating or updating an article. This automation streamlines feedback collection and updates your knowledge base efficiently, reducing manual data entry. Ensure your Document360 plan supports Zapier for this integration.

### Integrations: Zapier - Typeform

Use Zapier to automate transferring Typeform responses to Document360. Connect accounts, map Typeform fields to Document360 article attributes, generate API token, test, then publish the Zap. This streamlines knowledge base updates.

Based on the user's thought process, here's a step-by-step explanation of how to create the Zap:

1. **Log into Zapier**: Access your Zapier account and navigate to the dashboard.

2. **Create a New Zap**: Click on the "Create Zap" button to start the process.

3. **Set Up Trigger**:

- Choose "Monday.com" as the trigger app.
- Select "New Item" as the trigger event.
- Connect your Monday.com account if not already connected.
- Configure the trigger by selecting the specific board and view you want to monitor.

4. **Set Up Action**:

- Choose "Document360" as the action app.
- Select "Create Article" as the action event.
- Connect your Document360 account if not already connected.
- Map the fields from the Monday.com item to the Document360 article. This includes specifying where the article should be created, such as the category or folder.

5. **Test the Zap**:

- Zapier will test the Zap by sending a test article to Document360 based on a recent Monday.com item.
- Verify that the test was successful.

6. **Publish the Zap**: Once everything works as expected, publish the Zap to activate it.

For deleting a Zap:

1. **Access the Zapier Dashboard**: Go to your Zapier dashboard where all active Zaps are listed.

2. **Locate the Zap**: Find the Zap you wish to delete. You can use the search bar if needed.

3. **Delete the Zap**:

- Click on the three dots or the arrow next to the Zap name.
- Select "Turn off and delete" from the dropdown menu.
- Confirm the deletion to proceed.

The Zap will be turned off and removed from your Zapier account, stopping any further automation based on that Zap.

### Integrations: Zapier - Gmail (Notification)

Automatically notify stakeholders of new Document360 articles via Gmail. Use Zapier to connect Document360 & Gmail, configuring email settings (recipients, subject, body). Follow detailed steps for Document360 & Gmail connection, trigger setup (new article creation), action setup (email sending), and Zap testing/publishing. Customize email contents & attachments for each notification.

### Integrations: Zapier - Zap Management

Automatically create Document360 articles from new Typeform entries using Zapier. Manage Zaps via the Zapier dashboard, where you can view, edit, or delete them by clicking the Zap actions icon and selecting delete.

### Integrations: Zapier - Gmail

Document360 supports integration with Gmail via Zapier extensions, though specific plan details (Professional, Business, Enterprise) are not provided. Gmail's features, such as its powerful search, spam filtering, and integration with Google services, make it a versatile tool for communication and collaboration.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit their created Zaps. To delete a Zap, users navigate to the Zapier dashboard, click the Zap actions icon, and select Delete. A screenshot illustrates the process, though it may not load.

### Integrations: Zapier - Mailchimp

Integrate Document360 knowledge base with Mailchimp marketing campaigns using Zapier for automatic updates. Configure trigger (Document360 updates) and action (Mailchimp campaigns). Map audience, subject, and email content fields. Generate a Document360 API token for authentication. Test and publish Zap for automated communication of new/updated content to Mailchimp subscribers.

### Integrations: Make - Setup

To integrate Make with Document360, you need a Make account and an account in the other app you want to connect. Make acts as an automation platform to create workflows (Scenarios) between the two.

### Integrations: Zapier - Mailchimp

Mailchimp is a robust email marketing platform that enables organizations to manage contact lists, track interactions, and gain audience insights. Document360 supports integration with Mailchimp via Zapier across Professional, Business, and Enterprise plans. This integration allows automation of tasks like syncing new users or sending notifications for new articles, enhancing marketing efficiency and documentation processes.

### Integrations: Make - Use Cases

Document360 integrates with popular tools like Asana, Monday.com, Typeform, Google Docs, and Jira using APIs. These integrations allow for seamless document management and workflow automation across different platforms. The integrations enable connecting document creation/management activities within Document360 with tasks, projects, and other workflows in the integrated applications. Essentially, this enables users to manage documents within a centralized platform (Document360), maintain a consistent record, and link related actions to it in other tools.

### Integrations: Zapier - Zap Management

Create Mailchimp campaigns from new Document360 articles. View and edit Zaps on the overview page. Delete Zaps via Zapier dashboard by clicking the actions menu and selecting delete.

### Integrations: Make - Asana

Asana integration with Document360 will streamline project management, task tracking, and collaboration among documentation teams across different project plans (Professional, Business, Enterprise). Asana provides a centralized platform for organizing work, tracking progress, and ensuring accountability in documentation projects.

### API Management: Generating API Keys

Generate an API key by navigating to your Document360 project's **Team collaboration** under **Settings > Knowledge base portal > Extensions**. Click **Connect** on the Make extension tile to obtain a Token, which connects Document360 to third-party apps on Make. Copy and secure the Token for integration.

### Integrations: Make - Monday.com

Document360 plans integration with Monday.com via Make extensions to streamline content creation and collaboration for teams using Monday.com's organization and tracking features. No specific details on plans or implementation are provided.

### Integrations: Make - Typeform

The provided text describes Typeform's capabilities but doesn't explain how it integrates with Document360 or what the function of that integration is. Insufficient details for a meaningful TLDR.

### Integrations: Make - Typeform

Automate Document360 article creation triggered by new Typeform submissions. Configure a Make scenario, connecting Typeform (specifying form ID, and desired fields) and Document360 (API key). Map Typeform response fields to Document360 article title and content. Test and schedule the scenario for automated data flow.

To integrate Asana with Document360 via Make, follow these organized steps for a seamless experience:

1. **Log into Make**: Start by accessing your Make account to begin setting up the integration.

2. **Create a New Scenario**:

- Click on "Create a new scenario" in the Make dashboard.
- Add a module by selecting Asana, choosing the task you wish to monitor (e.g., "Watch Tasks or subtasks").
- Connect your Asana account by following the prompts to allow access and save the connection.

3. **Configure Asana Connection**:

- Select the Asana connection in your scenario.
- Set up filters (e.g., project, workspace) and specify the project ID to monitor.
- Define date parameters for completed and modified tasks, and set a limit on the number of tasks retrieved.

4. **Add Document360 Module**:

- Add another module in Make and select Document360.
- Choose the action (e.g., "Create an article") and set up a connection using an API token from Document360:
- Generate the token in Document360 under Settings > Extensions > Team Collaboration > Make.
- Use this token to create a new connection in Make.

5. **Map Asana Data to Document360**:

- Define how Asana task data maps to Document360 articles, setting the title (e.g., Task Name) and content (e.g., Assignee, Due Date, Description).
- Select the project category where new articles will be created.

6. **Test the Scenario**:

- Run a test by creating a new task in Asana and verify that an article is generated in Document360.
- Review test details and logs in Make to ensure everything works correctly.

7. **Schedule and Activate**:

- Enable the scenario to run automatically every 15 minutes.
- Activate the scenario to start the automation.

By following these steps, you'll have successfully integrated Asana with Document360, automating the creation of articles based on task updates.

### 770. Integrating Monday.com with **Document360**

Quickly connect Monday.com with Document360 using Make (Integromat). Set up a scenario in Make, authenticate both platforms with their respective API tokens (obtained from Monday.com’s profile and Document360’s Make extension), link the modules to trigger actions, and test the integration. Schedule and activate the workflow to automate tasks between the two platforms seamlessly.

The integration of Google Docs with Document360 is planned across different tiers, with details pending for Professional, Business, and Enterprise plans. This feature aims to enhance document management by allowing seamless access and embedding of Google Docs within Document360, streamlining workflows for users. Once plan specifics are available, they will be detailed here.

### Integrations: Zapier - Google Docs

Integrate Google Docs with Document360 using Make. Create a Make scenario to monitor Google Docs (e.g., new documents created in a specific folder) and trigger a Document360 action (e.g., create an article) for each new document. Configure criteria like document folder, execution frequency, and API tokens within Make. Test and schedule the integration for automated workflow.

### Integrations: Make - Jira

Plans exist for integrating Atlassian Jira's service desk functionalities with Document360 across different subscription tiers (Professional, Business, and Enterprise). Current details regarding the specifics of this integration are not provided.

### Integrations: Make - Jira

Integrate Jira with Document360 using Make by creating a scenario, connecting both platforms via APIs. Map Jira task fields to Document360 article attributes. Configure triggers for new Jira tasks to create Document360 articles. Schedule the integration for continuous operation and test thoroughly. Requires Make account, Jira API token, and Document360 API key.

### Integrations: Chrome Extension - Features

Document360 Chrome extension provides easy launch and customizable positioning of the assistant. A quick launch label offers easy access. The "Page Help" tab allows searching and viewing knowledge base articles in the reader view (copy, open, expand options). The "Knowledge base" tab provides a complete tree-view access to integrated articles, permitting browsing and viewing in reader view.

### Integrations: Chrome Extension - Uninstallation

Remove Document360 from Chrome by either: 1) Visiting the Chrome Web Store Document360 page and clicking "Remove from Chrome", or 2) Right-clicking the Document360 icon in Chrome, selecting "Remove from Chrome", and confirming the removal.

### Integrations: Chrome Extension

The Document360 Chrome extension, available in the Chrome Web Store, enables users to access and search knowledge base articles and categories via an API key. Integration plans for Professional, Business, and Enterprise tiers are listed but details are pending.

### Integrations: Crowdin

Crowdin's localization platform integrates with Document360. Professional plans don't support the extension, Business plans require an add-on, and Enterprise plans include it. A Crowdin account is needed.

### Integrations: Chrome Extension - Setup

To set up the Document360 Chrome extension:

1. **Install the extension:**

- Open Chrome.
- Visit the Chrome Web Store.
- Search for Document360, click to open its page.
- Click "Add to Chrome" and confirm by clicking "Add extension" in the pop-up.

2. **Manage extensions:**

- Navigate to More (> ) > Extensions > Manage Extensions.
- Note: Requires a Google account; guest users cannot add extensions.
- For Incognito access, go to Manage Extensions and enable "Allow in Incognito."

3. **Configure API key:**

- Click the Document360 icon in Chrome's top right.
- In the side window, enter your API key.
- To get the API key:
- Log in to your Document360 portal.
- Go to Settings > Knowledge Base Portal > Extensions.
- Select the Chrome extension and click Details.
- Copy the Internal Integration Token.
- Paste the token into the extension window and click Save.

### Integrations: Chrome Extension - FAQ

The Document360 Google Chrome extension allows users to access articles and page categories from their knowledge base, featuring search, article viewing, and navigation. API stands for Application Programming Interface, enabling software communication. \[Crowdin] is linked for potential translation or collaboration.

### Integrations: Crowdin - Pushing Updates

Users can now directly push content updates from Document360 to their connected Crowdin project. This eliminates the need to switch platforms and ensures the latest changes are automatically synchronized. Features include timestamps for translation actions, viewing translation progress on Crowdin, and team collaboration opportunities for edits/reviews. Only synced categories/articles are eligible for "Push to Crowdin."

### Integrations: Phrase

Phrase extension for Document360 is an enterprise-only feature, enabling multilingual content translation for high accuracy, speed, and scalability, potentially leading to resource savings and increased customer engagement.

### Integrations: Crowdin - Setup

Create a Crowdin enterprise project with matching name, source language, and target languages. Generate a Document360 API token and integrate it with Crowdin. Obtain a Crowdin API token and configure it in Document360. Sync categories and articles, ensuring project names match for seamless translation. Machine translations are enabled by default but can be customized.

### Localization: Language Configuration

Configure default language and script direction (LTR/RTL) for translated knowledge base articles. Navigate to workspace settings, choose a language, set default, toggle script direction (LTR/RTL), and save changes.

### Integrations: Phrase - Configuration

Configure translation for knowledge base articles by navigating to Knowledge Base portal > Extensions > Phrase > Details. Select workspace, translation languages, and articles. Click "Translate". Monitor status ("Yet to initiate", "Translated", "Failed", "In Progress") via refresh and filtering. Translated articles move to Advanced WYSIWYG editor and are unrecoverable. Supports single/multiple workspace selection.

### Integrations: Phrase - Setup

Navigate to Settings > Knowledge base portal > Extensions, connect to Phrase, create a new configuration with your API token, select workspaces, and click Create. Use Resync to update translations if language changes occur.

### Integrations: Crowdin - FAQ

Document360 subscriptions do not include Crowdin translation services, but integration is possible. API, defined as a set of communication rules between software applications, plays a role in such integrations.

### Localization: Language Configuration FAQs

Translation options are limited to those supported by the specific project.

### Settings: Project Settings

Document360's "Project settings" page lets you customize your knowledge base portal by configuring project details, editor preferences, file formats, and analytics rules. The settings are broadly applicable across different user roles.

### Settings: Accessing Project Settings

Access project settings by navigating to Settings > Knowledge base portal > General. Configure project name, country, and editor preferences (Markdown, WYSIWYG). Enable/disable "Remember state" to retain UI state. Customize review reminders, drive settings (media format restrictions), analytics settings (IP exclusions), and support access. Save changes.

### Integrations: Phrase - Previewing

- Navigate to Documentation and set the workspace language to match the translated content.
- Preview unpublished articles using the preview option.
- View published articles in the knowledge base.
- Note: Requires a Phrase subscription for the translation service extension.

### Auditing: Accessing Team Audit Logs

Access team audit logs in the Knowledge Base portal's Settings > Knowledge base portal > Team auditing. Filter by event, date, or user. Refresh for updates. Export as CSV to download. Only 20 records display at a time.

### Localization: Getting Started

Document360 supports localization across all plans, allowing users to translate knowledge base content to multiple languages (add-ons available). Content, visuals, and cultural nuances (e.g., units, dates) are customizable. Manual or machine translation is permissible, followed by human review for accuracy. Prioritize localization languages based on customer demographics. Document360 recommends using a single multilingual workspace, leveraging its security and access features, and employing style guides/glossaries for consistency. Update content regularly and track key metrics (user engagement, support tickets, customer satisfaction) to measure success. Machine translation can be a starting point, but human review is crucial. Consider the use of third-party integration tools like Crowdin.

### Auditing: Team Auditing

The **Team auditing** feature allows you to track actions performed by team accounts, such as adding or updating articles and changing settings. It provides accountability by logging who performed each action and when, useful for tracing activities like restoring deleted articles or reviewing changes during a product release. The **Audit configuration** allows selective monitoring of key actions. Access is restricted to Owners, Admins, and users with custom roles.

### Localization: Multilingual Setup

Document360 supports multi-lingual knowledge bases, allowing for either a single project with multiple languages or separate language-specific knowledge bases.

### Auditing: Configuring Audit Settings

To configure the audit settings in Document360, navigate to **Settings > Knowledge base portal > Team auditing**. Enable the **All events** toggle to monitor all project-related activities or select specific event categories from modules like Documentation editor, Drive, Knowledge base portal settings, site settings, widget settings, Users & security, and Tools settings. Each module tracks various actions such as article updates, folder changes, site design modifications, user management, and more. Audit data updates in real-time and can be filtered by user, event, or date range. Access to audit data can be restricted based on roles, and while auditing doesn't recover deleted content, it provides detailed activity logs.

### Localization: Adding Languages to a Version

To add languages to a single knowledge base version, use either of two methods: Method 1 edits an existing workspace, allowing for language selection, default settings, name changes, and more. Method 2 adds entirely new workspaces for the desired languages, starting with an initial machine translation that must be manually translated. Key info is using settings to add, set defaults, edit display names, swap right/left writing direction, hide and delete (but cannot delete or hide default language). Both require manual translation effort.

### Localization: Language Support FAQs

**Document360 TLDR:** Document360 is a knowledge base platform supporting 49 languages (5/3/2 based on plan). Content isn't auto-translated between languages; bulk translation is needed via the "All articles" section. It has three components: a content management system, an online library where users can find answers, and a public-facing website.

### Localization: Supported Languages

Document360 supports 48 languages for localization, including major languages like English, Spanish, French, Chinese, Japanese, and Korean, as well as regional variants such as English (US), English (UK), Chinese (Simplified), and Portuguese (Brazil).

### Content Organization: Workspaces

Document360 projects are central knowledge hubs. Workspaces, created within projects (with plan-limits), are specialized areas for organizing documentation by audience (e.g., internal users, external customers) or product lines. They improve content organization and management efficiency.

### Localization: Customizing Localization Variables

Localization variables enable tailored text across a Knowledge Base portal, ensuring language-specific experiences. Access via Settings > Knowledge Base Portal > Localization & Workspaces > Localization Variables. Edit by selecting a language, updating variables in accordion sections (e.g., Eddy AI, Accessibility), and saving changes. Key details: updates may take up to 15 minutes due to caching, and each language requires manual updates. Examples include customizing "Search" or "In this article" labels.

### Content Organization: Understanding Workspaces

Document360 Workspaces enable organizations to create and manage multiple distinct knowledge bases within a single project, catering to diverse audiences or documentation needs. This feature helps organize content tailored to specific users or product areas, ensuring documentation remains organized, accessible, and relevant, regardless of complexity.

### Content Organization: Workspace Benefits

Workspaces enhance productivity by ensuring relevant information is accessible to specific audiences, improving content organization, and facilitating team collaboration through structured areas for peer reviews and feedback.

### Content Organization: Getting Started with Workspaces

Document360 automatically creates a default workspace ("v1") upon project creation. Using multiple workspaces streamlines documentation, targeting information for specific users (internal teams and customers), and improves access to relevant content.

### Content Organization: Workspace Use Cases

- **Product-specific documentation:** Organize knowledge bases for multiple SaaS products within a single project, using separate workspaces to maintain clear boundaries for each product.
- **Audience-specific documentation:** Create dedicated workspaces for different user roles (e.g., developers, end-users, administrators) to provide relevant content and avoid confusion.
- **Internal and external knowledge bases:** Separate workspaces for internal (e.g., support teams) and external (e.g., customers) documentation, enabling access control and clear content separation.

### Content Organization: Troubleshooting Workspace Issues

404 errors navigating secondary workspaces often stem from the workspace being private, lacking published articles, or hidden articles. Ensure the workspace is public, at least one article is published, and visible within the knowledge base. Workspace status directly impacts visibility and the availability of 'Main workspace' options. The document also covers workspace management, recovery, and display options. Subscription tiers (Free, Professional, Business, Enterprise) affect the quantity of available workspaces and associated features (e.g., backup/restore).

### Billing: Purchasing Additional Workspaces

To purchase additional workspaces:

1. Navigate to **Settings** > **Knowledge base portal** > **Localization & Workspaces** > **Localization & Workspaces**.
2. Click the **buy more** link (available only to users with the Owner role).
3. Adjust the number of workspaces in the **Purchase add-on** window and review the **Amount due**.
4. Confirm payment and await confirmation; workspaces will be added upon successful payment.
5. Download your invoice after payment.

Additional workspaces can also be purchased through the Billing section in Document360 settings.

### Data Management: Backup and Restore

Document360 automatically backs up projects daily at 00:00 UTC. Manual backups are also possible. You can restore documentation, API docs, homepage builder, custom CSS & JavaScript to a previous state. Lost/altered content can be recovered from the latest backup.

### Data Management: Restoring from Backup

To restore from a backup, navigate to Settings > Knowledge Base Portal > Backup & Restore. Select the desired backup and the elements (documentation, API, Homepage, CSS, JS) you want to restore. Compare Custom CSS/JS versions before restoring. Click "Restore," confirm, and wait for the "Backup restored" message.

### Content Organization: Adding New Workspaces

To create a new workspace, navigate to **Settings > Knowledge base portal > Localization & Workspaces > Localization & Workspaces**, then click **Add workspace**. Choose the workspace type, enter a name (max 30 alphanumeric/hyphen characters), and customize the URL. Select a status: Main (default, public), beta, public, or deprecated. Option to create a new workspace or copy existing content, including specific categories and link handling. Configure languages with options for default, display name, right-to-left scripts, and visibility. Finish by clicking **Add**.

### Data Management: Creating Manual Backups

To create a manual backup, go to **Settings** > **Knowledge base portal** > **Backup and Restore**, click **New backup**, enter a backup name, and click **Backup**. The backup will be added to the backup log once complete.

![Creating a manual backup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_manual_backup.gif)

### Data Management: Restore Options

Restore various knowledge base components (docs, API, homepage, custom CSS/JS) from backups. Select specific elements to restore or everything. Preview before restoring. Backups are automatic daily (00:00 UTC), retain for 90 days, and cannot be manually deleted. Compare and copy code snippets for custom CSS/JS.

### Notifications: Webhook Notifications

Document360's webhook feature enables real-time notifications (e.g., to Slack) about knowledge base updates (article changes). This automates information sharing between applications.

### Notifications: Configuring Notification Channels

Configure notification channels in Document360's Knowledge base portal (Settings > Knowledge base portal > Notifications > Notification channels). Available channels include webhook, Slack, Microsoft Teams, and SMTP (email). An SMTP channel is pre-configured and cannot be deleted but its configuration is customizable. Edit, delete, or add new channels.

### Notifications: Slack Notifications

Document360 allows configuring Slack notifications for new articles and updates to knowledge base documents. This feature enables real-time updates for support teams within Slack. Functionality is likely available across all subscription plans.

### Notifications: Overview

Document360 offers notification setup for project changes through channels like email, Slack, Teams, and webhooks. All plans (Professional, Business, Enterprise) support notification settings, enabling real-time updates for users like project managers to stay informed about team modifications.

### Notifications: Setting Up Slack Notifications

To receive Document360 notifications in Slack, create a Slack app, activate incoming webhooks, copy the generated webhook URL, configure the channel in Document360's settings (specifying a "Friendly name" and the copied webhook), and optionally map specific notifications to the Slack channel in the Notification Mapping.

### Notifications: Microsoft Teams Notifications

Document360 users can receive real-time notifications about knowledge base updates (article publications/updates) within their Microsoft Teams channels. This feature is available across different subscription tiers.

### Notifications: Setting Up Webhook Notifications

To set up a Webhook channel in Document360, navigate to Settings > Notifications, select Webhook, configure with a friendly name, choose request method (POST/PUT), specify the URL, format, headers, and authorization if needed, then save and map notifications.

### Notifications: SMTP Notifications

Document360 allows configuration of SMTP to send email notifications about knowledge base updates (article changes) from the portal, site, and widget. This ensures team members are instantly alerted to updates.

### Notifications: Setting Up SMTP Notifications

Configure an SMTP notification channel for your knowledge base portal by navigating to Settings > Knowledge base portal > Notifications > New channel > SMTP. Input a descriptive name, recipient emails (separated by semicolons), and save. Then, map events to trigger email notifications.

### Notifications: Notification Mapping

Document360's notification mapping allows users to configure alerts for updates (documentation, security, analytics) across different user roles (Professional, Business, Enterprise). This facilitates automated updates without manual checking. The table, however, is empty, so there's no specific mapping to summarize.

### Notifications: Mapping Channels to Events

Configure notifications in the knowledge base portal by enabling events (all or specific modules/events), then mapping those events to desired channels (e.g., email). All events are initially off. Specific events like "Analytics weekly mail" can be enabled per module. Each enabled event requires at least one assigned notification channel.

### Notifications: Notification History

Document360's notification history tracks delivery statuses of alerts (e.g., system updates, errors) sent to configured channels (like Slack). This allows teams to monitor delivery, troubleshoot failures, and ensure critical updates are received.

### Notifications: Setting Up Teams Notifications

Setup involves three main steps: creating a Teams channel, obtaining a webhook URL, and configuring it in Document360. For each step:

1. **Create a Teams Channel**: Open Teams, navigate to the desired team, add a new channel named (e.g., "Document360 Notifications").
2. **Get Webhook URL**: In the new channel, manage settings, add an incoming webhook, generate and copy the URL.
3. **Configure in Document360**: Navigate to Notification channels, add a new channel, select Teams, enter a friendly name, paste the webhook URL, and save.

Test the setup by triggering a notification and check the channel for receipt. Use Notification Mapping to customize which events trigger alerts. For multiple channels, repeat the process with different webhooks and map accordingly.

### Notifications: Custom Email Domains

Enterprise users can configure custom email domains for notifications in Document360. Requires configuring MX and TXT records on your DNS provider. Follow steps to add domain, obtain records from Document360, add records to DNS, verify the configuration, and specify the "From" email address and sender name. Verification and troubleshooting are addressed.

### Notifications: Notification Event Types

The document describes notification events across multiple modules, including Documentation editor (e.g., article updates, visibility changes, workflow status), Drive (e.g., folder and file modifications), Knowledge base portal settings (e.g., workspace updates, tag changes), Knowledge site (e.g., feedback and user interaction alerts), AI notifications (e.g., credit usage alerts), Analytics (e.g., weekly metrics), and comments (e.g., inline comment notifications). These events enable users to stay informed about changes and activities within their knowledge base ecosystem.

### API Integration: Postman Integration

Import the Document360 API into Postman using `https://apihub.document360.io/swagger/v2/swagger.json`. Authenticate using a Document360 API token, obtained from Settings > Knowledge Base portal > API tokens. Create a Postman environment variable (`base_URL`) with the API hub URL (`https://apihub.document360.io`). This allows accessing Document360 API endpoints via Postman. Re-authentication might be needed if the Postman session ends.

### Notifications: Managing Notification History

Access notification history by navigating to **Settings > Knowledge base portal > Notification** and selecting the **Notification history** tab. The history provides details for each notification, including channel name, delivery status, submission date, sent date, and event details. Use the **View details** option to review the content sent to users. This feature allows tracking and verification of notification delivery.

### API Integration: Swagger Documentation

Authenticate with API token. Use `GET` to retrieve, `POST` to add, `PUT` to update, and `DELETE` to remove items. Required fields use underscores (e.g., `email_id`). Proper formatting and usage of the specified API methods are crucial. Authentication is required to use the API. Refresh may end session, requiring re-authentication.

### Search: Full Portal Search

Full portal search allows users to simultaneously search across all project content, files, tags, users, content tools, and settings across all workspaces and languages.

### API Integration: Using Postman

Postman is an API platform that allows users to build and use APIs. It can be easily integrated with a Document360 project, offering both on-premises and web-based access. For guidance, refer to the following resources:

- [Download Postman](https://www.postman.com/downloads/)
- [Install and Update Postman](https://learning.postman.com/docs/getting-started/installation-and-updates/)
- [Postman Documentation](https://learning.postman.com/docs/)
- [Postman FAQs](https://www.google.com/search?q=FAQs+in+Postman%3F&rlz=1C1CHBD_enIN1119IN1119&oq=FAQs+in+Postman%3F&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgoIARAAGIAEGKIE0gEHNjI5ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8)

### API Integration: Using Swagger

Swagger is a tool that creates interactive API documentation. Here's a concise guide:

1. **Definition**: Define your API using Swagger's JSON/YAML specification, detailing endpoints, methods, and parameters.
2. **Documentation**: Use Swagger UI to generate a web interface where users can explore and test API calls.
3. **Interaction**: Users can send requests and view responses directly in the interface, aiding development and testing.
4. **Integration**: Automatically updates with API changes, ensuring documentation stays current.

Swagger simplifies API understanding and testing through visual, real-time interaction.

### Search: Article Search

A tool allows searching all project articles and categories across all workspaces and languages.

### Search: Accessing Articles via Search

To find articles, click the search icon, select "Articles" in the dropdown menu. Type keywords; results show article title, workspace, language, status. Use filters to refine. Preview results by clicking and use the full-screen option to expand. Click "Go to article" to access the full document.

### Search: Article Search Filters

TLDR; Search filters for articles allow users to refine results by workspace/language, visibility (None, Visible, Hidden), status (None, New, Draft, Published), contributors (search by username), tags (multi-select), and updated date (7 days, 30 days, 3 months, 1 year, or custom). Filters can be cleared.

### Search: Accessing Full Portal Search

- Access the search by clicking the icon on the top navigation bar.
- Use the dropdown to select a module: All, Article, Drive file, Users & Groups, Tags, or Settings.
- Enter keywords; each module displays up to five results.
- Expand results by clicking "More articles."
- Apply filters or preview items as needed.
- Navigate using "Go to article."
- Press Escape to exit.

### Search: Drive File Search

The Drive - Full portal search feature enables searching through all files in the Drive on a project. The table listing support across Professional, Business, and Enterprise plans is incomplete.

### Search: Accessing Drive Search

Search the entire drive by clicking the search icon, selecting "Drive" from the dropdown, and typing keywords. Results show file name, dependencies, update details, size, and tags. Filter by status (all, deleted, starred), file type (image, word, etc.), uploaded by, tags, upload date, or custom date range. Click on a file to see details (location, type, upload info). View dependencies to see where the file is used in articles/categories.

### Search: Accessing Users and Groups Search

To find users and groups, use the search icon, select "Users & Groups," and type a keyword. This returns results categorized as "Team accounts & groups" (view permissions, manage permissions, see associated members) or "Readers & groups" (view readers, manage associated readers). Clicking on an entry provides detailed information and further actions. This feature allows for searching team accounts, groups, readers, and reader groups within the portal.

### Search: Tag Search

The "Tags - Full portal search" page enables knowledge base tag searching and viewing, including dependency information. Different user roles (Professional, Business, Enterprise) may have varying access or search options.

### Search: User and Group Search Filters

The Users and Groups module offers two key filters:

1. **Type**: Options include All entity, Team account, Team account groups, Reader, and Reader Groups (default: All entity).
2. **Last logged in**: Options are All, 7 days, 30 days, 3 months, 1 year, or Custom date (default: All).

After selecting filter criteria, click **Apply** to apply them or **Clear** to reset.

### Search: Users and Groups Search Overview

The **Users & Groups - Full portal search** feature enables searching for team accounts, team account groups, readers, and reader groups in a knowledge base project. The support status for Professional, Business, and Enterprise plans is not specified.

### Search: Settings Search

A dedicated search page exists within the knowledge base portal to find features and settings. No details on the search functionality or supported plans are provided.

### Search: Accessing Settings Search

To access settings, click the Search icon, select "Settings" from the dropdown, search for the desired setting by keyword, and click on it to view/modify the settings page. Settings are grouped by Knowledge base portal, Knowledge base site, and Users & Security. Search results display setting names, icons, and short descriptions.

### Site Configuration: Custom Domain Mapping

Document360 allows users to customize their knowledge base website address from the default `project-name.document360.com` to a custom domain (e.g., `help.yourcompany.com`). This improves branding and user experience. Access via Settings > Knowledge base site > Custom domain. New projects use the project name as the default domain.

### Search: Accessing Tag Search

- Click the Search icon () on the top right, press Escape to close.
- Select "Tags" from the dropdown, type your keyword to see results.
- Results show tag name and dependencies (articles, categories, files).
- Click a tag to view detailed dependency info:
- For articles/categories: name, version, language, contributor, status, publish date.
- For files: thumbnail and filename.
- Download files or remove dependencies by selecting checkboxes and clicking "Remove dependencies."
- Cancel to close the panel.

### Site Configuration: Setting Up Custom Domains

To use your own domain with Document360, add the domain in Document360's settings, create a CNAME record in your domain registrar pointing to Document360's provided value, verify this setup in Document360. If you get a "Deceptive site ahead" warning, check Google's Safe Browsing site status and address reported issues. Various domain registrar instructions are included.

### Site Configuration: Custom Domains for Apex Domains

To use your root domain (Apex) with Document360, ensure your domain registrar supports DNS flattening (some don't, like GoDaddy). If not, use a DNS provider like Cloudflare. Document360 provides a custom SSL certificate, which needs to be renewed within 90 days to continue using the custom domain properly. Important details like the Common Name (CN) are needed for the certificate.

### Site Configuration: Editing Default Domains

To edit the default web address:

1. Go to the **Custom domain** page in Document360 settings.
2. Click the **Edit** icon next to the default domain.
3. Enter your preferred domain.

- If unavailable, the **Update** button is disabled; try a different domain.
- If available, the **Update** button is enabled.

4. Click **Update** to save changes.

### Site Configuration: Subdirectory Hosting Support

No information is available in the provided table regarding which plans support hosting Document360 on a subdirectory.

### Site Configuration: Load Balancer

A **load balancer** distributes traffic across multiple servers to keep your site fast and reliable, especially during high traffic periods. Upgrading it enhances security, traffic management, and performance. The upgrade is free, causes no downtime, and involves these steps:

1. Navigate to **Settings > Knowledge base site > Custom domain > Custom domain mapping**.
2. Click **Upgrade**.
3. Verify the configuration in Document360.
4. Copy the generated CNAME record.
5. Set up the CNAME record in your domain registrar.
6. Re-verify the configuration in Document360.

Contact [support](mailto:support@document360.com) if needed.

### Site Configuration: Understanding Subfolder Hosting

Subfolder hosting organizes website content hierarchically within folders under the root domain (e.g., `example.com/docs`). This approach is often preferred over subdomains for SEO reasons. Subfolders are subdirectories that reside beneath the primary website's root domain, improving SEO.

### Site Configuration: Troubleshooting Domain Issues

- **Domain Verification Failed**: Ensure CNAME records match and no duplicate DNS records exist. Use tools like Digwebinterface to verify DNS settings. Some registrars like Cloudflare may mask records.
- **DNS Propagation**: Allow up to 24 hours for DNS changes to propagate. Check TTL settings if issues persist.
- **CAA Restrictions**: Check for CAA records restricting SSL providers. Add required CAA entries for Digicert, LetsEncrypt, and Google.
- **"This site can't be reached" Error**: Verify DNS configuration, check for duplicate records, and ensure SSL provider CAA entries are present.
- **SSL Certificate Issues**: Check certificate expiration, browser settings, and DNS resolver configuration. Try accessing via different browsers or without VPN.
- **FAQs**:
- Document360 provides SSL certificates automatically.
- Custom domains reflect in invitation emails.
- Multiple domains per project are not supported.
- Naked domains are those without "www" prefix.
- Domain registrars manage domain purchases and DNS settings.

### Site Configuration: Post-Configuration Steps

Knowledge base site is live on custom subfolder, but needs a redirect from main domain to prevent duplicate content issues with search engines (e.g., `example.com/docs`). Contact Document360 support for this redirect. Configure canonical URL (e.g., `https://www.yourdomain.com`) in knowledge base portal settings to globally indicate preferred URL for search engines. This avoids duplicate content and ensures the correct URL ranks better.

### Site Configuration: Web Server Information

A web server delivers website content (text, images, video, application data) to clients like web browsers. Common web servers include Apache HTTP Server, Nginx, ASP.NET Core, Microsoft IIS, OpenResty, LiteSpeed, and Cloudflare.

### Site Configuration: Enabling Subfolder Hosting

- Enable subfolder hosting by navigating to **Settings > Knowledge base site > Custom domain > Subfolder hosting tab** and toggle on the feature. Default path is `/docs`.
- For custom subfolder paths (e.g., `/help`), enter the desired path and click **Update**. Ensure subfolder hosting is enabled and configure languages for your server.
- For **KB site 2.0**, customize the Site API path (e.g., `/docs-api`) in the same tab. Both Subfolder and Site API paths must be defined for proper functionality.

> **Note**: Article preview is not supported for custom domains with subfolder hosting. Site API path is separate from API documentation.

### Site Configuration: Nginx Subfolder Hosting

Nginx is an open-source web server that supports hosting websites in subfolders. For more details, refer to the [**Nginx documentation**](https://nginx.org/en/docs/).

### Site Configuration: Nginx Configuration Resources

Nginx location blocks direct requests to different parts of your web server based on URL patterns. There are selection algorithms that determine which location block to use when matching incoming requests. See external Nginx documentation and tutorials for details about configuring and understanding these algorithms.

### Site Configuration: Nginx Sitemap Proxy

Configure Nginx to proxy sitemap requests to a backend server. Example uses `example.document360.io`, but replace with your domain (e.g., `your-custom-domain.com`). Supports language-specific sitemaps (e.g., `/sitemap.xml.en`). Ensures proper header forwarding for security and tracking.

### Site Configuration: Nginx Post-Configuration

After configuring the web server, your knowledge base is accessible via both your project's existing URL and your custom domain. This may cause duplicate content, so a redirect from the existing Document360 subdomain URL to your custom domain URL is needed. Contact support to implement this redirect.

### Site Configuration: Nginx Subfolder Setup

Configure Nginx by adding location blocks for your desired subdirectory, specifying proxy_pass, headers, and sub_filter directives to rewrite URLs. For multiple workspaces, add separate blocks and redirects. Restart Nginx to apply changes.

### Site Configuration: Nginx Home Page Subfolder

To host a project's home page on a custom subfolder, add Nginx configuration blocks for each workspace. Each block proxies requests to the Document360 domain and sets appropriate headers. Redirects are used for language-specific paths. After updating the configuration, restart Nginx.

**TLDR;** Configure Nginx with exact location blocks for each subfolder, proxy to Document360, set headers, handle redirects, then restart Nginx. Customization of domains, subfolders, and workspaces is required.

### Site Configuration: ASP.NET Core Subfolder Hosting

Host a knowledge base as a subfolder (`/docs`) of your main website using an ASP.NET Core server. Install the `Microsoft.AspNetCore.Proxy` package and configure a proxy to route requests to the knowledge base's actual server (e.g., `example.document360.io`). Define both the subfolder path and the knowledge base's API path if on KB Site 2.0. Replace example domain with your specific Document360 or custom domain.

### Site Configuration: ASP.NET Core Post-Configuration

Duplicate content issue arises after configuring knowledge base in a custom subdirectory (e.g., `example.com/docs`). A redirect from the original site URL (`example.document360.io`) to the new subfolder URL is required. Contact `support@document360.com` to implement this redirect.

### Site Configuration: IIS Subfolder Hosting

Integrate knowledge base into existing website via subfolder (`/help`). Pre-requisites include Application Request Routing and URL Rewrite IIS modules. Replace example domain with your Document360 or custom domain.

### Site Configuration: Troubleshooting Nginx Issues

TLDR of common NGINX setup issues and their solutions:

- **Invalid "location" Directive**: Ensure location blocks are within a server block. Example configuration:

```nginx
server {
listen 80;
server_name example.com;
location /docs {
      proxy_pass https://example.document360.io/docs;
      proxy_set_header Host example.document360.io;
}
}
```

- **Certbot Package Unavailable**: Enable EPEL repository and install Certbot:

```bash
sudo yum install epel-release
sudo yum install certbot
```

- **NGINX Configuration Test Failed**: Run `sudo nginx -t`, check error messages, and fix syntax issues. Example correction:

```nginx
## Incorrect
proxy_pas https://example.com;

## Correct
proxy_pass https://example.com;
```

- **SSL Certificate Issue**: Verify certificate with OpenSSL and ensure correct NGINX configuration:

```bash
openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout
```

Example configuration:

```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
}
```

Each resolution includes essential steps and examples for quick troubleshooting.

### Site Configuration: IIS Post-Configuration

To avoid duplicate content issues, a URL redirect is required from your original project URL (e.g., `yourcompany.document360.io`) to the custom subfolder (e.g., `yourcompany.com/help`). Contact `support@document360.com` to enable this redirect. Using a custom subfolder on your existing domain prevents duplicate content impacting search engine rankings.

### Site Configuration: Web Server Sitemap Proxy

Configure a web server to proxy requests for sitemap.xml files (e.g., `/sitemap.xml.en`), forwarding them to an internal or external server hosting the actual sitemap data. This hides the internal location of the sitemap file. The configuration example uses `example.document360.io` as a placeholder.

### Site Configuration: Subfolder Hosting Next Steps

The knowledge base is now accessible via two URLs (project URL + custom subfolder). To avoid duplicate content issues, a URL redirect (from project URL to custom subfolder) is necessary. Contact support to enable the redirect.

### Site Configuration: IIS Subfolder Setup

To set up a sub-folder path for hosting documentation, follow these steps:

1. **Install Required Modules**:

- Install the [URL Rewrite module for IIS Server](https://www.iis.net/downloads/microsoft/url-rewrite).
- Install and enable the Application Request Routing (ARR) module.

2. **Configure web.config**: Add the following rewrite rules to your `web.config` file to proxy requests to your documentation:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
   <rewrite>
      <rules>
            <rule name="ReverseProxy_HomePage" enabled="true" stopProcessing="true">
               <match url="^help$" />
               <action type="Rewrite" url="https://example.document360.io/v1" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
            <rule name="ReverseProxy_DocsPage" enabled="true" stopProcessing="true">
               <match url="^help/(.*)" />
               <action type="Rewrite" url="https://example.document360.io/help/{R:1}" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
      </rules>
   </rewrite>
</system.webServer>
</configuration>
```

**Important Considerations**:

- Backup your `web.config` file before making changes.
- If using KB Site 2.0, ensure you define both the Subfolder path and the Site API path.

### User Management: Reader Self-Registration

Users can independently create reader accounts on knowledge base sites by following a self-registration process. Share the knowledge base URL. Users enter name & email, then verify the email for password set-up. Project members control reader access. Email verification is a one-time process usable across projects.

### User Management: Reader Self-Registration - Plan Availability

The self-registration feature is available for Business and Enterprise plans when the Knowledge base site access is set to Private or Mixed.

### Site Configuration: Apache Subfolder Hosting

The Apache HTTP server is a free, open-source solution offering flexibility and customization for hosting Document360 knowledge bases as subfolders. Key steps include enabling necessary modules (proxy, headers, substitute, etc.), configuring VirtualHost for proxying and URL substitutions, setting up redirects, and restarting the server. Substitutions ensure links reflect the subfolder structure, and redirects manage URL paths seamlessly.

### User Management: Configuring Reader Self-Registration

Enable reader self-registration in Document360 settings to allow users to register themselves. Configure default reader groups and/or restrict access by email domain (allow or block specific domains). Newly registered readers are added to default groups unless their domain is already assigned.

### User Management: Domain Restrictions for Self-Registration

Configure knowledge base self-registration by domain. Specify email domains (allowing or blocking) and assign reader groups to those domains. Domain-specific settings override default reader groups.

### User Management: Creating Reviewer Accounts

Create Reviewer accounts individually by selecting "Reviewer" in the portal role during team account creation. Bulk import is possible by using a CSV file with email addresses. Ensure correct roles (portal and content) are selected in both methods. Specify content access permissions as needed.

### User Management: Reader Self-Registration FAQs

- **No default reader group selected:** Self-registered readers get unrestricted access to the knowledge base.
- **Multiple group memberships:** Readers receive the highest level of access for each content item.
- **Individual vs. group access:** The highest privilege from both settings is granted to the reader.
- **Access prioritization:** The highest privilege at each content level determines access.
- **Self-registration not working with SSO:** Self-registration requires the Document360 login page, which is bypassed by SSO.

### User Management: Reviewer Role Overview

The **Reviewer** role in Document360 allows users to view articles, add comments, and update workflow statuses without editing content. This role is available across Professional, Business, and Enterprise plans, providing controlled access to the Documentation module for streamlined content review.

### User Management: Managing Reviewer Accounts

Manage reviewer accounts in the "Team accounts & groups" section of settings. Edit/delete existing accounts, convert to/from reader accounts, and purchase reviewer add-ons through the billing section. Conversion to reader involves content access permissions selection and optional mapping to reader groups.

### User Management: Reviewer Role Capabilities

Reviewer role enables content review without editing. Reviewers access articles (in draft mode), leave comments, suggest edits, and update workflow statuses. Access is controlled (usually by category/article). Specific number of Reviewer accounts depend on plan tier (Professional: 5, Business: 10, Enterprise: 20). No direct content edits are permitted.

### User Management: Account Lockout

Five incorrect password attempts lock an account for 30 minutes. User receives "Account locked due to multiple failed attempts! Please try again after 30 minutes" message.

### User Management: Reviewer Permissions

Reviewers have access to the Documentation module, enabling them to view articles in Draft or workflow states, add comments (inline or general), update workflow statuses, set due dates, and manage assignments. They can also perform bulk updates across multiple articles. However, they cannot add comments when an article is in Read only mode, and only one Reviewer can review an article at a time, with others notified when a Reviewer is active.

### User Management: Password Requirements

Password must be ≥8 characters, containing at least 1 uppercase, 1 lowercase, 1 number, and 1 special character.

### User Management: Password Reset

To reset your password, follow these steps: Click "Forgot password?", enter your email, check your inbox for the reset link, click the link, set your new password, and confirm. Password changes apply to your entire account.

### Access Control: Block Inheritance Plan Support

No information about block inheritance plan features is provided in the table. The table is empty.

### User Management: Changing Passwords

To change your current password, follow the instructions in the [Change password article](https://docs.document360.com/v3/docs/change-password).

### Access Control: Blocking Inheritance

Block inheritance lets you override inherited content access permissions, allowing granular control over who can see specific content (like workspaces, languages, categories, articles) within a system, regardless of broader team permissions. Administrators selectively grant access to targeted accounts on a per-content-level basis. Removing inherited permissions isolates access to only the accounts explicitly added in the content access list.

### Security: IP Restriction

Project-level IP restriction controls access to a knowledge base by allowing/blocking specific IP addresses (IPv4 and IPv6). Restrictions apply to all workspaces and languages within a project.

### Access Control: Block Inheritance FAQs

Disabling inheritance restricts access to only specified team accounts and groups, and the team account performing the action is automatically selected and cannot be removed.

### Access Control: Enabling Inheritance

To enable inheritance, navigate to the desired category/article in the Documentation section, access Security settings via the More icon, toggle off **Block inherited account**, confirm by clicking **Yes**, and then close the blade. This allows inherited team accounts and groups to access the content, streamlining permission management.

N/A - No Think section needed as per instructions, moving to output.

### Security: Managing IP Restrictions

- **Overview**: Navigate to Settings > User & Security > IP Restriction to manage IP access.
- **IP Details**: View Friendly name, IP address (IPv4/IPv6), Allow/Block status, and Remove/Save options.
- **Add IP**: Enter a name, IP or range, and save; supports specific IPv6 formats.
- **Permissions**: Set IPs to Allow or Block access; avoid duplicates to prevent conflicts.
- **Deletion**: Permanently remove IPs using the Remove icon.

### Authentication: Single Sign-On (SSO) Plans

Single Sign-On (SSO) plans are not yet defined for Professional, Business, or Enterprise tiers. More details are needed to create a descriptive TLDR.

### Authentication: Understanding SSO

**Single Sign-On (SSO)** enables users to access multiple applications/websites with a single login. Users log in once and gain access to all connected applications without repeatedly entering credentials. SSO operates via a central authentication service (the service provider).

### Authentication: Benefits of SSO

- **Enhanced Security:** Reduced credential storage points, harder for attackers.
- **Increased Productivity:** Faster access to systems/apps, fewer passwords.
- **Improved UX:** Fewer login prompts, less frustration.
- **Simplified IT:** Centralized credential management, easier access control.
- **Compliance Support:** Adherence to industry/sector mandates.
- **Cost Reduction:** Less need for redundant systems and support staff.

### Security: IP Restriction FAQs

**What is an IP address?**\
An identifying number for a computer or network on the internet, enabling communication.

**What is an IPv4 format?**\
Four numbers (0-255) separated by dots (e.g., 49.206.113.170).

**What is an IPv6 format?**\
Eight groups of hexadecimal digits, colon-separated (e.g., FE38:DCE3:124C:C1A2:BA03:6745:EF1C:683D).

**What is an IPv6 unicast address?**\
Identifies a single interface for direct communication, unlike multicast or anycast.

### Authentication: SSO Process

Single Sign-On (SSO) works through a collaboration between a **Service Provider** (e.g., Document360) and an **Identity Provider (IdP)**. When a user accesses the Service Provider, they are redirected to the IdP to authenticate using their credentials. Upon successful authentication, the IdP issues an **Access/ID token**, which the Service Provider validates. This establishes a trust relationship, allowing the user to access SSO-enabled applications without additional sign-ins. Document360 supports multiple IdPs, offering flexibility for users to choose their preferred authentication method.

### Authentication: Identity Providers (IdPs)

An **Identity Provider (IdP)** is an external entity that manages user identities and authenticates users, enabling Single Sign-On (SSO) to access multiple services with one login. It stores credentials and handles logins for various applications. Each stored entity is called a **principal**. Examples include **Okta**, **Entra ID**, **Google**, **ADFS**, and **OneLogin**.

### Authentication: Logging In with SSO

Access the Document360 Knowledge base portal using SSO. Enter email/domain, click "Continue with SSO," authenticate via your Identity Provider (IdP) login.

- **Step 1:** Navigate to the Knowledge base portal URL.
- **Step 2:** Input your email or subdomain.
- **Step 3:** Click "Continue with SSO."
- **Step 4:** Log in to your IdP.
- **Result:** Automatically logged into the Knowledge base portal.

### Authentication: IdP-Initiated Sign-In

Document360 login is possible directly from the Identity Provider (IdP) dashboard if configured. Find the Document360 app within the IdP's dashboard to initiate SSO login, bypassing the need for a separate portal visit. Uses existing SSO credentials.

### Authentication: Supported SSO Standards

Document360 supports Single Sign-On (SSO) through SAML 2.0 and OpenID Connect. SAML 2.0 is a robust standard enabling secure cross-application authentication, while OpenID Connect offers a modern, user-friendly alternative. Both protocols support various Identity Providers (IdPs) such as Okta, ADFS, Google, and others, with comprehensive configuration guides available for setup and removal.

### Authentication: SSO Login - Portal

SSO enables access to the Knowledge base portal using existing credentials from an identity provider, eliminating the need for multiple passwords. The document does not specify which plans (Professional, Business, Enterprise) support SSO.

### Authentication: SSO Login - Site

Document360's Knowledge base site supports single sign-on (SSO), allowing users to log in with their existing credentials from another identity provider (IdP), eliminating the need for separate passwords.

### Authentication: SSO Login Process

Use your existing identity provider (IdP) credentials to log into the Document360 Knowledge Base. Visit the site, select your IdP's login button, log into your IdP, and you'll be automatically logged in. SSO login buttons vary based on configurations.

### Authentication: Troubleshooting SSO Login

The HTTP 500 error during SSO login likely stems from an outdated SAML certificate or incorrect attribute mappings. Update the IdP with the latest metadata from Document360 to ensure the correct certificate is used. Verify that SAML attributes like email and name match exactly between the IdP and Document360. If issues persist, contact support for further assistance.

### User Management: Adding SSO Team Accounts

To add a new team account linked to SSO, follow the standard Document360 team account creation process in the Knowledge Base portal, but additionally: 1) Ensure the user email matches the SSO domain; 2) Select the desired SSO configuration; 3) Optionally, skip the invitation email. Only Owners/Admins can add accounts.

### Authentication: Enabling IdP-Initiated Sign-In

Enable the **Allow IdP initiated Sign-In** feature during SSO setup to log in directly from your IdP's dashboard—find the Document360 application, click to initiate login, and securely access the Knowledge base with your SSO credentials.

### User Management: Inviting SSO Users

After configuring Enterprise SSO using SAML or OpenID, users can authenticate via identity providers like Okta, Azure AD, or Google Workspace. You can add new SSO users directly or invite existing users to use SSO.

### User Management: Deleting SSO Users

To delete an SSO user in Document360, navigate to Team accounts & groups, hover over the SSO account, click "Delete", then confirm. SSO users are identified by the SSO label. Deleting an SSO user does _not_ delete the associated team account.

### Authentication: SSO FAQs

You can't add a user twice as an SSO reader account in a project. If the user exists as an SSO reader, the "Create reader account" button is disabled. SAML is used for single sign-on.

### User Management: Inviting Existing Users to SSO

To invite existing users to login via SSO in Document360, follow these steps: log in, navigate to **Settings > Users & Security > SAML/OpenID**, edit the SSO configuration, select **All users** or **Selected users only**, and save. Users receive an invitation email, and an additional SSO account is created alongside their existing one.

### Authentication: Mapping SSO Configurations

To map an existing SAML/OpenID SSO configuration to another Document360 project, log in, navigate to project settings, and select "Create SSO," then choose the existing configuration from a dropdown. Existing IdP and SSO protocol (SAML/OpenID) must match.

### Authentication: Disabling the Default Login Page

To bypass the Document360 common login page in a specific project, enable the "Disable Document360 login page" toggle within the project's SAML/OpenID settings. This affects SAML and OpenID SSO setups.

### Authentication: Login Page FAQs

Turning on the "Disable Document360 login page" toggle forces users to log in via single sign-on (SSO) using SAML, eliminating email/password login.

### User Management: Auto-Assigning SSO Readers

To automatically assign SSO readers to a Document360 knowledge base, configure SAML/OpenID settings in the project's "Users & security" section. Enable the "Auto assign reader group" option and select the desired existing reader groups. Ensure reader groups are already created.

### Authentication: Disabling Default Login

Organizations using only SSO users can disable the Document360 login page, redirecting users directly to the SSO login. This feature is supported in certain plans, though specifics aren't detailed. Caution is advised if both SSO and regular accounts are present, as disabling the login page may prevent regular users from accessing their accounts.

### User Management: Converting to SSO Accounts

Convert Document360 team/reader accounts to SSO accounts for single sign-on access, simplifying login. SAML/OpenID projects only. Select accounts, click "Convert to SSO account," confirm. Previous contributions remain but appear as "Anonymous." Owner accounts become both Document360 and SSO, preserving access. SSO accounts cannot be converted back.

### User Management: Auto-Assigning Reader Groups

The Auto assign reader group feature simplifies knowledge base access by automating reader access for those using SSO, supported across Professional, Business, and Enterprise plans, eliminating manual invitations.

### User Management: Account Conversion FAQs

Document360 account owners/admins and team account managers can convert to SSO accounts. JWT projects cannot be converted. Accidental SSO conversions require manual recreation of Document360 accounts and roles.

### Authentication: SSO Account Conversion Support

- Single Sign-On (SSO) is typically supported in Business and Enterprise plans, while availability for Professional plans may vary by provider.

### Authentication: SSO Session Timeout FAQs

User accounts logging into the Knowledge Base via SSO will timeout after 2 hours of inactivity. This timeout is configurable. SAML is the SSO standard used.

### Authentication: SAML SSO

SAML 2.0 enables single sign-on (SSO) for Document360. Users can log in with their existing identity provider (IdP) credentials. Document360 supports multiple SSO endpoints for teams and readers.

### Authentication: SSO Idle Timeout

The **Sign out idle SSO team account** feature enhances Document360 security by automatically logging out inactive SSO accounts (SAML/OpenID) after a idle period, preventing unauthorized access and streamlining management.

### Authentication: Enabling SSO Idle Timeout

To enable the feature, follow these steps in the Knowledge base portal:

1. Navigate to **Settings > Users & Security > SAML/OpenID**.
2. Hover over an existing SSO configuration and click the **Edit** icon.
3. Under the **More settings** tab, toggle **ON** the **Sign out idle SSO team account** option.
4. Set the idle timeout duration in **hours:minutes** format.
5. Click **Save** to apply the changes.

> **Note**: Applies only to SSO team accounts, not Document360 team accounts.

### Authentication: Troubleshooting SAML SSO

Document360 SAML SSO login problems often stem from using an incorrect or expired certificate in your Document360 settings. To fix this: 1) Obtain the _active certificate_ from your Identity Provider (IdP). 2) Replace the certificate in Document360's settings. If issues persist, use the SAML Tracer extension to capture logs, then contact support with screenshots of IdP configuration, certificate details, and the logs.

### Authentication: SAML SSO with Okta

Document360 users with Owner or Admin Project roles can configure SAML SSO with Okta. Users authenticate once in Okta, then access Document360. The configuration requires switching between Okta and Document360 multiple times. Use separate browser tabs for this process.

### Authentication: Configuring SAML SSO

- Set up SSO via SAML by selecting an identity provider in Document360, configuring both service provider (SP) and identity provider (IdP) settings using the provided details, enabling SSO access for users alongside traditional email/password login.

### Authentication: Supported Identity Providers

Document360 supports the following identity providers: Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and others.

### Authentication: Configuring Okta SAML SSO

To configure SAML SSO between Okta and Document360, first gather the required parameters from Okta's Application settings (Sign-on URL, Identity Provider Issuer, and X.509 Certificate). Next, on the Document360 side, enter the Okta-provided mappings (Sign-on URL, Identity Provider Issuer) into the relevant fields, upload the downloaded X.509 certificate, configure optional settings (Idle sign-out, auto-assign reader groups, custom login button text), and then complete the configuration by clicking "Create". The process involves mapping Okta's Identity Provider data to Document360's Service Provider, and allowing the selected SSO methods to manage user accounts on Document360.

### Authentication: Setting Up an Okta Account

Sign up for an **Okta** account by visiting <https://developer.okta.com/signup/>. After signing up, you'll receive an email with your **login credentials** and an **activation link**. Click the link to activate your account, then log in to your **Okta Domain** and access the **developer console**.

To add a Document360 application in Okta for SSO, follow these steps:

1. **Log in as Admin**: Access Okta with admin credentials and switch to the admin role.

2. **Create App Integration**: Navigate to Applications and click "Create App Integration," selecting SAML 2.0 as the sign-in method.

3. **Configure SAML Settings**:

- Enter the app name and optional logo/app visibility.
- Obtain parameters from Document360's Service Provider page.
- Map parameters to Okta fields: Callback path to Single sign-on URL and Service provider entity ID to Audience URI.
- Set Name ID format to EmailAddress and Application username to Email.
- Add Attribute Statements for email and name, ensuring case sensitivity.

4. **Finish Configuration**: Complete the setup in Document360 using Okta's application details.

### Authentication: Configuring Azure AD for SSO

Customize Azure AD for SSO by editing User Attributes & Claims (add new/group claims), managing SAML signing certificates (add/import), configuring multiple notification emails, and testing the configuration with user credentials.

### Authentication: SAML SSO with Entra ID

Learn how to configure SAML Single Sign-On (SSO) in Document360 using Microsoft Entra as the Identity Provider. Only users with Owner or Admin roles can perform this setup. It’s recommended to use separate browser tabs for Document360 and Entra to streamline the configuration process.

### Authentication: Setting Up a Custom SAML App in Google

To add a custom SAML app to Google, create the app, download the certificate, note the SSO URL & Entity ID, enable the service for all users. These details will be used to configure the Identity Provider in another system (like Document360).

### Authentication: Adding an Application in Azure AD

To add an application and configure SAML-based SSO with Document360 in the Azure portal, follow these key steps:

1. **Access the Azure AD Portal**: Sign in to your Azure account and navigate to the Azure portal at [portal.azure.com](https://portal.azure.com).

2. **Add a New Application**:

- Click on "+ New application" and select "Non-gallery application."
- Enter your application name and click "Add."

3. **Set Up Single Sign-On**:

- In the "Getting started" section, choose "Set up single sign-on" and select "SAML."
- Configure SAML settings using the parameters from Document360.

4. **Configure Service Provider (SP) in Document360**:

- Navigate to Document360 Settings > Users & security > SAML/OpenID.
- Click "Create SSO" and select "Entra ID" as your Identity Provider to auto-configure SP settings.

5. **Map Azure AD Fields to Document360**:

- Copy and paste the required SP parameters (e.g., Identifier, Reply URL, Sign-on URL, Logout URL) from Document360 to Azure AD.

6. **Complete Identity Provider (IdP) Configuration in Document360**:

- Input the corresponding Values from Azure AD (e.g., Sign On URL, Entity ID, Logout URL, and certificate).
- Optionally enable "Allow IdP initiated sign-in."

7. **Finalize More Settings**:

- Assign a name to your SSO configuration.
- Customize the login button and other optional settings.

8. **Save and Complete**:

- Click "Create" to finalize the SSO configuration, enabling seamless authentication between Azure AD and Document360.

### Authentication: SAML SSO with Google Workspace

To configure Google SAML SSO, log in to Document360, select your project, and ensure you have an Owner or Admin project role. Log in to your Google Workspace account, navigate to the Admin console, and follow the SSO configuration steps, switching between Document360 and Google Workspace as needed.

### Authentication: SAML SSO with OneLogin

Configure Document360 Single Sign-On (SSO) with OneLogin using SAML. Only users with Owner or Admin Project roles can configure SSO. Keep both Document360 and OneLogin open during the configuration process.

### Authentication: Configuring the Identity Provider

Configure the Identity Provider (IdP) by navigating to the appropriate page in Document360, entering the necessary SAML details from Google (Sign on URL, Entity ID, and certificate), adjusting toggles for features like IdP-initiated sign-in, and completing the setup with additional settings such as SSO naming and user assignments.

### Authentication: Configuring the Service Provider - Google

To configure SSO with Google Workspace, follow these steps:

1. Navigate to **Settings > Users & Security > SAML/OpenID** and click **Create SSO**.
2. Select **Google** as your Identity Provider.
3. Copy the **ACS URL** and **Entity ID** from Document360's **Configure Service Provider** page.
4. In Google Workspace:

- Paste the copied ACS URL and Entity ID into the Google custom SAML app.
- Set **Name ID format** to **EMAIL** and select **Primary email** for **Name ID**.

5. Map Google Directory attributes:

- Add **Primary email** for `name`, `email`, and `urn:oasis:names:tc:SAML:2.0:nameid`.
- Click **Add Mapping** for each attribute and then **Finish**.

### Authentication: Adding a OneLogin Application

To configure Document360 SSO in OneLogin, add a SAML Custom Connector application with the name "Document360 SSO," following the OneLogin Admin interface steps.

### Authentication: Configuring Document360 for SSO

Configure Document360's Single Sign-On (SSO) by populating fields in the service provider configuration with details from your identity provider (IdP). Match the `Issuer URL`, `SAML 2.0 Endpoint`, and `SAML Certificate` fields from your IdP with corresponding fields in Document360. Enable/disable IdP-initiated sign-in as needed, and proceed to the more settings page. This establishes the connection between your IdP and Document360 for SSO functionality.

### Authentication: Advanced SSO Settings

Configure SSO settings including: SSO name, custom login button text, auto-assign reader groups, idle account sign-out, and existing account invitation. Click "Create" to finish.

### Authentication: Adding an ADFS Application

Create a new claims-aware Relying Party Trust in ADFS, naming it (e.g., "Document360 SAML SSO"), and enabling SAML 2.0 WebSSO protocol support.

### Authentication: Configuring SAML in OneLogin

- Configure SAML in OneLogin using Document360 parameters.
- **Document360 Steps**:

1. Navigate to **Settings > Users & security > SAML/OpenID**.
2. Click **Create SSO**, select OneLogin as IdP.
3. From the SP page, gather: Service provider entity ID, Callback path.

- **OneLogin Configuration Tab**:
- Audience (EntityID): Service provider entity ID.
- Recipient: Callback path.
- ACS (Consumer) URL Validator: Callback path.
- ACS (Consumer) URL: Callback path.
- **Parameters Tab**:
- Add fields:
- `urn:oasis:names:tc:SAML:2.0:nameid` = Email.
- `email` = Email.
- `name` = Email.
- Ensure **Include in SAML assertion** is checked.
- **SSO Tab**:
- Download X.509 Certificate (select SHA256 and PEM format).
- Copy Issuer URL and SAML 2.0 Endpoint (HTTP).

### Authentication: Configuring ADFS for Document360

Configure ADFS for Document360 SSO using SAML. Retrieve Subdomain, Callback, Signed-out Callback, Metadata, & Service Provider Entity ID from Document360. Enter these values into ADFS's Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL, Relying Party Trust Identifier and Metadata URL). Complete ADFS wizard, review, and finalize.

### Authentication: Configuring ADFS Claim Rules

Configure claim rules to map Active Directory LDAP attributes (User-Principal-Name, E-Mail-Addresses, Display-Name) to Name ID, Email, and Name claims, respectively. This translates LDAP data into a usable format.

### Authentication: SAML SSO with ADFS

To set up Single Sign-On (SSO) between Document360 and ADFS using SAML, ensure you have **administrative access** to both platforms. Only users with **Owner** or **Admin** roles in Document360 can configure SSO. Open both **Document360** and **ADFS** in separate tabs for easier switching during setup.

### Authentication: SAML SSO with Other IdPs

Configure SSO with non-listed IdPs using Owner/Admin project roles in Document360. Keep Document360 and IdP in separate tabs for easier navigation during configuration.

### Authentication: Configuring SAML in Your IdP

To configure SAML in your identity provider, get the Callback path, Service Provider Entity ID and potentially the Single Sign-On URL from Document360. Configure these in your IdP's SAML settings. Often, attribute mapping (like email, name, and user ID) is needed; consult your IdP's documentation and Document360 for specific requirements. Save your settings after verification.

### Authentication: Configuring Document360 for ADFS SSO

Configure SAML SSO in Document360 by mapping ADFS values, uploading the X.509 certificate, enabling/disabling IdP-initiated sign-in, and customizing additional settings like SSO name and login button text before finalizing the setup.

### Authentication: Adding an Application in Your IdP

- Log in to the Identity Provider admin console.
- Navigate to the application management section (e.g., Applications or Enterprise Applications).
- Create a new application and configure the basic settings:
- Application Name: Choose a descriptive name (e.g., "Document360 SSO").
- Application Type: Select SAML 2.0 as the sign-in method.
- Save the application settings.

### Authentication: Enabling IdP-Initiated Sign-In

To enable IdP-initiated sign-in in Document360, navigate to Settings > Users & security > SAML/OpenID, edit an existing SSO configuration, enable the "Allow IdP initiated sign in" toggle in IdP configurations. Users then use a dedicated IdP sign-on URL to access Document360, authenticating via their IdP.

### Authentication: SAML SSO FAQs

Document360 supports Okta, Microsoft Entra, Google Workspace, OneLogin, and ADFS identity providers. To access Document360 from Okta, ensure "Allow IdP initiated sign in" is enabled. Document360 is a knowledge base platform allowing content creation, file management, and site configuration.

### Authentication: Configuring Document360 for SAML SSO

Configure Document360 SSO by following these steps: Enter Identity Provider (IdP) details, including SSO URL, Entity ID, and SAML certificate. Upload the X.509 certificate, enable or disable IdP-initiated sign-in, and configure additional settings such as SSO name, login button text, auto-assigning reader groups, idle sign-out, and user invitations. Complete the setup to enable SSO with your chosen IdP.

### Authentication: Supported IdPs for IdP-Initiated Sign-In

Document360 supports IdP-initiated sign-in using SAML for Single Sign-On (SSO) with the following identity providers: Okta, Entra ID, Google Workspace, OneLogin, and ADFS.

### Authentication: OpenID Connect SSO

OpenID Connect (OIDC) is an open standard for single sign-on (SSO). Document360 users can log in with existing identity provider accounts, eliminating multiple passwords and improving security. Document360 supports multiple SSO endpoints for both team accounts and readers.

### Authentication: Removing a SAML SSO Configuration

To remove a SAML SSO configuration in Document360:

1. Go to your project's Knowledge base portal.
2. Navigate to **Settings > Users & security > SAML/OpenID**.
3. Hover over the configuration, click the Delete icon, and confirm by clicking Proceed.

> **Important Note:** Deleting an SAML SSO configuration also removes all associated users.

**SAML (Security Assertion Markup Language):** A standard for Single Sign-On (SSO) that allows users to access multiple applications with a single set of credentials.

### Authentication: Configuring OpenID Connect SSO

To configure SSO using OpenID in Document360, navigate to settings, select OpenID, and input details from your identity provider (IdP) and Document360 (SP) into the respective configuration screens. This allows users to log in via either their existing credentials or the external SSO provider.

### Authentication: Supported Identity Providers

Document360 supports Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and other identity providers.

### Authentication: Troubleshooting OpenID Connect SSO

Document360 OpenID SSO error (IDX20803) likely stems from a wrong IdP Authority URL. Fix it by: 1) finding the correct "issuer" from your IdP's discovery document (`.well-known/openid-configuration`); 2) pasting this "issuer" into Document360's SSO settings Authority field; 3) verifying the URL, network/firewall, and IdP certificate validity.

### Authentication: Adding an Okta Application for OpenID

Log in to Okta as admin, navigate to Applications, click "Create App Integration," select OIDC and Web Application, and proceed to next step.

### Authentication: Configuring Document360 as an OpenID SP

Configure Document360 SSO with Okta by creating a new OpenID connection in Document360, selecting Okta as the identity provider. Copy the provided subdomain name, sign-in, and sign-out redirect URIs from Document360. Paste these into the corresponding fields in Okta's new web app integration setup. This establishes the SSO connection.

### Authentication: Obtaining an Okta Account

An Okta account is required to configure Single Sign-On (SSO) with Document360. If you don't already have one, sign up at [Okta Developer Sign-Up](https://developer.okta.com/signup/).

### Authentication: Setting Up OpenID Connect SSO with Okta

To configure Single Sign-On (SSO) between Document360 and Okta using OpenID, you need administrative access to Okta. Only users with **Owner** or **Admin** as their **Project role** in Document360 can set up SSO. For a smoother configuration process, open both Document360 and Okta in separate tabs or browser windows to easily switch between them.

### Authentication: Creating an Auth0 Application

To create an Auth0 application, log in, navigate to Applications, create a new application, specify the name, select "Regular Web Application" type, and click create.

### Authentication: Configuring Auth0 OpenID

To configure Auth0 OpenID with Document360, navigate to Document360 settings, choose "OpenID" as the protocol, and enter the Auth0 "Sign in redirect URI" and "Sign out redirect URI" in Document360's corresponding fields. Save the changes to complete the setup.

### Authentication: Configuring Document360 for Okta OpenID

Configure Document360 SSO by entering Okta's Client ID, Client Secret, and Issuer URI in the Identity Provider settings. Enable or disable IdP-initiated sign-in based on project needs. In More Settings, customize the SSO name, login button text, auto-assign reader groups, idle sign-out, and SSO invitations. Complete by saving the configuration.

### Authentication: Setting Up OpenID Connect SSO with Auth0

To integrate Auth0 with OpenID SSO in Document360, an Auth0 account is required. Configuration is limited to users with Owner or Admin project roles. It's advised to use separate tabs for Auth0 and Document360 during setup. The document notes empty SSO plan details and includes incorrect steps for Microsoft Entra instead of Auth0.

### Authentication: Setting Up OpenID Connect SSO with ADFS

To configure SSO between Document360 and ADFS using OpenID, ensure you have administrative access to both systems. Document360 users with Owner or Admin project roles can configure this. Open both Document360 and ADFS in separate browser windows during setup, due to switching between them.

### Authentication: Configuring Document360 as an OpenID SP - ADFS

Configure Document360 with ADFS for SSO using OpenID. Obtain subdomain, sign-in/sign-out URIs from Document360. Enter these into ADFS Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL). Complete the ADFS setup wizard, review settings, and enable user access.

### Authentication: Configuring ADFS Claim Rules

Configure claim rule to send LDAP attributes as claims. Select "Send LDAP Attributes as Claims" template. Map LDAP attributes (User-Principal-Name to Name ID, E-Mail-Addresses to Email, Display-Name to Name) using Active Directory as the attribute store. Click "Finish" and "Apply" to save.

### Authentication: Adding an ADFS Application for OpenID

Log in to the ADFS Management console, navigate to Relying Party Trusts, and add a new Relying Party Trust. In the wizard, select "Claims aware," choose to enter data manually, provide a display name, and optionally configure a certificate (can skip if not needed).

### Authentication: Configuring Document360 for ADFS OpenID

Configure Document360's OpenID SSO by following these key steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter your Identity Provider's **Client ID**, **Client Secret**, and **Authority** (domain).
3. Enable/disable **IdP initiated sign-in** as needed.
4. Configure **More Settings**:

- Provide an **SSO name**.
- Customize the **login button text**.
- Toggle **Auto assign reader group** and **Sign out idle SSO team account**.
- Choose whether to invite existing accounts to SSO.

5. Click **Create** to complete the configuration, enabling secure OpenID-based authentication.

### Authentication: OpenID Connect SSO with Other IdPs

To configure SSO with an _unlisted_ OpenID Identity Provider in Document360, users with Owner or Admin Project roles need access to both Document360 and the chosen IdP. Keep Document360 and the IdP open in separate browser tabs for smoother configuration.

### Authentication: Configuring OpenID in Your IdP

Configure OpenID in your IdP by accessing Document360's SSO settings, selecting "Others" as IdP and choosing "OpenID". Document360 provides the Subdomain name and Redirect URIs (sign-in/sign-out). Crucially, include the scopes _openid_, _email_, and _profile_ and map claims (_sub_, _email_, _name_) according to Document360's specifications. Review and save your configuration in your IdP.

### Authentication: Configuring Document360 for OpenID SSO

Configure Document360 SSO by providing Identity Provider (IdP) Client ID, Secret, and Authorization URL. Enter details like SSO name, custom login text, and enable/disable auto-assignment of reader groups, IdP initiated logins, and account sign out. Upload certificates/keys where needed. Then, click 'Create' to finalize the configuration.

### Authentication: Adding an Application in Your IdP for OpenID

To create a new OpenID application in your Identity Provider:

1. Log in to the admin console.
2. Navigate to the Applications or Enterprise Applications section.
3. Create a new application, naming it (e.g., "Document360 OpenID SSO") and selecting OpenID Connect as the sign-in method.
4. Save your settings.

### Authentication: Configuring Document360 with ADFS

To configure OpenID SSO in Document360, follow these steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page in Document360.
2. Enter the **Client ID** and **Client Secret** from ADFS into the corresponding fields.
3. Ensure the **Client Identifier** matches the **Relying Party Identifier** in ADFS.
4. Toggle the **Allow IdP initiated sign in** option based on project needs.
5. Enter the **Issuer URL** from ADFS as the **Authority** in Document360.
6. Proceed to the **More settings** page and configure:

- **SSO Name**: Enter a descriptive name.
- **Customize login button**: Provide user-friendly text.
- **Auto assign reader group**: Enable/disable based on access policies.
- **Sign out idle SSO team account**: Set according to security requirements.
- Choose to invite existing users to SSO.

7. Click **Create** to complete the configuration.

This setup integrates Document360 with ADFS for seamless user authentication.

### 976. Enterprise SSO using \***\*JWT\*\***

**Key Information:** Document360's JWT SSO leverages a customer application for user authentication. User logs in to customer app, which requests an auth code via backchannel from Identity Provider (using client credentials). Document360 receives the auth code and requests an ID token/access token. Document360 creates a session, automatically renewing it within a configurable timeframe (5 to 1440 minutes). No separate Document360 reader account is required (only app account). This approach is exclusive to other SSO methods (SAML, OpenID).

### Authentication: Removing an OpenID SSO Configuration

Delete an SSO configuration in Document360 by accessing the project's Knowledge base, navigating to Settings > Users & security > SAML/OpenID. Hover over the SSO configuration to reveal the Delete icon. Confirm deletion in the popup, understanding it removes associated user accounts.

### Authentication: JWT SSO Configuration

Configure SSO in Document360 by creating a JWT under Settings > Users & security > JWT, then copy the Client ID, Callback URL, and Client secret for your application. Enable/disable JWT SSO login, configure the login URL, and set up redirection using the `redirectUrl` parameter in the URL. Note: Client secret is only available once and must be regenerated if lost.

### Authentication: Setting Up JWT SSO

To set up JWT-based Single Sign-On (SSO) in Document360, follow these steps:

1. **Understand JWT**: A JSON Web Token (JWT) securely transfers authentication and authorization data between applications. It consists of a header, payload, and signature.

2. **Check SSO Plan Compatibility**: Verify if your subscription plan supports SSO. While the table provided is empty, typically higher-tier plans like Enterprise include such features.

3. **Generate JWT Token**: Upon user login, generate a JWT token. Include necessary claims (e.g., user ID, email) and set an expiration time for security.

4. **Configure Secret Key**: Use a strong secret key to sign the JWT. Ensure this key is shared with Document360 for token verification.

5. **Set Up Redirect Flow**: When accessing Document360, users are redirected to your login page. Post-login, generate the JWT and redirect them back with the token.

6. **Test the Flow**: Validate the entire process, ensuring smooth user authentication without additional logins.

7. **Consult Documentation**: Refer to Document360’s API documentation for specific requirements and endpoints.

This setup enhances user convenience and security, streamlining access to Document360.

### User Management: Reader Groups

Document360 reader groups grant precise access to private knowledge base content. Users must log in. Groups can be created to restrict access to specific categories (e.g., sales team only sees pricing/billing). Members are then assigned to those groups.

To resolve the 401 Unauthorized error during JWT testing in Postman, follow these organized steps:

1. **Authorize the Request**:

- In Postman, navigate to the Authorization tab of your request.
- Set the authorization type to **Basic Auth**.
- Enter your **Client ID** as the Username and **Client Secret** as the Password.

2. **Verify Request Format**:

- Switch to the Body tab.
- Select **raw** and ensure the format is set to **JSON**.
- Include all required parameters, such as **grant_type**, in your JSON payload.

3. **Confirm Credentials**:

- Double-check that the Client ID and Secret are correct and properly entered.

4. **Check Endpoint URL**:

- Ensure you're using the correct token endpoint URL as specified in the documentation.

5. **Inspect Server Response**:

- If an error occurs, examine the response body for additional details that can indicate the issue, such as "invalid grant type" or "bad credentials."

6. **Review System Configuration**:

- Verify with your system administrator that the Client ID and Secret are correctly registered on the server side.

By systematically addressing each of these areas, you can identify and resolve the cause of the 401 error.

### Authentication: JWT Reader Groups

JWT reader accounts can be linked to existing Document360 reader groups, inheriting their restriction settings to control knowledge base access. These groups function like regular reader groups, with support for single sign-on (SSO) across Free, Professional, Business, and Enterprise plans.

### User Management: Finding Reader Group IDs

For JWT SSO-enabled projects, Reader group IDs can be found in **Settings > Users and Security > Readers & groups**. Each reader group displays a **Group Id** below its name, with a copy icon for easy pasting into the payload. Note: Available only for JWT-configured projects, not regular private knowledge bases.

### Authentication: Using JWT Reader Groups

Configure JWT reader access by providing a user's details (name, email) and a list of reader group IDs in a specific JSON format. Changes to reader groups only apply after the current JWT session expires (token validity). Use comma-separated IDs in the `readerGroupIds` array. Min token validity is 5 minutes, max is 1 day.

### Site Customization: Customizing Search Highlight Color

To customize highlighted search results in knowledge base articles, navigate to Knowledge Base site > Customize site > Custom CSS & JavaScript. Modify the provided CSS snippet (different for KB Site 1.0 and KB Site 2.0) changing the `background-color` and `color` properties. Save the changes. This allows altering the highlight color from the default yellow, to any desired color.

### Site Customization: Hiding the Workspace Dropdown

To hide the project workspace dropdown in the knowledge base site, add the CSS `header .header_bottom .header_bottom_nav ul li.versions-selection { display: none; }` to the site's custom CSS. This removes the dropdown, requiring users to navigate to workspaces using direct URLs.

### Site Customization: Customizing Hyperlink Color in Dark Mode

Access the Custom CSS section in your Knowledge Base settings, add a CSS snippet targeting hyperlinks in Dark mode, and customize the color to your preference. Save changes to apply the new hyperlink color in Dark mode.

### Site Customization: Enlarging PDF Previews

To enlarge the PDF preview, access your Knowledge Base site settings, navigate to the Custom CSS section, and apply the CSS snippet to adjust the PDF container width. This ensures the preview expands to full width, improving visibility across different browsers.

### Content Formatting: Adding Scrollbars to Code Blocks

Add vertical scrollbars to code blocks by either:

1. Wrapping specific code blocks in `<div class="scroll">` and adding custom CSS to set height and enable scrolling.
2. Applying global CSS to all code blocks using `.code-toolbar` selectors.

Outcome: Scrollbars appear for code blocks exceeding the specified height, keeping content within a fixed area.

### Content Formatting: Aligning Table Content

To vertically align table content to the top in your knowledge base, add this CSS code to custom CSS settings: `table td, table th, table tr { vertical-align: top !important; }`. This overrides the default alignment. Follow the Knowledge base customization steps to save the changes.

### Site Customization: Customizing Table Borders

To make table borders bold, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript. Add the CSS snippet:

```css
table td,
table th,
table tr {
  border: 3px solid #000000 !important;
}
```

Adjust the `3px` thickness and `#000000` color as needed, then save. This will apply the changes to all tables in the knowledge base.

### Site Customization: Restricting Content Copying

Prevent content copying by intercepting the "cut," "copy," and "paste" events using JavaScript on specific HTML elements (`content_block`, `d360-article-content`). This solution uses custom CSS and JavaScript, is adjustable to different content areas, and has minimal disruption on user experience. User selection of content is allowed but prevents copying with Ctrl+C or alternative actions. This is a mitigation strategy, not a foolproof solution.

### Content Enhancement: Setting Default PDF Dimensions

To set custom dimensions for embedded PDFs, navigate to the CSS settings in your knowledge base site and add the provided CSS snippet with your desired height and width in pixels.

### Content Formatting: Centering Headings in Markdown

To center-align headings in Markdown, use HTML `<hN style="text-align:center;">` tags. Markdown lacks built-in centering. Document360 provides a WYSIWYG editor and markdown editor for content creation and formatting. It's a platform for knowledge base management and content creation.

### Content Formatting: Centering Text in Markdown

To center-align text in Markdown, use the HTML `<p>` tag with `style="text-align:center;"`. Replace "Text_content" with your desired text. Example: `<p style="text-align:center;">Sample text</p>`. You can also apply basic formatting inside the paragraph.

### Content Formatting: Changing Text Color in Markdown

Use an HTML `<span style="color:desiredColor;">` tag to change text color. Markdown doesn't directly support inline styles, so HTML is needed. Replace `desiredColor` and the text within the span tags with your desired values.

### Site Customization: Customizing Code Block Language Names

To change the language name in code blocks to a custom name (e.g., "Example") across your entire knowledge base, modify the site's Custom CSS, specifically targeting the code block toolbar. Hide the default language name, and display a new "Example" label. This is a global change.

To set dark mode as the default for your Knowledge Base site, you can use custom JavaScript. Here's how:

1. **Access Customization Settings**: Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.

2. **Add JavaScript**: Paste this snippet into the JavaScript tab to trigger dark mode on page load:

```javascript
$(document).ready(function () {
  setTimeout(function () {
    document.getElementById('darkTheme').click();
  }, 100);
});
```

Then save your changes.

3. **Disable Theme Switching (Optional)**: To enforce dark mode, navigate to **Settings > Knowledge base site > Customize site**, select **Dark only** under **Site theme**, and save.

This ensures dark mode is the default, with the option to prevent users from switching to light mode. The script reliably triggers dark mode if the 'darkTheme' element is present, and testing post-implementation is recommended to ensure compatibility.

### Site Customization: Centering Headings

To center-align headings (H2, H3, H4) in Document360 articles, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript, paste the CSS snippet `H2, H3, H4 { text-align: center; }`, and save. This globally centers all specified headings.

### Site Customization: Changing Table Header Color

To change table header color in a knowledge base site, navigate to customization settings, add custom CSS targeting either `table th` (KB site 1.0) or `.editor360-table th` (KB site 2.0). Change the background color in the CSS to meet your requirements and save. This modifies the header color across all tables on the site.

### Site Customization: Changing Callout Colors in Dark Mode

To change the callout colors in dark mode, navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, then add the provided CSS snippet. Modify the `background-color`, `color`, and `border-left` properties for `.infoBox`, `.errorBox`, and `.warningBox` classes to update the callout colors in dark mode. Remember to use `!important` to override default styles.

### Content Formatting: Adding Extra Space in Markdown

To add space in Markdown, use HTML tags: `<br>` for vertical space between lines, and `&nbsp;` for horizontal space between words within a line. Markdown doesn't natively support extra spacing.

### Content Formatting: Aligning Images in Markdown

Images are left-aligned by default in Markdown. Markdown lacks built-in image alignment. The document suggests a workaround, but the details are missing.

### Content Formatting: Adding Accordions in Markdown

To add an accordion in Markdown, use HTML's `<details>` and `<summary>` tags. Wrap your content within `<details>`, use `<summary>` for the title, and place content inside `<p>`. You can include headings by using `<h2>`, `<h3>`, etc.

**Code Example**:

```html
<details>
  <summary><strong>Accordion Title</strong></summary>
  <p>Content here...</p>
</details>
```

**Caution**: Adding headings in the summary may affect text alignment. You can nest lists, headings, and other HTML within the content section.

### Site Customization: Advanced Accordion Customization

Enhance accordions with colors, dotted borders, and icons using CSS. Add header colors via CSS, create hover effects with border transitions, and set accordions to always open with the `open` HTML attribute. Use CSS to add rotating plus icons. While Markdown can create basic accordions, advanced styling requires CSS/HTML.

### Site Customization: Adding Background Images to Text

To add a background image to text in a knowledge base site, use custom CSS (via Custom CSS & JavaScript settings). Apply a CSS class to the text element, specifying the background image URL. Then, apply that class to your desired text in HTML. This approach works in the site's editor, either through code view or directly applying the styled element. Web-accessible images are required.

### Site Customization: Sorting Table Content

To sort tables on a knowledge base site, add custom CSS (to style headers and display sort indicators) and JavaScript (to handle the sorting logic). The CSS styles headers for clickability and displays ascending/descending icons. JavaScript code sorts table rows based on selected column content, maintains current sort state (ascending or descending), and updates the sort indicator in the header. Users click on headers to initiate sorting.

1. Use the HTML `<p>` tag with inline styling to align images. For center alignment, use:

```html
<p style="text-align: center"><img src="[Image-URL]" /></p>
```

2. Replace `[Image-URL]` with the image URL from Document360 Drive. To find the URL:

- Navigate to the image in Drive.
- Click "View details" and copy the URL from the file details.

3. Adjust alignment by changing the `text-align` value to `left` or `right`.

4. This method works for any image file type, including buttons and logos.

### Site Customization: Opening Links in New Tabs

To open all links in knowledge base articles in new tabs, customize the site's CSS & JavaScript. Insert provided JavaScript code targeting specific HTML elements containing links (`content_block_text a` or `block-article a`) setting the `target` attribute to `_blank`. Save the changes. This will force all links within those elements to open in new tabs.

### Site Customization: Changing Table of Contents Color

To change the table of contents color, use custom CSS. For **KB Site 1.0**, target `.content_block .content_container .page-action .article_action_links ul li a` and set the color. For **KB Site 2.0**, use `d360-table-of-content .toc-item .toc-toggle-icon, d360-table-of-content .toc-item a` for all items and `d360-table-of-content .toc-item.selected a` for selected headings. Replace color values as needed and save changes.

### Content Enhancement: Setting Default Featured Images

In Document360, set a default featured image for knowledge base articles to ensure consistent thumbnails on social media shares. This replaces a random article image if no specific featured image is defined for an article. The default image must be publicly accessible.

### Site Customization: Customizing Hyperlink Size

To customize hyperlink size, use custom CSS available in the Enterprise plan:

1. Go to **Settings** > **Knowledge Base Site** > **Customize Site** > **Custom CSS & JavaScript**.

2. Add CSS:

```css
.CustomLink {
  font-size: 25px;
}
```

3. Apply the class to hyperlinks:

```html
<a class="CustomLink" href="your-link">Link Text</a>
```

4. Adjust the font-size value and save changes.

### Content Formatting: Adding Image Borders in Markdown

Use HTML within Markdown. Add a `style="border: [width]px [style] [color];"` attribute to the `<img>` tag. Example: `<img src="image.jpg" alt="description" style="border: 2px solid grey;">` Adjust width, style, and color as needed. Alternative, consult linked article for shadows.

### Content Enhancement: Embedding YouTube Shorts

To embed a YouTube Short, use an iframe. Replace `/shorts/` with `/embed/` in the Short's URL. Use the provided iframe code, adjusting the `src` attribute with the embed URL. The optimal size is 315px x 560px, but you can vary it as needed.

### Content Formatting: Adding Image Shadows in Markdown

Use HTML within Markdown to add shadows with `box-shadow` CSS. Example:

```html
<img
  src="image.jpg"
  alt="Image description"
  style="box-shadow: 3px 3px 3px gray;"
/>
```

Customize horizontal offset, vertical offset, blur radius, and color to your preference.

1. Navigate to Knowledge base portal Settings () > Knowledge base site > Integrations.
2. Under Custom HTML, click Add.
3. Paste the meta tags with your image URL:

```
<meta property="og:image" content="Image_URL" />
<meta property="og:image:secure_url" content="Image_URL" />
```

4. Replace "Image_URL" with your image link (e.g., from Document360 drive) and click Add.

This sets a default image for social media shares when articles don't have a featured image.

### Content Enhancement: Embedding Excel Files

Document360 allows embedding Excel files directly into articles, making documentation more engaging and informative. Specific features and availability likely vary by plan level (Professional, Business, Enterprise).

### Content Enhancement: Embedding Excel Files - Process

Embed an Excel file in Document360 by: 1) sharing the Excel file in Excel (File > Share > Embed). 2) Copying embed code. 3) Pasting the code into the Document360 editor (Markdown or Advanced WYSIWYG). Screenshots and sample code provided.

### Site Customization: Changing Feedback Button Colors

Change the colors of "Yes" and "No" feedback buttons in a knowledge base site (Document360) by adding custom CSS code targeting specific classes and elements. Navigate to settings > Knowledge base site > Customize Site > Custom CSS & Javascript, add the given CSS snippets, update color values, save, and the buttons will change color. Before/after screenshots demonstrate the change.

### Site Customization: Changing Feedback Button Colors

To change the color of feedback buttons, follow these steps:

1. **Access Custom CSS/JS**: Ensure you're on an Enterprise plan, as this feature is only available there.
2. **Target Feedback Buttons**: Use CSS to select the feedback buttons using their class or ID.
3. **Apply Color**: Define a new color using a hex or RGB value within your CSS rules.
4. **Save and Test**: Implement the changes and test the appearance of the buttons.

Example CSS:

```css
.feedback-button {
  background-color: #ff6b6b; /* Replace with desired color code */
}
```

### Site Customization: Hiding the Footer on Mobile

Hide custom footers on mobile for better user experience. Mobile-optimized layouts prioritize content above the footer on smaller screens.

### Content Enhancement: Embedding Loom Videos

To embed a Loom video into your Document360 page:

1. Access your desired video in Loom.
2. Click **Share** > **Embed**, select the fixed size, and copy the embed code.
3. Paste the code into the editor you're using:

- **Markdown editor**: Paste directly.
- **WYSIWYG editor**: Use the Insert video > Embedded code option.
- **Advanced WYSIWYG editor**: Go to Insert > Video > Embed code.

The video will then be embedded in your article.

### Site Customization: Changing Header Hover Color

To change the hover color of knowledge base header menu options, add specific CSS targeting those elements, in the Knowledge Base site's custom CSS settings. The example provided uses red, but you can adjust as needed. The documentation shows both the initial state and the state after the CSS changes are applied.

### Site Customization: Changing Header Hover Color

To customize the hover color of header options, users with Business or Enterprise plans can use custom CSS. Apply a CSS rule targeting the header elements' hover state. For example:

```css
.header-link:hover {
  color: #yourdesiredcolor;
}
```

### Site Customization: Repositioning Related Articles

To move the related articles above the feedback section, follow the unspecified steps and likely utilize custom CSS or Javascript to change the default placement.

### Site Customization: Hiding Footer in Mobile View

To hide the footer on mobile devices for a Knowledge Base site, follow these concise steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Choose the correct CSS snippet based on your site version:

- **KB site 1.0**: Use CSS targeting `.custom-footer` with `max-width: 469px`.
- **KB site 2.0**: Use CSS targeting `site-footer-section` with `max-width: 767px`.

3. Paste the selected CSS snippet into the CSS tab and click **Save**.
4. **Test the site** to ensure the footer is hidden on mobile without affecting other elements.

### Site Customization: Hiding the Change Password Option

To remove the "Change Password" option for knowledge base readers, customize the site's CSS by hiding related HTML elements. This edits `.user-dropdown-content .user-detail .portal-link a` and `.nav-bar-profile button.dropdown-item` selectors to hide the link in the user dropdown; save the change.

### Site Customization: Hiding the Category Manager

Project-specific solution (impacting all workspaces) uses custom CSS/JS to restrict article access to specific URLs. Readers can only view articles with matching URLs . This hides the category manager.

The solution involves adding a JavaScript snippet to your Document360 Knowledge Base 1.0 site to move the related articles section above the feedback section. Here's a concise overview of the steps:

1. Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Under the JavaScript tab, paste the provided snippet:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Save the changes to implement the modification.

This script appends a separator line to the content block and moves the related articles above the feedback section.

1. Access **Settings**, navigate to **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. In the JavaScript section, paste the following code:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Click **Save** to apply the changes.

To hide the change password option for readers using custom CSS or JS on Business or Enterprise plans:

1. **Identify the Element**: Locate the HTML element (e.g., button or link) for the change password option. Use browser developer tools to find its class or ID.

2. **CSS Implementation**: Write CSS to hide the element. For example:

```css
.change-password-link {
  display: none;
}
```

3. **JavaScript Enhancement**: If the element is dynamically loaded, use a Mutation Observer to detect and hide it when it appears. Alternatively, remove it directly after DOM loads:

```javascript
window.addEventListener('DOMContentLoaded', function () {
  document.querySelector('.change-password-link').remove();
});
```

4. **Consider Dynamic Content**: If the site uses AJAX, ensure your script runs after content loads or use a mutation observer for real-time changes.

5. **Test Across Scenarios**: Verify functionality across browsers, devices, and page scenarios, ensuring no accessibility issues arise.

6. **Security Note**: Hiding the UI doesn't prevent direct URL access. Consider backend restrictions for full security.

By following these steps, you can effectively hide the change password option while maintaining site functionality.

### Site Customization: Configuring Custom Fonts

To configure a custom font in Document360, obtain the font details, add the font link to Custom HTML, and add the font family details to Custom CSS. Example: configuring a Google font in Document360.

### Site Customization: Hiding the Category Manager

Hide the category manager in Knowledge Base by adding custom CSS. For version 1.0, target `.left_sidebar` and `.left-sidebar-toggle`. For version 2.0, use `site-docs-left-panel-container`. Navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, paste the relevant code, and save.

### Site Customization: Hiding the Left Navigation Bar

Custom CSS/JS can hide the knowledge base's left navigation bar, but users can still display it by clicking a "Show category" icon.

### Billing: Plans and Pricing

To configure a Google font in Document360, follow these concise steps:

1. **Get the Font Code**: Select your font on Google Fonts, then obtain the embed link under the "Get font" section.
2. **Add to Custom HTML**: In Document360, navigate to Settings > Knowledge base site > Integrations > Custom HTML, and paste the embed link in the Header section.
3. **Apply via Custom CSS**: Update your CSS by adding `font-family: 'YourFont', sans-serif;`, replacing "YourFont" with your chosen font name.

Embed Google Fonts in Document360 by adding the font link to Custom HTML and specifying the font family in Custom CSS.

### Site Customization: Hiding the Left Navigation Bar

To hide the left sidebar on your Knowledge Base site:

1. **Access Customization**: Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. **Add CSS Code**: In the CSS tab, paste the following snippet:

```css
site-docs-left-panel-container {
  display: none !important;
}
```

3. **Save Changes**: Click **Save** to apply the changes.

After implementing, the left sidebar will be hidden by default.

### Billing: Accessing Billing Overview

To access billing, navigate to Settings > Knowledge base portal > Billing. Key tabs: My Plan (change via support), Payment Information, Invoice History. Changing plans requires support for legacy users. Free plan is discontinued. Check the pricing page for current details.

### Billing: Upgrading Your Plan

Document360 users can upgrade their Professional, Business, Enterprise, Legacy, or Legacy Free plans. Upgrades incur a prorated cost for the remainder of the current billing cycle. Legacy plan upgrades may include credits. Only Owners or users with Billing & Invoice permissions can make changes to the plan.

### Billing: Available Plans

Document360 offers five subscription plans tailored to different needs: **Professional**, **Business**, **Enterprise**, **Enterprise +**, and a **Startup program**. The **Professional**, **Business**, and **Enterprise** plans differ in features such as storage capacity, translation credits, workspace count, sandbox availability, and team/reader accounts. The **Enterprise +** plan provides dedicated servers for enhanced performance and security, while the **Startup program** offers six months of free access to select plans, followed by a discounted rate. Additional add-ons for storage, languages, and customizations are available across all plans.

### Billing: Plan Comparison

Document360 offers tiered plans (Professional, Business, Enterprise) with increasing feature sets. Business offers more storage, team collaboration (readers/reviewers), advanced analytics, Workflow Designer, Ticket Deflector, & various AI features compared to Professional. Enterprise expands on Business with substantially more storage, larger teams, a sandbox, IP restrictions, comprehensive AI (including premium support), and health checks. Upgrading from Professional to Enterprise provides all Business and Enterprise features.

### Billing: Upgrading Your Plan

To upgrade your subscription plan in Document360, navigate to **Settings > Knowledge base portal > Billing** and click **Change plan**. Choose from Professional, Business, or Enterprise plans. Compare features in the **Compare plans and features** section, then select your plan and click **Let’s talk** to contact the sales team for assistance. [Upgrading from a trial version](/help/docs/upgrading-from-trial-version) directs to specific guidance.

### Billing: Upgrading from Legacy Plans

Users on legacy pricing plans (pre-August 31, 2024), can't upgrade directly; they need support assistance. Navigate to Billing > Change Plan > Let's Talk > Raise Request. Support team processes upgrade within 2 business days. Contact support for questions.

### Billing: Upgrade FAQs

Upgrading gets you more features, storage, and support. Billing adjusts immediately or at the end of your cycle, with a prorated credit for unused portion when upgrading mid-cycle. Trials are available. Data and settings are preserved. Minimal setup is usually required. Downgrading is possible but may result in feature loss.

### Billing: Upgrading from Legacy Free Plan

The Free plan was discontinued as of November 2024, but existing users retain access. To upgrade, navigate to **Settings > Billing > My plan**, click **Change plan**, compare features, and select your preferred plan. Click **Let’s talk**, and the Document360 sales team will assist with the upgrade process.

### Billing: Downgrading Your Plan

To downgrade from your current Document360 plan, navigate to settings, select "Change plan," and choose from Professional, Business, or Enterprise. Compare features and limits to ensure your current usage fits the new plan. The sales team will assist and discuss add-ons for features lost in the downgrade. Check the pricing page for details on plan limitations.

### Billing: Downgrading Your Plan

To downgrade your Document360 plan, note that some features may no longer be available. Only users with **Owner** permissions or **View and Update** access for **Billing & Invoice** can make changes. You can downgrade from:

- [Enterprise to Business](/help/docs/downgrading-your-plan#enterprise-to-business)
- [Business to Professional](/help/docs/downgrading-your-plan#business-to-professional)
- [Enterprise to Professional](/help/docs/downgrading-your-plan#enterprise-to-professional)

### Billing: Downgrade - Plan Comparison

Downgrading loses features and capacity. Enterprise to Business: Reduced storage, users, reviewers, and some AI tools (with reduced credits). Business to Professional: Losses in workflow tools, analytics, integrations, AI summarization, and reduced storage and users. Enterprise to Professional loses all Enterprise and Business features. Storage, user limits, and AI credits decrease significantly. Some features are retained with reduced capacity or access to specific tools.

### Billing: Downgrade Considerations

Downgrading retains most existing data and some features but limits new content creation, removes access to some features, and restricts add-on usage based on the lower plan's capabilities. Data exceeding plan limits may be lost. Existing articles, tags, feedback, and PDF exports are generally preserved, but new creation, editing, and customization are restricted. Widget and custom JS/CSS functionality are also affected by the reduced plan.

### Billing: Downgrade FAQs

Downgrading preserves data but may limit features and storage. Billing adjusts with a potential credit. Features tied to the higher plan might be lost, but data remains. Upgrade is possible later, but limits from the lower plan apply until upgraded again. Review new plan details before downgrading and consult support if needed.

### Billing: Downgrading from Legacy Plans

Legacy pricing plan users (subscribed before 31st August 2024) must contact support to downgrade. Navigate to the Billing page, select "Change plan," click "Let's talk," and raise a request. Support will review and process within two working days. For additional help, contact support via email, live chat, or phone.

### Billing: Post-Downgrade Tips

- After downgrading, review your content and update workflows, communicate changes to your team, monitor usage, and consider future needs. Downgrading doesn't reduce quality or performance, and support is available if needed.

### Billing: Changing Plans During Trial

During the 14-day Document360 trial, you can freely switch between plans to evaluate different features. Navigate to Settings > Billing, choose "Try other plans," select your desired plan, and confirm. Downgrading may result in loss of certain features. This process is free and allows informed subscription decisions.

### Billing: Subscribing to a Plan

To subscribe, navigate to Settings > Knowledge base portal > Billing. Click "Buy now" to view plans. Select a plan and click "Let's talk." Document360 sales will help with the purchase.

### Billing: Purchasing Add-ons

Document360 offers various add-ons to enhance your documentation setup, available across Professional, Business, and Enterprise plans. Add-ons include workspaces, languages, translation credits (1M chars), storage (50GB), team accounts, readers (5000 per unit), and PDF export limits. Business users can add Crowdin and Phrase extensions, while Enterprise users can purchase Salesforce extensions and additional sandbox environments. To buy add-ons, visit the Billing section under Settings, select add-ons, and confirm payment. Note: A saved card is required. Legacy plan users can purchase select add-ons; contact support for offline purchases.

### Billing: Upgrading from Trial

Document360 offers a 14-day trial with full access to all features. Users can switch plans during the trial and upgrade anytime. Only project owners can access billing features.

### Billing: Updating Payment Information

This document describes how to change payment information. Specific instructions are needed for a comprehensive TLDR.

### Billing: Payment Information FAQs

You can't delete your primary payment card, but you can edit it. Secondary cards can be deleted. To change your primary card to a secondary, select "Set as primary". To edit any card, navigate to Settings > Billing > Payment information, and follow the on-screen instructions for the action you need (edit, delete, or set primary). The platform is a knowledge base management tool for content creation, team management, and site configuration.

### Billing: Trial Period FAQs

- **Trial Features:** Access all features during the trial to evaluate the platform thoroughly.
- **Downgrading:** Data remains, but features and limits adjust based on the new plan.
- **Trial Extension:** Possible in some cases; contact support.
- **Post-Trial:** Project is held and scheduled for deletion if not subscribed; action can be taken before deletion.
- **Trial Limitations:** None; same as paid plans.
- **Support:** Available via chat, demo, or direct contact.
- **Auto-Charge:** Manual subscription required post-trial.
- **Currency Pricing:** Varies by currency selection.
- **Exchange Rates:** Fixed pricing, changes notified via email.

To change your payment information, follow these steps:

1. **Access Settings**: Log into the Knowledge base portal and navigate to the Settings section.
2. **Billing Section**: Click on **Billing** to enter the billing area.
3. **Payment Information Tab**: In the My plan section, switch to the **Payment information** tab.
4. **Edit Payment Details**: Under the Credit card tile, you can update your payment method and billing address.
5. **Add Secondary Card (Optional)**: If needed, add another card by clicking **Add another card**. The secondary card will be used if the primary card fails.

Remember that only the team account owner can access and modify billing information.

### Notifications: Managing Notification Channels

Configure a custom notification channel to monitor specific events. Navigate to **Settings -> Notifications > Event Mapping** to enable alerts for changes in areas like custom domains, CSS/JavaScript, backups, and project members. Also, monitor documentation, landing pages, articles, and payments. This ensures timely notifications for maintaining functionality and content.

### Notifications: Viewing Notification History

The 'History' section in Document360's Notification feature allows users to view all previously sent notifications across configured channels.

### Content Organization: Hiding Categories

The feature allows hiding categories from the Knowledge base and search results, maintaining privacy for categories under development, including their subcategories and articles.

### Site Customization: Custom Footers

Document360's custom footers offer two configuration paths: (1) a blank layout for complete HTML/CSS customization, or (2) predefined themes A & B with pre-built styles.

### Updates: Category Tree Enhancements

Improved emoji library loading speed in the category manager, enhancing user performance.

### Support: Viewing Ticket Status

To view your Document360 support ticket status: 1) Log in to support.document360.com; 2) Search for your ticket using keywords; 3) Filter by status (All, Open/Pending, Resolved/Closed, Archive); 4) Click the ticket; 5) The status will be displayed on the right, along with the ticket history.

### Support: Support Ticket Information

| Professional | Business | Enterprise |
| ------------ | -------- | ---------- |
|              | ✓        | ✓          |

Need support? Visit the [Document360 support page](https://support.document360.com/support/login) to raise and track tickets. Our experts respond within minutes for Business and Enterprise plans.

### Support: Raising Support Tickets

To raise a support ticket in Document360, log in via the [support page](https://support.document360.com/support/login) using your credentials or SSO. Customers without support credentials can log in using their Document360 account. Once logged in, click "Submit a ticket," fill in the required fields (Requester, Subject, Group, Description), attach any relevant files, and submit. After submission, you'll be redirected to a status page with your Ticket ID and other details.

### Support: Exporting Support Tickets

Export Document360 tickets as **.csv** or **.xls** files by logging in, selecting Tickets, and configuring export settings like date range, format, and fields before downloading.

### Troubleshooting: Understanding HAR Files

A HAR (HTTP Archive) file is a JSON log of a web browser's interaction with a webpage, capturing requests, responses, timings, cookies, and other metadata for debugging and performance analysis. Web browsers and tools can generate them. Used by Document360 team.

### Troubleshooting: Generating HAR Files

To troubleshoot Document360 issues, generate a HAR file capturing network activity in your web browser's developer tools. Open dev tools, enable network recording, reproduce the problem, stop recording, and save the generated HAR file. Follow browser-specific UI variations. Instructions are similar across Chrome, Firefox, Edge, Safari, and Opera. Targeted at Document360 users.

To generate a HAR file, follow these steps in your browser:

1. **Chrome**:

- Open Developer Tools (F12 or right-click > Inspect).
- Navigate to the Network tab.
- Begin recording (Ctrl+E or the record button).
- Refresh the page or perform the desired actions.
- Once done, right-click on the request list and choose "Save All As HAR" to export.

2. **Firefox**:

- Open Developer Tools (F12 or right-click > Inspect).
- Go to the Network tab.
- Start recording (toggle the record button).
- Carry out the necessary actions.
- Right-click anywhere in the Network tab > Select "Save All As HAR" to save.

**Tips**:

- Clear your browser cache before recording to capture accurate data.
- Be cautious as HAR files contain sensitive data; ensure personal information is removed before sharing.

This method effectively captures network traffic for troubleshooting using built-in browser tools.

</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/docs/d364.py
# Language: python

import re
from pathlib import Path
from rich import print
from typing import NamedTuple, List
from dataclasses import dataclass

class MarkdownSection:

def split_heading((heading: str)) -> tuple[str, str]:
    """Split a heading into higher and lower parts on ':' character."""

def process_markdown((content: str)) -> List[MarkdownSection]:
    """Process markdown content and split into sections at H3 headings."""

def generate_output((sections: List[MarkdownSection])) -> str:
    """Generate the output markdown content from the sections."""

def main(()):
    """Main function to process the markdown file."""


<document index="22">
<source>docs/d365.json</source>
<document_content>
[
  {
    "heading": "Introduction",
    "text": "## Introduction\n\n### Introduction\n\nDocument360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases. Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform.",
    "summary": ""
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="23">
<source>docs/d365.md</source>
<document_content>
# Document360 Overview

## Introduction

### Introduction

Document360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases. Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform.

## Key Components

### Key Components: Knowledge Base Portal

Document360 Knowledge Base Portal is a platform to create, manage, and configure knowledge base sites. Features include: creating/managing categories, articles, templates; managing files, teams, readers; configuring branding, domain, security. Portal provides dashboard (project overview, individual contributions), documentation (tree-view structure, bulk actions), API documentation (interactive testing), analytics (user engagement metrics), widgets (in-app search), drive (cloud storage), settings (customization), search (universal across project), and site opening. Unified search and interconnected functions streamline knowledge base maintenance.

## Documentation Guide

### Documentation Guide: Table of Contents

A comprehensive documentation guide for Document360, covering platform overview, project creation, editor tools (Markdown and WYSIWYG), article management (publishing, SEO, access control), AI features (Eddy AI tools, machine translation, search analytics), security measures (SSO, authentication, CSP), file management, collaboration tools (workflow, templates), branding options, and customizations. Also includes release notes from 2019 to 2025, detailing updates and feature enhancements over time.

## Project Management

### Project Management: My Projects

The project dashboard in Document360 displays all your owned, team-associated, and reader-associated projects upon login. Each project features a visibility tag indicating its status as public, private, or mixed.

## Additional Resources and Support

### Additional Resources and Support

Document360 is a knowledge management platform with a public feedback portal, a feature explorer for trial projects, and in-app support. The knowledge base allows creation of categorized articles, templates, and management of files, teams, and readers. Features include analytics, AI assistance (Eddy AI), and article revision history. Support is available through in-app chat, email, documentation, and tutorials. Scheduled maintenance may impact knowledge base access.

## AI Integration

### AI Integration: Document360 AI (Eddy AI)

Eddy AI is an AI-powered writing assistant in Document360, offering features like **article writing**, **SEO descriptions**, and recommendations for **tags**, **titles**, and **related articles**. It also enhances the knowledge base site with **assistive search** and an **article summarizer** to improve reader experiences.

## Getting Started

### Getting Started: Account Creation

To use Document360, create an account by navigating to the signup page.

## Key Components

### Key Components: Knowledge Base Site

The Knowledge base site is a website where end-users access articles and find answers. It offers three access settings: **Public** (open to everyone), **Private** (login-restricted), and **Mixed** (combine public and private access). A screenshot preview of the site is provided.

## System and Browser Requirements

### System and Browser Requirements

**Document360 Knowledge Base Portal Requirements:** Supports Windows 7+, OSX Mavericks+, Linux, Android 5+, and iOS 12+ operating systems. Minimum 2-core CPU and 4GB RAM. Supported web browsers include Google Chrome 91+, Firefox 79+, Safari 13.1.2+, and Microsoft Edge 88+. JavaScript, Cookies, Session/Local Storage, IndexedDB, and HTTPS-TLS v1.2+ are browser-level requirements. Internet Explorer is not supported. Contact support@document360.com for issues.

## Troubleshooting and Support

### Troubleshooting and Support

Document360 knowledge base login issues (reCAPTCHA, blocked access, loading) are often resolved by: 1) Switching browsers/networks, clearing browser cache; 2) Checking VPN connection, system time; 3) Providing HAR files/console errors to support@document360.com if problems persist. Document360 is a web application. Incorrect system time can cause callback URL issues.

### System and browser requirements

#### Hardware Requirements

- **Operating System**: Windows 10 or later, macOS High Sierra or later, Ubuntu 18.04 or later.
- **Processor**: Dual-core processor, 2 GHz or faster.
- **RAM**: Minimum 4 GB, 8 GB recommended.
- **Disk Space**: 500 MB available space.
- **Graphics**: Integrated graphics card (dedicated GPU recommended for intensive tasks).
- **Network**: Stable internet connection with TLS 1.2 or higher; ports 80 and 443 open.
- **Dependencies**: Java Runtime Environment 8 or later, .NET Framework 4.7.2 or later.
- **Security**: HTTPS required, SAML support for single sign-on.

#### Software Requirements

- **Supported Browsers**: Chrome 90+, Firefox 88+, Safari 13+, Edge 90+.
- **Plugins/Extensions**: Adobe Acrobat for PDF viewing.
- **Resolution**: Minimum 1280x720 pixels.
- **JavaScript and Cookies**: Enabled for full functionality.
- **Mobile Support**: Responsive design compatible with iOS and Android browsers.

#### Additional Requirements

- **Testing**: Tested on virtual machines and physical hardware; resolve any conflicts with admin privileges.
- **Updates**: Auto-update feature available; ensure network policies allow updates.
- **Accessibility**: Compatible with screen readers; supports keyboard navigation.

## Getting Started

### Getting Started: Signing Up

Signing up to Document360 involves navigating to the signup page and providing basic details, then verifying your email with a 6-digit code (note: 5 incorrect attempts lock access). Set a password meeting specific security criteria. Choose your primary use case (e.g., knowledge base, software documentation) and select up to two templates. Personalize your knowledge base with a URL and brand guidelines. Set privacy settings (Private, Public, Mixed). Complete setup to access the portal with pre-loaded content. A free trial is available, with paid plans post-trial. FAQs cover language support, plans, verification issues, migration, and data access post-trial.

## Project Management

### Project Management: Navigating 'Your Projects'

Document360's "Your projects" dashboard displays project tiles for owned, team, and reader projects. Users can create new/sandbox projects, view project details (logo, name, access, settings), access documentation/knowledge bases, manage their profile, view release updates, and access help resources (documentation, issue reporting, feature requests, system status). The dashboard streamlines project management.

### Project Management: Project Dashboard

Document360's "Your Projects" serves as a centralized dashboard for users to view and manage projects they are associated with, categorized by roles such as owner, team member, or reader. It offers essential navigational tools. The access tiers are as follows:

| Professional              | Business                          | Enterprise                                            |
|---------------------------|-----------------------------------|-------------------------------------------------------|
| Access to "Your Projects" | Enhanced team management features | Advanced features with unlimited project associations |

This dashboard provides a streamlined interface for users to manage their documentation projects efficiently across different plans.

## User Profile

### User Profile: Accessing Profile Options

Access profile options (My profile, View Access/Permissions, Change Password) via your profile picture in the top-right corner. My profile lets you edit personal info (image, name, email, author page, bio, portal language, role, content access). View Access/Permissions shows your portal and content role permissions, editable via Team accounts (admin privileges needed). Change password requires entering current password, strong new password (8+ chars, upper/lower/number/special character), and confirming. Password change logs you out. Strong password recommendations detail dos and don'ts of password creation.

## User Interface

### User Interface: Top-Right Menu

The top-right menu provides quick access to essential portal features, including profile management, access level checks, password changes, updates, and Document360 help resources. A table outlining plan-based access to the My profile page is included but currently empty.

## Updates and Releases

### Updates and Releases

Release notes for Document360 are accessible via a button in the Knowledge base portal, summaries, or through the dedicated Document360 Updates - Changelog page. Full details are available at a link provided.

## User Interface

### User Interface: Top-Right Menu Features

- **My profile**: View/edit personal info, profile picture, biography, portal/content roles, and permissions.
- **View access and permissions**: Check assigned roles and permissions.
- **Change password**: Update login credentials securely.
- **Release updates**: Stay informed about Document360's latest features and updates.
- **Help menu**: Access documentation, support portal, or contact support directly.

### User Interface: Help Menu

The Help menu offers tools for user assistance, including searching answers, accessing documentation (`https://docs.document360.com/docs`), chatting with support, creating tickets, submitting feature requests, and checking system updates (`https://status.document360.com/`). Authenticated users can access the feedback portal. For language preferences, the portal adheres to user settings over browser defaults. Contact support directly at <support@document360.com>.

## Project Management

### Project Management: Switching Projects

Document360 allows easy project switching via a dropdown menu or a dashboard. Projects can be public, private, or mixed; sandbox projects are for testing. Access control manages permissions and roles. Article revisions provide version control. Check project display for current project, and contact an administrator for access requests. Dropdown shows project details (name, access, sandbox). Dashboard displays a list of all associated projects.

#### Creating a New Knowledge Base Project

1. **Access the Dashboard**: Log in to the Document360 portal. If you're already in a project, click the Document360 icon to return to the dashboard. Click **+ Project** to start a new project.

2. **Select a Use Case**: Choose your primary use case (e.g., Knowledge Base Platform, Software Documentation, SOP Documentation, User Manual, API Documentation, or Others) by clicking **Get Started**.

3. **Choose Templates**: Based on your use case, select up to two templates to structure your content (e.g., Getting Started Guides, How-to Guides, FAQs for Knowledge Base; Release Notes, SDD, Software Requirement Documentation for Software/Technical Documentation).

4. **Personalize Your Knowledge Base**:

- **URL**: Enter your preferred website URL or skip for a default domain.
- **Branding**: Customize with a logo, brand colors, and language. These can be auto-populated from your URL or manually edited.

5. **Set Privacy Settings**: Choose access level (Private, Public, or Mixed) to control who can view your content.

6. **Access the Portal**: After setup, access the Document360 Knowledge Base portal with pre-loaded articles tailored to your selected use case and templates, providing a head start for content creation.

### Project Management: Project Creation

Document360 project centralizes all documentation (articles, categories, home page, teams, readers, groups, custom settings) for organized, accessible, and scalable knowledge base management.

### Project Management: Overview Tab

The Overview tab provides project-level insights for Owners/Admins, showing contributions, performance, storage details, user data, and issues (e.g., broken links, search failures). Metrics include article counts (created, published, draft), team accounts, readers, drive capacity, broken links, failed searches, and last backup date. Filtering by workspace and language is possible. Clicking "View all" links to relevant settings/analytics pages.

## Localization

### Localization: Multilingual Knowledge Bases

Multilingual knowledge bases provide information in multiple languages, improving user experience. Document360 supports internationalization of knowledge base sites.

## Project Dashboard

### Project Dashboard

The Document360 Dashboard offers insights into your project, team members, and tasks. It features two tabs: **My Contribution** for personal contributions and **Overview** for team-related information. A plans table is present but without detailed specifics.

## User Contributions

### User Contributions: My Contribution Tab

The **My Contribution** tab provides a comprehensive overview of your work in Document360, offering insights into your articles, tasks, and performance metrics. It features:

- **Article summary**: Track created, published, and draft articles, along with performance metrics like views, reads, likes, and dislikes. Filters allow viewing data by date range.
- **Assigned to me**: View articles assigned to you, including workflow status and due dates.
- **Review reminders**: See stale articles needing updates, marked with the date they became stale.
- **Feedback**: Access user feedback assigned to you, with status and assignment dates.
- **Broken links**: Identify articles with broken links, showing workspace, language, and link count.

Filters at the top enable focusing on specific workspaces, languages, or all of them, while date filters refine article statistics.

## Project Management

### Project Management: Creating a Sandbox Project

Document360's Sandbox project provides an isolated testing environment for safely experimenting with features, refining workflows, and training teams without affecting live users. It enables testing new features, identifying issues early, and optimizing setups.

## Frequently Asked Questions (FAQ)

### Frequently Asked Questions (FAQ)

- **Languages per Plan:** Professional (2), Business (3), Enterprise (5). Add-ons available for more languages.
- **Knowledge Base:** A self-service platform with articles and information on products/services, managed by teams through categories, branding, and security settings.

## Localization

### Localization: Adding Multiple Languages

To add multiple languages to a workspace, navigate to **Settings > Knowledge base portal > Localization & workspaces**. Use either Method 1: editing the workspace and selecting languages through the "New language" option, or Method 2: using the "Add new language" icon on the overview page. After adding, translate content manually or via tools like Crowdin. Languages other than English display in native scripts. Manage settings like default language, display name, and direction as needed.

## Security and Infrastructure

### Security and Infrastructure: Overview

Document360 data is securely stored in a MongoDB Atlas three-server cluster with encrypted storage and TLS traffic. Daily/weekly/monthly backups, lasting one month, and backups in Azure Blob Storage across multiple locations ensure data integrity. Authenticated API tokens secure data access.  Hosted on Microsoft Azure Cloud, it leverages their security protocols and DDoS mitigations. A strong technical team, coordinated with an offshore team, safeguards the system.

### Security and Infrastructure

Document360 prioritizes data security, collaborating with industry leaders like Algolia, MongoDB Atlas, and Microsoft Azure Blob Storage to ensure robust protection. Data is encrypted in transit using TLS standards, and backups are safeguarded with strong security protocols, aligning with the latest SaaS security practices.

### Security and Infrastructure: Integrations and Partners

- **Algolia (Search):** SOC2/SOC3 compliant, HTTPS/TLS encryption (rated A by Qualys), customer data isolation.
- **MongoDB Atlas (Database):** Network isolation via VPC and firewalls, independent security verification, end-to-end encryption (TLS), encryption at rest.
- **Azure Blob Storage:** Encryption in transit (HTTPS), encryption at rest (storage-side and client-side), advanced threat protection.

To create a Sandbox project in Document360, follow these organized steps:

1. **Access Settings:**

- Navigate to **Settings** > **Knowledge base portal** > **General**.

2. **Create Sandbox:**

- In the Sandbox section, click **Create Sandbox** to open the creation panel.

3. **Configure Project Details:**

- **Project Name:** Enter a name using allowed characters (letters, numbers, hyphens, spaces) and ensure it's ≤30 characters.
- **Language:** Select from the dropdown menu.
- **KB Site 1.0:** Check if needed (optional).

4. **Visibility and Access:**

- Default visibility is Private.
- Click **Next** to proceed.

5. **Invite Team Members:**

- Optionally, add email addresses (comma-separated) and assign roles.

6. **Finalize Creation:**

- Click **Create project** and then **Open Sandbox** to access it.

7. **Post-Creation Notes:**

- A Sandbox badge appears, indicating the environment.
- SSO users cannot create sandboxes; use a non-SSO account.

**Additional Considerations:**

- **Subdomain:** Defaults to include "sandbox"; can be customized via [custom domain mapping](https://docs.document360.com/docs/custom-domain-mapping).
- **Migration:** Not directly supported; manual export/import required.
- **SSO Access:** Non-SSO accounts needed for sandbox access.

By following these steps, you can efficiently set up a Sandbox project for testing, training, and risk-free experimentation.

## Best Practices

### Best Practices

- Secure API keys by not sharing them publicly and deleting compromised keys immediately.
- Assign only necessary permissions to API keys.
- Use predefined roles to manage team access rights effectively.
- Regularly back up projects automatically and manually to prevent data loss.
- Set document visibility as private when needed to control access.

## Business Continuity and Disaster Recovery

### Business Continuity and Disaster Recovery

Document360 prioritizes high availability & data safety via geographically replicated databases & multiple service instances. DevOps employs code reviews, QA testing, and version control for security and reliability. Disaster recovery involves daily/weekly/monthly backups, incident management, and Azure CDN for rapid service delivery.

## Compliance

### Compliance: GDPR

Document360 is fully GDPR compliant, collecting and storing only essential data with explicit customer consent. [Learn more](https://document360.com/gdpr-compliance/).

## Security

### Security: X-Frame Options

X-Frame options control embedding of the knowledge base in frames/iframes on other domains. Enabling this security feature prevents malicious sites from embedding the knowledge base. Iframe embedding of unauthorized domains will be blocked.

## Support and Help

### Support and Help

Document360 offers expert support for security and infrastructure inquiries. The document defines an API as a communication protocol between software applications and mentions X-Frame-Options for security.

## Security

### Security: Content Security Policy (CSP)

CSP feature restricts external CSS, scripts, and frames to prevent malicious content from external domains. The `Content-Security-Policy` header controls allowed domains for each resource type (e.g., CSS, scripts, frames). Different tiers (Professional, Business, Enterprise) may have varying implementation levels of CSP.

### Security: Enabling CSP

Enable Content Security Policy (CSP) in your Knowledge Base to prevent XSS attacks. Specify allowed domains for stylesheets, JavaScript, and frames in the portal's security settings. Use correct URL format (e.g., `https://example.com`) and commas to separate entries. Add nonce attributes to custom HTML scripts.

### Security: Configuring X-Frame Options

Enable X-Frame options to prevent your knowledge base from being embedded in iframes, frames, or other tags on external domains. Navigate to **Settings > Users & Security > Security** and toggle on the **Enable X-Frame options** setting to block unauthorized embedding. This helps protect against clickjacking attacks. If needed, specific domains can be allowed via the content security policy. Not enabling this feature risks embedding on malicious sites, exposing users to security threats like clickjacking.

### Security: Testing CSP Settings

Document360's CSP is implemented via meta elements, not response headers. To verify CSP, check the page source for `Content-Security-Policy`. Video playback issues often indicate differing CSP settings across articles; ensure the video source is allowed in the correct Frame sources in Document360 settings.

### Security: Bot Management

Bots are internet software programs that can be helpful or harmful. The table showing plans with bot management capabilities is empty.

### Security: Troubleshooting CSP

Blocked content on the Knowledge Base site is often due to incorrect CSP configurations. To resolve, update Knowledge Base portal CSP settings to whitelist affected domain URLs. Clear your browser cache, test in different environments/browsers. If the problem continues, contact support providing CSP response header details from browser developer tools' Network tab. Also, ensure application's CSP settings for the knowledge base widget are correct.

### Security: Understanding Bot Management

Bot management is crucial for online safety & efficiency. It filters malicious bots, allowing legitimate access, preventing server strain, and stopping potential threats. Key focus is identifying and blocking bad bots, while letting good bots operate.

### Security: CSP and Whitelisting for Widgets

This document provides guidelines for implementing Content Security Policy (CSP) and whitelisting for the Document360 widget. Key points include:

- **supported plans**: Only Enterprise plans support widget addition.
- **CSP Directives**: Add trusted sources to `connect-src`, `script-src-elem`, `font-src`, and `style-src-elem` directives for both US and EU users.
- **US Sources**:
- `connect-src`: Includes Algolia, Document360 APIs, and Azure Monitor domains.
- `script-src-elem`: Includes CDN resources and nonce for script security.
- `font-src`: Includes Google Fonts and Document360 CDN.
- `style-src-elem`: Allows inline styles, CDN resources, and Google Fonts.
- **EU Sources**:
- Similar to US sources but with EU-specific Document360 domains.
- **Widget Configuration**:
- Update the widget JavaScript with the correct nonce value and API key.

### Security: Bot Detection Methods

Cloudflare uses heuristics (rules based on patterns) and machine learning to analyze traffic and user-agent data, proactively identifying and blocking malicious bots, thus strengthening security against sophisticated attacks.

### Security: Bot Blocking Techniques

Cloudflare blocks bots using unusual user agents, unsupported ports, and suspicious IP/ISP traffic patterns. This protects against attacks but may affect automated scripts. Essential security measures to protect platforms.

### Security: Bot Categorization

Bots are categorized into Good Bots and Bad Bots. Good Bots, such as GoogleBot, BingBot, and GPTBot, are transparent and serve beneficial purposes. Bad Bots, including those used in DDoS attacks, web scraping, and credential stuffing, engage in malicious activities.

Document360 offers enhanced security with built-in bot detection and blocking in Block mode, proactively preventing unwanted traffic to safeguard data integrity.

## Fair Usage Policy

### Fair Usage Policy: Overview

Document360's fair usage policy implements rate limiting to control user request volume, preventing bot traffic and DoS attacks while ensuring a positive user experience for all.

### Fair Usage Policy: Bot Management Rules

(This section needs the actual policy content to be filled in.) No details provided in the given text about the specific rules for bot management. A general document exists and applies to specific plans (Professional, Business, Enterprise). Lacking details, a concise summary is not possible.

### Fair Usage Policy: Rate Limiting

Cloudflare enforces rate limits of 1,500 requests per minute or 300 requests per 10 seconds per IP address. This is supplemented by bot detection using heuristics and machine learning.

## Content Creation

### Content Creation: Editor Options

Document360 offers three editors: 1) Markdown for syntax/HTML customization, 2) WYSIWYG for rich text formatting (no custom code), and 3) Advanced WYSIWYG (hybrid of Markdown/WYSIWYG). Editors are crucial for knowledge base article creation and management; supporting various formatting and custom needs.

## Fair Usage Policy

### Fair Usage Policy: Compliance

Adhering to this Fair Usage Policy is crucial for maintaining system health, preventing server overload, ensuring responsive service for all users, and protecting against abuse or unintended high-volume requests. Contact support for higher limits if needed.

## Content Creation

### Content Creation: Markdown Editor

The Markdown editor facilitates article writing and customization with a split-screen for typing and previewing. It ensures consistent formatting for professional documentation, aiding creation through guided flexibility and supporting image insertion with adjustable sizes using Markdown syntax.

### Content Creation: WYSIWYG Editor

A WYSIWYG editor is an HTML-based editor (like WordPress) that displays the article's formatting as you type. Easy for users familiar with HTML editing; offers extensive formatting options for code, media, and text. Recommended for articles with lots of code/media content.

## Fair Usage Policy

### Fair Usage Policy: Purpose

The policy ensures equitable access by preventing any single entity from monopolizing resources, thereby maintaining consistent performance and availability for all users.

## Content Creation

### Content Creation: Switching Editors

Document360 allows switching between Markdown, WYSIWYG, and Advanced WYSIWYG editors at article level. Article-level switching is possible between Advanced WYSIWYG and WYSIWYG(only in Edit mode), but not to Markdown or back. Advanced WYSIWYG is the irreversible choice once set. Project-level default settings are modifiable by project administrators. Unsupported HTML elements are flagged in the Advanced WYSIWYG editor, but preserved for user review. Supported tags for formatted text, lists, forms, links, and media are outlined. Key takeaways: Editor switching, limitations, unsupported HTML handling, and supported tags outlined in the Advanced WYSIWYG.

**Changing the default editor at the project level**

- Navigate to **Settings > Knowledge base portal > General**.
- In the Editor section, select the desired editor (WYSIWYG/Advanced WYSIWYG).
- Click **Save** to apply changes. This setting affects new articles only.

### Content Creation: Advanced WYSIWYG Editor

A lightweight, powerful editor combining Markdown syntax support with WYSIWYG-like visual editing. Ideal for text-centric, code-heavy, or media-rich content. Type '/' to access commands. For more details, refer to the [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview) documentation.

### Content Creation: Editor Interface

- **Fluid Interactions:** Intuitive interface for switching between projects (with icon-based type identification), workspaces, and languages (now in a unified dropdown).
- **Unified Workspace/Language:** Workspace and language selection is merged in a single dropdown, displaying the workspace name and language flag. The dropdown option "Manage workspace & language" links to the settings page for fine-tuning localization.
- **Content Creation:** The "Create" button is accessible from the header, allowing users to create categories, articles, articles from templates, or import existing content.
- **Accessibility:** Visual cues (icons) help users discern different project types.

### Content Creation: Using the Markdown Editor

Markdown editor converts shorthand text (Markdown) to HTML, ideal for text-rich documents. Use cases include professional, business, and enterprise settings. Refer to the "Basic Markdown syntax" article for comment details.

## User Interface

### User Interface: Left Navigation Bar

-Left navigation bar includes sections like Dashboard, Documentation, API Documentation, Analytics, Widgets, Drive, and Settings. The Categories & Articles section contains options such as All articles, Workflow assignments, Starred, Recycle bin, Site builder, and Content tools. The Site builder now redirects to Customize site in Settings. Recent updates have improved the usability of the More options menu.

### User Interface: Article editor’s header section

- Displays the article's URL/slug for easy reference.
- Shows the article's status (New, Draft, Published, Stale) prominently.
- Provides article information, including contributors, stats, and dates; manage contributors with the Manage option.
- Includes a preview feature to view the article's appearance.
- Allows modification of title, slug, and description with an Update button.
- Offers AI Glossary recommendations via a dropdown.
- Enables workflow status updates.
- Contains a More menu (•••) for additional actions like clone, move, hide, delete, SEO, tags, and Related articles.
- Facilitates discussions with a comments section.
- Provides a full-screen view option.

## Related Resources

### Related Resources

Markdown is a lightweight text-to-HTML conversion tool used to format content like lists, headers, images, videos, and links.

## Content Creation

### Content Creation: Markdown Usage

- Use Markdown syntax manually or via the toolbar for formatting.
- Ensure correct syntax: no spaces in bold (`**Text**`) and spaces in headings (`### Heading`).
- Refer to [Editor choices](/help/docs/using-the-text-editor) and [Markdown syntax guide](https://www.markdownguide.org/basic-syntax/) for more info.

### Content Creation: Markdown Toolbar Features

A comprehensive overview of the Document360 Markdown editor, detailing its features and functions:

- **Toolbar Sections**:

- Headings (H2, H3, H4)
- Text formatting (bold, italic, strikethrough, blockquote)
- Lists (unordered, ordered)
- Inserts (tables, images, files, links)
- Callouts (info, warning, error)
- Private notes
- LaTeX support
- Find and replace
- Content reuse (variables, snippets)
- Code blocks
- Glossary
- Video embedding
- Scroll functionality

- **Additional Features**:

- Spell checker with browser-native corrections.
- Seamlessly integrates with HTML content.

- **FAQs**:
- Explains Markdown basics, key features, beginner-friendliness, and how to add ASCII/code blocks or HTML content.

Keyboard shortcuts and real-time previews enhance the editing experience, catering to both novices and experienced users.

### Content Creation: Markdown - Heading Levels

Use `##`, `###`, or `####` (with a space between the `#` and the text) to create Heading 2, 3, or 4 respectively. Ensure a blank line before the heading tag.

### Content Creation: Markdown - Styling Text

Markdown supports various text styles: bold (`**text**`), italics (`*text*` or `_text_`), strikethrough (`~~text~~`), highlight (`==text==`), superscript (`text^superscript`), and subscript (`text~subscript`). Avoid spaces between syntax and text for proper formatting.

### Content Creation: Markdown - Basic Syntax

Document360's Markdown editor enables users to create organized content. Markdown is a lightweight markup language that simplifies text formatting using special characters, requiring no coding knowledge. It supports basic formatting like headings, lists, and links, making it easy to create professional content.

### Content Creation: Markdown - Commands

- **Headings (H2-H6)**: Use `##` to `######`. H1 is reserved for titles.
- **Bold**: Use `**text**` (Ctrl+B/Cmd+B).
- **Italics**: Use `*text*` or `_text_` (Ctrl+I/Cmd+I).
- **Strikethrough**: Use `~~text~~`.
- **Numbered List**: Use `1.` for automatic numbering.
- **Bulleted List**: Use `*` or `-`.
- **Link**: Use `[text](URL)` for clickable text.
- **Blockquote**: Use `>` for quotes.
- **Horizontal Line**: Use `***` to separate sections.

### Content Creation: Markdown - Horizontal Line

A horizontal line is created in Markdown using three asterisks (`***`).

### Content Creation: Markdown - Lists

- **Numbered Lists**: Use `1.`, `2.`, `3.` etc. to create lists that automatically increment.
- **Bulleted Lists**: Use `*`, `-`, or `+` to create bullet points. Examples include `* Item`, `- Item`, and `+ Item`.

### Content Creation: Markdown - Links and Blockquotes

Create links using `[text](URL)` syntax (e.g., [Document360](https://docs.document360.com)) and blockquotes by prefixing text with '>' (e.g., > This will quote the entire line of text).

### Content Creation: Markdown - Emoji Usage

Copy and paste emojis from the table (📝, ✍️, etc.) or use FontAwesome HTML code for icons in documents.

### Content Creation: Markdown - Additional Elements

A concise summary of additional Markdown features:

- **Image**: `![Alt text](URL "Title")` for adding images.
- **Reference Link**: `[Link text][ref]` paired with `[ref]: URL` for reference-style links.
- **Escaping Characters**: Use `\` to prevent special characters from being processed.
- **YouTube/Vimeo Videos**: Embed using `<iframe>` tags with specific video IDs and dimensions.

### Content Creation: Markdown - Unicode Characters

Use Unicode characters in Markdown via copy/paste or HTML entity codes (e.g., `&#xXXXX;`). Find characters in online resources like unicode-table.com or unicode.org. Examples include stars, checkmarks, and currency symbols.

### Content Creation: Markdown - Beginner Tips

- Use headings (`##`, `###`) to structure content.
- Highlight key points with **bold** or _italics_.
- Organize info with lists (bullet points `*` or numbered `1.`).
- Include **links** for additional resources.

### Content Creation: Using the WYSIWYG Editor

Document360 offers a WYSIWYG editor (What You See Is What You Get) for creating content that displays exactly how it will appear on published articles. Switching between WYSIWYG and Markdown is not possible; conversion to WYSIWYG is permanent.

### Content Creation: WYSIWYG Toolbar

The WYSIWYG toolbar provides a range of text editing and formatting options, including media file insertion. It is organized into sections with specific functions, starting with heading options like "Normal."

### Content Creation: Example - Creating an Article

The example provided demonstrates how to structure an article in Document360 using Markdown. It includes sections on the benefits of using Markdown, such as its ease of learning and clean formatting, along with practical tips like using headings, links, and dividers. The article also references additional resources for learning advanced Markdown syntax, emphasizing structured formatting for enhanced readability and professionalism. By following these guidelines, users can effectively format their articles to convey information clearly and efficiently.

### Content Creation: WYSIWYG - Heading 2

Rich text editor offering features for text formatting, inserting various media (images, videos, files), advanced features like LaTeX and callouts, content reuse, glossary integration, and additional formatting options for images, videos, PDFs, Word files, and tables. Provides detailed instructions and examples for each supported function. Offers a switch to an advanced WYSIWYG editor, code view, undo/redo, and find/replace capabilities; supports various lists, alignments, and additional visual elements like emoticons.

### Content Creation: Advanced WYSIWYG - Usage

The Advanced WYSIWYG editor utilizes slash commands for quick content insertion (headings, images, links, lists, etc.) and standard Markdown syntax for more complex formatting. Features include: Eddy AI access via slash menu & various format, insert, and content-reuse types. Markdown syntax works only when typed directly; copying and pasting won't work. Refer to help for unsupported syntax or details.

### Content Creation: Advanced WYSIWYG Editor Overview

A lightweight, rich-text editor with Markdown support, offering a more visual experience than traditional Markdown editors and more flexibility than standard WYSIWYG editors. Switching between Advanced WYSIWYG and WYSIWYG is allowed only for Draft/New articles; switching from Markdown to Advanced WYSIWYG is irreversible.

### Content Creation: Advanced WYSIWYG - Toolbar

Advanced WYSIWYG editor with categorized toolbar for formatting (text styles, headings, typography, colors, lists) and inserting diverse elements (images, videos, links, files, tables, code, FAQs). Supports inline comments, pasting from Word, LaTeX, and various formatting options. Customizable FAQs, and code view for HTML editing are available.

### Content Creation: Choosing the WYSIWYG Editor

- **Best for**: Document360 users familiar with HTML editors who prefer a Word-like experience.
- **Ease of use**: Functions like Microsoft Word or Google Docs, allowing direct content pasting without special syntax.
- **Advantages**: Offers a single editing pane in preview mode and supports pasting large tables.

### Content Creation: Advanced WYSIWYG - Basics

This document provides an overview of the Advanced WYSIWYG editor basics, highlighting the supported plans: Professional, Business, and Enterprise. A table structure is included for details, though specific plan features and support levels are not provided.

### Content Creation: Advanced WYSIWYG - Typography

This table defines input syntax for various typographic symbols (em dash, ellipsis, quotes, arrows, copyrights, fractions, mathematical symbols, currency, and more) and how they appear in the Advanced WYSIWYG editor. It details the conversion from input code to the displayed output, essential for accurate formatting.

### Content Creation: Advanced WYSIWYG - Keyboard Shortcuts

The Advanced WYSIWYG editor offers keyboard shortcuts for efficient editing. To access the overview, navigate to the desired article, click the **More** icon, and select **Keyboard shortcuts**. Key shortcuts include: general commands like Copy (Ctrl+C/+C), Paste (Ctrl+V/+V), Undo (Ctrl+Z/+Z), and Redo (Ctrl+Shift+Z/+Shift+Z); text formatting options such as Bold (Ctrl+B/+B), Italic (Ctrl+I/+I), and Underline (Ctrl+U/+U); paragraph formatting commands including Heading styles (Ctrl+Alt+1-6/+Alt+1-6), Lists (Ctrl+Shift+7-9/+Shift+7-9), and Alignment options (Ctrl+Shift+L, E, R/+Shift+L, E, R); and text selection commands like Complete article (Ctrl+A/+A). Refer to the tables for the full list of Windows and Mac shortcuts.

### Content Creation: Advanced WYSIWYG - Unsupported Syntax

The Advanced WYSIWYG editor does not support markdown tables, subscript, or superscript syntax. Users must utilize Format tools to manually apply subscript and superscript styles.

### Content Creation: Advanced WYSIWYG - Conditional Blocks

Conditional content blocks in Advanced WYSIWYG editor allow personalized content delivery based on user characteristics (IP, country, device, reader groups, or dates). This feature customizes user experiences, streamlines content management for diverse audiences, and boosts user engagement. Crucially, this function is only available for KB site 2.0 and won't be indexed by search engines.

### Content Creation: Advanced WYSIWYG - Movable Blocks

Movable blocks enable easy content rearrangement in the Advanced WYSIWYG editor. Users can drag blocks, insert new ones above or below, and delete blocks with subsequent content shifting up. Dividers and FAQ sections are fixed, with the latter treated as a single block. This feature enhances editing efficiency but has specific restrictions.

### Content Creation: Advanced WYSIWYG - Creating Tables

Two table creation methods exist: 1) The `/table` command automatically inserts a 3x3 table with a header row; or 2) The Format menu's Insert option lets you choose table size (up to 10x10). Slash command is faster, Format menu offers more control.

### Content Creation: Advanced WYSIWYG - Setting Up Conditional Blocks

- Navigate to the desired article in the Advanced WYSIWYG editor.
- Enable conditional content via the settings icon and choose **Show** or **Hide**.
- Use **AND** for requiring all conditions and **OR** for any condition.
- Select parameters like country, date, device, workspace, reader groups, or IP address, set conditions (e.g., equals, not equals, in, not in), and specify values.
- Save conditions for reuse and manage up to 25 conditions per article for efficiency.
- Conditions are version-specific and carry over when moving articles.

### Content Creation: Advanced WYSIWYG - Table Overview

- The Advanced WYSIWYG editor supports table creation across Professional, Business, and Enterprise plans (see table for specific details).
- Tables are essential for organizing and presenting data in a clear and structured manner, enhancing readability and understanding.
- The editor offers comprehensive table formatting tools, including options for adding rows and columns, customizing cell colors, and applying advanced table styles.

### Content Creation: Advanced WYSIWYG - Customizing Tables

Customize table appearance in the editor by changing background color, border color/style (solid, dashed, dotted), hiding/showing header rows, alternating row colors (banded rows), and using CSS for advanced styles. Copy/delete tables, use slash commands, and paste tables from Microsoft Word/Excel web app (Excel desktop paste isn't supported).

### Content Creation: Advanced WYSIWYG - Formatting Table Content

- **Insert/delete rows/columns**: Select row/column, use menu to insert above/below or left/right, or delete.
- **Merge cells**: Select multiple cells, click "Merge cells" to combine them.
- **Cell alignment**:
- **Vertical**: Align text to top, middle, or bottom.
- **Horizontal**: Choose left, center, right, or justify (spreads text across cell).
- **Fit to page width**: Select table, click option to adjust table width and content distribution.

### Content Creation: Advanced WYSIWYG - Image Formatting

- **Image Formatting:** Offers alignment (left, center, right, inline), captions, alt text, hyperlinking with new tab option, styling (rounded, bordered, shadow).
- **Advanced Editing:** Provides resizing, cropping, flipping, rotating, drawing (lines, shapes), adding icons & text, and filtering (grayscale, blur, etc.).
- **Actions:** Replace, copy, delete image, undo/redo/reset edits.
- **Access:** Click image to open a floating menu with options.
- **Hyperlinking:** Allows image linking, opens in new tab option, edit/unlink options.

### Content Creation: Advanced WYSIWYG - Editing Tabs

To edit tabs, use the "Edit" icon. Duplicate: click "Duplicate tab." Rename: click "Change tab name" and type the new name (max 50 chars). Delete: click "Delete tab" (can undo with Ctrl+Z). Cannot delete if only two tabs.

### Content Creation: Advanced WYSIWYG - Customizing Tabs

Customize tab appearance by selecting background/border color (preset, HEX, RGB) in the tab content block. Rearrange tab order by dragging/dropping tabs in the "Tabs" section, utilizing the drag icon and noting scrolling/replacement/positioning behaviors (blue line indicators, grey scrolling areas). Background/border changes affect the entire tab content block.

### Content Creation: Advanced WYSIWYG - Tabs Overview

- **Tabs**: Organizes content into separate sections within an article, enhancing readability. Typically supported in **Business** and **Enterprise** plans.

### Content Creation: Advanced WYSIWYG - Tabs on Site

Tabs in the Knowledge Base site are consistent across devices, can be switched without page refresh, and maintain their style and layout. On mobile, tabs function seamlessly. When exported to PDF, tab contents appear sequentially with headings. Key limitations include: no nested tabs, tab headings excluded from the table of contents, disabled page breaks within tabs, and tabs cannot be embedded inside other editor components like tables or accordions.

### Content Creation: Advanced WYSIWYG - Creating Tabs

To create tabs, use the Insert option in the editor, which adds a default structure with two tabs. Add more tabs by clicking the + button on the tab bar and enter titles. Each tab supports text, images, tables, links, callouts, code, and other enhancements. Tabs require at least two, with a maximum of ten.

## Content Organization

### Content Organization: Categories and Subcategories

Document360 categories and subcategories are organizational tools that structure articles into logical groups, improving user navigation and accessibility. Categories represent broad topics, while subcategories provide more specific divisions. They can be customized, including renaming and changing icons, and articles can be assigned to multiple categories. Best practices include clear naming, logical hierarchy, and user-centric organization. Access permissions can be applied, and categories can be reordered. Visibility issues may arise if articles are unpublished or absent; troubleshooting includes checking browser settings and cache. Proper structuring enhances knowledge base usability and user experience.

### Content Organization: Creating a Category

Document360 allows category creation via four methods: top-bar "Create", "Flywheel", "More" icon, and within a Folder/Index. Fill in name, nesting level, and type (Folder, Index, Page, or GitHub), then click "Create". Favor a maximum of 3 subcategory levels for optimal navigation. Alternative content finding tools include tags, search, and related articles.

### Content Organization: Changing Category Icons

To customize category icons in a knowledge base, navigate to the Documentation section, select the desired folder/index category, search for/browse emojis, choose one, and confirm. Emoji selection isn't possible for "Page" type categories.

### Content Organization: Managing Categories

- Document360 supports category management across Professional, Business, and Enterprise plans.
- Key features: create, rename, delete, move, clone, reorder, star categories, customize icons.
- Benefits: well-organized, accessible knowledge base for teams and users.

### Content Organization: Hiding and Unhiding Categories

Document360 allows restricting team access to categories and subcategories within documentation. Hidden items are marked, and users can hide/unhide using the "More" menu in categories/folders/index. Hiding one category hides everything under it. Four methods are described for hiding/unhiding in various contexts (single items, groups, folders, etc.), through the navigation menus and visual aids.

### Content Organization: Renaming a Category

Document360 allows renaming categories within the knowledge base via two methods: directly on the category page or via the "More" menu. This action doesn't change the category's URL slug; simply update the displayed name.

### Content Organization: Deleting a Category

There are four methods to delete categories in the Knowledge base portal:

1. **Categories & Articles section**: Hover over the category, click **More** > **Delete**, then confirm.
2. **Folder/Index category**: In the desired category, click **More** > **Delete**, then confirm.
3. **Multiple articles/subcategories**: Select checkboxes, click **Delete**, confirm.
4. **Specific article/subcategory**: Hover, click **More** > **Delete**, confirm.

**Note**: Deleting a root category removes all subcategories and articles, stored in the recycle bin for 30 days.

### Content Organization: Cloning a Category

Clone categories in Document360 by selecting the "More" then "Clone" option on your target category or item within a category. Choose target workspace/category, optionally update linked files automatically. Security restrictions apply depending on destination. Three methods are available: in the main category list, within a folder/index, or on a specific article/subcategory in a folder/index.

### Content Organization: Understanding Category Types

Categories and subcategories in Document360 serve as organizational tools to group similar articles, resembling folders for related content. The document references a comparison table for Professional, Business, and Enterprise plans, though specific details in the table are unspecified.

### Content Organization: Starring a Category

To star a category for quick access, go to the Documentation section, select the category, and click the Star icon. You can also star subcategories and articles. To unstar, either click the Star icon again or remove them from the Starred section by selecting checkboxes and clicking "Remove from starred." The Starred section acts like a favorites list, enhancing navigation efficiency.

### Content Organization: Moving a Category

You can move a category or subcategory across workspaces using 5 methods:

1. **Drag and Drop**: Drag the category within the same workspace.
2. **More Icon in Categories & Articles**: Use the More icon to access the Move option and select a destination.
3. **More Icon in Folder/Index**: Similar to Method 2 but initiated from within a specific folder.
4. **Move Multiple Items**: Select multiple articles/subcategories and use the Move icon.
5. **Move Specific Item**: Use the More icon on a specific item within a folder.

**Key Considerations**: Moving affects all subcategories/articles; cannot move root categories into subcategories; link updating is recommended when moving across workspaces.

### Content Organization: Drive Folder Mapping

**Drive folder mapping** automatically places images uploaded by contributors to articles into specific Drive folders based on the article's category and subcategory.

### Content Organization: Types of Categories

Three category types for organizing a Document360 knowledge base: **Folder** (container for articles/subcategories, no URL), **Index** (generates a URL, lists articles with details), and **Page** (functions like an article with content creation). Categories can be switched anytime without data loss.

### Content Organization: Linking Drive Folders

To link a Drive folder to a Document360 category, navigate to the category, click "More" (•••), "Set drive folder," select the desired folder, and click "Update." Subcategory mappings take precedence over parent mappings for image uploads. Changes only affect new images.

### Content Organization: Category-Drive Mapping

Implement a system to map categories to Google Drive folders by setting up categories as metadata or labels, and use the Drive API or scripts (for Business/Enterprise) to automate file organization into corresponding folders. Enterprise versions likely offer enhanced automation and management features.

## Content Export

### Content Export: Downloading Categories and Articles

This feature allows users to export entire categories and articles into PDFs with customizable templates. It is exclusive to private projects and workspaces. Enable the "Download as PDF" button in Settings > Knowledge base site > Article settings. Users can select templates during export. Note the 500 MB daily limit, with options to purchase additional capacity. Customization in the KB site does not affect PDFs, and visibility settings may restrict export options.

## Content Creation

### Content Creation: Creating an Article

Document360 users can create articles via four methods: a top-bar "Create" button, "Flywheel" icon, "More" icon, or "Create" button within folders/indexes. Article creation involves navigating to the Documentation section, naming the article, and selecting the category. Plan-based article limits exist (Professional: 5,000; Business: 5,000; Enterprise: 10,000).

## Content Management

### Content Management: Managing Articles

| Feature                  | Professional | Business | Enterprise |
|--------------------------|--------------|----------|------------|
| Create/Edit/Publish      | ✅            | ✅        | ✅          |
| Basic Organization       | ✅            | ✅        | ✅          |
| Version Control          | ❌            | ✅        | ✅          |
| Multi-user Collaboration | ❌            | ✅        | ✅          |
| Advanced Access Controls | ❌            | ❌        | ✅          |
| Custom Workflows         | ❌            | ❌        | ✅          |

Document360 offers tiered article management features. Professional includes basic article handling. Business adds version control and collaboration. Enterprise provides advanced access controls and custom workflows for large organizations.

### Content Management: Locking Articles

Article locking prevents simultaneous edits, crucial for team collaboration. Auto-unlocks after 15 minutes of inactivity. Manual unlocking is achievable through the portal's "Lock" icon. Navigation away from the article also automatically unlocks it.

### Content Management: Creating Article Templates

Document360 allows users to create, save, and reuse article templates for streamlined content creation. This feature is particularly useful for maintaining consistency, especially for repetitive structures like troubleshooting guides. Articles can be created from templates using three methods: via the Flywheel icon, the More option, or the Create button on the top bar. Each method involves selecting a template and customizing the article name and category. Additional features include automatic population of slugs and accessing template management from the Templates overview page.

### Content Management: Deleting Articles

Five methods for deleting articles in a knowledge base portal are detailed. These include: (1) deleting single articles via the "More" icon in "Categories & Articles"; (2) deleting articles while in editing mode; (3) bulk deleting articles within "Folder/Index" categories; (4) deleting a single article within specific "Folder/Index" categories; and (5) bulk deleting across all articles using the "All articles" section. Each method involves navigating to the correct location, selecting the article(s), and confirming the deletion. Helpful links are provided to related documentation.

### Content Management: Renaming Articles

To rename an article, navigate to the article in the Knowledge base portal's Documentation section, click the article name (or hover, click "More", select "Rename"). Enter the new name and click "Update". A confirmation is required if the article is published.

### Content Management: Moving Articles

Five methods exist to move articles in the knowledge base: 1) drag-and-drop categories; 2) using the "More" menu; 3/4) moving from folders/index; 5) moving from "All articles". Select destination workspace/category and choose whether to update referenced links. Security restrictions apply.

### Content Management: Editing Articles

Editing a published article is crucial for maintaining accurate and up-to-date content. Here's a concise summary:

- **Publishing Changes**: When an article is published, it becomes live on the Knowledge base site, and its status changes to "Published" in the portal.
- **Editing Process**: To edit, select the article, click the **Edit** button (changing its status to "Draft"), make necessary changes, and click **Publish** to update the live version.
- **Markdown View**: For articles created with Markdown, you can view the formatting by selecting **View markdown** from the **More** menu without creating a new version.

This process ensures seamless updates and easy access to content formatting.

### Content Management: Replicating Articles

Replicate articles in a knowledge base to multiple categories. Navigate to the article, select "Replicate," choose the target category & click. Source article edits only; replicated article settings may be restricted due to security.

### Content Management: Hiding and Unhiding Articles

In Document360, users can hide articles to restrict access to team accounts only, indicated by a strikethrough in the Documentation window. This feature is useful for internal content, such as sales team access to pricing details without public visibility.

There are four methods to hide/unhide articles:

1. **Categories & Articles Section**: Hover over an article, click the More icon, and select Hide/Unhide.
2. **Folder/Index Category**: Select multiple articles, click Hide/Unhide.
3. **Specific Article in Folder/Index**: Hover over the article, click More, then Hide/Unhide.
4. **All Articles Section**: Filter if needed, select multiple articles, and click Hide/Show.

Hidden articles are marked with a strikethrough, making them easily identifiable. This feature helps manage content access efficiently for internal and public documentation.

## Content Import

### Content Import: Importing Word Files

Document360 imports .docx files (under 15MB) for direct knowledge base content transfer, streamlining article import.

## Content Management

### Content Management: Cloning Articles

To clone an article in the Knowledge base portal, choose one of two methods:

**Method 1: Via Categories & Articles**

- Navigate to **Documentation**.
- Hover over the article in the left pane to show the **More** icon.
- Click **More** > **Clone**, fill in details (name, workspace, category, auto-update links), and confirm.

**Method 2: Within a Folder/Index Category**

- Navigate to **Documentation** and go to the desired folder/category.
- Hover over the article, click **More** > **Clone**, fill details, and confirm.

**Key Considerations:**

- Articles can be cloned within or across workspaces.
- Security restrictions apply based on destination settings.
- Auto-update links adjust references to the new location.

## Content Import

### Content Import: Importing Word Files

Document360 allows importing Word (.docx) files as either a single article or multiple articles based on headings. Single article imports the whole document. Multiple articles create new articles for each H1 (and optionally H2, etc.) heading within the file. Media and hyperlinks are preserved during the import.

### Content Import: Troubleshooting Word Imports

When the errors `documentation.categoriesAndArticles.maxArticlesCountReached` or `documentation.categoriesAndArticles.articleLimitExceedsPerCategory` occur, it indicates that the article limit for a category or project has been exceeded. This typically happens when creating many articles, bulk importing, or adding subcategories. **Steps to resolve:** Check if the issue affects all categories, verify the plan limits (100 articles per category; 5,000 per workspace for Pro/Business, 10,000 for Enterprise). Reduce articles or upgrade the plan if needed. If unresolved, contact Document360 Support.

An image overview of the error message is available in the document.

## Content Publishing

### Content Publishing: Publishing from the Editor

Publish articles from Document360 editor by clicking Publish, optionally adding a comment, configuring settings (tags, SEO, related articles, status indicator – manually or with AI), and clicking "Yes." AI-assisted tagging, descriptions, and related articles enhance discoverability. New/updated status indicators can be automatically set. Follow visual instructions through screenshots.

### Content Publishing: Bulk Publishing

To publish multiple articles in Document360, select them, then click "Publish." Ensure only unpublished articles are chosen. AI features (tags, descriptions, related articles) require minimum article lengths (50/200 words respectively). Hidden or restricted articles won't appear in search. Verify publication by checking for hidden status, restrictions, and workspace settings ("Public").

### Content Publishing: Publishing Process

The process of making drafted and reviewed articles available to end-users. Key plans for publishing include:

- **Professional**: Basic customization and SEO support.
- **Business**: Advanced audience targeting and analytics.
- **Enterprise**: Premium features like custom domains and multi-language support.

## Content Import

### Content Import: Choosing Editors for .docx Import

The editor used for importing .docx files is determined by selections in the Knowledge base portal settings. To configure this, navigate to **Settings > Knowledge base portal > General > Editor**, and choose between Markdown, WYSIWYG, or Advanced WYSIWYG editors. Note that Markdown does not support .docx imports.

Best practices include splitting large documents into multiple articles for efficiency and ensuring files are under 15MB. Troubleshooting common errors involves addressing issues like TOC header conflicts, firewall blocks, password-protected files, and style mismatches between Word and Google Docs. Additionally, the "maximum articles" error can be resolved by adjusting heading tags to reduce article count during import.

## Collaboration

### Collaboration: Adding Inline Comments

To add inline comments to a knowledge base article, select text, click the comment icon, type your comment, and click send. Mention collaborators using the @ symbol. Enable comment notifications in the settings to receive updates. Published articles automatically delete unresolved comments.

## Content Enhancement

### Content Enhancement: Adding Images

Adding images to articles improves comprehension, engagement, and user experience, simplifying instructions and clarifying complex information. Methods for image insertion exist in both Markdown and WYSIWYG editors.

## Collaboration

### Collaboration: Article Review with Comments

Document360's inline comment feature, exclusively available in the Advanced WYSIWYG editor, streamlines article reviews and feedback, fostering efficient collaboration and maintaining documentation quality.

## Content Enhancement

### Content Enhancement: Inserting Images - Markdown

Insert images in a Markdown editor using 4 methods: 1) Upload from local; 2) URL; 3) File Picker; 4) Drag & Drop. Specify dimensions {height="x" width="y"}. Upload to Document360 Drive recommended for image permanence. Drag-and-drop saves automatically to Drive.

### Content Enhancement: Inserting Images - Advanced WYSIWYG

Insert images using the Advanced WYSIWYG editor via `/image` command, `Insert` menu (upload from device, Drive, or URL), or copy/paste/drag-and-drop. Uploaded images are saved in Document360 Drive; local changes don't affect inserted images. Refer to "Image formatting" for further details.

## Collaboration

### Collaboration: Managing Comments

- **Viewing comments**: Click on highlighted areas or the comment icon.

- **Resolving comments**: Only the creator can mark comments as resolved.

- **Editing/deleting**: Only available for the user who added the comment.

- **Replying**: Team accounts can respond in the "Write a reply" field.

- **Filtering**: Options include All, Mentioned me, Open, and Resolved.

- **Limits**: 20 replies per comment, 500 comments per article, and 500 character limit per comment.

## Content Enhancement

### Content Enhancement: Adding Videos

Document360 allows adding videos to articles and categories via the "Insert video" and "Insert file" toolbar options. Videos enhance understanding of complex concepts, instructions, and processes, and increase user engagement.

### Content Enhancement: Inserting Videos - Advanced WYSIWYG

Insert videos in the Advanced WYSIWYG editor via 3 methods: 1) Embed URL (self-hosted, platform URLs); 2) Embed code; 3) Upload from drive. Use `/video` slash command. Broken link detection available via link analytics. No caption searching.

### Content Enhancement: Troubleshooting Broken Images

**Broken Image Troubleshooting**: A broken image occurs when the image URL is incorrect, or the image is missing. To fix, retrieve the image URL from the article's code view or by inspecting the element. Check the URL in a browser—if it shows a 404 error, the image is missing. Ensure the image exists at the correct path. Best practice: Upload images to Document360 Drive to prevent broken links. FAQs address image alignment, recommended insertion methods, customization options, accessibility tips for alt text, adding icons via HTML, and storage of pasted images. Direct image uploads to Document360 Drive ensure stability and avoid broken links from external sources.

### Content Enhancement: Inserting Videos - Markdown

Two methods allow video insertion in Markdown editor:

1. **URL Insertion**: Supports YouTube, Wistia, and Vimeo links. Paste the URL and add alt text.
2. **Drive File Insertion**: Upload a video file and adjust dimensions as needed.

Both methods offer straightforward integration, with the WYSIWYG editor also supporting similar video additions.

### Content Enhancement: Adding Files

To embed files directly in articles, upload them to the Drive, then use either the Markdown editor's "Insert file" button or the Advanced WYSIWYG editor's `/Insert file` command, drag-and-drop, or file selector. Filtering options exist in Drive. A "Download" option is available after insertion.

### Content Enhancement: Adding Hyperlinks

Document360 allows adding hyperlinks to text, images, or files for better user navigation. Hyperlinks connect to related content, external resources, or internal sections. Replicated articles cannot be linked within other articles.

### Content Enhancement: Adding Files to Articles

Files can be added to Document360 articles and category pages using two methods: adding files or attaching files, which help clarify and expand content for better understanding.

### Content Enhancement: Managing Hyperlinks

To edit/unlink a hyperlink:

- **WYSIWYG:** Click hyperlinked text, select "Edit" to modify or "Unlink" to remove. There's also an "Open Link" and "Copy Link" option.
- **Markdown:** Manual hyperlink editing needed.

### Content Enhancement: Adding Hyperlinks - Process

Add hyperlinks by selecting text, opening the 'Link' panel, specifying the link type (internal to article, internal heading, or external URL). Optionally, open in new tab. Methods differ slightly between Markdown and Advanced WYSIWYG editors, but the core procedure is the same. Utilize the included visuals for step-by-step guidance.

### Content Enhancement: Attaching Files to Articles

To attach files to an article, you can either upload a file or provide a URL, and they will appear on the right side above tags and the Table of Contents. Follow these steps: click the More icon, access Attachments, choose your method (URL or upload), arrange files if needed, and save. If files don't appear, ensure Show article files is enabled in settings.

### Content Enhancement: Creating Bookmark Links

Create bookmark links to specific headings (H2, H3, H4) within articles/pages using the Advanced WYSIWYG editor's "Link to the current article heading" function. Select desired text, choose a heading from the dropdown, and optionally open in new tab. H3/H4 support depends on settings.

## Localization

### Localization: Machine Translation and Hyperlinks

- **Machine translation automatically updates internal hyperlinks** to point to translated versions of linked articles.
- **Consistent article slugs across languages are important** to avoid broken links.
- **Relative and absolute paths are explained and examples are provided**, with emphasis on the role of relative paths for internal links.
- **FAQ covers linking to articles before publishing, linking to headings, and troubleshooting hyperlink issues after heading changes,** providing practical insights and workarounds.

## Content Enhancement

### Content Enhancement: Adding Email Links

To add an email link, select the desired text. In the Markdown editor, use the format `[link_text](mailto:email_id)`, e.g., `[Email support](mailto:test@gmail.com)`. In the Advanced WYSIWYG editor, highlight the text, press `Ctrl + K` or use `/link`, and type `(mailto:email_id)` in the Link field.

## Content Formatting

### Content Formatting: Code Blocks

Document360 uses Prism.js for syntax highlighting. Supported languages include HTML, C#, Java, JavaScript, XML, JSON, CSS, SQL, Python, Markdown, PHP, PowerShell, and Text. Refer to Prism.js documentation for a complete list.

## Content Management

### Content Management: Heading Changes and Hyperlinks

Changing an article heading breaks existing hyperlinks as they rely on the heading's text. To prevent this, use the WYSIWYG editor to modify the HTML: add an anchor tag within the heading to separate the hyperlink name from the visible text. This keeps the hyperlink functional even when the heading is updated.

## Content Formatting

### Content Formatting: Code Blocks - Markdown

Create code blocks using triple backticks (\`\`\`\`\`) before and after the code, or the `Ctrl+Shift+P` keyboard shortcut (or the insert code block icon).

### Content Formatting: Code Blocks - Advanced WYSIWYG

Create code blocks using three methods: 1) Insert > Code Block, 2) Triple backticks \`\`\`\`\`+ Enter, 3)`/code block` Enter. A floating menu allows selecting language (predefined or custom) and copying/deleting blocks. Custom languages are created by inputting a title(WYSIWYG) after the backticks (Markdown). Indentation (4+ spaces) creates code blocks w/o highlighting. Syntax highlighting supported for numerous languages (c, c++, c#, css, html, etc.). Ctrl+Shift+V preserves pasting formatting. FAQs cover supported languages, indentation methods, custom languages, and Markdown editor use.

## Collaboration

### Collaboration: Using Private Notes

Private notes, used for reminders, future updates, and team context in articles, are excluded from downloads via the Knowledge Base's PDF option but are included in browser-generated PDFs. Use the browser's print/save function consistently for inclusion.

### Collaboration: Adding Private Notes

Document360 allows users to add private notes visible only to specific reader groups or project team members, while remaining hidden from the public. Private notes can be created in both Markdown and Advanced WYSIWYG editors across Professional, Business, and Enterprise plans, enhancing collaborative content management.

## Content Formatting

### Content Formatting: Code Blocks - WYSIWYG

- Navigate to the desired article in the WYSIWYG editor.
- Click the **Code block** icon to open the panel.
- Select the desired programming language from the dropdown menu.
- Enter your code in the provided field.
- Click **Insert** to add the code block.
- Use the **Edit** or **Delete** icons on the code block to modify or remove it.

[![Creating code blocks in WYSIWYG HTML editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)

## Collaboration

### Collaboration: Private Notes - WYSIWYG

To add/manage private notes, navigate to the article in the WYSIWYG editor, click the private note icon, then use the floating menu options (visibility, copy, delete). Image shows the process.

## Content Enhancement

### Content Enhancement: Embedding Stream Videos

Document360 articles can now embed Microsoft SharePoint Stream and recent stream videos, using both Markdown and WYSIWYG editors. No specific professional/business/enterprise implementation details are outlined.

## Collaboration

### Collaboration: Private Notes - Markdown

To add a private note in the Markdown editor, use the syntax `:::(Internal) (Private notes)\nOnly visible to team accounts\n:::`, which is visible only to team accounts and not in the public version. Notes can be edited by modifying the content and deleted by removing the syntax.

## Content Enhancement

### Content Enhancement: Embedding SharePoint Videos

Embed a SharePoint Stream video by navigating to the video, selecting "Share" then "Embed code." Customize the embed with start time, size, autoplay and responsive options. Crucial: manage access permissions for viewers to view the video.

## Collaboration

### Collaboration: Private Notes - Advanced WYSIWYG

Create private notes in Document360's Advanced WYSIWYG editor via `/Private note` or the Insert menu. Manage visibility (all team, security groups, reader groups) in WYSIWYG/Advanced editors. Notes can be copied, edited, or deleted (except in published articles). Ideal for internal comments, not visible publicly. Access visibility settings, copy, or delete via floating menu.

## Content Enhancement

### Content Enhancement: Embedding Google Forms

Google Forms can be embedded within knowledge base articles using embed HTML code blocks.

### Content Enhancement: Embedding Draw.io Diagrams

To embed a Draw.io diagram in Document360, use the HTML embed link generated within the Diagrams.net application. Ensure the diagram's privacy settings in its storage location (e.g., Google Drive) are set to public. Diagrams.net is a web-based diagramming tool.

### Content Enhancement: Embedding Google Forms

To embed a Google Form in your knowledge base article, navigate to the form, copy the embed HTML code (iframe src), and paste it into your article's Markdown or WYSIWYG editor. This allows readers to interact and submit data after publishing.

### Content Enhancement: Embedding Stream Videos

You can embed Microsoft Stream videos in articles using Markdown or the Advanced WYSIWYG editor. In Markdown, paste the embed code directly. In WYSIWYG, use Code View or the Insert Video feature with the embed code. Videos can be embedded on external pages using an iframe. The embed code snippet is typically:

`<iframe src="<Stream video URL>" width="640" height="360" frameborder="0" scrolling="no" allowfullscreen title="<Video_file_name>"></iframe>`

## Content Management

### Content Management: All Articles Overview

Document360's new "All articles" feature allows for bulk actions on multiple articles and page categories. Actions include publishing, previewing, copying links, hiding, moving, deleting, setting reminders, checking status, tagging, translation, PDF download, deprecating. This streamlines article management, especially for large-scale operations such as product launches.

### Content Management: Bulk Actions with All Articles

The "All articles" feature in Document360 allows efficient handling of many articles by enabling bulk actions. Users can filter articles by status, date, tags, etc. Bulk operations include publishing, scheduling, previewing, copying links, hiding, moving, deleting, reviewing, setting live statuses, adding tags/labels, machine translation, and exporting as PDFs. Important considerations include article status (draft, published) and exceptions when working with categories that include subcategories or child articles (hide, move, delete options are restricted if subcategories exist).

### Content Management: Filtering in All Articles

No information is available regarding filters for bulk operations on all articles. The table is empty.

## Content Enhancement

### Content Enhancement: Embedding Draw.io Diagrams

Two methods embed Draw.io diagrams into Document360:

1. **Embed Option**: Generate and copy an image tag from Diagrams.net, paste it into Document360's Markdown or Code view editor. Adjustable dimensions.
2. **Export as Image**: Save diagrams in formats like PNG/SVG, then upload to Document360 via Insert Image.

Choose embed for interactivity; static images for fixed visuals. Consider size and optimization for performance.

## Content Management

### Content Management: Accessing All Articles Filters

Filter knowledge base articles by status, review reminders, stars, visibility, read receipts, contributors, categories, dates, tags, and labels. Save custom filters for reuse. Custom filters can be shared with team members. All articles filtering process is described with clear steps and illustrative screenshots.

### Content Management: Exporting All Articles

Export all articles in a knowledge base (.csv) via platform interface by navigating to "All articles," filtering by various criteria (status, category, etc.), and clicking "Export." Exported file contains article title, category, status, date, and URLs. Draft articles cannot be individually exported; export the containing category instead. API endpoint exists for programmatic retrieval of article lists & URLs.

### Content Management: Review Reminders

Review reminders alert project members when articles need review, ensuring accuracy and timeliness for customers and internal teams. Facilitates the review process.

### Content Management: Clearing Filters

Clear filters by clicking "Clear all," using the Filter dropdown, or removing individual filters via the X. Custom filters can be saved, and Read receipts are limited to specific projects.

### Content Management: Exporting Article Lists

Document360 allows users to export a list of articles and their status as a .csv file, enabling filtering by specific fields like contributor or date. This feature is supported across plans, providing flexibility in managing and analyzing article data.

### Content Management: Review Reminder FAQs

To set review reminders for articles, go to Documentation > Content tools > Documentation > Article review reminders.

## Content Optimization

### Content Optimization: Article SEO

Search Engine Optimization (SEO) is crucial for knowledge base articles. Adding SEO titles and descriptions improves article visibility and indexing by search engines.

Create review reminders for articles to flag them for immediate review or set a future date, with options for Now, 30 days, 3 months, or Custom. Add a brief reason (up to 100 characters) for context, and apply reminders individually or to multiple articles. A red "Needs review" tag appears, showing the reason on hover. To clear, click the tag and mark as reviewed, removing the tag and updating the status.

## Content Management

### Content Management: Setting Review Reminders

Create and apply review reminders to flag articles for review, setting reminders to trigger immediately or on a specific date. You can apply reminders individually or to multiple articles. A red "Needs review" tag appears next to the article slug, showing the review reason on hover. To clear the reminder, click the tag and select "Mark as reviewed," removing the tag and updating the status.

### Content Management: Bulk Review Status Updates

Two methods are available to mark multiple articles.

1. **All Articles Method**:

- Navigate to Documentation > All articles.
- Use the Filter option to select "Stale" under Review reminder.
- Choose articles, then click "Mark as Reviewed" or set reminder days for "Needs review".

2. **Content Tools Method**:

- Go to Documentation > Content tools > Article review reminders.
- Create a new reminder, specify details, select workspace, language, and desired articles.
- Use filters (category, contributor, etc.) to manage selection efficiently.

Both methods allow efficient management of article review statuses.

## Content Optimization

### Content Optimization: Excluding Articles from Search

Document360 allows users to exclude articles or categories from search engine results, maintaining confidentiality of sensitive or internal content. No plan details are provided in the table.

### Content Optimization: Adding SEO Metadata

- Navigate to the article in the Knowledge Base portal.
- Click on the More icon and select SEO.
- In the SEO tab, enter a meta title (5-60 characters) and a meta description (150-160 characters).
- Use AI generator if the article has at least 200 words.
- Update meta titles for article name changes.
- Manually update SEO descriptions for each language version.

### Content Optimization: Excluding from External Search

To exclude articles from external search engines, navigate to the desired article, click the More icon (•••), select SEO settings, check "Exclude from external search engine results," and save your changes.

### Content Optimization: Excluding from Internal Search

To exclude articles from search results and Eddy AI assistive search:

- Navigate to the article or category page.
- Use the **More** icon to access **Article settings**.
- Under **Search Visibility**, select desired exclusion checkboxes: **Exclude from knowledge base search** and/or **Exclude from Eddy AI assistive search**.
- Save changes.

Exclusion is available based on pricing plans. Excluded articles remain accessible via URL or navigation menu. Cloned articles retain their parent's search visibility settings.

## Content Management

### Content Management: Changing Article Slugs

Change an article's URL slug (part of the article's address) in Document360 using two methods: 1) portal settings (SEO tab) or 2) article editor. **Essential:** Create a redirect rule for the new slug to prevent broken links. Special characters (e.g., ä, ö, ü) require proper encoding, copy URLs from the portal, and refer to the support page if issues persist.

### Content Management: Changing Article URLs

_No summary available for this section._

## Content Organization

### Content Organization: Article Tags

Article tags are keywords for searching, filtering, sorting, and bulk actions on knowledge base articles and categories by team accounts. Tags apply to articles, categories, and drive files; drive file tags are only visible in the knowledge base. The "Tags" page manages all project tags.

### Content Organization: Adding Tags

To add tags: Navigate the portal, click "More" > "Tags," create/choose tags, optionally generate AI-suggested tags (minimum 200 words), save, and publish. Configure article settings; readers can then click tags to find related materials. Tag limits: 30 characters (spaces included), permissible symbols.

## Content Navigation

### Content Navigation: Related Articles

Related articles will be added to the bottom of knowledge base articles. These links will only point to published articles within the knowledge base and won't appear in any widgets.

### Content Navigation: Adding Related Articles

Add related articles to knowledge base articles via the Knowledge Base portal or Publish checklist. Manual selection involves searching and adding articles. Eddy AI can suggest related articles (requires 50+ word article). An automated "Auto relate" option is available. Access restrictions limit which related articles are shown.

## Content Organization

### Content Organization: Article Labels

The Knowledge Base portal allows adding article labels to streamline content management across Professional, Business, and Enterprise plans, enabling efficient sorting and filtering of articles, such as quickly locating release notes.

### Content Organization: Adding Labels

The Knowledge Base portal offers **five methods** to add labels to articles:

1. **Article Editor**: Navigate to the article, click **More** > **Labels**, enter the label, and click **Add**.
2. **All Articles Section**: Select articles, click **More** > **Add labels**, enter the label, and apply filters to sort.
3. **Workflow Assignments**: Select articles, click **Add labels**, enter the label, and use filters.
4. **Starred Section**: Select articles, click **Add labels**, or hover over an article and use **More** > **Add labels**.
5. **Folder/Index Category**: Navigate to the category, select articles, and add labels via **More** or bulk selection.

**Limits**:

- Up to **10 labels per article** and **10,000 per project**.
- Labels are **internal only**, **not visible on the site**, and cannot be used for searches but can filter articles.

**Key Differences**:

- **Tags** are visible and aid in search/navigation, while **labels** are for internal organization.

## Content Enhancement

### Content Enhancement: Adding Featured Images

To add a featured image to a Knowledge base article, click "More article options," then "Featured image" and "Upload an image." Use high-quality JPEG or PNG images with optimal dimensions (1200x800 - 2000x1200 pixels) for clarity and responsiveness across devices.

### Content Enhancement: Featured Image Overview

In Document360, featured images enhance SEO and improve link previews without appearing on the article itself. Only available in Business and Enterprise plans.

### Content Enhancement: Adding Attachments

To add attachments to a knowledge base article: navigate to the article, open "More article options," select "Attachments," add a URL or upload a file from Drive, select and insert, arrange, and remove attachments as needed. Attachments appear near the Table of Contents and Tags on the knowledge base site.

## Content Status

### Content Status: Status Indicators

A knowledge base site will display a status indicator ("New", "Updated", or "Custom") near article titles. No specific implementations or relationships between status and category (Professional, Business, Enterprise) are detailed.

## Content Enhancement

### Content Enhancement: Attachment Support by Plan

**Plans supporting for adding attachments**

| Professional                         | Business                                 | Enterprise                               |
|--------------------------------------|------------------------------------------|------------------------------------------|
| Basic attachment support (up to 5MB) | Standard attachment support (up to 10MB) | Advanced attachment support (up to 20MB) |

The Professional plan offers basic attachment capabilities with a limit of 5MB. The Business plan provides standard support up to 10MB. The Enterprise plan includes advanced features with a 20MB limit, catering to larger organizations.

## Content Status

### Content Status: Manual Status Updates

To change the status indicator for an article in the knowledge base, navigate to the article, select "More article options," then "Article settings," and change the status. Customize indicator text by editing localization variables, and its color in "Article settings." Specify duration of status display in the article settings.

## User Interface

### User Interface: Knowledge Base Site View

A public knowledge base website allows end-users to access articles. Project members manage content (articles, categories, templates, files, users, site settings), and article status is indicated visually (new=green, updated=orange, custom).

## Content Status

### Content Status: Understanding Article Status

Article status feature in knowledge base portal allows quick identification of article statuses (Draft, Needs review) to streamline content management. Readers see update/new indicators. Improves efficiency and user clarity.

### Content Status: Article Statuses

Knowledge base articles have four statuses: 1) **New**: Draft, accessible only to team members; 2) **Draft**: Published article being updated in a draft, original remains live; 3) **Published**: Publicly accessible; 4) **Needs review**: Flagged for review by a contributor or automated system. Applies to category pages as well.

## Content Preferences

### Content Preferences: Plan-Based Options

No preferences are defined for Professional, Business, or Enterprise plans in the provided table.

## Content Status

### Content Status: Automatic Status Updates

To enable automatic status updates, go to **Settings** > **Knowledge base site** > **Article settings & SEO**. Turn on "Automatically set article status" in the Category manager accordion. Set the number of days the status should appear. For more details, refer to the [Category manager](/help/docs/knowledge-base-category-manager) article.

### Content Status: Hidden Article Status

Hidden articles are marked with a strikethrough and inaccessible on the Knowledge base site, only viewable via the portal. They can be hidden in any status (New, Draft, Published, Needs review). Articles flagged as Needs review are marked for review by contributors or automated reminders. Hidden categories also hide articles on the site. Category pages display article statuses, aiding in Knowledge base maintenance.

## Content Structure

### Content Structure: Managing Table of Contents

Control table of contents visibility at the knowledge base site or individual article level using settings in the software interface. Site-wide settings control visibility for all articles. Individual article settings allow for hiding the TOC on a per-article basis. Only headings (H2, H3, H4) are included in the TOC, not bold text.

## Content Status

### Content Status: Deprecated Articles

**Deprecated articles are outdated.** Marked as obsolete, they may be replaced by newer content due to subject removal, changes, or new concepts. Deprecation tagging now occurs at the article/page category level, signifying the article's status clearly. A custom message explaining the reason and links to updated versions are optional, improving user experience.

### Content Status: Marking Articles as Deprecated

The document content is not provided, but based on the structure, it appears to relate to plans supporting a "mark as deprecated" feature, typically used to indicate plans that are being retired or phased out.

## Content Customization

### Content Customization: Article Preferences

To update an article's preferences, navigate to the desired article, click the More icon (•••), select Preferences in Article settings, adjust the checkboxes for comments, table of contents, and feedback, then save. This process is article-specific and may require additional setup for features like Disqus.

## Content Status

### Content Status: Bulk Deprecation

To deprecate multiple knowledge base articles simultaneously, select them, click "Deprecate," add a reason, and click "Apply." Deprecation will be indicated with a visual tag on the articles' knowledge base site view.

### Content Status: Marking Articles as Deprecated

To mark an article as deprecated, navigate to it in the Knowledge base portal, access Article settings via the More icon, enable the Deprecated toggle in the dedicated tab, optionally add a formatted reason, and save your changes.

## Content Publishing

### Content Publishing: Scheduled Publishing

Document360 allows scheduling content publication for specific dates/times, improving content calendar planning, consistency, and reducing last-minute publishing issues.

## Content Management

### Content Management: Updating Contributors

Document360 automatically tracks contributors based on their actions (create, update, publish) and displays them publicly. Readers can view contributors' other articles. The Enterprise plan allows manual addition or removal of contributors, while Professional and Business plans do not support this feature.

## Content Publishing

### Content Publishing: Setting Up Scheduled Publishing

To schedule an article or page category's publication in the knowledge base, navigate to the item, select "Publish later," choose date, time, and timezone, optionally add comments, and click "Schedule." This feature works for articles and categories.

## Content Management

### Content Management: Managing Contributors

To manage contributors in Document360, access the contributor list via the Article information icon, then use the Manage popup to add (via search) or remove contributors using icons. If no contributors are listed, assign one by searching and adding; contributors persist until their team account is deleted.

![add contributor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Add_delete_contributors.gif)

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-No_contributor_error_resolving.gif)

## Content Publishing

### Content Publishing: Editing Scheduled Publications

To edit a scheduled publication, navigate to the article in the Knowledge Base portal, click the **Scheduled** dropdown, and select **Edit schedule**. Modify the date, time, and timezone in the panel, add comments if needed, and click **Schedule** to save changes. Optionally, publish immediately by selecting **Publish now** from the dropdown.

### Content Publishing: Bulk Scheduled Publishing

To schedule multiple knowledge base articles for later publishing, select them, choose a date/time/timezone in the "Publish later" panel, and click "Schedule." Scheduled articles display a "Publish later" icon. Instant publishing of a scheduled article is possible. Editing a scheduled article is not allowed; cancelling the schedule is required for edits. Scheduled articles cannot be published via API. Moving scheduled articles to another workspace will clear the schedule.

### Content Publishing: Cancelling Scheduled Publishing

To cancel scheduled publishing, navigate to the article, click the **Scheduled** dropdown, select **Cancel**, and confirm with **Yes**.

## Collaboration

### Collaboration: Discussion Feed

A discussion feed feature allows users across different roles to collaborate, converse, and review articles and categories within the platform. The platform supports peer reviews and approvals. Discussion feed functionality is available across different plans (professional, business, enterprise), but the specific details/features for each tier are unknown.

### Collaboration: Deleting from Discussion Feed

Users can delete their own comments from a discussion feed by hovering over the message, clicking the delete icon. Undo is available. Feed disabled after article publication.

### Collaboration: Discussion Feed FAQs

Comments on articles in Document360's Knowledge Base are enabled during draft/edit mode, but disabled after publishing. Inline comments are possible in the Advanced WYSIWYG editor. Users can access and manage articles, categories, versions, and languages.

## Content Management

### Content Management: Article Revisioning

Document360 article revision creates a new unpublished version when edited, preserving the old version in history until published. Team accounts can compare/revert versions but must manually delete older versions. Versioning supports collaboration, audit, and access to accurate information.

To access the discussion feed, go to the desired article, click "Discussion" or "Comments" at the top right, compose your message in the text box, and send. Use @ to tag team members, triggering an email notification with article details.

### Content Management: Creating Article Versions

Two methods exist for creating new article versions. **Method 1:** Edit a published article directly. **Method 2:** Fork an older revision to create a new version with that content. Both require publishing the newly created draft.

### Content Management: Revision History Features

| **Features**           | Professional | Business | Enterprise |
|------------------------|--------------|----------|------------|
| Version Control        |              |          |            |
| Change Tracking        |              |          |            |
| Collaboration Features |              |          |            |

### Content Management: Comparing Article Versions

Document360 allows comparing article versions by highlighting additions, removals, and formatting changes. Users can swap comparison views, view revision history, and revert to previous versions (with caveats about published articles needing deletion). Published article dates are automatically generated, and cannot be changed.

## Analytics

### Analytics: Article Analytics

**Document360's Article Analytics** provides article-specific insights (reads, views, likes, dislikes, link status) across Professional, Business, and Enterprise tiers. Use this data to optimize content strategy and improve user experience.

## Content Management

### Content Management: Article Revision Actions

- **Fork**: Create a new version for editing.
- **Delete**: Permanently remove an unpublished version.
- **Open**: Access previous versions to restore or publish.
- **Workflow history**: Tracks stages, assignees, comments, and dates.
- **Publish**: Make any version public from the editor.

Version details include number, contributor, date, and visibility. An image of the workflow history is referenced.

## Security

### Security: Article Access Control

Granular access control to knowledge base articles is offered via team/reader accounts and groups, allowing varying levels of access (Professional, Business, Enterprise) for different users.

## Content Optimization

### Content Optimization: Health Check Metrics

Health check metrics analyze articles and category pages (English only) to identify readability issues (e.g., long sentences, missing internal links). These metrics help improve content quality and SEO.

## Analytics

### Analytics: Accessing Article Analytics

Access article analytics by clicking the **More (•••)** icon in the editor and selecting **Analytics**. Metrics include **Reads** (engagement-based, updated daily), **Views** (unique browser clicks), **Likes**, **Dislikes**, and **Link Status** (working, broken, unknown, ignored). Use the link validation tool to maintain reliable links. Analytics update in real-time, with reads reflecting unique user sessions. Access project-wide insights via **Go to Analytics**. Metrics help refine content engagement strategies.

## Content Optimization

### Content Optimization: SEO Metrics

Optimize SEO by keeping article titles (50-70 characters), descriptions (120-160 characters), and a featured image present. One to three external and internal links are ideal; exceeding these numbers warrants review/adjustments. Tool provides categorization (Problems, Suggestions, Good Work) based on metric evaluations, guiding users toward improvements.

## Security

### Security: Managing Article Access Control

To manage article access control:

1. Navigate to the desired article.
2. Click **More** > **Security**.
3. Choose between **Knowledge base portal** (for team accounts) or **Knowledge base site** (for readers).

- **Portal**: Manage team access for content updates and settings.
- **Site**: Control viewer access for published articles.

For more details, refer to the linked sections and FAQs for troubleshooting access restoration and category-specific access management.

## Content Optimization

### Content Optimization: Readability Score

The Readability score from the Health Check Metrics measures how easy text is to understand, using a scale from 0-100. Higher scores indicate easier readability.

### Content Optimization: Checking Readability

To check article readability in the Knowledge base, open the article, then click "More" -> "Health check metrics". Expand "Readability metrics" to see the score. Scores below 30 are problematic, 30-59 suggest improvement, and above 59 are good. Update the "Health check metrics" panel and click "Check now" for immediate results.

### Content Optimization: Accessing Health Check Metrics

To access health check metrics for an article, navigate to the article in the Knowledge Base portal, click **More** (•••), and select **Health Check Metrics**. The panel includes:

- [SEO metrics](/help/docs/health-check-metrics#seo-metrics) and [Readability metrics](/help/docs/health-check-metrics#readability-metrics).
- Metrics are classified into **Problems** (need immediate action), **Suggestions** (require improvement), and **Good Work** (optimal parameters).
- If parameters are updated while the panel is open, click **Check now** for the latest insights.

![Health check metrics panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Health_check_metrics_in_the_Knowledge_base_portal.gif)

### Content Optimization: Understanding Readability Metrics

- **Readability Score (0-100)**: Higher scores mean better readability. Categorized as Problems (below 30), Suggestions (30-59), or Good Work (above 59).
- **Paragraph Length**: Optimal ≤150 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sentence Length**: Recommended ≤20 words. Exceeding this appears under Suggestions; all within limit under Good Work.
- **Sub-heading Distribution**: Absence appears under Suggestions; presence under Good Work. Uses H2, H3, H4 tags in Document360.

> NOTE: Metrics exclude LaTeX and code blocks.

## SEO

### SEO: Accessing the Sitemap

Document360 allows managing sitemaps for SEO. Find the sitemap URL in _Settings > Knowledge base site > Article settings & SEO > SEO_. Choose update frequency (e.g., Daily). Submit the generated XML sitemap to Google Search Console via their instructions for best results. The sitemap lists URLs and potentially metadata (e.g., last modification times).

## Collaboration

### Collaboration: Public Article Comments

Document360 enables public article comments via the Disqus plugin. Configure Disqus integration for automatic comment activation on all articles. Refer to the Disqus integration help article for details.

## SEO

### SEO: Sitemap Support by Plan

A Sitemap is an XML file detailing a website's structure and page URLs, aiding search engines like Google in crawling and indexing. The table below indicates which plans support sitemap generation:

| Professional | Business  | Enterprise |
|--------------|-----------|------------|
| No support   | Supported | Supported  |

The sitemap feature is only available for public projects.

### SEO: Robots.txt Support

_No data available to generate a `Robots.txt` entity-dense TLDR. Document is a table template and lacks any information needed to produce meaningful details about robots.txt support._

### SEO: Understanding Robots.txt

A Robots.txt file is a website file that instructs web crawlers (e.g., search engine bots) on which parts of your site they are allowed to access and index. It prevents crawlers from accessing specific files or directories, maintaining control over the content visibility in search results. Key: controls web crawler access; prevents indexing; text file; site-specific rules.

## Content Management

### Content Management: Read Receipts

Read receipt feature confirms article acknowledgment, crucial for tracking communication, notably important updates. Available exclusively in KB site 2.0 for private and mixed projects, but not for JWT configured projects.

## Collaboration

### Collaboration: Enabling Public Comments

To enable comments on a public article, ensure Disqus integration is active. Navigate to the article, click the More icon, select More article options, go to the Preferences tab, check the Enable feedback checkbox, and save. Disabling comments requires deselecting this checkbox. Removing Disqus disables all comments and requires reconfiguration to restore.

## Content Management

### Content Management: Managing Read Receipts

Manage read receipts for your knowledge base articles and categories via bulk actions on all articles, individual article settings, or category rules in the settings. Settings rules have priority. Republishing an article forces re-acknowledgment. Category visibility can be controlled using rules.

## SEO

### SEO: Managing Robots.txt

To access and edit Robots.txt in Document360, navigate to **Settings** > **Knowledge base site** > **Article settings & SEO** > **SEO** tab, then click **Edit** under Robots.txt. Use it to set crawl rules, block access to specific pages/folders, or add crawl delays. Examples include blocking admin data, preventing tag pages from indexing, or allowing sitemap access. Follow best practices by including sitemap links and ensuring no duplicate Robots.txt files. For specific needs, refer to FAQs on excluding content from search engines or restricting crawlers like Googlebot or Bingbot.

## Content Management

### Content Management: Reader Acknowledgment

After configuring read receipts, readers see a banner prompting acknowledgement. Scrolling to the bottom, checking a box, and clicking submit acknowledges reading. Successful acknowledgement displays a confirmation message.

### Content Management: Read Receipt Management Page

A detailed interface for managing read receipt rules, allowing users to:

- Create new rules for Knowledge base categories
- Rearrange rules (priority-based execution)
- View/edit rule details (name, visibility, categories)
- Modify rule dependencies
- Edit or delete existing rules
- Set visibility (Show/Hide) for each rule
- Organize and manage rules effectively.

## Content Sharing

### Content Sharing: Private Article Links

Document360 KB Site 2.0 (projects created after June 10th) enables sharing articles with external users via private links. Generate a unique link for any article, even unpublished ones. External users don't need access to the portal. Manage links by deleting or regenerating as needed. Private links expire if the article is deleted and won't work on the article after it's deleted.

## Content Management

### Content Management: Acknowledgment Tracking

The Knowledge Base site features an Announcement icon on the top-right of the home page, indicating pending acknowledgements. Clicking this icon leads to the **Acknowledgement required** page, where users can filter articles by workspace (Current, All, or Specific) and acknowledgement status (Required or Acknowledged). This allows users to efficiently manage and track article acknowledgements across workspaces.

## AI Integration

### AI Integration: Customizing Eddy AI

Eddy AI customization is available for different user plans (Business/Enterprise). Customization includes response tone/length, and for Enterprise, AI assistant name changes. Legacy users can also customize. Renaming Eddy possible for branding. Certain Document360 users can adjust the Eddy AI term.

## Analytics

### Analytics: Monitoring Read Receipts

To monitor read receipts in Analytics:

- Navigate to **Analytics** () > **Articles** and click **View all** in the **Top articles** section.
- The **Read Receipt** field in the **All Articles** page displays acknowledgment details.
- Changes reflect in analytics within 15 minutes.

Key points:

- Maximum 20 read receipt rules can be created.
- Reader acknowledgment rules do not carry over when cloning articles/categories across workspaces.
- Readers must acknowledge republished articles again if acknowledgment is enabled.

## Localization

### Localization: Machine Translation Prerequisites

Machine translation requires credits. Check your balance in Settings > Knowledge base portal > Localization & Workspaces > Machine translation. Purchase more if needed. Credits are consumed at a rate of one per translated character.

### Localization: Using Machine Translation

Two methods for machine translation exist: bulk translation of multiple articles via the "All articles" section (involving WYSIWYG editor switch) or for individual articles from within the editor. Both involve setting the translation status. Retranslating is required if the main language article is updated.

### Localization: AI Machine Translation Overview

Document360's AI machine translation enables seamless localization of content, with benefits including time efficiency, consistency, and scalability. Key points include automatic conversion from Markdown to WYSIWYG and specific behaviors regarding article deletion vs. hiding.

To customize the Eddy AI, go to **Settings () > AI features > Customization**. On the **Customize Eddy AI** page, you can:

1. **Rename the AI**: Enter a desired name (up to 15 characters) in the **AI assistant name** field.
2. **Adjust Response Tone**: Choose from options like Default, Professional, Friendly, Casual, or Straightforward to match your preferred style.
3. **Set Response Length**: Select between Default, Long and detailed, or Short and concise for varying levels of detail.

Once done, click **Save**. Note: The AI name is subject to moderation checks; override if prompted.

**TL;DR**: Personalize Eddy AI by renaming it, adjusting tone, and response length via the customization page.

### Localization: Translation Status Indicators

Multilingual knowledge base articles have translation status indicators (🌐 for "Needs translation") above formatting tools. Filtering by "Needs translation" or "Translated" in the Knowledge Base portal allows users to locate and update translation status, including machine translation. The main language article doesn't show status.

### Localization: Troubleshooting Machine Translation

- **Large articles:** Split articles exceeding 50,000 characters (HTML) into smaller sections for translation.
- **Content updates:** Manually trigger updates in secondary languages using the "Machine translation" feature in the "All articles" section. New content doesn't automatically update.
- **Supported languages:** Machine translation supports many languages (list provided).
- **Character limit:** Be mindful of the 50,000 character limit and potential error messages.
- **Reversibility:** Translating changes the article status, but the original content is not recoverable. Backups are recommended.
- **Costs:** Machine translation is included in the subscription, but excessive character counts may incur additional charges.
- **Language management:** Deleting or hiding articles in one language affects the main and other language versions. Changing/Adding languages isn't automatic, requiring specific actions.

### Localization: Machine Translation Examples

Document360 offers two machine translation methods. **Scenario 1** allows translating existing English articles to other languages (e.g., German, Spanish) via the "All articles" section, requiring selection, confirmation, and automated translation. **Scenario 2** involves adding a new language (e.g., French) post-content creation; English articles are replicated but must be translated manually. If languages were added before content creation, manual translation from "All articles" is needed. The timing of language addition affects content replication and translation requirements.

To manage machine translation credits effectively, start by navigating to **Settings > Knowledge base portal > Localization & Workspaces > Machine translation** to monitor your project's usage. The dashboard includes Limit (total credits), Usage (consumed credits), Remaining (leftover credits), and Usage meter (percentage used). Note that individual articles must be under 50,000 characters, including formatting; split larger articles if necessary. Subscription plans determine credit limits: Professional (1M), Business (2M), and Enterprise (5M). Additional credits can be purchased in 1M increments for $50.

Machine translation credits are managed via the settings portal, with metrics for limit, usage, remaining, and usage percentage. Articles must be under 50k characters, including formatting. Subscription tiers set limits (Professional: 1M, Business: 2M, Enterprise: 5M), with options to buy additional 1M credits for $50.

## AI Integration

### AI Integration: Eddy AI Compliance

Eddy AI complies with GDPR for EU data privacy and SOC 2 Type 2 for security, availability, and confidentiality.

### AI Integration: Eddy AI Subprocessors

Eddy AI utilizes subprocessors including MongoDB (vector database), OpenAI (AI capabilities), Azure (cloud infrastructure), Stripe (payment processing), and Segment (product analytics) to enhance service quality and user experience.

### AI Integration: Eddy AI Trust and Transparency

Eddy AI's trust page highlights Document360's commitment to transparency, detailing how AI enhances user experience. It provides an overview of Eddy AI's functionality and outlines related security and privacy practices to ensure trust and accountability.

### AI Integration: Eddy AI Data Security

Eddy AI encrypts data at rest and in transit using industry-standard protocols to ensure data integrity and confidentiality.

### AI Integration: Eddy AI Data Privacy

Eddy AI uses OpenAI models via API. Data is sent to OpenAI and retained for 30 days for analysis, then deleted. A DPA outlines privacy commitments. Consult OpenAI's and Document360's privacy policies for full details.

## Security

### Security: Information Security Policy Framework

Document360's comprehensive information security policy framework involves categorized data handling (Confidential, Restricted, Public), strong encryption (AES-256, hash functions), a robust incident response plan including root cause analysis, defined roles and responsibilities for all personnel, secure development practices embedded in the SDLC (secure-by-design), operations security procedures covering change management, capacity planning, and data leakage prevention, access control focused on least privilege, and regulated data retention. Policy enforcement involves documented procedures, audits, and potential disciplinary action for violations. The policies cover all systems and data, whether internal or external.

## AI Integration

### AI Integration: AI Writer Suite

Document360's AI writer suite is a collection of AI-powered tools for content creation within a knowledge base portal. Features include writing assistance, SEO optimization, FAQ generation, and related content recommendations, designed to improve productivity and reader experience.

### AI Integration: AI Writer - Plan Availability

- **Plan access:** Freemium lacks AI Writer Suite; Professional, Business, & Enterprise have full access.
- **Credit limits (monthly):** Most features: 5,000 credits; SEO/Title generator: 1,000 credits.
- **Unlimited:** Within Professional, Business, & Enterprise plans, some features have unlimited usage.
- **Notifications:** Users get warnings when approaching credit limits.

### AI Integration: AI Writer Overview

Document360's AI writing suite, "Eddy AI," is accessible via Ctrl+Space. All features are enabled by default in trial accounts. The document outlines plans for different access levels (professional, business, enterprise) but does not currently detail specific functionalities per level.

### AI Integration: AI Writer Features

- **AI Writer**: Generates outlines, adjusts content length, changes tone/voice, splits sentences, converts speech, improves writing clarity, and converts text into tables.
- **AI FAQ Generator**: Automatically creates FAQs from article content.
- **AI Title Recommender**: Suggests engaging and SEO-friendly titles.
- **AI SEO Description Generator**: Produces search engine-friendly descriptions.
- **AI Tag Recommender**: Provides relevant tags for better content categorization.
- **AI Related Articles Recommender**: Suggests additional relevant content for users.
- **AI Chart Generator**: Creates pie charts, flow charts, and tables from content.
- **AI Alt Text Generator**: Generates alt text for images and videos to enhance accessibility and SEO.

### AI Integration: AI Writer - Language Support

Eddy AI writer suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Features like search suite are unavailable in unsupported languages such as Chinese.

### AI Integration: AI Writer - Prerequisites

Enable the AI writer feature by toggling it on in the AI features section of your project settings. Ensure browser extensions are disabled if issues arise.

### AI Integration: AI FAQ Generator

Document360's AI FAQ Generator, part of the Eddy AI content suite, automatically creates FAQs from article content. Requires purchase of the Eddy AI content suite and enabled AI writer suite.

### AI Integration: AI FAQ Generator in Advanced WYSIWYG

Advanced WYSIWYG editor now includes AI-powered FAQ generation. Minimum 150 words required. Generated FAQs appear at end of article. Customizable titles, settings, and regenerations are possible. Users can add/edit/delete FAQs, lock specific questions, and manage templates separately.

### AI Integration: Using the AI Writer

The AI writer provides tools to enhance content, including outline creation, improving text, changing tone, converting speech, altering voice, expanding or condensing text, converting to tables, and splitting sentences. These features are accessed by selecting text in the Advanced WYSIWYG editor, clicking the Eddy AI option, and choosing the desired action. The AI writer is limited to 5000 uses per month for most features and requires at least 10 words for generation. It’s available in Professional, Business, and Enterprise plans, with data handled according to OpenAI’s privacy policies. Key features include:

- **Actions**: Outline creation, improve text, change tone, convert speech, change voice, expand/condense text, convert to table, split sentences.
- **Usage**: Select text (min. 10 words), click Eddy AI, and choose action.
- **Availability**: Advanced WYSIWYG editor only.
- **Limits**: 5000 uses/month (most features).
- **Plans**: Professional, Business, Enterprise.
- **Data Security**: Adheres to OpenAI’s policies.

### AI Integration: AI Title Recommender

Document360's article title recommender generates 3 AI-suggested titles. Click "Ask Eddy AI" to use it. One credit is consumed per suggestion attempt (whether saved or not). Minimum 50 preprocessed words are needed. Suggestions are generated using OpenAI, adhering to their privacy policy. Credit limits apply; contact support for more.

### AI Integration: AI Title Recommender Overview

The Article Title Recommender in Document360 uses NLP to generate optimized titles. It requires content over 50 words and consumes 1 credit for three options. Language support is available; see [here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) for details.

### AI Integration: Configuring the AI FAQ Generator

To customize the FAQ generator, navigate to **Settings > Knowledge base site > Article settings & SEO**, and expand the FAQ accordion. Options include:

- **Expand/Collapse**: Choose to expand first, expand all, or collapse all FAQs.
- **Style**: Select with border for clear separation or without border for a cleaner look.
- **Arrow Position**: Set the expand arrow to the right or left.
- **Icons**: Choose between arrow up/down or plus/minus for expand/collapse actions.

The AI FAQ generator supports English only, generates 5-10 questions, and allows editing. Custom FAQs can be inserted between generated ones, and usage is limited to 5000/month.

### AI Integration: AI SEO Description Generator

An AI-powered tool designed to automate the creation of meta descriptions for articles and category pages, enhancing SEO optimization and improving click-through rates. It supports Professional, Business, and Enterprise plans, ensuring efficient content alignment with SEO best practices while saving time.

### AI Integration: AI SEO Description Generator - Usage

Use Eddy AI to generate SEO meta descriptions for articles/categories in the knowledge base portal. Click "More" > "SEO" > "Ask Eddy AI" in the Article settings panel. Review & save the generated meta description. Manual review is recommended for accuracy & relevance.

### AI Integration: AI SEO Description Generator - Prerequisites

- Ensure sufficient credits for generating SEO descriptions.
- Confirm preprocessed content exceeds 200 words after excluding non-text elements.
- Verify user permissions to access the AI feature.
- Check Eddy AI's supported languages for non-English content.

### AI Integration: Bulk SEO Description Generation

Document360's SEO description generator lets you batch-generate meta descriptions for articles/categories in English. Filter by various criteria (date, contributor, tags), generate for articles with at least 200 preprocessed words, and use AI to optimize for keywords/user intent in 155-160 characters. Limited by language support (English only) and credits, with a monthly limit (1000 descriptions) per plan. Manual updates and titles possible.

### AI Integration: AI Tag Recommender

The AI tag recommender suggests relevant tags for article or category content using AI. Requires preprocessed content exceeding 50 words and proper access privileges. Supported languages are available elsewhere.

## Content Management

### Content Management: Tagging Best Practices

Establish consistent, specific, and limited tags for your knowledge base articles. Review and update them regularly. Group related content using tags. Utilize the AI tag recommender, which doesn't cost credits. Teams with 'update article settings' or 'manage tags' permissions can create and edit tags. Manual tagging is still an option, but AI recommendations are always active. Keep tags relevant to avoid clutter and optimize content retrieval.

## AI Integration

### AI Integration: Accessing AI Related Articles

Eddy AI recommends related articles to improve knowledge base navigation. Users can (1) add related articles to individual articles via manual selection within the article details, or (2) from the publish checklist. Eddy AI recommends up to 3 related articles; minimum 50-word article length required. Manual additions do not overwrite existing ones. "Auto relate" feature creates mutual relationships between articles.

### AI Integration: Accessing AI Tag Recommendations

To access AI-recommended tags for an article via Eddy AI in Document360, navigate to the article, click **More**, select **Tags**, and use the **Ask Eddy AI** button. Articles need at least 200 words; preprocessing removes HTML tags, images, URLs, and code blocks. Tags also appear during publishing in the confirmation prompt. Tagging improves content organization, searchability, and discoverability.

### AI Integration: AI Related Articles Overview

Document360's AI-powered related articles recommender automatically suggests relevant articles based on content, enhancing user experience. Requires articles over 200 words and proper permissions; [language support details](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) available.

### AI Integration: Creating Charts from Text

Eddy AI tool in an advanced WYSIWYG editor lets you create charts (pie, flow, table) from highlighted text. Up to 10 regenerations are available. Charts can replace or be inserted below the selected text. Error handling is provided.

### AI Integration: AI Chart Generator Overview

The AI Chart generator in Document360 automatically converts text into visual formats like pie charts and flow charts, streamlining the creation of visual aids without the need for third-party tools.

### AI Integration: Creating Charts from Tables

Highlight table in document, click Eddy AI > Generate, choose chart type (pie, flow, table). Regenerate up to 10 times for better chart. Final chart is saved in Document360 Drive for reuse. Output may be inserted below table or replace the table.

### AI Integration: AI Chart Generator - Prerequisites

- Requires an active subscription to the Eddy AI content suite.
- AI writer suite must be enabled in Document360.
- Text/table must be within the main article body (excludes comments or captions).
- [Supported languages](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite) information available.

### AI Integration: Customizing Generated Charts

Document360 charts are customizable _after_ insertion via image editing tools (alignment, cropping, resizing, annotations). While not directly editable, you can regenerate, undo, or update chart content.

### AI Integration: AI Alt Text Generator

Document360's Eddy AI generates alt text for images, saving time and boosting accessibility & SEO. Works best with smaller images (under 20MB) in JPEG, JPG, PNG, or WEBP formats. Limited to English and may have issues with certain image types. Free with AI writer enabled, but usage is capped at 5000 alt texts per month.

### AI Integration: AI Chart Generator - File Naming

All generated charts follow a naming convention where the AI-generated filename is appended with the chart type (e.g., **sales_data_pie_chart.png**). Charts are saved in Document360 Drive under **Images** > **Documentation**.Chart regeneration is limited to 10 times, and only the final chart is saved. Each generation consumes Eddy AI credits.

### AI Integration: AI Chart Generator - Supported Types

- **Pie charts**: Visualize proportions like task completion percentages. Example: Display team members' contribution percentages.
- **Flow charts**: Map processes or decision sequences. Example: Document approval steps.
- **Tables**: Present structured data for comparison. Example: Compare product features.

### AI Integration: AI Alt Text in Drive

Generate AI alt text for images uploaded to Drive either during upload (manually or automatically) or after upload by navigating to the image, clicking "File details," "Generate," and "Update". Options for single or multiple images are available.

### AI Integration: AI Search Suite

An AI search suite (Ask Eddy AI assistive search, API, and article summarizer) improves search and content discovery. No specific implementation plans are provided for professional, business, or enterprise levels.

### AI Integration: AI Alt Text in Editor

Generate AI alt text in the Advanced WYSIWYG editor by uploading images via device, Drive, drag-and-drop, or external URL—Eddy AI auto-generates alt text for uploads except Drive, where existing alt text persists (regenerate by clicking the image and using the Alt text icon). For multiple images, regenerate alt text individually. Copy-paste images, click the Alt text icon, and use Generate. Review and edit alt text before inserting. For more details, see [Inserting images guide](https://docs.document360.com/docs/adding-images-to-articles#inserting-an-image-advanced-wysiwyg-editor).

### AI Integration: AI Search Suite Features

The AI search suite offers intelligent search (Ask Eddy), API integration (Ask Eddy AI API), article summarization, and text-to-voice capabilities. Ask Eddy provides AI-assisted querying for quick answers. The API lets developers integrate AI search into their products. Summarization condenses lengthy articles for quick comprehension. Text-to-voice lets users listen to articles.

### AI Integration: AI Alt Text Generator - Usage

- Generate up to **5000 AI alt texts monthly** per project.
- **Enabled by default** if AI writer is active.
- **Review and edit** generated alt texts before accepting.
- **Generation process**:
- Click the **Generate** button when uploading images to Drive.
- Regenerate by deleting existing text and clicking **Generate** again.
- **Credits**:
- **Generate** button is disabled when monthly credits are exhausted.
- Insufficient credits for multiple images disables **Generate all**; select images within credit limit.
- **Formats**: Supported for **JPEG, JPG, PNG, WEBP** images under **20 MB**.
- **Pasted images**: Generate alt text via the floating menu in the Advanced WYSIWYG editor.
- **Counting**: Only images from articles, templates, snippets, and glossary count toward limits.

### AI Integration: AI Search - Plan Limits

- **Business Plan:** 2,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search.
- **Enterprise Plan:** 5,000 credits/month for Ask Eddy search/API, 1,000 credits/month for AI article summarizer; 1 credit per search/API call/summarization.
- Additional credits purchasable. Features help businesses with AI-driven search and summarization tasks.

### AI Integration: AI Search - Language Support

Eddy AI search suite supports 16 languages, including English (en, en-US, en-GB, en-AU), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br). Workspaces using unsupported languages, like Chinese, will not have access to search suite features.

### AI Integration: Enabling Ask Eddy AI

Enable Eddy AI's assistive search on your knowledge base site by navigating to Settings > AI features > Eddy AI and toggling on the AI assistive search. This indexes your knowledge base content, adding the Ask Eddy AI button to your site search and home page. The feature can also be enabled for KB widgets, extensions, and public API endpoints.

### AI Integration: Using Ask Eddy AI

Ask Eddy AI, a conversational AI, is exclusive to KB site 2.0. Access it through the search bar. Review generated results, source articles, and continue conversations. Configure Eddy AI localization in KB site 2.0 settings. Filtering workspaces will reset results.

### AI Integration: Ask Eddy AI Overview

Ask Eddy AI is an AI-powered search feature available on the home page and Knowledge base site's search bar, providing contextual answers to user queries. It extracts information from textual content, code blocks, tables, content reuse elements, and LaTeX. By default, it retrieves answers from the main workspace, but users can switch workspaces using filters. Updated content takes approximately 15 minutes to reflect in search results. For more information on supported languages, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Dynamic Related Articles

Dynamic related articles are automatically recommended in a knowledge base. This feature improves user experience by providing additional relevant information and enhances navigation. It applies to the entire knowledge base.

### AI Integration: Dynamic Related Articles Overview

KB site 2.0's Dynamic related articles feature, powered by Eddy AI, automatically adds relevant related articles to all articles. Enabled via Settings > AI features > Eddy AI, this feature can be further customized with manual addition through Eddy AI and automatic reciprocal linking. Users can identify automatically generated recommendations by the icon next to the article name (not displayed for manually added articles). The feature enhances navigation and user experience, requiring no additional user interaction outside of initial enabling to function.

### AI Integration: Eddy AI in KB Widget

Eddy AI can be seamlessly integrated into a Knowledge Base (KB) widget, offering support for multiple languages including English (en-US, en-GB), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), and Danish (da). This ensures users can interact with the AI in their preferred language, enhancing accessibility and user experience.

### AI Integration: Eddy AI Credit Notifications

To enable Eddy AI credit balance alerts, go to **Settings > Knowledge base portal > Notifications**, switch to the **Notification mapping** tab, and turn on the **Credit usage alert** toggle. Notifications are sent via configured channels when credits drop to 20%, 10%, or expire. Document360 and OpenAI comply with GDPR, and the platform is SOC 2 compliant. For configuration details and purchasing additional credits, refer to the [**Notifications**](/help/docs/notifications) and [**SMTP notification channel**](/help/docs/smtp-email-notification-channel) articles.

### AI Integration: Eddy AI Chatbot Configuration

Enable AI assistive search in Knowledge Base settings. Create a chatbot widget, customize it (styling, connection, security, content access), regenerate its key and configure JWT authentication. Deploy the widget's script to your Knowledge Base site or a custom site. Secure access via domains. Crucial steps: enabling AI search, widget creation, connection setup, security configuration.

### AI Integration: Eddy AI Chatbot Overview

_No summary available for this section._

### AI Integration: Eddy AI Chatbot Security

Secure Eddy AI Chatbot access for private/mixed projects using JWT. Configure JWT in Knowledge base widget, obtaining a unique Client ID, Widget ID, and crucial client secret (regenerate and store securely!). Set the correct Token endpoint and Authorize URL. Embed the authorized URL in webpage script. Thoroughly test the implementation.

### AI Integration: Eddy AI Chatbot Styling

To style the Eddy AI chatbot widget, adjust its icon (upload image or choose from icon set), background color (using color picker or hex/RGB/HSL), position (left/right, spacing), and visibility (hide/show). Changes are saved automatically. The Knowledge Base portal is used for configuration.

### AI Integration: Using the Eddy AI Chatbot

To use the Eddy AI Chatbot, click the icon, type your query, and send it. Get answers from the Knowledge base. Hover for options to copy, like, or dislike responses. Clear conversations with the Clear icon. View feedback in Analytics > Eddy AI using the Application filter. Unlike Widgets, which require manual navigation, the chatbot offers direct, conversational answers.

### AI Integration: Eddy AI Chatbot Styling

Styling the Eddy AI chatbot improves user experience through customization of colors, icons, and brand alignment. It supports multilingual capabilities, with more details available [here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Adding External Sources to Ask Eddy

To add external sources to the Knowledge Base AI search, navigate to settings, select "Add new," choose "Webpage" or "Sitemap," input source name and valid URL (HTML5 format with <article> or <main> tags). Limit 50 webpages and 1 sitemap.

### AI Integration: Managing External Sources

Manage indexed external sources in Eddy AI. Control content access (All or selected workspaces, languages, categories), filter sources (type, errors), sync (manually up to 4 times/day), add/edit/delete sources, and handle errors (view, remove, or remove all). AI access can be limited to specific workspaces and content categories. Ensuring sources use Server-Side Rendering (SSR) is important for accurate indexing.

\*\*

### AI Integration: External Sources for AI Search

The Enterprise plan supports adding external sources for AI assistive search, enhancing answer accuracy by incorporating external resources. This feature is also available to Legacy users with the AI add-on, aiding support agents in providing efficient and comprehensive solutions.

### AI Integration: Troubleshooting External Sources

Eddy AI Assistive search troubleshooting for external sources. Issues arise from unsupported sitemaps (nested, large files, wrong format), forbidden access (by bot detection), or insufficient HTML5 tags on webpages. Solutions include verifying format/size limits, requesting access from website owners, and updating the webpage HTML. Manual syncing is available up to four times daily, with automatic syncing hourly. Sources can be deleted or disabled temporarily. Analytics for external source performance are available.

### AI Integration: External Source Display

Eddy AI displays numbered source URLs in the "Source articles" section, with hover functionality showing title and description, and allows clicking to open sources in a new tab.

### AI Integration: Ask Eddy AI API

Eddy AI Public API allows businesses to deeply integrate AI-powered search into their platforms, customizing the user experience. The API supports various languages and offers efficient extraction of answers from Eddy AI.

### AI Integration: AI Article Summarizer

The AI article summarizer in Document360 uses NLP to condense lengthy articles into concise summaries, helping users save time. It requires articles to be over 250 words and is available based on subscription plans since May 27, 2023. For language support, refer to the [help docs](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### AI Integration: Enabling the Article Summarizer

To enable the article summarizer in Document360, navigate to **Settings > AI Features > Eddy AI** and toggle on the **Article summarizer**. The summary will appear at the top of articles. Ensure articles have over 250 preprocessed words (excluding HTML, images, etc.) for the summarizer to work. Data privacy is maintained as per OpenAI's policies, with no use of customer data for training.

### AI Integration: Using the Eddy AI API - API Docs

Use the Document360 API docs (link provided) to interact with Eddy AI. Input your API token, a question/query (prompt), the version ID, and language code. Click "Try it & see response" to get results. Requires API token and inputting the prompt, version ID, and language code in the provided fields.

### AI Integration: Using the Eddy AI Public API

Enable Public API in Settings under AI Features; if disabled, expect 500 or 400 errors. Create an API token with POST method access via API Tokens. Each API call consumes a credit. Visit the API hub for structure details.

## Accessibility

### Accessibility: Read Out Loud Feature

Knowledge Base site 2.0 offers a read-out-loud feature for improved accessibility and engagement. Available on all plans except for older pricing plans which need the AI assistive search add-on for Enterprise. Users benefit by listening to content while multitasking or preferring auditory learning.

## AI Integration

### AI Integration: Using the Eddy AI API - Swagger

Authorize using your API token in Swagger, navigate to `/v2/ProjectVersions/ask-Eddy AI`, enter the required parameters (prompt, version ID, and language code), and click Execute to get the response.

## Accessibility

### Accessibility: Read Out Loud - FAQs

Feature reads glossary, snippets, variables, headings (H2-H4), lists, callouts, private notes, accordions, FAQs, link text, emojis. Skips tables, inline code, code blocks, images, videos, LaTeX, and attached files. Audio playback allows seeking.

## AI Integration

### AI Integration: AI Premium Suite

AI-automated business glossary generation in the premium suite streamlines glossary creation, maintaining consistent terminology, improving team communication, and ensuring documented accuracy. _Available only in English._

### AI Integration: AI Glossary Generator

AI Glossary generator is a tool that creates a centralized glossary of business terms to improve understanding, data collection, team collaboration, and communication within an organization. It standardizes definitions across departments.

## Accessibility

### Accessibility: Using Read Out Loud

- Begins reading from the article heading and body content, excluding the summary.
- Reads alt text for images and videos; indicates presence if alt text is missing.
- **Listen** button located in the article header, changes to **Listening** during playback and opens the Player window.
- Player controls (bottom right): play, pause, skip 10 seconds forward/back, close.
- Enable or disable the feature via Settings > Knowledge base site > Article settings > Accessibility.
- Disabled by default for users on trial plans.

## AI Integration

### AI Integration: AI Premium Suite Overview

The AI premium suite enhances user experience by automating key business processes and improving workflow efficiency through advanced AI-powered tools. It offers tailored plans for **Professional**, **Business**, and **Enterprise** users, each designed to meet specific needs and optimize productivity.

### AI Integration: AI Glossary Generator - FAQs

AI Glossary generator treats singular/plural and synonymous terms as separate. Rescan is manual, recommended every 7 days, updating suggestions and notifying users.

## Content Optimization

### Content Optimization: Writing for GenAI

For optimal GenAI content, use clear, concise headings (keyword-rich), short paragraphs, tables (structured data), code snippets (commented), bullet/numbered lists, descriptive alt text, contextual links (descriptive anchor text), SEO best practices (keyword optimization), consistent business glossary terms, natural language, conversational tone, and human-friendly writing. Test with AI tools and review generated output. Prioritize examples, elaborated text, and frequent FAQs to avoid hallucination. Use Document360 glossary for consistent terminology.

## AI Integration

### AI Integration: Enabling AI Glossary Generator

To enable the AI Glossary generator, follow these concise steps:

1. Go to **Settings () > AI Features > Eddy AI**.
2. Locate the **AI Glossary generator** option.
3. Toggle the switch to enable the feature.

### AI Integration: Using the AI Glossary Generator

- Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Glossary**. Click **Take action** on the Eddy AI banner to access the glossary generator.
- The tool shows suggestions only for published articles.
- Use the left navigation bar to view and search glossary terms, and sort them as needed.
- Definitions can be edited (up to 500 characters).
- Use the **Add to** dropdown (default: English) and enable **Update in articles** to apply changes.
- Click **Show Articles** to see where terms will be used and **+ Add to glossary** to save terms.
- Terms can be ignored and moved between lists.
- The generator can be used in the advanced WYSIWYG editor by selecting **Glossary** under **Insert**.
- Keyboard shortcuts: ARROW keys to navigate, ENTER to add terms, BACKSPACE to ignore.

### AI Integration: Enhancing Content with Eddy AI

Use Eddy AI to categorize articles, document error messages, create best practices guides, and generate troubleshooting steps for your knowledge base. Focus on specific prompts like "Suggest categories for \[article topic]" or "Generate explanations for \[error message]" to get effective results. This improves knowledge base structure and user support.

### AI Integration: Prompt Engineering Best Practices

For optimal Eddy AI results, use precise, step-by-step prompts, compare features, summarize sections, add context to recommendations. Natural language, detailed context, customized personas, and creative prompts unlock personalized insights. Key entities: Eddy AI, prompt engineering, Document360, knowledge base, summaries, comparisons, recommendations, article sections.

### AI Integration: Prompt Engineering Tips

Document360's Eddy AI employs prompt engineering to enhance AI-driven tools, boosting content creation accuracy, efficiency, and relevance. This guide helps users optimize Eddy AI for tailored content generation.

## File Management

### File Management: Document360 Drive

Document360 Drive is a cloud-based file storage & management system for teams. Features include adding/managing folders and files, viewing recent/starred/deleted files, and accessing an overview of all content. Centralized storage and collaboration-focused.

### File Management: Adding Folders and Files

Document360 Drive allows users to create and manage folders/subfolders mirroring knowledge base structure for better file navigation and accessibility. This improves document organization within the system. Different user plans may have varying Drive functionalities.

### File Management: Storage Limits by Plan

| Professional | Business | Enterprise |
|--------------|----------|------------|
| 50 GB        | 100 GB   | 500 GB     |

Document360 Drive is a centralized, cloud-based storage solution with tiered storage limits: Free (1 GB), Professional (50 GB), Business (100 GB), and Enterprise (500 GB).

## AI Integration

### AI Integration: Eddy AI Use Cases

Eddy AI is a versatile tool designed to enhance content creation and management across multiple industries, offering tailored solutions to improve efficiency and engagement. Key applications include:

- **Learning Management Systems (LMS):** Streamlines course creation, offers adaptive learning paths, and generates engagement tools like quizzes and summaries.
- **Customer Support:** Develops structured knowledge bases with troubleshooting guides and FAQs for effective problem resolution.
- **Compliance Documentation:** Assists in creating and updating compliance checklists and SOPs for regulated industries.
- **Product Development:** Supports tech companies with API documentation, release notes, and user guides.
- **Retail & E-commerce:** Automates product guides, comparisons, and procedure documentation for customer support.

Each application leverages Eddy AI's capabilities to automate, organize, and enhance content, ensuring accuracy and relevance.

## File Management

### File Management: Adding New Folders

Create new Drive folders using either the '+' flywheel icon or a 'New Folder' button. Navigate to the desired location, enter the folder name, and click 'Create'. For easier maintenance, align folder structure with knowledge base categories.

### File Management: Understanding System Folders

Document360 projects include **System folders** like Images, Settings, and Documentation, marked by a shield icon. These folders are essential, restrictions prevent deletion or renaming, but allow actions like adding files, customizing colors, and setting defaults.

### File Management: Adding Files to Drive

Add files to a drive folder using drag-and-drop (into empty folders) or via the "More" menu. Specify file location, optional tags and alt text (for images). Avoid file names with +, %, #, =. Check supported file types.

To add subfolders, choose between two methods in the Drive section:

1. **Using the 'More' option**:

- Click the More icon next to a folder.
- Select "Add folder," name it, and set its location.

2. **Using the '+' option**:

- Hover between folders until the '+' icon appears.
- Click '+,' name the folder, and set its location.

Ensure root folders are expanded to correctly create subfolders. Deleting a root folder also removes its contents.

### File Management: Managing Folders in Drive

Organize Drive folders and subfolders logically (like your documentation categories) for efficient file storage, maintenance, and retrieval. Document360 allows both individual and bulk folder management. Different service tiers (Professional, Business, Enterprise) are implied but not detailed.

### File Management: Setting Default Folders

Set a default folder for new uploads in a system by selecting it from the Drive. This setting is overridden by existing category-to-folder mappings. Default folders are indicated by an edit icon.

### File Management: File Limits and Restrictions

- **File Limits**: Each folder can hold up to 5000 files, with subfolders treated as separate folders. Single file uploads are capped at **150MB**, while multiple files cannot exceed a combined size of **160MB**.
- **File Type Restrictions**: Users can restrict allowed file types by navigating to **Settings > Knowledge base portal > General > Drive settings**. They must specify media types using the format `media type/extension` and provide lowercase extensions (e.g., .png, .jpg). Multiple types can be added and changes must be saved.

### File Management: Troubleshooting Drive Issues

The Document360 folder has a 5000-file limit, including direct uploads and images from articles or Docx files. To resolve, use another folder, delete unused files, or clear cache. Alt text for images, limited to 140 characters, aids accessibility. File upload errors may stem from unsupported types, so check settings to ensure allowed media types are selected and avoid special characters in filenames.

### File Management: Starring Folders

To star a folder in the drive, click the star icon next to it. Starred folders appear in a dedicated "Starred" section in the navigation, regardless of their location. Clicking the star again removes it from the starred list.

### File Management: Moving Folders

To move a folder within the Drive, excluding System folders, use either the **More option** or **drag and drop**:

- **More option method**: Select folder(s), click More > Move, choose destination via search, and confirm.
- **Drag and drop method**: Drag folder to desired location in left navigation.

### File Management: Renaming Folders

To rename a folder in Drive, navigate to the desired folder in the tree-view, click the More icon, select Rename, enter the new name, and confirm. Note: System folders cannot be renamed.

### File Management: Changing Folder Colors

Change folder color by hovering over the folder, clicking "More", then "Change Color". Choose from the color palette, enter a hex code, or use a color picker. Default is gray.

### File Management: Folder Navigation

The breadcrumb trail in the Drive window shows the folder hierarchy, allowing navigation. Clicking on a level navigates back. Setting a folder as default multiple times has no effect. Renaming, copying, moving, or reordering folders does not change file URLs, keeping related image links intact. Folders act as categories in Document360 for organizing articles.

### File Management: File Actions

File actions in Google Drive are not detailed in this document. Missing data in the provided table prevents any summary of support plans for specific user groups.

### File Management: Deleting Folders

To remove or delete a folder, follow these steps:

1. Click the Drive icon in the left sidebar.
2. Use either the More () icon next to the folder or select the folder's checkbox to reveal the Remove option.
3. Click Remove and then confirm by clicking Yes in the Delete prompt.

Key considerations:

- Deleting a folder breaks media reference links and may take up to a minute to clear the CDN cache.
- System folders (marked with a shield icon) cannot be deleted.
- Accidentally deleted folders can be restored from the Recycle bin within 30 days.

### File Management: Troubleshooting File Replacement

Document360 file replacement error occurs when trying to swap files of different types. Verify file types match, clear browser cache, and test in different browsers. Back up files before replacement as they are permanently overwritten. Contact support if problem persists, providing error screenshots, file details, and a HAR file. No file version history is available.

tag, create a markdown heading called "Bulk folder actions," and provide a concise, entity-dense TLDR of the document. Finally, I need to close the

### File Management: Performing File Actions

- **Navigate to Drive**: Access Drive from the left menu and select the desired folder. Choose between **List view** or **Grid view** to manage files.

- **File Actions**:

- **Move**: Transfer files between folders without changing their links.
- **Copy**: Duplicate files in another folder.
- **Add Tags/Alt-text**: Enhance file discoverability by adding tags and alt-text for images.
- **View Details**: Access file metadata, dependencies, and actions like move, copy, or download.
- **View Dependencies**: Track how files are linked to articles or other content.
- **Download**: Export single or multiple files as a .zip.
- **Remove**: Delete files, moving them to the Recycle Bin.
- **Replace**: Update a file with a new version without changing its name or URL.

- **Important Notes**:
- Moving files does not break image links.
- Deleted files are moved to the Recycle Bin but cannot be restored if overwritten.
- Use the **Filter** option to identify files with or without dependencies.

### File Management: All Files View

The All Files overview in Document360 Drive consolidates all project files into a centralized location, enabling efficient bulk operations like moving, copying, or deleting files across multiple folders and subfolders, thus streamlining file management and saving time.

### File Management: Recent, Starred, and Deleted Files

Document360's Recycle Bin temporarily stores deleted files, folders, categories, and articles. Users can restore deleted content from the Recycle Bin.

### File Management: Managing All Files

The **All files** page in Document360's Knowledge Base portal displays up to 20 files per page, with options to switch between grid and list views, filter files by criteria like dependencies, upload date, uploader, type, and tags, and view storage usage. Users can perform bulk operations (move, copy, download, remove) on selected files, with pagination for navigating beyond 20 files. Best practices include regular cleanups, using categories for organization, and checking dependencies before deletion.

### File Management: Using the Recycle Bin

Recycle bin allows restoring or permanently deleting Drive files/folders. Restore in bulk or individually. Select items using checkboxes (max 20 with 'Select All'). 'Select all {N} items' for more than 20. Permanently delete individual items or the entire bin. Deletion is irreversible.

### File Management: Viewing Recent Uploads

The "Recent" folder in a Drive window automatically displays the latest uploaded files and folders, simplifying access. Navigate to the Drive icon, then the "Recent" folder to view.

## Workflow Management

### Workflow Management: Benefits of Workflow

Document360's workflow facilitates collaboration, consistency, and accountability among writers, editors, illustrators, and subject matter experts throughout the documentation lifecycle. Its two modules (Workflow designer & Workflow assignments) structure the process.

### Workflow Management: Workflow Designer Overview

Documentation platform feature enabling project teams to create & manage step-by-step workflows for documents (e.g., Draft, Review, Publish). Admins/owners customize workflows. Access via Documentation > Content tools > Workflow designer. Allows adding, editing, and reordering workflow statuses.

## File Management

### File Management: Starred Items and Recycle Bin

- **Starred Folders/Files**: Mark folders or files as starred for quick access via the **Starred** option in the left navigation pane.
- **Access**: Click the Drive icon, then **Starred** folder to view starred items with a ★ icon.
- **Remove Star**: Click the star icon again to unstar.
- **FAQs**:
- **Recycle Bin**: Items auto-delete after 30 days if unused.
- **File Recovery**: Cannot recover permanently deleted files; use backups if needed.

## Workflow Management

### Workflow Management: Workflow Designer

A Document360 workflow designer is a tool for managing knowledge base documentation processes, including creating, editing, reviewing, and publishing articles. It allows the establishment of internal business processes for document management and may vary across plans:

| Professional                  | Business                        | Enterprise                      |
|-------------------------------|---------------------------------|---------------------------------|
| Essential workflow automation | Advanced collaboration features | Custom automation and analytics |

It streamlines documentation workflows and enhances team collaboration.

### Workflow Management: Troubleshooting Workflow Issues

Article editing blocked due to read-only workflow status. To resolve, access the Knowledge base's Workflow designer, locate the locked (read-only) status, disable the read-only toggle, and update the status. Requires admin permissions or admin intervention if the user lacks the required permissions.

### Workflow Management: eBook - Documentation Workflow

This eBook provides a step-by-step guide to establishing a documentation workflow, outlining best practices for high-quality content creation that meets customer expectations.

### Workflow Management: Understanding Workflow Statuses

- **System Status**: Predefined (e.g., Draft, Published), cannot be deleted or reordered.
- **Custom Status**: User-defined, flexible (create, edit, reorder, delete), can be set as read-only to restrict editing.

### Workflow Management: Adding Workflow Statuses

Step-by-step guide to manage workflow statuses:

1. **Add Status**: Access the workflow designer, choose between two creation options, set name/description, enable/disable read-only, and save.
2. **Edit Status**:Navigate to the status, make necessary changes (name, description, read-only for eligible statuses), and update.
3. **Reorder Status**: Drag and drop custom statuses (system ones cannot be moved).
4. **Delete Status**:Remove permanently with a confirmation (system statuses are non-deletable).

### Workflow Management: eBook - Quality Documentation

This eBook guides users through creating quality documentation workflows. It covers procedural steps, best practices for content quality, and ensuring documentation meets customer expectations.

### Workflow Management: Managing Workflow Statuses

Managing workflow status can be handled through the Documentation editor, where statuses can also be assigned directly to team members. Brief plans for Professional, Business, and Enterprise are noted, with details to be filled in later.

### Workflow Management: Workflow Assignments

Document360 allows for workflow assignment of document statuses to team members, improving visibility and control over each stage of an article's lifecycle.

### Workflow Management: Assigning Articles

To assign an article in the Knowledge base portal, navigate to the article, select the desired workflow status, click "Assign owner," choose the team member, and click "Assign." Removing an assignee or setting due dates is also possible. Assigned team members receive notification emails. One team member may be assigned to multiple statuses; only one can be assigned to a single status.

### Workflow Management: Workflow Status Actions

The Workflow status option, located at the top right of the Documentation editor, allows users to manage an article's workflow. Key actions include:

- **Viewing status**: Displays current and past statuses, with strikethrough indicating completion.
- **Setting due dates**: Assign or clear dates via a calendar.
- **Assigning team members**: Search and assign users, with notifications sent if enabled.
- **Activating next status**: Move through workflow stages with optional comments.
- **Viewing history**: Access past statuses and comments for each article revision.

**Notifications**: Ensure team accounts receive updates by enabling workflow events in Settings > Notifications under Documentation editor and category workflow sections.

### Workflow Management: eBook - Documentation Workflow

Platform facilitates documentation workflow management, enabling creation of categories, articles, and templates. Users can manage files, teams, readers, branding, domains, and security settings for knowledge base content. Focuses on creating high-quality documentation for customers.

## Content Templates

### Content Templates: Overview

Document360 offers pre-designed article templates (professional, business, enterprise) for consistent knowledge base articles (user guides, FAQs, release notes). Users can also create their own custom templates for repeated use.

### Content Templates: Creating Templates

To create a new template in the knowledge base portal, navigate to Content reuse > Templates, click "Create template", name it, select editor type, add description, and save. Edit existing templates by hovering, clicking "Edit", updating name/description (max 250 characters), and saving. Default templates are automatically created based on onboarding.

## Workflow Management

### Workflow Management: Workflow Assignments Overview

The Workflow assignments overview page provides a centralized view of articles and category pages in a knowledge base project, allowing team accounts to track workflow statuses, due dates, and assigned articles. Accessible via the Knowledge base portal under Documentation > Workflow assignments, it displays the number of articles in each workflow status and enables users to view their assigned articles from the left navigation menu.

To create an article from an existing template, follow these steps:

1. Hover over the desired category in the left navigation and click the () icon.
2. Select "Article from template" and enter the article name.
3. Choose the category location from the dropdown.
4. Select a template from the list, previewing it on the right.
5. Click **Create** to complete the process.
6. If needed, manage templates by clicking the **Manage templates** link.

![Creating a template from existing article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Creating_an_article_from_an_existing_template.gif)

## Content Templates

### Content Templates: Saving Articles as Templates

To create a template from an existing article in the documentation editor, click the "..." icon, select "Save as template", then confirm. Templates can be viewed, edited, or deleted via the "Manage templates" page.

### Content Templates: FAQs

Templates can be cloned (within the same language) to create new ones, saving time and effort. Deleting a template doesn't affect existing articles. Saved templates are shareable with team members. Updating a template has no effect on previously created articles; a local copy is utilized. Templates cannot currently be cloned across different languages. To utilize a template in a different language, manually recreate and translate it.

## Content Reuse

### Content Reuse: Variables

Variables in Document360 are reusable elements for frequently changing text content (e.g., contact info, addresses). Updating a variable in one place automatically updates it throughout the document, maintaining consistency and reducing redundant effort. Key benefit: central updates for consistent data across multiple documents.

### Content Reuse: Managing Variables

Manage variables in a knowledge base portal. Find, view, edit, and delete variables. See which articles use a variable and how edits propagate. Modify links and their styles. Bulk delete possible. Navigation path detailed.

## Localization

### Localization: Translating Variables

Translate variables in documentation to localize content. Create new variables selecting target languages, filling content (default language first), and translating to other languages. Existing variables can be translated, retranslated, or removed by language. Global variables cannot be translated.

## Content Reuse

### Content Reuse: Creating Variables

To create a variable, follow these steps:

- Navigate to **Documentation () > Content tools > Content reuse > Variables**.
- Click **Create variable** and select the desired language (default is Global).
- Enter a **Name** (30 characters max, letters, numbers, hyphens, underscores allowed).
- The **Merge code** will be generated as `{{variable.Name}}`.
- Choose a **Language** (Global or language-specific).
- Add **Content** (100 characters max, with formatting options like bold, italic, links, and more).
- Use **Snippets** for longer text or media.
- Click **Create variable** to save.

![Creating a new variable](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_variables.gif)

### Content Reuse: Using Variables

Insert variables into your article or category page using two methods:

1. **Markdown Syntax**: Use `{{variable.MergeCodeValue}}` in the Markdown editor, ensuring the exact merge code is typed correctly.
2. **Toolbar Method**:

- For Markdown and WYSIWYG editors, click the Content reuse icon.
- For Advanced WYSIWYG, use Insert > Variables or the slash comando. Select variables from the right pane, which allows previewing by hovering.

Both methods allow variable insertion, with the toolbar method supporting multiple variable selection in non-Advanced editors. The exact merge code is essential for functionality.

built-in variables in Document360 streamline documentation by enabling single-source updates, ensuring consistency across articles. They are customizable, update in real-time, enhance team collaboration, and support translations. Variables improve efficiency and accuracy, making them a best practice for technical documentation.

### Content Reuse: Using Snippets

Two methods to insert snippets into articles: 1) Use specific merge code in Markdown editor; 2) Select from toolbar (Markdown, WYSIWYG, Advanced WYSIWYG) using search. Method 2 allows for preview & selection from a pane, enabling insertion of local copies (static snippets). Knowledge base portal compatible.

### Content Reuse: Snippets Overview

Document360 uses "Snippets" for reusable content blocks (text, images, etc.). Authors/managers store these in a library and insert them easily into articles. Readers see the content seamlessly, unaware it's a reusable element.

### Content Reuse: Managing Snippets

Manage reusable content (snippets) in a knowledge base. Find, view, edit, and delete snippets. See articles using a snippet, its language, and last modification date. Edits automatically update using articles. Bulk delete snippets possible.

### Content Reuse: Snippet FAQs

- **Snippet limit:** 200 per project; additional available as add-on.
- **Snippet renaming:** Not possible after creation.
- **Snippet placement:** Always starts on a new line to facilitate multiple lines of content.

## Localization

### Localization: Translating Snippets

Manage snippets in multiple languages to ensure consistency across translations. Global snippets cannot be translated. To create a new snippet: navigate to Snippets, select language, add name/content, translate into other languages, and save. Existing snippets can be translated by selecting the target language and translating or re-translating as needed. The default language is marked as Main, with translations indicated by a green tick.

## Content Consistency

### Content Consistency: Glossary

A glossary improves knowledge base readability and consistency by providing quick definitions for frequently used terms. This reduces confusion, ensures consistent terminology, saves writer time, and enables product-specific education using reusable terms. Glossary terms are viewable within the knowledge base and assistant.

## Content Reuse

### Content Reuse: Creating Snippets

To create a snippet, access the Snippets section via Documentation > Content tools > Content reuse. Click "Create snippets," name your snippet (up to 30 characters with letters, numbers, hyphens, and underscores), set the language (Global by default), choose the WYSIWYG or Markdown editor, add content, and click "Create snippet."

## Content Consistency

### Content Consistency: Glossary Management Navigation

Manage glossary terms: add/edit/delete single/multiple, import, link overview page (header, footer, menu, homepage). Filter by language. Terms are project-wide, not workspace-specific. Use content tools > content reuse. Check article usage before deleting terms. Bulk import is possible. Terms deleted from articles.

### Content Consistency: Managing Glossary Terms

Access the glossary via **Content tools > Content reuse > Glossary**. Key features: language filtering, creating/editing terms, bulk import/export (CSV), term search with preview, tracking usage across articles, and AI-powered glossary generation with Eddy AI. SEO benefits include improved search relevance through keyword definitions.

### Content Consistency: Adding Glossary Terms

Add glossary terms by navigating to Content tools > Content reuse > Glossary. Create a new term, filling out Name (max 100 chars), Language, Term (max 100 chars), and Content (max 500 chars). Use the "Create Glossary" button. Translate terms by using the Name field for reference. Global terms can't be language-specific. Import options (CSV) are available.

### Content Consistency: Troubleshooting Glossary Import

CSV upload issues are often caused by non-English Excel regional settings. Change Excel regional settings to English (United Kingdom), ensure CSV headers match the template, and save/re-upload. Use HTML tags (`<img src="...">`, `<a href="...">`) to embed images and hyperlinks in glossary definitions for proper import and display. Contact support if issues persist.

### Content Consistency: Adding Glossary Terms

In Document360, easily add glossary terms by navigating to the glossary section via the left menu or search. Use an "Add Term" button to create entries, selecting from Professional, Business, or Enterprise categories. Organize terms alphabetically for better accessibility. Ensure clear definitions and consider proofreading. Manage entries with edit/delete options, and use bulk import for efficiency.

### Content Consistency: Importing Glossary Terms

Prepare a CSV file with glossary terms and definitions, using either a downloaded template (with or without sample data) or creating one. Use software like Excel or Google Docs for editing. Navigate to Content tools > Content reuse > Glossary, click Import terms, upload your CSV, and wait for validation. Address any errors (e.g., duplicate terms or long definitions) by downloading the error log, then import valid terms to streamline glossary management and save time.

### Content Consistency: Glossary Management

(No data provided, unable to generate a concise summary.)

### Content Consistency: Editing Glossary Terms

Edit glossary terms in Document360 by navigating to Content reuse > Glossary. Hover over a term, click "Edit". Update term/definition, translate to desired languages (via "Translate" or "Translate again"). Remove translations with "Remove language". Save changes with "Update". Global glossaries can be translated.

### Content Consistency: Using Glossary Terms in Articles

- **Glossary terms** enhance reader understanding by providing instant definitions when hovering over them. They are marked with a dotted underline.

- **Markdown Editor**:

- Use the Glossary icon in the toolbar to select and insert terms.
- Alternatively, use Markdown syntax `{{glossary.Term_name}}`, ensuring exact case matching.

- **WYSIWYG Editor**:

- Click the Glossary option in the toolbar to select and insert terms.

- **Advanced WYSIWYG Editor**:

- Access via the Insert menu, select terms, and insert merge codes like `{{glossary.Term_name}}`.
- Preview required to see rendered glossary terms.

- **Key Notes**:
- Terms are case-sensitive and must match exactly.
- Preview in Advanced WYSIWYG to view rendered terms.

### Content Consistency: Deleting Glossary Terms

Delete glossary terms individually (hover/click) or in bulk (select/click). Check for dependencies; manually remove from articles before deleting from glossary to avoid data loss. View references in the glossary before deleting, then open and manually remove the term to prevent content loss in associated articles.

## Localization

### Localization: Translating Glossaries

Create and manage glossaries in multiple languages to ensure consistency and localization. Navigate to the glossary section, create a new one, select the language, enter terms and content, translate into other languages, and save. The default language is marked as Main, and completed translations are indicated with a green tick.

## User Feedback

### User Feedback: Feedback Manager

Document360's Feedback manager is a content tool to track, evaluate, and respond to user feedback on knowledge base articles. It aims to address user concerns and improve content quality. No specific features or functionalities are detailed in the provided text beyond this general purpose.

## Content Consistency

### Content Consistency: Glossary Landing Page

Learn how to add a glossary overview page link to your Knowledge Base site's header, footer, or secondary navigation. Use the URL `https://yourdomain/docs/glossary-overview` (replace `<yourdomain>` with your site domain) to direct users to the glossary. Follow step-by-step instructions to customize your site and improve accessibility to the glossary terms.

### Content Consistency: Exporting Glossary Terms

To export glossary terms, navigate to **Documentation > Content tools > Content reuse > Glossary**, select a language, click **Export CSV**, and wait for the download. The CSV includes Glossary Name, Definition, Dependencies, Updated By, and Updated On.

## User Feedback

### User Feedback: Managing No Search Results Feedback

The "No search results feedback" tab allows users to report searches that yielded no results. Review user queries, understand the context, assign tasks, and take action (create/update content, add relevant keywords). Track progress using status updates, and notify users of replies. This improves search experience and fills content gaps.

### User Feedback: Feedback Manager Overview

The Feedback manager in Document360 helps users gather and analyze reader feedback to improve content quality. It is accessed via **Documentation > Content tools > Documentation > Feedback manager**.

The tool features two tabs:

- **Article feedback tab**: Collects reader ratings (Yes/No) and comments on specific articles, aiding in content evaluation and improvement.
- **No search results feedback tab**: Captures feedback from users who couldn't find information, highlighting content gaps and areas to enhance search functionality.

### User Feedback: Managing Article Feedback

The Article feedback tab allows you to handle user feedback on knowledge base articles. Readers can rate articles as helpful or not, provide comments, and choose to be notified of updates. You can respond by reviewing feedback, opening the related article, assigning tasks, discussing with the team, and updating the feedback status (Open, Planned, In Progress, Complete, Closed). Enabling the notify toggle automatically closes feedback.

## Site Customization

### Site Customization: Custom Pages

Document360's "Custom pages" feature lets users create standalone pages (separate from articles) for their knowledge base, useful for policies, terms, etc. Customization, multilingual support, and navigation options are available. Only KB site 2.0 projects can use this feature.

## User Feedback

### User Feedback: Feedback Management Features

- **Filters, bulk actions, and CSV export**: Manage feedback efficiently with filtering options, apply bulk updates, and export data (up to 90 days) for analysis.
- **Status clarification**: "Complete" allows reopening, while "Closed" signifies all actions are resolved and cannot be reopened.

To create a custom page, users with Draft Writer or Editor roles can navigate to Documentation > Content Tools > Custom Pages, click Create Page, enter details, and use the editor to add and format content. Set SEO details, collaborate via comments, and publish when ready.

## Site Customization

### Site Customization: Managing Custom Pages

Manage custom pages via the "Content tools" > "Custom Pages" list. Edit pages by selecting and clicking "Edit", making changes, and saving/publishing. Delete pages by selecting and clicking "Delete", confirming, viewing dependencies, and clicking "Delete" again. Clone pages by selecting and clicking "Clone". Clones are prefixed with "Clone -". Deleted pages cannot be restored.

### Site Customization: Custom Pages - Usage

Custom pages can be added to a knowledge base site's header or footer for easy access. Up to 5 custom pages are initially available per project. Access can be restricted by user role, but deleted pages are unrecoverable.

## Localization

### Localization: Multilingual Custom Pages

Translate custom pages into multiple languages by selecting a language from the dropdown, viewing translation details, and clicking to translate.

## Content Organization

### Content Organization: Understanding Tags

**Tags:** Simple labels (letters, numbers, words, phrases) describing content (articles, categories, files). Example: "Installation" tag for a software installation article. **Benefits:** Improved navigation, grouping similar content, better keyword searches, and increased visibility on external search engines. **Best Practices:** Concise tags, broad category terms, consistent naming (no spelling errors), avoid overusing/irrelevant tags. AI tool available for tag recommendation.

### Content Organization: Tag FAQs

Document360 allows multiple tags per article/file for better content grouping and search. Tags improve search results. There's a limit of 1000 tags per project, but no limit on tags per item. Bulk tag import is not currently supported.

### Content Organization: Tag Support by Plan

In Document360, the Professional plan offers basic tag support, the Business plan provides advanced tag management, and the Enterprise plan includes premium tag features with enhanced customization and analytics.

### Content Organization: Managing Tags - Features

Manage project tags by creating, searching, viewing creation info (creator, date), and examining dependencies (Articles, Page category, Files). Edit, move, merge, or remove tag references. Export tags to CSV; filtering available by associations, creation date, and creator. **Cannot delete a tag with dependencies (Articles, Page category, Files).** Remove dependencies first.

### Content Organization: Creating Tags

Document360 team accounts can use tags to organize articles, pages, and files for better content management and improved search. AI tag recommendations assist in suggesting or creating relevant tags for efficient content classification.

### Content Organization: Managing Tags - Overview

The **Manage tags** page in Document360 is the central hub for managing tags. It allows assigning tags to articles, category pages, and files, as well as organizing tag groups to consolidate related tags and view their dependencies. Access the page via **Documentation** > **Content tools** > **Documentation** > **Tags**.

### Content Organization: Adding Tags - Methods

Four methods exist to add tags to the knowledge base project: 1) Manage Tags overview page (creating new); 2) Documentation editor; 3) Drive file tagging; 4) All articles page. Each method has specific steps, utilizing a dropdown/search to select or create tags.

### Content Organization: Managing Tags - FAQs

- **Tag Management**: All tag-related actions are managed through the **Manage tags** overview page, accessible under _Content tools_ > _Documentation_ > _Tags_.
- **Viewing Tags**: The page displays all tags and allows viewing of associated articles or files by clicking on the reference numbers.
- **Editing Tags**: Users can edit or delete tags directly from the Manage tags page.
- **Merging Tags**: Similar tags can be merged using the **Merge tags** option.
- **Managing Dependencies**: Dependencies can be removed individually or in bulk using the **Remove dependencies** option.

### Content Organization: Tag Naming Guidelines

Tag names can contain uppercase, lowercase, numbers, spaces, and select special characters (\_ + - @ # % ^ & ! ()). **Forbidden** characters include: \ / : \* ? " < > |.

### Content Organization: Tag Groups Overview

Document360's tag groups help organize related tags (e.g., articles, page categories, files in Drive), making large tag libraries easier to manage by showing tag relationships and dependencies.

### Content Organization: Tag Limitations

Document360 tags: Up to 1,000 tags per project. Tag names max 30 characters; descriptions max 100. Descriptions appear as tooltips on hover in the portal/site and below titles on the Tags page.

### Content Organization: Using Tag Groups

Two ways to add tags to groups: 1) Assign a tag to a group when creating it. 2) Select tags and move them to a group within the tag library.

### Content Organization: Deleting Tag Groups

Deleting a tag group permanently removes the group and all its tags from the project, severing links to associated articles, page categories, and files. Tags cannot be added to articles; tag groups are for organizing tags only.

### Content Organization: Managing Tag Dependencies

Tag dependencies allow tracking and managing where tags are applied to various project elements (articles, categories, files) for efficient tag usage and cleanup.

### Content Organization: Creating Tag Groups

To create a tag group, follow these steps:

1. Log in to the **Knowledge base portal** and select the **Documentation** tab from the left sidebar.
2. Navigate to **Content tools > Documentation > Tags**.
3. Under the **Groups** tab, click **Create group**.
4. Enter the **Tag group name** and **description**, then click **Create**.

This process allows you to organize tags effectively for easy content management.

## Content Management

### Content Management: Find and Replace

Find-and-replace tool allows searching and replacing keywords/phrases (words, numbers) across articles and categorized pages within a project. Replaces can include words, numbers, and selected characters.

To view tag dependencies, navigate to **Documentation** > **Content** Tools > **Documentation** > **Tags**. Click on the number in the **Articles**, **Page Categories**, or **Files in Drive** columns to open the **Tag Dependencies** window, which displays detailed usage information.

## Content Organization

### Content Organization: Viewing Tag Dependencies

To view tag dependencies,

1. Navigate to **Documentation** > **Content tools** > **Documentation** > **Tags**.
2. Click the number under the **Articles**, **Page category**, or **Files in drive** columns to open the **Tag dependencies** window.
3. Review the detailed information about the selected tag's usage in the **Tag dependencies** window.

##### Tag Dependency Information

- **For articles**: Article title, status, workspace, language, creator, and creation date.
- **For page categories**: Page category title, status, workspace, language, creator, and creation date.
- **For files**: File name.

### Content Organization: Removing Tag Dependencies

To remove tag dependencies, follow these steps:

- Select the desired items (articles, page categories, or files) using checkboxes.
- Click "Remove dependencies" to delete the tag from the selected items.
- For bulk removal, click "Select all" before clicking "Remove dependencies."

This process efficiently manages tag associations, ensuring accuracy and simplicity.

## Content Management

### Content Management: Using Find and Replace

To find and replace text in articles/categories, access the "Content tools" > "Documentation" > "Find and replace" section. Enter the text to find (and optionally use filters) and enter replacement text. Select articles to be updated and choose publish/draft status. Click "Replace" to implement changes. Precise control by whole-word matching, as well as advanced filtering like workspace, language, and status are available.

## Content Optimization

### Content Optimization: Managing SEO Descriptions

SEO descriptions can be added to individual articles or generated for multiple articles/categories using the Content tools SEO description tool. Settings vary by plan (Professional, Business, Enterprise).

### Content Optimization: Generating SEO Descriptions

Generate SEO descriptions for knowledge base articles via the portal's Content tools > Documentation > SEO description section. Select articles; click "Ask Eddy AI." Review and save generated descriptions (adjusting as needed). Descriptions should be concise (155-160 chars), keyword-rich, align with user intent, and actionable. Filters for selecting articles based on various criteria (e.g., category, contributor) are available. Best practices for titles (50-60 chars) include relevant keywords, engaging language. Individual article descriptions can be generated via alternative editor tools.

## Content Management

### Content Management: Find and Replace Within Editor

The Find and replace tool in the editor allows users to locate and modify text within a specific article. Access it via the icon in the editor; it operates only on the current article.

### Content Management: Find and Replace FAQs

- **Find and replace** is available only to team accounts with the **Editor** content role or custom roles with **Perform Find and replace** permission.
- Replace can be done with an empty **Replace with** field; the found text will be removed.
- Markdown/HTML syntax in the editor is not affected; only the visible text is replaced.
- Search results exclude articles in the **Recycle Bin**.
- Up to 1000 articles can be edited per replacement event.

## Content Export

### Content Export: Downloading Project ZIP

To download the Document360 project ZIP, navigate to "Import & Export project," find the latest exported file under "Recent files," and click "Download" or "Copy link".

### Content Export: Project Export API

Business/Enterprise plan-only API endpoint for exporting Document360 project content. Limited to 2 exports per day. Overwrites previous downloads. Markdown (.md) articles, WYSIWYG (.html) articles, or JSON for multi-language exports.

### Content Export: Exporting a Project

To export a Document360 project as a ZIP file, navigate to **Documentation ()** > **Content tools** > **Import & Export** > **Import & Export project**, then:

- Click **Export**
- Choose articles by modification date (All, 7/30/90 days, or Custom)
- Select workspaces, languages, and categories
- Include media files as needed
- Click **Export** and wait for completion notified via popup

The exported ZIP includes selected content, with media optionally added. Export times vary based on content size, allowing background task handling. Project contents are downloadable upon completion.

### Content Export: Project Export as ZIP

Document360 allows you to export your project as a ZIP file, including articles, category pages, and optional media files. The ZIP can be imported into another Document360 project. The table detailing supported plans is empty, so plan-specific capabilities may need confirmation.

## Content Import

### Content Import: Importing a Project ZIP

Import Document360 project ZIP files into the Knowledge Base portal. Matching workspace slugs merge data; differing slugs create a new workspace. To avoid conflicts, modify the workspace slug in the project ZIP file before importing. Verify supported features, file formats, and destination workspace before importing. Check FAQs for common errors like unsupported features or mismatched slugs. Maximum file size is 1GB. Only Document360 project ZIP files are supported.

## Content Migration

### Content Migration: Migrating from Other Platforms

Document360 offers migration support across Professional, Business, and Enterprise plans for over 100+ knowledge base platforms, including Zendesk, Freshdesk, and more. Initiate a migration request via a website form (or within Document360) by providing the URL of your current knowledge base and the platform. Document360's experts will handle the migration.

### Content Migration: Migration Process

Document360 migration involves three steps: 1) expert consultation & estimate, 2) automated & manual knowledge base transfer, and 3) thorough quality assurance, including SEO-friendly redirect rule setup. Redirect rules are crucial to maintain user experience and SEO (search engine optimization) by ensuring old URLs redirect to the new Document360 platform. Failure to implement redirects results in broken links, 404 errors, and diminished search rankings.

## Content Import

### Content Import: Importing Project ZIP Files

The Document360 project ZIP file import feature is supported across Professional, Business, and Enterprise plans. It allows migration between projects or restoration from backups, importing articles, category pages, and media. Requires Editor role or custom role with Update and Publish access.

## Content Export

### Content Export: PDF Templates Overview

Users access PDF templates via Knowledge base portal's **Content tools > Import & Export > Export to PDF**. Viewable templates are listed, sortable by date, and include system & custom templates. Actions include cloning, editing, deleting (with confirmation). A dedicated button creates new templates. Default templates cannot be deleted, and only one available template makes it the default.

### Content Export: Creating PDF Templates

Create new PDF templates with customizable options: name, layout, margins, cover page (title, description, logo, image), terms & conditions (existing/custom), table of contents (includes headings), watermark (text/image), header/footer images & text, page numbers, and text formatting (font, size, color). Character limits, image sizes, and alignment options vary.

### Content Export: Setting Default PDF Templates

Any PDF template can be set as default, automatically used for exports without selection. Click "Set as default" before saving. Default templates cannot be deleted.

### Content Export: PDF Template Design

PDF templates (previously "Design templates") define the design, styling, and formatting for exported PDFs, ensuring brand consistency. Available across Professional, Business, and Enterprise plans, templates can be selected or created during the PDF export process.

### Content Export: Exporting to PDF

All plans support exporting content to customized PDF documents. PDFs can be named, templated, and password-protected.

### Content Export: Managing Exported PDFs

Exported PDFs can be downloaded, regenerated, cloned, edited, details viewed, and deleted. Sharing draft articles and exporting SVG images are addressed. A known limitation exists with SVG rendering in PDFs due to the SelectPDF plugin, and workarounds are provided (convert to PNG/JPG).

### Content Export: PDF Template FAQs

PDF templates offer customizable layouts for creating professional PDF documents, saving time and effort while ensuring visual appeal and branding consistency. They can be tailored to specific needs and content. The knowledge base platform allows users to manage content creation, categories, articles, templates, files, team accounts, and site settings, including branding, domain, and security.

## Analytics

### Analytics: Overview

Document360 offers various analytics (article, search, reader, team, feedback, links, page not found, Eddy AI, ticket deflection) categorized by Professional, Business, and Enterprise plans. Analytics data is specific to the active workspace and language, and presented in UTC time. Professional plan features are limited. Business and Enterprise plans include more analytics options.

## Content Export

### Content Export: Exporting to PDF - Process

To export published articles and category pages to PDF:

1. Navigate to **Documentation** > **Content tools** > **Import & Export** > **Export to PDF**.
2. Only published content is available for export.
3. Click **Create new PDF** and enter a name, optional password, and select a template, workspace, and language.
4. Preview the template and select categories/articles to include.
5. Click **Export** and await completion (status: _Success_).

## Analytics

### Analytics: Accessing Article Analytics

Access knowledge base article analytics by navigating to the Analytics > Articles section. Data shows article views, reads, likes, and dislikes, filtered by date range, user type (Team accounts or readers), and JWT authentication. Metrics distinguish between simple views and user engagement (reads). Location- and category-based analytics are also available. Data, potentially including deleted articles, is presented graphically and in lists; export options exist. Detailed FAQs clarify factors influencing data presentation and user roles.

## AI Integration

### AI Integration: Accessing Eddy AI Search Analytics

Use Eddy AI's analytics dashboard to track knowledge base search performance (conversations, answered/unanswered queries, conversation depth, popular/unanswered queries, referenced articles). Filter data by date. Address unanswered queries to improve search accuracy. Data aggregation occurs across multiple chatbots/widgets/languages but some metrics are language-specific.

## Analytics

### Analytics: Understanding Article Analytics

**Plans supporting article analytics**

| Professional | Business | Enterprise |
|--------------|----------|------------|
|              |          | ✓          |

Document360's Articles analytics provides insights into article performance, including user engagement, geographic distribution, and top-performing content, helping improve your Knowledge Base with data-driven decisions.

### Analytics: Search Analytics

Search analytics tracks user search behavior to optimize content and identify documentation gaps, monitoring search trends, successful queries, and no-result searches to enhance user experience.

## AI Integration

### AI Integration: Eddy AI Search Analytics Overview

Eddy AI search analytics offers insights into AI search performance, supporting Professional, Business, and Enterprise plans. It provides metrics like unanswered searches, visualizations, and supports multiple languages. Conversational metrics require KB site 2.0.

## Analytics

### Analytics: Search Analytics - User Feedback

Users can provide feedback on search terms that don't return results. Analyzing "no results found" searches helps identify knowledge base content gaps and optimize the site for user needs. Understanding popular search terms ensures relevant content creation aligning with user queries. "Bounced search" refers to searches with no result clicks.

### Analytics: Accessing Reader Analytics

Access reader analytics from the Knowledge base portal's Analytics > Reader page. Filter by date, reader type (self-registered, SSO, JWT, invited), and knowledge base/widget analytics. Data includes total readers, self-registered readers, frequent readers, and detailed reader information (views, reads, likes, dislikes, articles accessed, last login). View individual reader contributions filtered by date and article. Export data as CSV. Data refresh can take up to 15 minutes.

### Analytics: Accessing Search Analytics

_No summary available for this section._

### Analytics: Reader Analytics Overview

The Reader analytics tool provides insights into reader activity for Private or Mixed access projects, enabling tracking of user engagement to optimize content strategy.

### Analytics: Team Accounts Analytics

This page provides detailed analytics on team members' account types, content access/creation, contributions, and last logins.

### Analytics: Accessing Feedback Analytics

Access Feedback analytics in the Knowledge base portal's Analytics section. Filter data (date, widget type, JWT). Analyze metrics (article feedback, likes, dislikes, comments) via graphs and tables. View specific articles, feedback, and export data as CSV. Important: Only feedback with comments are included. Data refresh can take up to 15 minutes.

### Analytics: Understanding Feedback Analytics

Feedback analytics allows tracking of total comments, likes, and dislikes for articles or pages, with data visualized in charts and graphs. The features are supported across all plans, including Professional, Business, and Enterprise.

The Team accounts analytics page is accessed via the Knowledge base portal under the Analytics section. Users can filter data by date ranges, with updates taking up to 15 minutes. The page displays metric tiles for total team accounts, articles published, and top performers. Clicking on a team account provides detailed contribution metrics and article performance. Data can be exported as CSV for further analysis.

### Analytics: Viewing Team Account Analytics

To view Team accounts analytics, navigate to the Analytics section in the Knowledge base portal and select Team accounts. Use date filters to customize the data range, noting a 15-minute delay for updates. The page features three metric tiles and detailed contribution data, accessible by clicking on team accounts. Export options are available for both overall and individual data, enabling efficient analysis and reporting.

### Analytics: Accessing Link Status Analytics

To access Link status analytics, navigate to the "Analytics" section of the Knowledge base portal and select "Link status". Visual aid available.

### Analytics: Link Status Overview

Document360's knowledge base link status overview page displays internal and external links, classifying them by status (working, broken, redirect, ignored). A detailed list shows article name, link type, URL, status, and filtering options. Broken links display 404 errors or broken image thumbnails. Users can filter, export (CSV), and identify articles with deleted links. This page tracks and reports on all links within a workspace, ensuring knowledge base links are functional and accurate.

### Analytics: Understanding Link Status Analytics

Document360's "Links status analytics" is a broken link checker under the Analytics section. It validates internal, external, and media links, offering scheduled, manual, and article-level validations to improve SEO and user experience.

### Analytics: Managing Links

Manage links by searching, filtering by type/dependency/status (included/ignored). Add/remove links to ignore/include lists via checkboxes/dropdown or button. Export links as .csv.

### Analytics: Link Validation Methods

Link validation can be performed in three ways:

1. **Scheduled Validation**: Automatically runs based on plan tier; access via Analytics > Links status > Scheduled validation.
2. **Manual Validation**: On-demand; accessible via Analytics > Links status > Manual validation > Validate links (note 24-hour report generation and overwrite behavior).
3. **Article-Level Validation**: Unlimited checks performed from the article editor via More > Analytics > Validate now.

Key notes: Manual validation requires permission and overwrites previous reports within 24 hours; article-level validation is done per article.

### Analytics: Troubleshooting Link Validation

Document360's link validation has a 5-second timeout. If links appear broken but work in a browser, use Postman to check the HTTP response (200 is good). Error codes like 404, 500, or 502 can indicate true link problems. If issues persist, contact support. Links can be excluded from validation for cases like placeholders, and validation limits exist.

### Analytics: Link Status - Actions

- **Validation types**: Scheduled (weekly), Manual, and Article-level.
- **Report date**: Displays generated report dates with tooltips for upcoming scheduled validations.
- **Manage links**: Button opens a window showing all links, including ignored or included ones.
- **Validate links**: Initiates manual validation with a confirmation prompt about remaining validations.
- **Manual validation usage**: Shows remaining manual validations (resets monthly) for internal and external links.
- **Link analytics usage**: Displays used links vs. limit (Business: 5000, Enterprise: 10000).
- **Limit exceeded**: If links exceed the limit, only up to the limit are validated; contact support to increase capacity.

### Analytics: Ticket Deflector Analytics - Sections

The Ticket Deflector tab provides performance analysis of the form and knowledge base. It includes: 1) **Satisfaction Analysis:** Shows form submissions and knowledge base answers, interactable graphs. 2) **Frequently Selected Questions:** Top 5 most frequent questions from the form. 3) **Satisfaction Summary:** Pie chart of form submissions vs. knowledge base answers. 4) **Most Useful Articles:** Top articles resolving user queries, showing count of answered questions. 5) **Keywords:** Shows keywords, search counts, and whether answers were found, exportable as CSV. 6) **Search Success Rate:** Percentage of successful vs. unsuccessful searches, visualized in a graph. All sections allow image exports for data visualization.

### Analytics: Accessing Ticket Deflector Analytics

_No summary available for this section._

### Analytics: Ticket Deflector Analytics Overview

Analyzes key metrics for ticket deflector forms in Knowledge base sites/widgets, with support across Professional, Business, and Enterprise plans (table currently empty).

## API Documentation

### API Documentation: Generating API Docs

Document360 supports API documentation generation from URLs, JSON/YAML files, or via a CI/CD flow. Users select the source, input the API specification (URL or file path), provide an API token (for CI/CD), and click "Publish" to generate documentation. CI/CD requires Node.js and installing `d360` npm package. Review drafts are possible before publishing.

## Analytics

### Analytics: Ticket Deflector - Feedback Tab

The Feedback tab displays user feedback on ticket deflector forms, labeled by source (e.g., Form Submitted, Answered from Knowledge Base) with timestamps. Users can view feedback content by clicking on an entry. The FAQs explain that a ticket deflector reduces support tickets by suggesting knowledge base articles based on user queries. The 'Answered from Knowledge Base' metric tracks resolved queries without ticket submission. Effectiveness can be improved by maintaining an up-to-date knowledge base, using relevant keywords, reviewing frequently selected questions, and analyzing the Search Success Rate, which measures the percentage of successful searches returning relevant articles. A chart legend explains data series differentiation.

## API Documentation

### API Documentation: Regenerating API Docs

Document360 API docs can be automatically regenerated from updated API specifications (URLs, JSON/YAML files). Custom content is preserved. CI/CD integration using d360 npm packages is recommended for automated updates. Manual regeneration is possible via the web UI or command line. Draft saving and article relocation are restricted.

### API Documentation: API Doc Management

| Professional | Business | Enterprise |
|--------------|----------|------------|
| ✓            | ✓        | ✓          |

Document360 offers API documentation generation across all plans, enabling users to create interactive and detailed API docs by uploading specification files, covering endpoints, methods, and responses.

### API Documentation: d360 npm Package Links

- [**d360 npm package link**](https://www.npmjs.com/package/d360)
- [**Source code**](https://github.com/document360/d360)

The d360 npm package offers an API (Application Programming Interface) which facilitates communication between software applications. The package and its source code are accessible via the provided links.

## Widgets

### Widgets: Managing Widgets

Manage your Knowledge Base widget in Document360 with options to edit, clone, or delete it. The table below indicates which plans support this feature (belum terisi). For the latest details on plan-specific features, refer to the official documentation.

| Professional    | Business        | Enterprise      |
|-----------------|-----------------|-----------------|
| \[Plan details] | \[Plan details] | \[Plan details] |

### Widgets: Editing Widgets

To edit a Knowledge base Widget, navigate to it in the Knowledge base portal, hover over it, click "Edit", update configurations in the "Configure & connect" tab, and click "Save."

### Widgets: Deleting Widgets

To delete a knowledge base widget, navigate to the widget in the knowledge base portal, hover over the desired widget, click "Delete," confirm the action in the prompt, then click "Yes".

### Widgets: Widget Management Overview

The document describes managing and customizing a knowledge base widget, but crucial information like which plans support the widget (Professional, Business, Enterprise) is missing from the table.

### Widgets: Customizing Widgets

Customize the knowledge base widget's appearance and behavior by changing its color, icon, position (left/right, spacing), hiding the widget itself, or hiding the most searched articles. Access widget customization options through the 'Configure & connect' and 'Style widget' sections, selecting 'Edit', and clicking 'Save'. Color changes also update the icon color. Icons can be replaced with images or other icons. Hiding frequently searched articles disables URL mapping functionality.

### Widgets: Adding Ticket Deflectors

To add a ticket deflector to a knowledge base widget, enable the "Show ticket deflector" toggle in the widget's configuration, select the desired deflector, and save changes. This adds a ticket deflector to the knowledge base widget. Requires logging into the Knowledge base portal, selecting a project, and navigating to the widget's configuration page.

### Widgets: Domain Restriction

Restrict Knowledge Base Widget to specific domains. Add desired domains to "Widget security" list in widget settings. Widget accessible on any domain if no domains are specified. "www" is excluded from domain input; only the suffix is required (e.g., document360.com).

### Widgets: Cloning Widgets

1. Navigate to the **Knowledge base Widget** section in the portal.
2. Hover over the desired widget and click the **Clone** button.
3. Provide a title and update configurations in the **Configure & connect** tab.
4. Click **Save** to complete the cloning process.

![2_KBWidget_clone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_KBWidget_clone.png) ![5_KBWidget_confirmclone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_KBWidget_confirmclone.png)

### Widgets: Adding Custom Links

Add custom links (e.g., downloads, contact) to your Knowledge Base Widget. Navigate to "Widget Settings", add the link title, display text, URL, and optional icon in "Add Custom Links" section. Edit or delete links using the respective sections. Use `mailto:` for email links.

### Widgets: URL Mapping

URL Mapping lets you customize the knowledge base widget's display based on user location (URLs). This includes showing/hiding the widget and customizing search bar placeholders. Configurations are possible per user role (Professional, Business, Enterprise).

The documentation explains how to control content visibility in the Knowledge Base widget through options like Project, Workspace, and Category. Here's how to do it:

1. **Edit the Widget**: Navigate to the Knowledge Base widget, hover over it, and click Edit.

2. **Content Access Options**:

- **Project**: Shows all articles in the Knowledge Base.
- **Workspace**: Select specific workspaces or languages to display.
- **Category**: Choose specific categories from one or multiple workspaces.

3. **Considerations**:

- **URL Mappings**: Changes to content access can disable existing URL mappings if the articles are no longer accessible.
- **Autosave**: Navigating between tabs saves changes automatically.

By carefully selecting these options, you can tailor the widget's content while being mindful of its impact on URL configurations.

### Widgets: JWT Authentication

Enable JWT authentication for the widget by navigating to the Knowledge Base portal, configuring client ID, widget ID, token endpoint, and client secret. Embed the authorization URL in your code and implement an auth endpoint to handle token requests, ensuring reader group IDs are included for proper widget rendering. Troubleshoot issues like category visibility and widget loading by checking permissions and API keys.

### Widgets: Configuring URL Mapping

Configure URL mapping to control the Knowledge Base widget's behavior on specific URLs via four actions: showing an article, listing articles, displaying search results, or hiding the widget. Requires the Knowledge Base widget to be installed. Supports path, query, and hash URL parameters, with optional regex for advanced matching.

### Widgets: Deleting URL Mappings

To delete a URL mapping in a Knowledge base widget, navigate to the widget, click "Edit," find the URL mapping, click "Delete," and confirm the action.

To edit a URL mapping, follow these steps:

1. Navigate to the **Widget** section in the Knowledge base portal.
2. Hover over the desired Knowledge base widget and click the **Edit** icon.
3. In the **URL mapping** tab, locate the mapping you wish to modify.
4. Hover over the target URL mapping and click the **Edit** icon.
5. Make the necessary changes in the **Update URL mapping** blade.
6. Click **Update** to save your modifications.

This process will allow you to update the URL mapping efficiently within the portal interface.

### Widgets: Adding URL Mappings

To integrate a widget into your knowledge base, follow these concise steps:

1. Navigate to the **URL Mapping** tab in the **Widget** section of the portal.
2. Click **New URL mapping** and specify:

- **Name**: Internal label.
- **URL structure**: Choose from path, query, or hash.
- **URL**: Exclude domain (e.g., `/ebook/...`).
- **Action**: Select desired behavior.
- **Workspace**: Choose version if multiple exist.
- **Language**: Select if multiple languages are available.
- **Article**: Search and select page/index categories.

3. Click **Create**.

The widget will display the mapped content when the specified URL is accessed, maintaining consistency across tabs within the same version and language.

### Widgets: URL Matching with Regex

This document explains how to use regular expressions (regex) to match various URL components (protocol, domain, path, query parameters, fragment). Examples show matching specific paths, query parameters, optional parameters, and wildcards. Regex patterns for subdomains and complete URLs are given. Crucially, understanding URL matching is essential for effective URL mapping in web applications, allowing dynamic extraction of information from URLs.

### Widgets: URL Mapping Settings

Configure URL mapping behavior for unmapped URLs in the Knowledge base widget: Navigate to Widget > Configure & connect, expand URL mapping settings, choose to either display the page help/knowledge base or retain the last opened article, and save.

### Widgets: Advanced Customization

Customize the knowledge base widget's appearance and behavior using CSS/JavaScript. Methods include modifying the icon, buttons, implementing show/hide callbacks, and customizing styling and localization to match your branding or functionality needs.

### Widgets: Customizing the Widget Icon

Create a custom button, add JavaScript callbacks to control its visibility based on Knowledge Base widget load status and URL mappings. Integrate these callbacks into the widget's JavaScript snippet. Use JavaScript to make the button open the widget on click. Customize the button's appearance with CSS. Key details include custom button HTML, CSS, JavaScript for callbacks, and integrating them into the widget config.

### Widgets: Customizing Dark Theme

**Method:** Custom CSS. **Target:** Knowledge Base Widget. **Action:** Modify Custom CSS to change background and text colors of the widget's modal and its elements (divs, paragraphs, buttons) to black and white, respectively. The feedback button's hover style and background also modified.

### Widgets: Customizing Displayed Fields

Customize knowledge base widget text by modifying HTML with JavaScript. Replace "Page help", "Knowledge base", "Top search articles" etc., with localized alternatives in the widget's tabs & search area. Use `$(document).ready` to execute JavaScript after page load. Replace placeholder text via jQuery. Save settings after updating.

To remove the Page help and Search bar from the widget when URL mapping for a single article is configured, follow these steps:

1. **Access the Widget Editor**: Navigate to the Widget section in the Knowledge base portal and edit the desired widget.

2. **Add Custom CSS**: In the Custom CSS tab, add the following code to hide the Page help tab, back icon, and search container:

```css
li#page-help-tab {
  display: none;
}
.article-header .article-back-icon {
  display: none;
}
.search-container {
  display: none !important;
}
```

3. **Add Custom JavaScript**: In the Custom JavaScript tab, add the following code to ensure the search container is hidden after a delay and to handle any dynamic loading:

```javascript
setTimeout(function () {
  $('.search-container').hide();
}, 2000);
setTimeout(function () {
  $('#knowledge-base-tab').click();
}, 2000);
```

4. **Save Changes**: Click Save to apply the changes.

5. **Cache Considerations**: Note that changes may take up to 15 minutes to appear due to caching. For immediate updates, clear the application cache.

This approach combines CSS for styling and JavaScript for dynamic adjustments, ensuring the elements are hidden as intended.

### Widgets: Auto-Opening the Widget

To automatically open the Knowledge Base widget, add custom JavaScript to the widget's settings. The script simulates a button click after a 2-second delay, ensuring the page fully loads before opening.

## Site Customization

### Site Customization: Knowledge Base Site 2.0

Knowledge Base Site 2.0 offers an enhanced UI, AI-powered search, streamlined content, real-time updates, and interactive elements for better user experience. The migration guide from KB 1.0 to 2.0 is available [here](/help/docs/kb-site-20-migration).

### Site Customization: Knowledge Base Site 2.0 Overview

Knowledge base site 2.0 features a redesigned header with logo, workspace navigation, customizable primary/secondary navigation, announcements, acknowledgment requests, theme/language options, and search. The left pane offers search, navigation (tree view), article status, follow/export options. Article sections include breadcrumbs, title, links, status, date, contributors, sharing, summary, and acknowledgment. Image viewers support zooming, downloading, and navigating. A right pane displays attachments, tags, and a table of contents feature. Footer sections enable feedback, navigation to related/previous/next articles. Improvements include Eddy AI search and summarization.

### Site Customization: Customizing the Site

Document360's "Customize site" feature lets users tailor their Knowledge Base site's appearance (themes, colors, layouts) to match their brand and enhance user experience. This project-level setting affects the entire project. KB Site 2.0 supports customization with accessibility features; migration from KB Site 1.0 is required.

## Widgets

### Widgets: FAQs

The Knowledge Base widget is a tool that allows users to find answers within your app or site, supporting up to 10 configurations. It helps with onboarding, troubleshooting, and learning new features. Key features include customizable positions, the ability to hide the top search, URL mapping with regex support, custom links, ticket deflector, domain restriction, and default language detection. Available on Enterprise plans, it enhances user experience by providing in-app assistance and efficient content access.

## Troubleshooting

### Troubleshooting: Common Issues and Solutions

- **Website Fails to Load**: Check URL, clear browser cache, disable VPN, and verify system date/time.
- **504 Gateway Timeout**: Review server configuration changes and revert Sub-folder Configuration if necessary.
- **Page Unresponsive While Editing**: Clear cache, reduce article length, and fix unclosed HTML tags.
- **Too Many Redirects**: Correct JWT Login URL and remove domain URL from configuration.
- **Project Not Found**: Ensure CNAME record is correct and verified.
- **/home/error/ Message**: Contact support with HAR file and console errors.
- **Icons Not Rendering**: Check FontAwesome settings in custom CSS.
- **Site Without CSS**: Whitelist Document360 domains.
- **Secure Connection Issues**: Verify CAA records and update DNS settings.
- **ResourceNotFound & AuthenticationFailed Errors**: Ensure SaaS tokens are added and not expired.

## Site Customization

### Site Customization: Advanced Customization

Centralized customization of Knowledge Base site. Customize branding (logo, favicon), header/footer, homepage, login, error pages, and CSS/JavaScript. Uses a preview feature for interactive changes. Options for light/dark themes, favicon uploads/URLs, logo changes (images or text), logo URLs, custom CSS/JavaScript for advanced styling. Specific FAQs address theme settings, favicon issues, logo customization (different logos for different themes), font selection (article and site font), button styles, and site layout. Clear instructions and visual aids (GIF) are provided.

## Site Migration

### Site Migration: Migrating to KB Site 2.0

KB Site 2.0, a customizable knowledge base upgrade, offers enhanced features (following articles/categories, private sharing) and improved configuration options for various project tiers (Professional, Business, Enterprise). Projects created after June 10th, 2024 gain automatic access.

## Site Customization

### Site Customization: Basic Customization

Customize your Knowledge Base site by navigating to Settings > Knowledge base site > Customize site. Choose from three themes (light, dark, or both) and brand your site with a logo, favicon, and custom logo redirect link. Automatically apply WCAG-compliant colors or manually adjust brand colors, hyperlink colors (with options to use standard, brand, or custom colors), and fonts for articles and the site. Select button styles (rounded, sharp, bubble) and site layout (full width or centered). Save changes to apply. Existing logos and favicons remain unchanged until updated in settings.

## Accessibility

### Accessibility: WCAG Compliance

Document360 ensures accessibility by providing text alternatives for images/icons, enabling full keyboard navigation, and ensuring readable text with sufficient contrast and clear language.

## Site Customization

### Site Customization: Customizing KB Site 2.0

Navigate to Settings > Knowledge Base Site > Customize Site to access the 2.0 preview. Choose to go live immediately (retaining 1.0 settings) or customize further (including headers, footers, and CSS/JavaScript). Preview changes before publishing, with a 30-day rollback option to revert to 1.0. Integrations remain intact during the switch.

## Accessibility

### Accessibility: Understanding WCAG

_No summary available for this section._

### Accessibility: WCAG 2.1 Principles

WCAG 2.1 ensures web content is accessible to everyone. **Perceivable** content uses text alternatives for non-text, **Operable** interfaces are usable via keyboard, provide sufficient time, and include clear navigation. **Understandable** content is readable, with predictable operation. **Robust** content is compatible with various user agents (including assistive tech). This promotes a more inclusive web experience.

## Site Customization

### Site Customization: Secondary Navigation

A secondary navigation header in Document360 allows customization with menus below the logo, providing quick access to frequently visited pages (e.g., Pricing, Documentation, Support). This improves user navigation, especially on large knowledge bases, enabling easy access to key information.

### Site Customization: Configuring Secondary Navigation

Customize your knowledge base's header secondary navigation by selecting Settings > Knowledge base site > Customize site. Create single-level, multi-level, or ticket-deflector menus from within the header settings, adding titles, links (hyperlinks, email, phone), and the ability to open in new tabs. Manage and reorder items, and optionally display this secondary navigation on the home page, before publishing changes.

### Site Customization: Primary Navigation

Document360's primary navigation header is the bar located next to the logo at the top of your site, enabling users to add menus for easy navigation between pages on the Home or Knowledge base site. This feature supports customization across different plans, with varying degrees of functionality depending on the plan (Professional, Business, Enterprise).

### Site Customization: Configuring Primary Navigation

To customize the primary navigation header in Document360, follow these key steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select **Site header & footer** from the left pane, then expand **Header** and choose **Primary navigation**.
3. Add up to 6 new items (types include Home, Custom URL, Call to action, RSS feed, Ticket deflector, Glossary, API documentation, and Custom page).
4. Customize colors, edit, delete, or reorder items using the left navigation options.
5. Preview changes, then save and publish to activate them.

**Notes:** Use custom CSS & JavaScript for advanced customization, such as adding social media icons or feedback links.

### Site Customization: Custom Footer Support

No plans for customization of the knowledge base site are detailed in the provided table. The table is empty for all listed tiers (Professional, Business, Enterprise).

### Site Customization: Creating Custom Footers

Customize your knowledge base site's footer via the Knowledge Base portal's settings. Choose a blank or themed custom footer, add HTML/CSS or external links, preview, save, and publish changes. Incorporating external files (like PDFs) also detailed in the steps.

### Site Customization: Footer Navigation Settings

To access footer navigation settings, navigate to **Settings** > **Knowledge base site** > **Customize site**, select **Header & Footer** > **Footer**, and choose between **Basic footer** or **Custom footer**. Preview changes before saving and publishing. The **Custom footer** allows HTML input for advanced customization.

### Site Customization: Footer Customization

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
|--------------|----------|------------|
|              |          |            |

- Added footer to knowledge base site.
- Up to six custom links on the left for essential resources (e.g., pricing, contact, free trial).
- Social media links on the right included to drive engagement.
- Available across Professional, Business, and Enterprise plans.

### Site Customization: Removing RSS Feeds

To remove the RSS feed from your Knowledge base site, navigate to Settings > Knowledge base site > Customize site, select Site header & footer, locate the RSS feed in the desired header/footer section, and click Delete. Note: Existing subscribers will still receive updates and a 404 error for the RSS feed might be seen if the project is private. Public project access is necessary for the feed to work.

## Site Features

### Site Features: RSS Feeds

RSS (Really Simple Syndication) is an XML-based format that provides automatic updates, enabling readers to stay informed about new or modified articles in a Knowledge Base. By integrating RSS feeds into the header or footer, subscribers can effortlessly stay updated. For instance, a software company can use RSS feeds to keep customers informed about product releases and bug fixes without manual checks, ensuring engagement and informed readers.

### Site Features: Adding RSS Feeds

Add RSS feeds to enhance your Knowledge Base's functionality by providing readers real-time updates accessible via various RSS tools.

- **Primary Navigation**:

- Navigate to the customization settings, select Primary Navigation, add a new RSS Feed item with a title, and choose to open in a new tab.

- **Secondary Navigation**:

- Similar process, but select Single Level, enter the RSS title, and paste the XML URL.

- **Footer**:

- Add via Basic Footer by including a new link, or use Custom Footer by embedding the XML URL directly into HTML.

- **Usage**: RSS Feeds allow readers to stay updated using browser extensions (like Feeder.co) or apps (Feedly, Inoreader). Readers can subscribe by accessing the XML file through the provided links.

## Site Customization

### Site Customization: Home Page Customization

The Document360 knowledge base home page can be customized through the **Customize site** settings, offering various body blocks like rich text, image sections, and custom code. Users can choose from themes (Engage, Innovate, Learn, Default) and configure SEO with meta titles, descriptions, and featured images. The recommended hero image size is 1920x415 pixels. Customization includes reordering sections, previewing, and publishing changes. Themes are available on Professional, Business, or Enterprise plans.

## Site Structure

### Site Structure: Main Pages

This document outlines the main pages of a Knowledge base site, with a focus on the Home page's customization features, including adding links, changing colors, and incorporating categories. It also presents a structured comparison table for Professional, Business, and Enterprise plans.

## Site Customization

### Site Customization: Login Page Customization

Document360 knowledge base login page customization guide. Allows users to modify the login page's appearance (images, styles) and add extra elements (buttons, video loaders, search bars). Handles homepage and documentation page customization too. Emphasizes using HTML, CSS, and JavaScript for personalization.

### Site Customization: Hero Section

The Hero section of Document360's knowledge base homepage is a customizable, visually-prominent area. It allows companies to introduce their knowledge base with engaging text, buttons, and search. This creates a strong first impression and directs users to key resources, like a software company showcasing updates and navigation.

### Site Customization: Documentation Page

Customize the Documentation page by adjusting the search bar position (Left panel or Secondary Header) and applying a background color to the left navigation panel. Access settings through **Settings > Knowledge base site > Customize site**, select Documentation, make changes, preview, save, and publish to apply them live.

### Site Customization: Multicolumn Cards

Homepage section for showcasing features, "About," or "Contact." Columns have icons, titles, and descriptions to highlight key offerings. Visually appealing, allows for quick information access; useful for promoting software features (icon, title, description).

### Site Customization: Rich Text Blocks

Customize knowledge base home page with rich text blocks by adding headings and paragraphs with formatting options (colors, bold, italics, links). Follow steps: navigate to settings, customize site, add rich text block, edit heading/paragraph content, choose styles & alignment, reorder, and save. Markdown support and a delete option are also discussed.

### Site Customization: Configuring the Hero Section

- Navigate to **Settings** > **Knowledge base site** > **Customize site**.
- Select the **Home** page from the left dropdown to find the **Hero section** at the top.
- Configure the **Hero section** by setting the background (image, color, gradient, or pattern) and customizing elements like text, buttons, and search functionality.
- **Welcome text**, **Promo text**, **Buttons**, and **Search** can be edited or hidden as needed.
- After making changes, **Save**, **Preview**, and **Publish** to apply them.

### Site Customization: Adding Multicolumn Cards

To add multicolumn cards, customize your Knowledge Base site home page, add a multicolumn card section. Edit titles, icons (Document360 or Font Awesome), and descriptions for each column by clicking elements. Reorder, hide, and customize element appearance. Detailed steps are provided for deleting and using Font Awesome icons. Visual aids improve understanding of the process.

### Site Customization: Image with Text Blocks

The **Image with text** block allows combining visuals with text to enhance a knowledge base site's homepage, differing from the **Rich text** block by adding imagery. It's ideal for showcasing features or announcements, such as highlighting a new feature with its description.

### Site Customization: Adding Image and Text Blocks

Customize your knowledge base homepage by adding image and text blocks. Select "Image with text" block, upload or update the image, edit heading and paragraph text (format, align, color), save, and publish. Deletion instructions also provided.

### Site Customization: Adding Custom Code Sections

To add custom HTML/CSS to a knowledge base homepage: 1. Navigate to Customize Site. 2. Select the Home page. 3. Add a Custom Code Section. 4. Edit HTML/CSS. 5. Preview, Save, Publish. To delete, follow similar steps, selecting "Delete" then "Yes." The platform lets you manage content, files, and site settings.

### Site Customization: Custom Code Section Overview

Document360's **Custom code section** enables users to enhance their Knowledge base site by embedding custom HTML and CSS, ideal for adding visuals or interactive elements. For instance, it allows embedding dynamic banners or countdown timers for promotions, making it a versatile tool for site customization.

### Site Customization: Widgets Block

Widgets are embeddable blocks on the platform, placed below the header of the homepage. They serve various functionalities.

### Site Customization: Knowledge Base Categories Block

The **Knowledge base categories block** enhances a site's home page by displaying popular categories as cards, improving navigation and user experience. Ideal for managing documentation, it helps users quickly find relevant sections like "Getting Started" or "Troubleshooting Articles," reducing search time and boosting satisfaction.

### Site Customization: Adding Category Blocks

A step-by-step guide to adding and configuring a Knowledge Base Categories block on the home page of a Knowledge Base site:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site**.
2. Select the **Home** page and click **Add section**, choosing **Knowledge base categories**.
3. Customize the block by adding categories from your Knowledge Base, reordering elements, and toggling visibility.
4. Edit category elements by selecting icons (Document360 or Font Awesome), adding titles, descriptions, and choosing colors for icons and text.
5. Save, preview, and publish changes.

This feature enhances content organization and user navigation.

### Site Customization: Error Pages

Custom error pages for Document360's knowledge base improve user experience by providing branded messages and clear next steps when users access broken, unauthorized, or restricted links, instead of generic error messages. This feature applies across all plans.

### Site Customization: Deleting Widget Sections

To delete a widget section or individual widgets in the Knowledge Base site, follow these concise steps:

1. Navigate to **Settings > Knowledge base site > Customize site > Customize site**.
2. Select **Widgets** from the Home dropdown.
3. Click **Delete** at the bottom; confirm by clicking **Yes**.
4. For individual widgets, repeat the process.
5. Save and Publish changes to apply them.

**Key FAQs:**

- Hide widgets by hovering and clicking the Hide icon.
- Rearrange widgets using drag-and-drop.
- Recently Created and Modified Articles may overlap if articles are both new and edited.

Refer to the FAQs for additional guidance on hiding, rearranging, and understanding widget behaviors.

### Site Customization: Adding Widgets to Home Page

To add widgets to your Knowledge base home page:

1. Navigate to Settings > Knowledge base site > Customize site.
2. Select Home page from the left menu.
3. Click Add section and choose Widgets.
4. Select from the available widget options: Most Viewed, Most Liked, Most Read, Recently Modified, or Recently Created articles.
5. Edit widget headings and preview changes.
6. Click Save and Publish to apply the changes.

**Key Notes:**

- New articles appear in both Recently Created and Recently Modified sections.
- Widget content is filtered based on user access permissions.
- Use the reorder and preview icons to arrange and hide elements as needed.

Refer to the provided screenshots for visual guidance on both the portal and site views.

### Site Customization: Understanding 404 Pages

A 404 page appears when a user requests a non-existent webpage. Customize this error page with a message, imagery, and links to improve user experience and guide them to appropriate content. Customization is irreversible.

### Site Customization: Configuring Error Pages

To customize error pages, navigate to **Settings > Knowledge base site > Customize site**. Choose the error page type from the dropdown menu (404, Access denied, Unauthorized, IP restriction). Select **Basic style** to change images or **Custom style** for HTML/CSS editing. Use the preview toggle to view changes. Save, preview, and publish to activate. Note that once configured, you can't revert to the default static page. The Access denied page appears for permission issues, while Unauthorized appears for unauthenticated users. FAQs address image uploads, project availability, multimedia support, and the inability to revert to default.

### Site Customization: 404 Page Support

This document outlines the plans supporting error pages, with Business and Enterprise tiers typically offering custom 404 page support, while the Professional tier does not.

### Site Customization: Access Denied Page

The "Access denied" page in a knowledge base redirects users with insufficient permissions. Customizable pages improve user experience by clearly explaining why access is denied and how to get permission. Only Private and Mixed knowledge bases support this feature, and a custom page prevents reverting to the default version.

### Site Customization: Access Denied Page Support

**Plans supporting error page**

| Professional | Business | Enterprise |
|--------------|----------|------------|
|              | ✅        | ✅          |

The Business and Enterprise plans support the access denied page, as indicated in the table above.

### Site Customization: Customizing the 404 Page

- To customize the 404 page, navigate to **Customize site** in the Knowledge base portal and choose the **404 page** option.
- **Basic style**: Customize image, heading, paragraph, and add up to three buttons with suggested links like Home, Contact, or Sitemap.
- **Custom style**: Use HTML and CSS with a preview feature for tailored design.
- Use **Page Not Found analytics** and **Link status** tools to monitor and fix broken links.
- Best practices include consistent design, clear language, navigation options, search bars, feedback mechanisms, and mobile-friendliness.

### Site Customization: Unauthorized Page Support

No information is provided about plans for an error page in the provided data. The table displaying possible plans (professional, business, enterprise) is empty.

### Site Customization: Customizing the Access Denied Page

To customize the Access Denied page in the Knowledge Base, navigate to Settings > Knowledge base site > Customize site. Select the Access Denied page, choose either Basic or Custom style, and modify elements like images, headings, and paragraphs. For advanced changes, use custom HTML/CSS. Preview and publish your changes. Note that once customized, you cannot revert to the default page. Refer to FAQs for additional guidance and best practices for clear messaging and responsive design.

### Site Customization: Understanding the Unauthorized Page

The Unauthorized page appears when users lack proper permissions to access restricted content. It can be customized with messages like requesting admin access, but customization is irreversible once implemented.

### Site Customization: Customizing the Unauthorized Page

Customize your knowledge base's unauthorized access page by selecting either a "basic style" option (modifying default images, headings, and paragraphs) or a "custom style" option (adding custom HTML and CSS). Basic style allows changing visuals, while custom style provides full control over the page's design for a more tailored experience. Instructions for both options, including image changes, heading updates, and paragraph editing, are available. Save, preview, and publish changes for implementation on the knowledge base site.

### Site Customization: IP Restriction Page Support

**Plans supporting error page:** Information not provided in the document.

### Site Customization: Customizing the IP Restriction Page

Customize your knowledge base's IP restriction page by adjusting basic styles (images, texts) or creating custom HTML/CSS. Use the "Preview" toggle to test changes. Save, preview, then publish to apply changes. Basic style lets you change existing elements; custom style allows for full HTML/CSS customization. Key info includes navigating to site customization settings, selecting "IP restriction" page, modifying elements, previewing, and publishing.

### Site Customization: Understanding the IP Restriction Page

The **IP Restriction page** appears when users access the Knowledge base from restricted IP addresses. It can be customized to inform users (e.g., "Your IP address is not authorized. Please contact your admin for access.") and is exclusive to **Enterprise plan** projects. Once customized, the default version cannot be restored, so creating a tailored page is recommended for improving user experience.

### Site Customization: Custom CSS & JS Support

Insufficient data to provide a TLDR. The table lacks any details on custom CSS and JS plans for the Knowledge Base site. A summary requires actual plans, not empty cells.

### Site Customization: Using JavaScript Snippets

Customize website JavaScript by navigating to site settings, adding code to the JavaScript tab, and saving. Example code reorders elements.

### Site Customization: Troubleshooting Custom JavaScript

Document360's SPA transition requires updating custom JavaScript, which previously relied on page refresh events. Instead, use the `articleload` event for updated content. Adjust existing JavaScript to include `window.addEventListener('articleload', function() { ... });`. Contact support for further assistance with persistent issues. Custom CSS is supported. Multiple brands can be accommodated via separate workspaces or by applying separate stylesheets to differing projects within the same workspace while recognizing any CSS added to the projects will apply universally across all workspaces.

### Site Customization: Using CSS Snippets

CSS snippets are reusable code blocks for common CSS functionalities, helping save time and reduce errors. An example is the `.shadow` snippet adding box-shadows. To use, go to Settings, add custom or preloaded snippets (7 available), and save. For more details: [CSS Snippets](/help/docs/css-snippets).

### Site Customization: CSS Snippets

Customize Document360 Knowledge Base site using pre-loaded or custom CSS snippets. Navigate to Settings > Knowledge base site > Customize site > Custom CSS, select CSS tab, add snippets (including preloaded ones for body font, headings, tables, images, hero sections, callouts, and back-to-top), save changes. Custom CSS can also be added.

### Site Customization: Custom CSS/JS by Plan

The document outlines plans (Professional, Business, Enterprise) supporting custom CSS and JS in a knowledge base site, presented in a comparative table.

### Site Customization: Callout Styles by Plan

No data available for callout styles across Professional, Business, and Enterprise plans.

## Content Enhancement

### Content Enhancement: Understanding Callouts

A "Callout" is a feature in Document360 used to highlight important content, available in four types: Info, Warning, Error, and Success. Each offers a title and content section, accessible via Markdown or WYSIWYG editors.

## Site Customization

### Site Customization: Body Font Styling

Document360 plans to allow custom CSS and JS for body font styling in knowledge base content. This will improve the reader experience.

### Site Customization: Setting Body Font Style

To change the body font in Document360's knowledge base, use Custom CSS & JavaScript. Navigate to Knowledge base site > Customize site > Custom CSS & JavaScript. Click the "Custom CSS" tab and "Add code snippets." Select the "Change body text font" snippet, modify the code as needed to customize the font face and color, then save the changes.

### Site Customization: Styling Callouts

Steps to customize callout styling:

1. Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.
2. Under CSS, click **Add code snippets** and select **Change callout colors**.
3. Edit the code with your branding colors and **Save** for site-wide application.

For dark mode styling, refer to [How to change callouts color in dark mode](/help/docs/how-to-change-the-callouts-color-in-dark-mode).

## Content Enhancement

### Content Enhancement: Image Alignment

Image alignment controls image placement (left, right, center) and maintains image-content proportions when resizing. Default alignment is left.

The GIF demonstrates changing the body font style from Nunito to a custom font and color using CSS, with changes applying globally across the Knowledge base.

## Site Customization

### Site Customization: Header Font Style

Document360 allows customization of header fonts (`<h1>`, `<h2>`, `<h3>`, `<h4>`) for knowledge base sites. Sans-serif fonts are common for technical documentation.

### Site Customization: Changing Header Font Style

To change Document360 header fonts, navigate to Custom CSS in Knowledge Base settings, add/edit the "Change heading font" snippet, customize the CSS, and save. This change applies to all headers throughout the knowledge base. Default font is Montserrat.

### Site Customization: Image Resizing

To maintain image proportions while zooming, navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**. Paste one of the following code snippets based on your site version:

- For KB 1.0:

```
.content_block .content_container .content_block_text img {
height: auto !important;
}
```

- For KB 2.0:

```
article img {
height: auto !important;
}
```

Click **Save** to apply changes, ensuring images resize proportionally during zooming.

### Site Customization: Centering Images

To center images, navigate to **Custom CSS** in your Knowledge base settings, add the provided CSS snippet, and save. Centering uses `margin: 0 auto` and `display: block`. For alignment, use left or right margins as needed. Remember to delete previous snippets before adding new ones to avoid conflicts.

Key CSS snippets:

- **Center**: `.content_block .content_container .content_block_text img { margin: 0 auto; display: block; }`
- **Left**: `margin: auto 0 0 0 !important;`
- **Right**: `margin: 0 0 0 auto !important;`

## Content Structure

### Content Structure: Importance of Tables

Tables allow for organized, structured presentation of data, enhancing understanding of complex information by arranging it in rows and columns.

## Site Customization

### Site Customization: Styling Tables with CSS

To style tables in Document360, navigate to the Custom CSS & JavaScript section in Settings. Add or modify CSS snippets to customize table borders, padding, background colors, font styles, and potentially hide empty headers. Save changes for them to take effect. Custom CSS can be added in addition to the pre-built snippets.

### Site Customization: Table Styles and Plan Support

The document highlights the importance of table styles in Document360 for creating rich layouts, with Document360 offering robust table and table element customization options. A table compares three plans—Professional, Business, and Enterprise—regarding their support for custom CSS and JS in knowledge base sites.

| Professional                 | Business                      | Enterprise                                      |
|------------------------------|-------------------------------|-------------------------------------------------|
| Limited CSS/JS customization | Advanced CSS/JS customization | Full CSS/JS customization with priority support |

## SEO

### SEO: Editing Redirect Rules

To edit a knowledge base article redirect rule, navigate to Knowledge base > Article redirect rules. Filter to find the correct rule, hover over it, click "Edit", update the fields, and click "Update".

### SEO: Adding Redirect Rules

Configure URL redirects for articles in a knowledge base system. Two methods are provided: 1) for redirects based on article slugs at the end of the URL ("Ends with") and 2) for replacing segments of the URL ("Replace with"). Crucially, specify correct paths (starting/ending with `/`) and consider multilanguage/multi-project contexts for broader applicability. Site-level redirects are also described.

### SEO: Article Redirect Rules

The Enterprise plan supports article redirect rules, enabling redirects for any published or draft article URL to prevent broken links and maintain cross-references. Bulk import of redirect rules is also supported.

### SEO: Filtering Redirect Rules

Filter redirect rules by searching source/destination URLs, selecting rule type (Ends with, Replace with, or Both), and filtering by modification date (preset timeframes or custom date ranges).

### SEO: Importing Redirect Rules

Import redirect rules in bulk by uploading a properly formatted CSV file (Source, Destination, RedirectionType, max 1MB) to the Knowledge Base portal's Settings > Knowledge base site > Article redirect rules. Review valid/invalid rules, download a list of invalid rules if applicable, and finally import the accepted rules.

### SEO: Exporting Redirect Rules

Export redirect rules as a CSV from Document360 knowledge base settings > article redirect rules. Rules manage broken links and redirects for articles. Maximum 10,000 rules per project, import limits apply. Redirects can be customized with JavaScript, replace workspace names, or send to homepage. Errors, like too many redirects, are addressed. Key to resolving issues is validating and correcting redirection rules within the system.

### SEO: Deleting Redirect Rules

To delete an article redirect rule in the Knowledge base portal:

- Navigate to **Settings** > **Knowledge base site** > **Article redirect rules**.
- Use the **Filter** to find the rule.
- Hover over the rule and click the **Delete** icon, or select multiple rules using checkboxes and click **Delete**.
- Confirm by clicking **Yes** in the pop-up.

> **Note**: Deleted rules cannot be retrieved.

![Screenshot of deleting a redirect rule](https://cdn.document360.io/.../Documentation/5_Screenshot-Delete_a_redirection_rule.png)

Access redirect rules via Settings, filter or select the rule(s), delete, and confirm to permanently remove them.

## Site Settings

### Site Settings: Article Settings

Configure various Knowledge Base article settings (accessibility, headers, sidebars, footers, categories, search, FAQ) at the site level with global impact. Customize individual article elements like read-aloud, table of contents, comments, statuses, and related articles. Support for localization is provided for consistent language use across the site. Adjust search options and FAQs separately. Individual article settings can override global site level configurations, but site level overrides often take precedence.

### Site Settings: Article Header Customization

Knowledge base article settings will be updated to include customizable header elements like contributor lists, estimated read times, and sharing options, improving user engagement.

### Site Settings: Article Settings and SEO

The **Article settings & SEO** section in Document360 enables customization of Knowledge base sites, improving user experience through features like headers, footers, search options, and accessibility. Companies can tailor settings to display contributor names, read times, social sharing, and related articles, enhancing engagement and user feedback.

### Site Settings: Enabling Article Header Elements

To enhance article headers across your knowledge base, enable the following settings in the Article settings panel: contributors, read time, follow button, share, print, dates, and PDF download. This project-wide change affects all articles and requires verification.

## Accessing the What’s new feature

### Accessing the What’s new feature

View recently published knowledge base articles by clicking the announcement icon, selecting workspace & language, and filtering by date range (last 24 hours, 7 days, or 30 days).

The "What's New" feature in Document360 allows users to access recently published or updated articles. It can be enabled or disabled via Settings > Knowledge base site > Article settings & SEO by toggling the 'Show What’s New' option. The feature's availability across Professional, Business, and Enterprise plans is currently unspecified as the provided table is empty.

## Site Features

### Site Features: Article Header Elements

The article header includes contributors, read time estimate, follow button, share icon, print option, published/updated dates, and PDF export. Localization allows customizing text per language. FAQs cover hiding breadcrumbs, exporting drafts, setting default email apps, and disabling print/PDF options.

## User Engagement

### User Engagement: Following Articles and Categories

The Document360 "Follow articles and categories" feature notifies users of new/updated knowledge base articles. Available only for Private/Mixed projects in KB site 2.0 (projects created after June 10th).

## Site Features

### Site Features: Search Functionality

The knowledge base site's search function allows fast, relevant searches across articles, categories, and PDF attachments. Advanced search filters and keyword operators improve efficiency for users, essential for large organizations with extensive documentation.

### Site Features: Search Attributes

Knowledge base search utilizes article & category titles, tags, slugs (articles and categories), breadcrumbs, and content text. Search prioritizes article titles, then tags, slugs, breadcrumbs, and finally content.

### Site Features: Enabling the ‘Show Follow button’ from KB Portal

To enable the 'Show Follow button':

1. Go to **Settings** > **Knowledge base site** > **Article settings & SEO**.
2. In the **Article header** section, toggle on **Show Follow button**.

- This feature is enabled by default for new Private and Mixed projects.

![Reader notification](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_Reader_Notification.png)

### Site Features: Searching Attachments

Search attachments lets users search PDF files (up to 10MB) within a knowledge base. This finds relevant content even if file names don't match search terms, filtering by categories, articles, API docs and files. Enable via Knowledge base portal settings and requires the "Show article files" toggle. Search is limited to article content, titles, slugs and tags if the "Show attachment tab" is off.

### Site Features: Advanced Search

Advanced search allows users to filter results across multiple workspaces and languages, with features like workspace, language, tags, contributors, date, and category filters. Enable it in settings under the Knowledge base portal to access these options. Filters include Workspace (current, all, or specific), Language (current, all, or specific), Tags, Contributor, Date (preset or custom range), and Categories.

### Site Features: Search Filters

Knowledge base search filters allow refining results by category, attachments, workspace (current, all, or specific), and language (current, all, or specific). Filters are located to the left of the search bar.

### Site Features: Search Operators

Implementing search operators (double quotes for exact phrases and minus signs for excluding terms) significantly improves search precision and user satisfaction. Double quotes find exact phrases, while the minus sign excludes results containing a specific word. Crucial to understand the difference between using "-" for excluding versus its use as part of the word itself.

Step-by-step explanation:

To enable the 'No search result feedback' in Document360:

1. **Access Settings**: Click on the gear icon located at the top right corner to open the Settings menu.

2. **Navigate to Knowledge Base Settings**: In the Settings menu, select "Knowledge base site".

3. **Open Article Settings**: Within the Knowledge base site section, go to "Article settings & SEO".

4. **Locate Search Settings**: In the Article settings, find the "Search settings" section, which is usually in an accordion menu. Click to expand it.

5. **Enable Feedback Form**: Toggle the switch next to "No search result feedback" to activate it.

6. **Configure Behavior**:

- When enabled, users who perform a search with no results will see a feedback form.
- If disabled, they will see a blank results page.

7. **Review Feedback**: The feedback submissions can be viewed in the "Search analytics" module under the analytics section to help improve the knowledge base.

This setup ensures that your team can gather user feedback when searches yield no results, aiding in content improvements. The feedback form appears on both the knowledge base site and its widget.

### Site Features: Advanced Search FAQs

Advanced search allows combined searches across all workspaces/languages with filters. To hide the home page search, customize the header. Exclude articles by hiding, and external search engines are handled by a separate article. Include API documentation by selecting "All workspaces" in the search filter. For RTL languages (Hebrew, Arabic), search bar adjusts to right-to-left alignment. Search behavior depends on default language selection when mixing RTL/LTR languages. Enable "Include all workspaces in site searches" in Article settings within Knowledge base site settings for Document360 1.0 to search all workspaces.

### Site Features: Smart Bars

Customizable banners/bars in Document360's knowledge base site. Convey information/announcements/updates, tailored to user location, browser, or project language. Enhance user engagement and highlight critical info updates.

## User Feedback

### User Feedback: Liking/Disliking Articles

Users can like or dislike articles in Document360 to provide feedback, helping improve content quality. Feedback can be submitted multiple times. The undo feature for likes/dislikes is only available in KB Site 2.0 projects, requiring migration for its use.

## Site Features

### Site Features: Creating Smart Bars

Create a custom banner for a knowledge base. Configure its content (text, formatting), appearance (position, color theme), and visibility rules (based on URLs, IP, browsers, devices, language, project). Edit/delete created Smart bars. Supports global or language-specific display.

## User Feedback

### User Feedback: Liking/Disliking - Process

Like or dislike articles in the Knowledge base by clicking respective icons at the end of an article. Liking is straightforward, while disliking requires a comment. Both actions open feedback panels with options to provide comments and enable update notifications via email. Users can undo their action within 30 days unless cache is cleared. Dislikes without comments aren't counted. Analytics only record active interactions. Feedback can be updated by switching like/dislike, retaining previous comments. The process is consistent across the Knowledge base widget, with a 30-day window for undoing actions in the Public site.

## Site Features

### Site Features: Smart Bar Management

The Smart bar overview page provides a centralized interface to manage Smart bars, with features including language selection, status toggles, detailed previews, show/hide rules, editing and deletion options, filters for organization, and the ability to create new Smart bars.

## Support

### Support: Ticket Deflectors

Ticket deflectors are a feature that reduces support tickets by enabling users to resolve issues independently through self-service options in a knowledge base. This improves user satisfaction and reduces support workload.

### Support: Managing Ticket Deflectors

The Ticket Deflectors overview page lets you manage ticket deflection forms in the knowledge base. You can view titles, status, update history, create/clone/edit/delete forms, and integrate with helpdesks. Forms can be previewed before publication and copied for sharing. Key limitation: only usable in the main workspace and its languages. Important: set to offline before deleting.

## Compliance

### Compliance: Cookie Consent

A cookie is a small data piece stored by websites in users' browsers. Consent is required for using cookies, especially under GDPR. Document360 allows adding a cookie consent bar or popup to ensure compliance.

### Compliance: Adding Cookie Consent

Enable cookie consent in Settings > Knowledge base site > Cookie consent. Customize the message for all or specific languages, format it with basic tools, choose between a bar or popup banner, select position and theme (light, dark, or custom colors), add a CTA (text, button, or icon), preview, and save.

## Support

### Support: Adding Ticket Deflectors to Header/Footer

Add ticket deflector forms to your knowledge base's header and footer navigation, and other relevant sections. Instructions cover adding link via primary/secondary navigation in header or to basic/custom footer. Forms must be activated. Use copied links for other placements like articles or home pages. Clone to duplicate forms, preview changes before publishing, and delete inactive forms. Copy link from settings>> Knowledge base site >> Ticket deflectors.

### Support: Creating Ticket Deflectors

Ticket deflectors route users to self-service resources (FAQs, guides) for issue resolution. If users can't find a solution, they are directed to a tailored contact form. Business and enterprise plans support multiple deflectors (up to 10).

## Integrations

### Integrations: Helpdesk Configuration

Ticket deflectors allow integration with **Freshdesk** and **Zendesk** for direct ticket creation. Configuration involves navigating to **Settings** > **Knowledge base site** > **Ticket deflectors**, selecting the helpdesk platform (Freshdesk or Zendesk), and entering required credentials (API key, domain URL, and agent email for Zendesk). Validate and save to complete the integration.

### Integrations: Adding New Integrations

To integrate a third-party app into Document360, navigate to Integrations in Settings > Knowledge base site. Select the desired app, choose Basic or Custom configuration, provide required information (e.g., Description, App ID), and click "Add." Details may vary; check the "Learn more" link for specific app instructions.

### Integrations: Overview

Document360 is a knowledge base platform offering over 25 third-party integrations across categories like analytics, chat, comments, and marketing automation, supported by Professional, Business, and Enterprise plans.

## Support

### Support: Creating Ticket Deflectors - Detailed

To create a ticket deflector in Document360's Knowledge Base:

1. Navigate to **Settings** > **Knowledge base site** > **Ticket deflectors**, then click **New ticket deflector**.
2. **Configure Form Title, Slug, and Description**: Edit the title (max 150 chars), adjust the auto-generated slug if needed, add a description, and ensure the deflector is online.
3. **Set Up Context Questions**: Add qualifying questions (phrased as statements or prompts) to guide users, enabling search options and defining next actions (e.g., contact form or article).
4. **Add Suggestions**: Optionally, include block steps like additional questions, answers, or links to knowledge base articles for further user guidance.
5. **Customize Contact Form**: Define fields (mandatory: Email, First Name, Description; optional: Last Name, Telephone), allow attachments (max 5 files, 2MB each), enable CAPTCHA, and set a post-submission thank-you message (max 250 chars).
6. **Configure Ticket Submission Settings**: Set email notifications (custom subject, recipients), map deflectors to specific emails, and optionally connect to a helpdesk (e.g., Freshdesk) for automatic ticket creation.
7. **Localize Text**: Translate variable texts in the deflector through **Localization & Workspaces** > **Localization variables**.

This setup ensures efficient user guidance, reduces support tickets, and integrates seamlessly with existing systems.

## Integrations

### Integrations: Managing Integrations

Update integration credentials, description, status (on/off), App ID/URL on the Integrations page by clicking "Edit." Delete integrations by clicking "Delete" after confirmation. Troubleshooting involves checking App ID/URL, internet connection, and app-specific instructions (Learn more). Best practices include periodic review and keeping integrations up-to-date. Add analytics scripts via Custom HTML in site settings.

### Integrations: Integration Overview Page

The **Integration overview** page lets you manage integrations by toggling status, viewing type, description, and user involvement. Categories include Analytics (9 tools), Chat (11 tools), Commenting (2 tools), and Marketing automation (3 tools), with notable options like Google Analytics, Intercom, Disqus, and Zoho PageSense.

### Integrations: Code Filtering

Document360 integrations allow code filtering. Configure conditions (IP address, workspace, language) to control where/how integrated apps run, targeting specific users or cases. Use AND/OR logic to combine conditions. Example: filter Google Analytics data by IP address, workspace, or language, enabling targeted data collection.

### Integrations: LiveChat

To integrate Document360 with LiveChat, configure the integration within the Document360 Knowledge Base portal by selecting LiveChat, adding a description, entering the LiveChat ID, and potentially using conditional code. This allows LiveChat users to access Document360 knowledge base information, likely through a chat interface.

## Site Customization

### Site Customization: Custom HTML Integration

Add custom HTML snippets for third-party integrations by navigating to **Settings > Knowledge base site > Integrations**. Choose the insertion point (Header, Begin Body, or End Body), paste the code, and save. The snippet appears on the Integrations overview page, enabling widgets like analytics or chat support based on placement.

## Integrations

### Integrations: Olark

**Olark** live chat tool integrates with Document360 for enhanced customer support. Key features include visitor co-browsing, geolocation, visitor insights (browsing history), and chat transcripts. This improves communication, troubleshooting, and support quality. Plans are likely tiered (Professional, Business, Enterprise).

### Integrations: LiveChat Overview

LiveChat is an AI-powered customer service tool that enables real-time communication, allowing businesses to respond to customer needs efficiently. When integrated with Document360, it provides instant support to customers while they browse the knowledge base, enhancing user experience and reducing costs. The document includes a comparison table for Professional, Business, and Enterprise plans, though details are not specified. A screenshot illustrates the integration.

### Integrations: Getting the LiveChat ID

For existing LiveChat customers:

- Access the LiveChat dashboard.
- Click on "Install" and locate the LiveChat ID in the manual installation snippet using the prefix `window.lc.license=`.

For new LiveChat users:

- Copy the LiveChat ID during the initial account setup process.
- Integrate the ID into your Document360 knowledge base for chat functionality, enabling bots to handle common queries.

### Integrations: Getting the Olark ID

To get the Olark ID, log into Olark, go to Settings > Channels > Installation Code, copy the code, find the `olark.identify()` function, copy the 13-digit ID following it. Use this ID for Document360 integration.

### Integrations: Freshchat

Freshchat is a messaging platform for sales & customer engagement, supporting AI-powered chatbots and integration with WhatsApp, Apple Business Chat, Facebook Messenger, and LINE for a unified messaging experience across websites & apps. Key features include a consolidated inbox and AI-powered self-service chatbots to improve efficiency.

### Integrations: Integrating with Olark

To integrate Document360 with Olark, log in to the Document360 Knowledge Base portal, navigate to Settings > Knowledge Base Site > Integrations, select Olark, enter your Olark ID, add a description, and click Add.

### Integrations: Integrating with Freshchat

To integrate Document360 and Freshchat, access Document360's Knowledge Base portal settings, choose "Freshchat" integration, enter a description, paste the Freshchat token (obtained on Freshchat's dashboard under Settings > Admin settings > Configuration and Workflows > Web Chat Settings > Integration Settings), optionally configure code inclusion/exclusion rules, and click "Add." This enables searchable knowledge articles to be available directly within Freshchat for users.

### Integrations: Chatra

Chatra, a real-time chat software, integrates with Document360's knowledge base to provide instant customer support during content navigation. This integration helps reduce operational costs and improve customer satisfaction.

To integrate Crisp with Document360, navigate to Settings > Knowledge base site > Integrations, select Crisp, enter a description and your Crisp website ID, which can be found in Crisp's Settings > Website Settings. Use code inclusion/exclusion conditions if needed, then click Add. This integration allows chatbot functionality with email campaign and mobile app support.

### Integrations: Integrating **Document360** and Chatra\*\**

Integrate Document360 knowledge base with Chatra live chat. Get Chatra ID. Configure integration in Document360 Settings > Knowledge base site > Integrations. Add Chatra ID to Document360. Optional: Use code inclusion/exclusion conditions. Chatra ID retrieval instructions for existing and new users are included. This integration enables real-time user support, targeted chats, and visitor tracking within the Document360 knowledge base.

## Integrations

### Integrations: Crisp and Plan Support

**Plans supporting the integration of third party tools in knowledge base site**

| Professional           | Business                       | Enterprise                           |
|------------------------|--------------------------------|--------------------------------------|
| Zendesk, Slack, Trello | Salesforce, Mailchimp, HubSpot | Jira, Google Analytics, Advanced CRM |

**Crisp** is a centralized shared inbox platform designed to streamline customer interactions. It offers features like cost efficiency through simultaneous conversation handling, predefined answers for common queries, and enhanced communication tools such as images and GIFs to improve customer engagement.

**Key Features:**

- Cost Efficiency: Manage multiple conversations simultaneously.
- Predefined Answers: Automated responses for common customer inquiries.
- Enhanced Communication Tools: Include visuals in messages for better interaction.

This platform integrates third-party tools across Professional, Business, and Enterprise plans, scaling from essential to advanced integrations based on organizational needs.

### Integrations: Gorgias

Gorgias is a multi-channel helpdesk solution integrating with business applications and communication channels, providing support agents a unified customer view. Integrates with Document360 knowledge base for streamlined customer query management.

### Integrations: Integrating with Gorgias

To integrate Document360 and Gorgias, obtain the Gorgias ID from Gorgias, then add it as a new integration in Document360's Knowledge Base portal settings. Optional: Configure conditional code inclusion based on IP address, Workspace, or Language.

### Integrations: Doorbell

Doorbell is a user-friendly chat software for collecting, managing, and analyzing customer feedback, designed to enhance feedback with features like screenshot attachments. It integrates seamlessly with Document360, providing valuable insights to improve customer interactions and conversions.\
![003_Screenshot_Doorbell_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Screenshot_Doorbell_Integration.png)

### Integrations: Integrating with Doorbell

_No summary available for this section._

### Integrations: Getting the Gorgias App ID

For existing Gorgias users, log in, go to **Settings > Channels > Chat**, add a new chat integration, and install manually. For new users, copy the Gorgias ID during LiveChat setup and integrate it with Document360. This allows team collaboration and Ticket management.

### Integrations: Sunshine Conversations

Sunshine Conversations is an API-based CRM tool on AWS for customer communication via social media & messaging. Integration with Document360 knowledge base is possible to streamline customer communication and boost engagement.

### Integrations: Integrating **Document360** and **Belco**

Integrate Document360 knowledge base with Belco platform by obtaining Belco Shop ID via Belco application setup or initial installation. Configure the integration within the Document360 Knowledge base portal, adding a description and Shop ID. Optionally, use code inclusion/exclusion rules, then log in to Belco to manage chats. This links a chatbot interface to Document360's structured knowledge base for e-commerce users.

### Integrations: Belco

Belco is a real-time chat software that integrates with Document360 to offer instant customer support. It allows agents to manage multiple conversations simultaneously, enhancing efficiency and reducing operational costs.

### Integrations: Kommunicate

Kommunicate's integration with Document360 knowledge base provides real-time customer support via chat, powered by AI chatbots, to improve efficiency, reduce operational costs, and enhance customer satisfaction. Integrates AI-powered chatbots for faster query resolution and improves support experience within knowledge base.

### Integrations: Integrating Document360 and Sunshine Conversations

To integrate Sunshine Conversations with Document360, follow these steps: navigate to the Knowledge base portal, go to Settings > Knowledge base site > Integrations, select Sunshine Conversations, add a description, and enter your unique App ID. Optionally, use code inclusion/exclusion conditions. Click Add to complete the integration.

### Integrations: Obtaining the Sunshine Conversations ID

To obtain the Sunshine Conversations ID, follow these key steps: Access the dashboard, create a new app, fill in the details, save the app, navigate to the app's settings, and locate the App ID in the App Details section. Optionally, API keys can be generated in the same settings menu.

## Integrations

### Integrations: Integrating with Kommunicate

To integrate Document360 and Kommunicate, navigate to Document360's Knowledge Base Settings > Integrations, select Kommunicate, add a description, enter your Kommunicate ID (obtained from the Kommunicate app), and optionally configure code inclusion/exclusion conditions based on IP, workspace, or language. Click "Add" to complete.

### Integrations: Google Analytics

Integrate Document360 with Google Analytics via Basic (standard ID) or Custom (snippet) configurations. Basic requires Google Analytics ID; Custom needs a snippet. Optional code inclusion/exclusion conditions based on IP, Workspace, and Language are possible. Document360 Settings -> Integrations -> Google Analytics(New) to get started.

### Integrations: Getting the Google Analytics ID

To get the Google Analytics ID for your Document360 knowledge base, navigate to your Google Analytics account, find the "Tracking ID" in the property settings, and input that ID into the Document360 portal's corresponding field. This integration allows tracking key user metrics like views, location, and behavior.

### Integrations: Getting the Kommunicate App ID

Obtain your **Kommunicate** App ID by navigating to **Settings > Install** in your account (for existing users) or during the installation process (for new users). This ID is crucial for integrating **Kommunicate** with your **Document360** knowledge base portal, enabling efficient customer chat management, lead qualification, and 24/7 support.

**Step-by-Step Explanation:**

1. **Create a Google Analytics Account:**

- Navigate to the Google Analytics website (analytics.google.com) and sign in with your Google account. If you don’t have an account, create one.

2. **Set Up a Property:**

- In the Admin section, select "Create Property." Choose "Website" and fill in the required details about your knowledge base site, such as name, URL, and industry category.

3. **Retrieve the Google Analytics ID:**

- In the Admin section, go to "Property Settings" for your newly created property. The Google Analytics ID (Tracking ID) is listed under "Property." Copy this ID.

4. **Log in to Document360:**

- Access your Document360 account with administrative privileges.

5. **Navigate to Integrations:**

- In the Document360 dashboard, locate the "Integrations" or "Analytics" section. This is typically found under settings or site configuration.

6. **Input the Google Analytics ID:**

- Paste the copied Google Analytics ID into the specified field within Document360's integration settings. Save the changes.

7. **Verify Integration:**

- After implementation, monitor Google Analytics to ensure data is being collected. Check real-time reports to confirm activity from your knowledge base.

8. **Compliance and Privacy:**

- Review your site's privacy policy to include information about Google Analytics tracking. Ensure compliance with data protection regulations applicable to your audience.

By following these steps, you can successfully integrate Google Analytics with your Document360 knowledge base, enabling insights into user behavior and interactions.

### Integrations: Google Analytics (GA4)

Document360 supports GA4 integration through different plans, offering tracking for metrics like conversions, traffic, and user behavior. GA4 uses a Measurement ID starting with 'G-', replacing GA3's 'UA-' Tracking ID, and marks the latest evolution in analytics with enhanced data capabilities.

### Integrations: Getting the GA4 Measurement ID

To get your Google Analytics Measurement ID (G-XXXXXX): Go to Google Analyti cs Admin > Property Settings > Data Streams. Select your stream, click Configure tag settings. Copy the 'G-' ID from the top right of the "Your Google Tag" section. Paste this into your Document360 portal's Google Analytics ID field.

### Integrations: Google Tag Manager

Google Tag Manager is a tag management system for easily updating website/app tags (measurement codes) for better analytics, marketing, and potentially site analytics/remarketing.

### Integrations: Integrating with GA4

Learn how to integrate GA4 with Document360 to track user interactions, popular articles, and locations. Requires a Google Analytics account and ID. Follow steps to enable integration via Settings > Knowledge base site > Integrations. Choose between basic configuration (using Measurement ID) or custom configuration (adding custom events). Optional conditions for code inclusion based on IP, workspace, or language.

### Integrations: Integrating with Google Tag Manager

To integrate Google Tag Manager with Document360's Knowledge Base, select either Basic or Custom configuration. Basic requires a Google Tag Manager ID. Custom allows custom snippet code and conditional code inclusion (by IP, Workspace, Language). Both methods add tracking.

### Integrations: Heap

Heap is a product analytics tool for analyzing user behavior. It provides event feeds and analytical tools (funnels, retention, etc.) to improve product and marketing effectiveness.

### Integrations: Integrating with Heap

To integrate Document360 with Heap, select "Heap" in Document360's Integrations settings. Choose between basic configuration (needs Heap App ID) or custom configuration (allows custom event snippets and conditional code inclusion, e.g., by user IP). Essential information includes providing a description and the Heap App ID for basic integration.

### Integrations: Getting the Google Tag Manager ID

To obtain your Google Tag Manager ID, follow these steps:

- **For Existing Users**: Navigate to the workspace section in your Google Tag Manager account. Here, you'll find the code snippet that contains your ID.
- **For New Users**: During the initial setup, after creating your container, you'll receive a code snippet that includes your Google Tag Manager ID.

This ID is essential for integrating Google Tag Manager into your platform, enabling features like conversion tracking and site analytics.

### Integrations: Segment

Segment is a data platform that simplifies the integration of third-party tools with a knowledge base site, enabling efficient customer data collection, transformation, and analysis. It streamlines data management, allowing teams to spend more time utilizing insights rather than data collection. Key value proposition: enhanced user behavior understanding and competitive advantage from detailed analytics.

### Integrations: Getting the Segment ID

To get your Segment Account SID, navigate to the Segment dashboard, find the "Develop" section on the left toolbar, and copy the Account SID from the "Account info" section. This SID is needed for Segment integration in the Document360 system, enabling better user understanding and knowledge base enhancement.

### Integrations: Getting the Heap App ID

For **existing Heap customers**:

- Navigate to Account > Install in the dashboard.
- Select Web and copy the Heap ID from the provided snippet.

For **new Heap customers**:

- The App ID is provided during the integration setup.
- Access your Heap account post-setup to view the ID and manage user interactions.

**Note**: Heap integration enables advanced analytics, allowing user behavior analysis for product improvements.

### Integrations: Hotjar

Hotjar is a user behavior analytics tool offering heatmaps, session recordings, and surveys to understand user interactions and provide product insights. No specific integration details for a knowledge base are provided.

### Integrations: Integrating with Segment

Integrate Segment with your Document360 knowledge base through Settings > Integrations. Choose between Basic setup (using your Segment ID) for standard tracking or Custom setup (with snippet code) for advanced event tracking. Optional conditions can control code execution. Complete the setup and verify integration functionality.

### Integrations: Integrating with Hotjar

Integrate Hotjar with Document360 to track user behavior via Heatmaps and recordings, enhancing insights into knowledge base interactions.

Steps:

1. Navigate to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **Hotjar** and choose between Basic (using your Hotjar ID) or Custom (with custom event codes) configuration.
3. Enter a Description and Hotjar ID for Basic setup or add custom snippet code for advanced tracking.
4. Optional: Set inclusion/exclusion conditions based on IP, Workspace, or Language.
5. Save the configuration to enable Hotjar tracking on your Document360 portal.

### Integrations: Integrating with Amplitude

To integrate Amplitude with Document360's knowledge base, use either Basic or Custom configuration, providing an Amplitude API key and optional code inclusion/exclusion conditions (IP, Workspace, Language). Basic config is straightforward, while Custom config allows for custom events and advanced integrations. Implementing Session Replay with Autocapture involves adding a specific JavaScript snippet to enable this feature.

### Integrations: Getting the Hotjar ID

To obtain the Hotjar ID, navigate to the Hotjar setup section by clicking "Set up Hotjar" from the left sidebar. Locate the snippet containing the `hjid` variable and copy the ID. This ID is essential for enabling Hotjar's analytics tools like heatmaps and surveys.

### Integrations: Amplitude

Amplitude is a product analytics tool that helps analyze product usage data and user behavior. It offers real-time analytics, flexible user segmentation, and a feature called Microscope. Integration plans for third-party tools in a knowledge base site are organized as follows:

- **Professional Plan**: Integrates with essential third-party tools such as basic analytics tools and SEO optimizers.
- **Business Plan**: Includes a broader range of integrations, such as advanced analytics and customer support software.
- **Enterprise Plan**: Provides extensive integration with custom tools, APIs, and advanced analytics solutions.

### Integrations: Amplitude FAQ

Amplitude is a collaborative analytics platform for product tracking. It provides reports for product optimization and helps track visitors. A knowledge base platform (separate from Amplitude) lets teams manage content and users.

If you're new to Amplitude, sign up and obtain your API key during the initial setup. For existing users, navigate to your project dashboard, go to the General section under Projects to find and copy your API key.

### Integrations: Getting the Amplitude API Key

To obtain an Amplitude API key:

- **New customers**: Register at [Amplitude](https://amplitude.com/amplitour/register) and receive the API key during account setup.
- **Existing customers**: Access the key in the project dashboard under **Projects > General** section.

### Integrations: FullStory

FullStory is a user-experience intelligence tool offering real-time analytics, retention tracking, and unique features like Magic Moments for reviewing user sessions. Integration is available across all tiers: Professional includes basic metrics, Business adds advanced analytics, and Enterprise provides unlimited access to all features.

### Integrations: FullStory FAQ

Integrate FullStory for website analytics & recording. Document360 uses a FullStory ID for this integration, and manages knowledge base content (categories, articles, etc.).

### Integrations: Getting the FullStory ID

For existing users, navigate to the dashboard, click the work name dropdown, select **Settings**, and under **Install your FullStory snippet**, find your FullStory ID using `window['_fs_org']`. For new users, after completing the integration in Document360, access your FullStory account segment to view analytics and track your knowledge base site behavior.

### Integrations: Integrating with FullStory

Integrate FullStory with Document360 by navigating to **Settings** > **Integrations**, selecting FullStory, configuring with basic (description + ID) or custom (snippet code), and optionally setting inclusion/exclusion conditions. Click **Add** to save.

### Integrations: Mixpanel

Mixpanel is an event-based analytics tool integrated with Document360 to track user activity, including conversions from feature pages, sales funnel drop-off rates, and effective referral sites. It focuses on user event tracking for understanding user journey, not general site data.

### Integrations: Integrating with Mixpanel

To integrate Document360 with Mixpanel, navigate to Integrations in the Knowledge Base settings, select Mixpanel, and choose either Basic or Custom configuration. Basic requires adding JavaScript via Document360's Customize site after basic setup. Custom allows adding JavaScript directly within the integration configuration. Both options permit conditional code inclusion based on IP, workspace, or language.

### Integrations: Getting the Mixpanel ID

To get your Mixpanel ID: 1. Log in to your Mixpanel account. 2. Go to Settings > Set up Mixpanel. 3. Copy the Mixpanel ID displayed.

To integrate Mixpanel with Document360, choose between Basic or Custom configuration. Basic requires minimal setup but needs manual JavaScript code addition later. Custom offers advanced tracking with direct code input during setup. Remember, data transmission to Mixpanel only occurs after JavaScript implementation. Tailor your code to specific needs and ensure thorough testing, possibly in a sandbox environment. Technical expertise may be necessary for customization.

### Integrations: VWO

VWO is an all-in-one optimization platform for businesses, enabling feature testing, user intent extraction, push notification management, and product roadmap creation/optimization.

### Integrations: Integrating with VWO

Integrate Document360 knowledge base with VWO for website A/B testing. Obtain VWO Account ID from VWO account (new or existing). Configure Document360 integration with basic or custom settings, potentially adding custom events. Optionally use code inclusion/exclusion based on conditions (IP, workspace, language.) Manage and run website optimization and tests through VWO interface after successful integration.

### Integrations: Mixpanel - Sample Code

These examples provide foundational code snippets for integrating **Mixpanel** tracking into **Document360**, focusing on page view and button click tracking. They require customization for specific use cases, with a **Mixpanel ID** needed for implementation. Integrating **Mixpanel** allows for enhanced event-based analytics to optimize user behavior insights.

### Integrations: Zoho PageSense

Zoho PageSense is a platform for website optimization and personalization. It enables tracking, analysis, optimization, and personalization to boost conversion rates. No pricing or specific features are detailed in the provided document.

### Integrations: Integrating with Zoho PageSense

Integrate Document360 and Zoho PageSense by navigating to Document360's Integrations settings, selecting Zoho PageSense, inputting the Zoho PageSense ID (obtainable from the Zoho PageSense Interface application), and optionally applying code inclusion/exclusion conditions. This unified platform offers complete conversion rate optimization (CRO) solutions by tracking, testing, analyzing, and optimizing product elements (heatmaps, A/B testing, form analytics, session recordings) to boost conversions.

### Integrations: Freshmarketer

Freshmarketer is a cloud-based marketing automation tool offering A/B testing, heatmaps, and funnel analysis to enhance conversion optimization. Its features provide insights into user behavior and identify drop-offs, aiding in improving user experience. The integration with Document360's knowledge base allows seamless access to these analytics, enhancing documentation effectiveness.

To integrate Freshmarketer with Document360, follow these steps:

1. Obtain the Freshmarketer Script Tag Src by logging into your Freshmarketer account. Navigate to Admin settings > Tracking and Integrations > CRM Code Library, and retrieve the script URL.

2. In Document360, go to Settings > Knowledge base site > Integrations, select Freshmarketer, and provide a description along with the script tag.

3. Optionally, set inclusion/exclusion conditions for targeted tracking.

4. Save the integration to enable features like contact management, campaigns, and automated emails.

This integration enhances marketing efforts by leveraging knowledge base analytics for personalized campaigns. Ensure correct permissions and test post-integration for functionality.

### Integrations: Integrating with GoSquared

To integrate GoSquared with Document360, obtain the GoSquared Project Token from your GoSquared account. Add this token to the Document360 Knowledge base portal integrations settings. This enables behavioral data analysis and chat features in GoSquared, using Document360 user data for insights.

### Integrations: GoSquared

GoSquared is a platform that helps businesses turn visitors into loyal customers through an integrated suite of tools. Key features include **Analytics**, **Live Chat**, **Automation**, and **Customer Data Hub**, along with the **Now dashboard** for real-time insights and the **Trend dashboard** for historical insights. [Learn more](https://www.gosquared.com/support/articles/1604607-what-is-gosquared).

### Integrations: Commento

Commento, a modern commenting system, can be integrated into a knowledge base website. It's fast, bloat-free, and visually appealing. Integration details across differing subscription tiers are not yet provided.

### Integrations: Commento FAQ

Why should I integrate GoSquared with Document360?\
Integrating GoSquared allows you to engage with customers via multi-channel messaging, live chat for conversions, and web analytics.

Document360 is a knowledge base platform that enables project members to create and manage content, including categories, articles, and templates. It also supports file management, team account administration, and site settings configuration for branding, domain, and security.

### Integrations: Disqus

Disqus is a multilingual commenting platform for Document360 articles, offering design integration and moderation features. Suitable for Professional, Business, and Enterprise users.

### Integrations: Disqus FAQ

To fix the '_This domain is not registered with Commento_' error on your Knowledge base site, disable the Commento integration by navigating to **Settings > Knowledge base site > Integrations** and turning off the Commento toggle.

To integrate Commento with Document360, choose between two methods:

**Method 1: Direct Integration**

1. Navigate to Document360's Settings > Knowledge base site > Integrations.
2. Under Comments, select Commento and click Add.
3. Enter a description and set inclusion/exclusion conditions if needed.
4. Click Add to complete the setup.
5. Check Commento for analytics and import Disqus comments if applicable.

**Method 2: Custom HTML Integration**

1. In Commento, go to the Staging tab and click Installation Guide.
2. Modify the Universal Snippet's URL to your project's domain.
3. Copy the code, then in Document360, navigate to Settings > Knowledge base site > Integrations.
4. Under Custom HTML, paste the code and select insertion at the end of the body.
5. Click Add to finalize.

Choose Method 1 for simplicity or Method 2 for more customization.

### Integrations: Accessing Extensions

Access extensions in the Knowledge base portal's Settings > Knowledge base portal > Extensions. Filter by category (All extensions, Helpdesk, Team collaboration, Code repositories, Translation & browser). Click "Connect" on the desired extension tile.

**Categories:** Helpdesk (Freshdesk, Zendesk, Intercom, Salesforce), Team collaboration (Slack, Microsoft Teams, Drift, Zapier, Make), Code repositories (GitHub), Translation & browser (Chrome, Crowdin, Phrase).

To integrate Disqus with Document360, navigate to the Integrations section in Document360's settings, add the Disqus integration, and paste the Disqus URL obtained from your Disqus account. This URL is found in the Universal code snippet. After adding, Disqus commenting will be enabled on your Document360 articles, allowing for user interactions and admin moderation.

### Integrations: Freshdesk

Freshdesk integrates with Document360 knowledge base, enabling support agents to access and use articles directly within Freshdesk, improving efficiency. Agents can also create articles in Document360 from within Freshdesk.

### Integrations: Document360 Extensions Overview

Document360 Extensions enhance your Knowledge Base by integrating with third-party platforms, enabling connected workflows. Available across Professional, Business, and Enterprise plans, they allow direct access, management, and sharing of content from other tools, reducing switching between apps and improving team collaboration.

### Integrations: Freshdesk - Features

Freshdesk now seamlessly integrates with Document360, enabling agents to search, share, and even create knowledge base articles directly within Freshdesk. This integration streamlines support workflows by providing relevant information quickly and allowing for knowledge base updates directly from ticket responses.

### Integrations: Freshservice

_No summary available for this section._

### Integrations: Freshservice - Setup

To integrate Document360 & Freshservice, generate a Document360 API token, copy it, access Freshservice, find the Document360 app in the marketplace, paste the token, and click "Install". Repeat for multiple Document360 knowledge bases.

### Integrations: Zendesk

Zendesk integrates with Document360's knowledge base, allowing support agents to access and create articles directly within Zendesk, improving customer support response times and article creation efficiency.

### Integrations: Zendesk - Basic Setup

_No summary available for this section._

### Integrations: Zendesk - Setup Guide

To connect Document360 to Zendesk, first install the app from the Zendesk Marketplace. Then, generate an API token in Document360 and paste it into the Zendesk setup. Enter a title and desired restriction settings (optional). This configures the connection.

### Integrations: Freshservice - Features

- **Search and Share Articles:** Access Document360's knowledge base sidebar from Freshservice tickets to search for articles. Features include auto-suggestions based on ticket titles, +Link to add URLs, and +Content to paste full articles. Automated search recommends articles using the ticket title.

- **Create Articles:** Directly create and publish knowledge base articles from Freshservice. Includes a text editor with formatting options (H2/H3, bold, italic, lists) and insert features (code blocks, hyperlinks, images). Note: New categories cannot be created via Freshservice.

### Integrations: Zendesk - Creating Articles

Create Zendesk knowledge base articles directly from the Document360 app without needing extra team accounts. Click "Create Article," input title and category. Write content in Markdown, and publish. A quick launch feature allows for linking/inserting articles into Zendesk chat replies.

### Integrations: Zendesk - Article Search and Sharing

The Document360 app in Zendesk allows agents to instantly search and share Knowledge Base articles while responding to tickets. The app automatically searches articles based on the ticket title or via a search bar. Agents can preview articles and choose to link them, insert their full content, or open them in a new tab, enhancing efficiency without switching between tabs.

### Integrations: Zendesk - Federated Search

To set up Zendesk Federated Search in Document360, navigate to **Settings** > **Knowledge base portal** > **Extensions** > **Zendesk**, then click **Setup** and configure under **Zendesk federated search**. Provide your Zendesk subdomain, admin email from Zendesk's support addresses, and API token generated from Zendesk API settings. Validate the details, select the workspace and language for syncing, and save the configuration. This allows searching Document360 articles within Zendesk as external sources.

### Integrations: Intercom

Intercom integrates with Document360 to enable real-time customer support by allowing agents to search and share knowledge base articles within Intercom chats. Requires a valid Intercom account and workspace ID.

### Integrations: Zendesk - Uninstallation

To uninstall Document360 from Zendesk, navigate to **Apps and integrations** > **Zendesk Support apps**, locate the Document360 app, hover to access the settings icon, click **Uninstall**, and confirm in the prompt.

### Integrations: Zendesk - FAQ

**Can I push multiple articles from Zendesk to Document360 simultaneously?**

You can transfer articles from Zendesk to Document360, but only one at a time.

### Integrations: Intercom - Article Search and Sharing

To share knowledge base articles with customers in Intercom chat, click the Document360 icon, search for the relevant article, choose the desired article from the list, and send it to the customer. Customers can click on the article assistant to open it in a new tab. Alternatively, send an Article search app assistant for customer-initiated article searches within the chat.

### Integrations: Intercom - Article Creation

Document360 app assistant integrates with Intercom for creating new articles. Users create articles by filling in title, body, and category in the app. This process mirrors the creation of articles in the Document360 portal.

### Integrations: Salesforce

Document360 integration with Salesforce is an add-on feature for Enterprise plans only. This integration allows support agents to access and create knowledge base articles directly within the Salesforce console.

To integrate Intercom with your Document360 Knowledge base portal:

1. Navigate to **Settings > Knowledge base portal > Extensions**, and locate Intercom under the Helpdesk section.
2. Click **Connect** on the Intercom tile to generate an API token.
3. Sign in to Intercom if prompted, then authorize access on the authorization page to allow Document360 to integrate.
4. After redirecting back to Document360, click the **Edit** icon on the Intercom tile.
5. Select the desired workspace and language from the dropdowns to finalize the integration.

To uninstall:

1. In Intercom, go to **Settings > Integrations > App Store > Your installed apps**.
2. Find the Document360 app, then click **Uninstall** to remove the integration.

### Integrations: Salesforce - Setup

To connect Salesforce with Document360:

1. **Create a Salesforce account** via the [signup page](https://www.salesforce.com/in/form/signup/freetrial-sales/), verify your account, and choose a plan.
2. **Install the Document360 app** from the [AppExchange page](https://appexchange.salesforce.com/listingDetail?listingId=a0N4V00000GYmjZUAT&tab=e), selecting your environment (Production/Sandbox) and user access level.
3. **Add a Visualforce page** in Salesforce Developer Console using the provided code snippet to integrate Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Salesforce.png)

### Integrations: Salesforce - Authorization

To connect Document360 to Salesforce, navigate to Settings > Knowledge Base Portal > Extensions > Salesforce. Purchase the Salesforce add-on if needed. Choose live or sandbox environment. Click "Connect" and "Allow" in the authorization window. Confirm connection status in the Salesforce assistant. View configuration details and delete connection if needed. Salesforce is a separate purchase within your Document360 project.

### Integrations: Salesforce - Content Management

Use the **Knowledge Base** tab in Salesforce to search and view articles and categories. Select workspaces and languages via dropdown menus. Search by name, content, tag, or slug, then filter results by name. Clicking an article or category opens it in **Reader View**, where you can copy links, open articles on your site, or copy specific excerpts for reuse. Use the **Copy link** and **Open site** icons for quick access. The **Filter** field helps refine searches, and the category manager aids in organizing content.

### Integrations: Salesforce - Cases Integration

Enterprise Salesforce plan supports integrating Document360 with Cases to provide agents direct access to knowledge base articles, accelerating case resolution. Other plans do not.

### Integrations: Salesforce - Cases Integration Setup

Integrate Document360 into Salesforce Cases by embedding a Visualforce component. Customize the component size in Lightning App Builder to match Document360 page specs. Create and manage knowledge base articles directly within Salesforce, accessible from cases. Articles are initially drafted and require admin/owner approval for publishing on Document360.

### Integrations: Salesforce - Article Recommendations

Document360 automatically recommends relevant articles based on case subject keywords, displayed with title, snippet, copy options, and open in new tab links. Users can customize workspace and language to filter recommendations. Displays up to 5 articles at a time.

### Integrations: Salesforce - FAQs

- The Document360 and Salesforce integration uses REST APIs for data transfer, with authentication via API keys, OAuth tokens, or other secure methods.
- Custom fields in Document360 can be mapped to custom objects in Salesforce for tailored integration.
- Document versioning is handled by tracking changes and updating corresponding Salesforce records accurately.
- Security measures include encryption, secure API authentication, role-based access, and industry compliance.
- Upgrading involves reviewing API changes, testing in staging, and ensuring compatibility before deployment.
- Salesforce can act as an Identity Provider (IdP) with SAML or OpenID for Single Sign-On.

### Integrations: Slack - Commands

Document360 integrates with Slack via `/doc360` commands. Search knowledge base articles by keyword (`/doc360 search query`). Select version/language for search results. Open or link articles directly in Slack. Create articles (`/doc360 create Title`) within Slack using Markdown. Choose version and category. Articles are created in draft form. Cannot create categories from Slack.

### Integrations: Slack

Slack is a cloud-based communication platform enabling team collaboration. Integrating Slack with Document360 allows agents to access the knowledge base directly, search articles, create documentation, and use the Markdown editor for any version or language.

### Integrations: Slack - Setup

To connect Document360 with Slack, navigate to Knowledge base portal settings, select Extensions, find Slack, click Connect, grant workspace access, and confirm the connection.

### Integrations: Slack - Uninstallation

To remove the Document360 app from your Slack workspace, access the Slack App Directory, select Manage, choose Document360, find "Remove application," and click it. Contact support@document360.com if needed.

### Integrations: Microsoft Teams

Integrate **Teams** with **Document360** for seamless article searching and sharing within Teams, eliminating context switching.

### Integrations: Microsoft Teams - Setup

To connect Document360 to Microsoft Teams: 1) Add the Document360 app to Teams. 2) Generate an API key in Document360's knowledge base portal. 3) Add the API key in the Teams app. Access the knowledge base in Teams using `/Document360` command. Uninstall by right-clicking the app.

### Integrations: Microsoft Teams Overview

Microsoft Teams is a collaboration platform that streamlines messaging, document sharing, and team discussions. The Enterprise plan supports MS Teams extensions integration with Document360, while Professional and Business plans do not.

### Integrations: Microsoft Teams - Article Search

Search and share Document360 articles within Microsoft Teams using either the app logo or `/Document360search` command. Select articles from search results and customize share messages before sending to contacts or channels.

### Integrations: Drift

Integrating Drift (conversational messaging) with Document360 (knowledge base) allows support agents to share relevant articles directly within Drift chats, improving response time and streamlining customer support.

### Integrations: Microsoft Teams - FAQs

Microsoft Teams does not have a built-in Knowledge base feature, but you can integrate platforms like Document360 for this purpose. You can share content from your Knowledge base, such as articles, links, or files, directly in Teams chats or posts. Additionally, you can add a Microsoft Teams extension for non-readers using an API token, enabling communication between different software applications.

### Integrations: Zapier - Setup

To integrate Document360 with other apps using Zapier, you need a Zapier account and a connected account in the other app. Zapier automates workflows (Zaps) between the applications. Refer to Zapier's getting started guide for detailed setup instructions.

### Integrations: Drift - Setup

To integrate Drift with Document360, follow these steps:

1. **Obtain JavaScript code**: Sign up for Drift, log in, go to Settings > App Settings > Install, select JavaScript, and copy the script. Existing users can skip steps 1 and 2.

2. **Set up Drift Chat**: Paste the JavaScript code into Document360's Custom CSS & JavaScript section under Knowledge base settings.

3. **Configure knowledge base**: Connect Document360 to Drift via the Extensions section, authorize, and use /doc360 slash commands to search and share articles.

### Integrations: Zapier - Use Cases

Zapier connects Document360 to various applications, enabling workflow automation. Key integrations include Google Docs, Sheets, Drive; Trello, GitHub, Confluence, CRM platforms (Zoho, Pipedrive, Hubspot, Asana, monday.com); Typeform, email (Gmail, Mailchimp), and more, to streamline document management and task/project execution. This allows for automated data transfer, updates, and notifications between Document360 and connected apps using API rules.

### Integrations: Zapier - Google Docs (Trigger)

Automate content flow from Google Docs to Document360 using Zapier. Connect the platforms via Zapier, map relevant Google Docs fields (title, content, etc.) to Document360, and test the connection. Configure trigger events in Google Docs (e.g., new documents) to create new articles in Document360. This saves manual transfer time and effort.

To generate an API key in Document360 for connecting your knowledge base with third-party applications via Zapier, follow these steps:

1. **Access the Project**: Navigate to your desired Document360 project.
2. **Open Settings**: Click on the settings cog.
3. **Select Extensions**: Go to Knowledge base portal > Extensions.
4. **Team Collaboration**: In the Extensions section, select Team collaboration.
5. **Connect Zapier**: Locate the Zapier extension tile and click Connect.
6. **Retrieve API Key**: A popup will appear with a generated Token (API key); use the copy icon to copy it.

This token enables integration with third-party services on Zapier, facilitating automated workflows and data synchronization.

### Integrations: Zapier - Google Docs

Document360 supports integration with Google Docs via Zapier extensions, available exclusively on the Enterprise plan. This integration enables seamless document management, automates workflows, and enhances collaboration by centralizing documents. Organizations can leverage this setup to streamline operations but must ensure appropriate security measures and plan requirements are met.

tag and provide a markdown heading "## Zap overview". 6. Create a concise TLDR that captures the essential information from the document, focusing on the main actions and steps outlined. 7. Close the

### Integrations: Zapier - Google Sheets

Use Zapier to automate syncing Document360 article additions to a Google Sheet. Connect Document360 and Google Sheets via Zapier creating a "Zap" that triggers on new articles, automatically adding details (mapped article attributes) to the specified Google sheet. Requires signing into Zapier, Document360 & Google accounts, selecting trigger/action events and mapping columns. Re-selection required if Google Sheet names change.

To integrate Google Sheets with Document360, you can use Zapier to automate workflows, such as creating a new article in Document360 when a new row is added to a Google Sheet. This feature is supported in Document360's Business and Enterprise plans.

### Integrations: Zapier - Zap Management

To delete a Zap, navigate to the Zapier dashboard, locate the desired Zap, click the arrow, and select "Turn off and delete Zap". This action permanently removes the Zap. Note: Google Sheets setup is required for Zap integration, detailed in separate documentation.

### Integrations: Zapier - Google Drive

Document360 integration with Google Drive enables seamless file access, linking, management, and sharing within the Document360 knowledge base, improving collaboration and documentation workflows.

### Integrations: Zapier - Google Sheets FAQ

**How is a spreadsheet different from a worksheet?**

A spreadsheet is the overall file you create or open in Google Drive, whereas a worksheet is a specific tab within that file where data is entered and managed.

<a id="google-drive-document360"></a>

### Integrations: Zapier - Zap Management

Zapier is a no-code automation tool connecting web apps. View/edit/delete Zaps (automated workflows) on the Zap overview page. To delete, navigate to the Zapier dashboard, click the arrow next to desired Zap, and select "Turn off and delete Zap".

### Integrations: Zapier - Trello

Automate documentation task management by connecting Trello and Document360 using Zapier. This syncs article publishing events from Document360 to Trello cards, including attributes like content, contributor, and publish date. Users configure triggers (Document360 article publishing) and actions (Trello card creation) via Zapier, ensuring consistent updates in both platforms. This streamlined workflow improves efficiency for documentation teams.

### Integrations: Zapier - Google Drive

Automate workflows between Document360 and Google Drive using Zapier. Create a Zap by connecting Document360 as the trigger and Google Drive as the action. Obtain an API token from Document360's Zapier extension, configure the action to upload files to a specific Google Drive folder, and test the integration. Publish the Zap to enable automatic file syncing, saving time and streamlining document management.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit Zaps. To delete a Zap, navigate to the Zapier dashboard, click the Zap actions icon () on the desired Zap, and select Delete.

### Integrations: Zapier - Trello

_No summary available for this section._

### Integrations: Zapier - GitHub

Automate Document360 content creation triggered by GitHub commits using Zapier. Connect GitHub via Zapier trigger, then connect Document360 via API token; map fields (Title, Content, Version, Language, Category, Publish Status) between platforms for seamless synchronization. Test the Zap, then activate it to automate creation of articles in Document360 reflecting GitHub code changes.

### Integrations: Zapier - Zap Management

Zaps automate Document360 article creation from GitHub commits. Delete Zaps via the Zapier dashboard by finding the Zap, selecting "Zap actions", then "Delete". View Zaps from the Zap overview page.

### Integrations: Zapier - Confluence Server

The provided text describes Confluence, a wiki platform, but does _not_ describe any integration with Document360. This integration is missing from the supplied content.

### Integrations: Zapier - Zap Management

Zaps create Document360 articles from Confluence Server pages. To delete, navigate to the Zapier dashboard, locate the Zap, click "Zap actions" -> "Delete."

### Integrations: Zapier and GitHub

_Document360's Enterprise plan supports Zapier extensions, enabling automation between GitHub and Document360. Use Zapier to create workflows (Zaps) that trigger actions in Document360 based on GitHub events like commits or pull requests. Connect repositories through API tokens, automating tasks such as article creation for new features or updates for resolved issues. Ensure security by limiting permissions and monitor the integration for smooth operation._

### Integrations: Zapier - Zoho CRM

Automate knowledge base article creation in Document360 when new leads/contacts are added in Zoho CRM using Zapier. Connect Zoho CRM as the trigger, Document360 as the action, configure API tokens, map fields (version, language, article, publish status), test, and publish the Zap. Results in a new Document360 article corresponding to the Zoho lead/contact.

### Integrations: Zapier - Confluence

Automate content synchronization between Confluence Server and Document360 using Zapier. Create a Zap with **Confluence Server** as the trigger (e.g., "New Page or Blog Post") and **Document360** as the action (e.g., "Create Article"). Connect both platforms to Zapier by authenticating accounts and generating an API token for Document360. Customize the Zap by mapping fields like workspace, language, category, and publish status. Test the integration to ensure seamless article creation in Document360 whenever Confluence is updated, eliminating manual effort.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit existing Zaps. To delete a Zap, navigate to the Zapier dashboard, select the desired Zap, click the arrow icon, and choose "Turn off and delete Zap" to remove it permanently.

### Integrations: Zapier - Pipedrive Plan Support

<table>
<thead>
   <tr>
      <th>Professional</th>
      <th>Business</th>
      <th>Enterprise</th>
   </tr>
</thead>
<tbody>
   <tr>
      <td></td>
      <td>✓</td>
      <td>✓</td>
   </tr>
</tbody>
</table>

Integrate Pipedrive with Document360 using Zapier extensions, available in Business and Enterprise plans, enabling efficient automation of CRM and knowledge base processes.

### Integrations: Zapier - Zoho CRM

To integrate Zoho CRM with Document360 via Zapier, ensure you're on the Enterprise plan. Connect both platforms to Zapier, create a zap with Zoho CRM as the trigger and Document360 as the action, map fields, test, enable, and monitor. This automation enhances data synchronization and customer support efficiency.

### Integrations: Zapier - HubSpot

Integration of HubSpot with Document360 via Zapier extensions is available in tiered plans (Professional, Business, Enterprise). The integration automates workflows, manages marketing efforts, and controls sales processes. More details on functionality and pricing are needed.

### Integrations: Zapier - Pipedrive

Connect **Pipedrive** and **Document360** via **Zapier** to automatically create Knowledge Base articles in **Document360** when new leads/contacts are added in **Pipedrive**. **Authenticate** both platforms in Zapier, **customize field mappings** (Title, Content, Version, Language, Category, Publish), **test** the integration, and **publish** the Zap. This ensures seamless documentation of lead/contact information.

### Integrations: Zapier - HubSpot

Automate support ticket resolution by creating Document360 knowledge base articles based on new HubSpot tickets. Zapier connects platforms, enabling automated workflows when a related article isn't found. Key steps involve connecting HubSpot and Document360 accounts in Zapier, mapping fields (ticket title/description, workspace, language), testing, and activating the Zap. Use Document360 API token for connection.

### Integrations: Zapier - Zap Management

Automatically creates a Document360 article for each new Pipedrive sales deal. Zaps can be managed and deleted from the Zapier dashboard.

### Integrations: Zapier - Asana

Automate adding Asana-created articles to the Document360 Knowledge Base using Zapier. Connect Asana and Document360 accounts, map article fields (title, content), configure trigger/action within Zapier, test, and publish. Key steps include obtaining API tokens, selecting Asana project/workspace, and choosing the Document360 location for the article.

### Integrations: Zapier - Zap Management

- Automatically create **Document360** articles from new **HubSpot** support tickets.
- Manage and edit Zaps via the **Zapier dashboard**.
- Delete Zaps by navigating to the dashboard, clicking the Zap actions icon, and selecting **Delete**.

### Integrations: Zapier and Asana

Integrate Asana with Document360 via Zapier to automate workflows, ensuring documentation efforts align with task management. Check if your Document360 plan supports Zapier, set up Zaps to trigger actions like creating Asana tasks when articles are published, and streamline your workflow for improved efficiency.

### Integrations: Zapier - Zap Management

This Zap creates articles in Document360 from new Asana tasks. Users can manage and delete Zaps through the Zapier dashboard by navigating to the Zap overview page, selecting the desired Zap, and clicking delete.

### Integrations: Zapier - Monday.com

Automate transferring content from Monday.com to Document360 using Zapier. Connect both platforms via API tokens, map necessary fields (title, content, etc.), and test the automated article creation process within Document360. Publish the Zap for continuous content flow. Key tools are Monday.com, Document360, and Zapier.

### Integrations: Zapier - Monday.com

Integrate Monday.com with Document360 via Zapier to streamline workflows, especially for documentation teams. Common use cases include automating document creation or updates when tasks are added or completed. Key benefits: reduced manual work, improved collaboration, and minimized errors. Setup involves defining triggers in Monday.com and actions in Document360 within Zapier. Ensure both platforms support the integration, check for pre-made Zaps, and secure data transfer. This integration enhances productivity by keeping tasks and documentation in sync.

To integrate Typeform with Document360, utilize Zapier as a middleware. Set up a trigger in Typeform that activates when a form is submitted, then connect it to an action in Document360, such as creating or updating an article. This automation streamlines feedback collection and updates your knowledge base efficiently, reducing manual data entry. Ensure your Document360 plan supports Zapier for this integration.

### Integrations: Zapier - Typeform

Use Zapier to automate transferring Typeform responses to Document360. Connect accounts, map Typeform fields to Document360 article attributes, generate API token, test, then publish the Zap. This streamlines knowledge base updates.

Based on the user's thought process, here's a step-by-step explanation of how to create the Zap:

1. **Log into Zapier**: Access your Zapier account and navigate to the dashboard.

2. **Create a New Zap**: Click on the "Create Zap" button to start the process.

3. **Set Up Trigger**:

- Choose "Monday.com" as the trigger app.
- Select "New Item" as the trigger event.
- Connect your Monday.com account if not already connected.
- Configure the trigger by selecting the specific board and view you want to monitor.

4. **Set Up Action**:

- Choose "Document360" as the action app.
- Select "Create Article" as the action event.
- Connect your Document360 account if not already connected.
- Map the fields from the Monday.com item to the Document360 article. This includes specifying where the article should be created, such as the category or folder.

5. **Test the Zap**:

- Zapier will test the Zap by sending a test article to Document360 based on a recent Monday.com item.
- Verify that the test was successful.

6. **Publish the Zap**: Once everything works as expected, publish the Zap to activate it.

For deleting a Zap:

1. **Access the Zapier Dashboard**: Go to your Zapier dashboard where all active Zaps are listed.

2. **Locate the Zap**: Find the Zap you wish to delete. You can use the search bar if needed.

3. **Delete the Zap**:

- Click on the three dots or the arrow next to the Zap name.
- Select "Turn off and delete" from the dropdown menu.
- Confirm the deletion to proceed.

The Zap will be turned off and removed from your Zapier account, stopping any further automation based on that Zap.

### Integrations: Zapier - Gmail (Notification)

Automatically notify stakeholders of new Document360 articles via Gmail. Use Zapier to connect Document360 & Gmail, configuring email settings (recipients, subject, body). Follow detailed steps for Document360 & Gmail connection, trigger setup (new article creation), action setup (email sending), and Zap testing/publishing. Customize email contents & attachments for each notification.

### Integrations: Zapier - Zap Management

Automatically create Document360 articles from new Typeform entries using Zapier. Manage Zaps via the Zapier dashboard, where you can view, edit, or delete them by clicking the Zap actions icon and selecting delete.

### Integrations: Zapier - Gmail

Document360 supports integration with Gmail via Zapier extensions, though specific plan details (Professional, Business, Enterprise) are not provided. Gmail's features, such as its powerful search, spam filtering, and integration with Google services, make it a versatile tool for communication and collaboration.

### Integrations: Zapier - Zap Management

The Zap overview page allows users to view and edit their created Zaps. To delete a Zap, users navigate to the Zapier dashboard, click the Zap actions icon, and select Delete. A screenshot illustrates the process, though it may not load.

### Integrations: Zapier - Mailchimp

Integrate Document360 knowledge base with Mailchimp marketing campaigns using Zapier for automatic updates. Configure trigger (Document360 updates) and action (Mailchimp campaigns). Map audience, subject, and email content fields. Generate a Document360 API token for authentication. Test and publish Zap for automated communication of new/updated content to Mailchimp subscribers.

### Integrations: Make - Setup

To integrate Make with Document360, you need a Make account and an account in the other app you want to connect. Make acts as an automation platform to create workflows (Scenarios) between the two.

### Integrations: Zapier - Mailchimp

Mailchimp is a robust email marketing platform that enables organizations to manage contact lists, track interactions, and gain audience insights. Document360 supports integration with Mailchimp via Zapier across Professional, Business, and Enterprise plans. This integration allows automation of tasks like syncing new users or sending notifications for new articles, enhancing marketing efficiency and documentation processes.

### Integrations: Make - Use Cases

Document360 integrates with popular tools like Asana, Monday.com, Typeform, Google Docs, and Jira using APIs. These integrations allow for seamless document management and workflow automation across different platforms. The integrations enable connecting document creation/management activities within Document360 with tasks, projects, and other workflows in the integrated applications. Essentially, this enables users to manage documents within a centralized platform (Document360), maintain a consistent record, and link related actions to it in other tools.

### Integrations: Zapier - Zap Management

Create Mailchimp campaigns from new Document360 articles. View and edit Zaps on the overview page. Delete Zaps via Zapier dashboard by clicking the actions menu and selecting delete.

### Integrations: Make - Asana

Asana integration with Document360 will streamline project management, task tracking, and collaboration among documentation teams across different project plans (Professional, Business, Enterprise). Asana provides a centralized platform for organizing work, tracking progress, and ensuring accountability in documentation projects.

## API Management

### API Management: Generating API Keys

Generate an API key by navigating to your Document360 project's **Team collaboration** under **Settings > Knowledge base portal > Extensions**. Click **Connect** on the Make extension tile to obtain a Token, which connects Document360 to third-party apps on Make. Copy and secure the Token for integration.

## Integrations

### Integrations: Make - Monday.com

Document360 plans integration with Monday.com via Make extensions to streamline content creation and collaboration for teams using Monday.com's organization and tracking features. No specific details on plans or implementation are provided.

### Integrations: Make - Typeform

The provided text describes Typeform's capabilities but doesn't explain how it integrates with Document360 or what the function of that integration is. Insufficient details for a meaningful TLDR.

### Integrations: Make - Typeform

Automate Document360 article creation triggered by new Typeform submissions. Configure a Make scenario, connecting Typeform (specifying form ID, and desired fields) and Document360 (API key). Map Typeform response fields to Document360 article title and content. Test and schedule the scenario for automated data flow.

To integrate Asana with Document360 via Make, follow these organized steps for a seamless experience:

1. **Log into Make**: Start by accessing your Make account to begin setting up the integration.

2. **Create a New Scenario**:

- Click on "Create a new scenario" in the Make dashboard.
- Add a module by selecting Asana, choosing the task you wish to monitor (e.g., "Watch Tasks or subtasks").
- Connect your Asana account by following the prompts to allow access and save the connection.

3. **Configure Asana Connection**:

- Select the Asana connection in your scenario.
- Set up filters (e.g., project, workspace) and specify the project ID to monitor.
- Define date parameters for completed and modified tasks, and set a limit on the number of tasks retrieved.

4. **Add Document360 Module**:

- Add another module in Make and select Document360.
- Choose the action (e.g., "Create an article") and set up a connection using an API token from Document360:
- Generate the token in Document360 under Settings > Extensions > Team Collaboration > Make.
- Use this token to create a new connection in Make.

5. **Map Asana Data to Document360**:

- Define how Asana task data maps to Document360 articles, setting the title (e.g., Task Name) and content (e.g., Assignee, Due Date, Description).
- Select the project category where new articles will be created.

6. **Test the Scenario**:

- Run a test by creating a new task in Asana and verify that an article is generated in Document360.
- Review test details and logs in Make to ensure everything works correctly.

7. **Schedule and Activate**:

- Enable the scenario to run automatically every 15 minutes.
- Activate the scenario to start the automation.

By following these steps, you'll have successfully integrated Asana with Document360, automating the creation of articles based on task updates.

### Integrations: Integrating Monday.com with **Document360**

Quickly connect Monday.com with Document360 using Make (Integromat). Set up a scenario in Make, authenticate both platforms with their respective API tokens (obtained from Monday.com’s profile and Document360’s Make extension), link the modules to trigger actions, and test the integration. Schedule and activate the workflow to automate tasks between the two platforms seamlessly.

The integration of Google Docs with Document360 is planned across different tiers, with details pending for Professional, Business, and Enterprise plans. This feature aims to enhance document management by allowing seamless access and embedding of Google Docs within Document360, streamlining workflows for users. Once plan specifics are available, they will be detailed here.

## Integrations

### Integrations: Zapier - Google Docs

Integrate Google Docs with Document360 using Make. Create a Make scenario to monitor Google Docs (e.g., new documents created in a specific folder) and trigger a Document360 action (e.g., create an article) for each new document. Configure criteria like document folder, execution frequency, and API tokens within Make. Test and schedule the integration for automated workflow.

### Integrations: Make - Jira

Plans exist for integrating Atlassian Jira's service desk functionalities with Document360 across different subscription tiers (Professional, Business, and Enterprise). Current details regarding the specifics of this integration are not provided.

### Integrations: Make - Jira

Integrate Jira with Document360 using Make by creating a scenario, connecting both platforms via APIs. Map Jira task fields to Document360 article attributes. Configure triggers for new Jira tasks to create Document360 articles. Schedule the integration for continuous operation and test thoroughly. Requires Make account, Jira API token, and Document360 API key.

### Integrations: Chrome Extension - Features

Document360 Chrome extension provides easy launch and customizable positioning of the assistant. A quick launch label offers easy access. The "Page Help" tab allows searching and viewing knowledge base articles in the reader view (copy, open, expand options). The "Knowledge base" tab provides a complete tree-view access to integrated articles, permitting browsing and viewing in reader view.

### Integrations: Chrome Extension - Uninstallation

Remove Document360 from Chrome by either: 1) Visiting the Chrome Web Store Document360 page and clicking "Remove from Chrome", or 2) Right-clicking the Document360 icon in Chrome, selecting "Remove from Chrome", and confirming the removal.

### Integrations: Chrome Extension

The Document360 Chrome extension, available in the Chrome Web Store, enables users to access and search knowledge base articles and categories via an API key. Integration plans for Professional, Business, and Enterprise tiers are listed but details are pending.

### Integrations: Crowdin

Crowdin's localization platform integrates with Document360. Professional plans don't support the extension, Business plans require an add-on, and Enterprise plans include it. A Crowdin account is needed.

### Integrations: Chrome Extension - Setup

To set up the Document360 Chrome extension:

1. **Install the extension:**

- Open Chrome.
- Visit the Chrome Web Store.
- Search for Document360, click to open its page.
- Click "Add to Chrome" and confirm by clicking "Add extension" in the pop-up.

2. **Manage extensions:**

- Navigate to More (> ) > Extensions > Manage Extensions.
- Note: Requires a Google account; guest users cannot add extensions.
- For Incognito access, go to Manage Extensions and enable "Allow in Incognito."

3. **Configure API key:**

- Click the Document360 icon in Chrome's top right.
- In the side window, enter your API key.
- To get the API key:
- Log in to your Document360 portal.
- Go to Settings > Knowledge Base Portal > Extensions.
- Select the Chrome extension and click Details.
- Copy the Internal Integration Token.
- Paste the token into the extension window and click Save.

### Integrations: Chrome Extension - FAQ

The Document360 Google Chrome extension allows users to access articles and page categories from their knowledge base, featuring search, article viewing, and navigation. API stands for Application Programming Interface, enabling software communication. \[Crowdin] is linked for potential translation or collaboration.

### Integrations: Crowdin - Pushing Updates

Users can now directly push content updates from Document360 to their connected Crowdin project. This eliminates the need to switch platforms and ensures the latest changes are automatically synchronized. Features include timestamps for translation actions, viewing translation progress on Crowdin, and team collaboration opportunities for edits/reviews. Only synced categories/articles are eligible for "Push to Crowdin."

### Integrations: Phrase

Phrase extension for Document360 is an enterprise-only feature, enabling multilingual content translation for high accuracy, speed, and scalability, potentially leading to resource savings and increased customer engagement.

### Integrations: Crowdin - Setup

Create a Crowdin enterprise project with matching name, source language, and target languages. Generate a Document360 API token and integrate it with Crowdin. Obtain a Crowdin API token and configure it in Document360. Sync categories and articles, ensuring project names match for seamless translation. Machine translations are enabled by default but can be customized.

## Localization

### Localization: Language Configuration

Configure default language and script direction (LTR/RTL) for translated knowledge base articles. Navigate to workspace settings, choose a language, set default, toggle script direction (LTR/RTL), and save changes.

## Integrations

### Integrations: Phrase - Configuration

Configure translation for knowledge base articles by navigating to Knowledge Base portal > Extensions > Phrase > Details. Select workspace, translation languages, and articles. Click "Translate". Monitor status ("Yet to initiate", "Translated", "Failed", "In Progress") via refresh and filtering. Translated articles move to Advanced WYSIWYG editor and are unrecoverable. Supports single/multiple workspace selection.

### Integrations: Phrase - Setup

Navigate to Settings > Knowledge base portal > Extensions, connect to Phrase, create a new configuration with your API token, select workspaces, and click Create. Use Resync to update translations if language changes occur.

### Integrations: Crowdin - FAQ

Document360 subscriptions do not include Crowdin translation services, but integration is possible. API, defined as a set of communication rules between software applications, plays a role in such integrations.

## Localization

### Localization: Language Configuration FAQs

Translation options are limited to those supported by the specific project.

## Settings

### Settings: Project Settings

Document360's "Project settings" page lets you customize your knowledge base portal by configuring project details, editor preferences, file formats, and analytics rules. The settings are broadly applicable across different user roles.

### Settings: Accessing Project Settings

Access project settings by navigating to Settings > Knowledge base portal > General. Configure project name, country, and editor preferences (Markdown, WYSIWYG). Enable/disable "Remember state" to retain UI state. Customize review reminders, drive settings (media format restrictions), analytics settings (IP exclusions), and support access. Save changes.

## Integrations

### Integrations: Phrase - Previewing

- Navigate to Documentation and set the workspace language to match the translated content.
- Preview unpublished articles using the preview option.
- View published articles in the knowledge base.
- Note: Requires a Phrase subscription for the translation service extension.

## Auditing

### Auditing: Accessing Team Audit Logs

Access team audit logs in the Knowledge Base portal's Settings > Knowledge base portal > Team auditing. Filter by event, date, or user. Refresh for updates. Export as CSV to download. Only 20 records display at a time.

## Localization

### Localization: Getting Started

Document360 supports localization across all plans, allowing users to translate knowledge base content to multiple languages (add-ons available). Content, visuals, and cultural nuances (e.g., units, dates) are customizable. Manual or machine translation is permissible, followed by human review for accuracy. Prioritize localization languages based on customer demographics. Document360 recommends using a single multilingual workspace, leveraging its security and access features, and employing style guides/glossaries for consistency. Update content regularly and track key metrics (user engagement, support tickets, customer satisfaction) to measure success. Machine translation can be a starting point, but human review is crucial. Consider the use of third-party integration tools like Crowdin.

## Auditing

### Auditing: Team Auditing

The **Team auditing** feature allows you to track actions performed by team accounts, such as adding or updating articles and changing settings. It provides accountability by logging who performed each action and when, useful for tracing activities like restoring deleted articles or reviewing changes during a product release. The **Audit configuration** allows selective monitoring of key actions. Access is restricted to Owners, Admins, and users with custom roles.

## Localization

### Localization: Multilingual Setup

Document360 supports multi-lingual knowledge bases, allowing for either a single project with multiple languages or separate language-specific knowledge bases.

## Auditing

### Auditing: Configuring Audit Settings

To configure the audit settings in Document360, navigate to **Settings > Knowledge base portal > Team auditing**. Enable the **All events** toggle to monitor all project-related activities or select specific event categories from modules like Documentation editor, Drive, Knowledge base portal settings, site settings, widget settings, Users & security, and Tools settings. Each module tracks various actions such as article updates, folder changes, site design modifications, user management, and more. Audit data updates in real-time and can be filtered by user, event, or date range. Access to audit data can be restricted based on roles, and while auditing doesn't recover deleted content, it provides detailed activity logs.

## Localization

### Localization: Adding Languages to a Version

To add languages to a single knowledge base version, use either of two methods: Method 1 edits an existing workspace, allowing for language selection, default settings, name changes, and more. Method 2 adds entirely new workspaces for the desired languages, starting with an initial machine translation that must be manually translated. Key info is using settings to add, set defaults, edit display names, swap right/left writing direction, hide and delete (but cannot delete or hide default language). Both require manual translation effort.

### Localization: Language Support FAQs

**Document360 TLDR:** Document360 is a knowledge base platform supporting 49 languages (5/3/2 based on plan). Content isn't auto-translated between languages; bulk translation is needed via the "All articles" section. It has three components: a content management system, an online library where users can find answers, and a public-facing website.

### Localization: Supported Languages

Document360 supports 48 languages for localization, including major languages like English, Spanish, French, Chinese, Japanese, and Korean, as well as regional variants such as English (US), English (UK), Chinese (Simplified), and Portuguese (Brazil).

## Content Organization

### Content Organization: Workspaces

Document360 projects are central knowledge hubs. Workspaces, created within projects (with plan-limits), are specialized areas for organizing documentation by audience (e.g., internal users, external customers) or product lines. They improve content organization and management efficiency.

## Localization

### Localization: Customizing Localization Variables

Localization variables enable tailored text across a Knowledge Base portal, ensuring language-specific experiences. Access via Settings > Knowledge Base Portal > Localization & Workspaces > Localization Variables. Edit by selecting a language, updating variables in accordion sections (e.g., Eddy AI, Accessibility), and saving changes. Key details: updates may take up to 15 minutes due to caching, and each language requires manual updates. Examples include customizing "Search" or "In this article" labels.

## Content Organization

### Content Organization: Understanding Workspaces

Document360 Workspaces enable organizations to create and manage multiple distinct knowledge bases within a single project, catering to diverse audiences or documentation needs. This feature helps organize content tailored to specific users or product areas, ensuring documentation remains organized, accessible, and relevant, regardless of complexity.

### Content Organization: Workspace Benefits

Workspaces enhance productivity by ensuring relevant information is accessible to specific audiences, improving content organization, and facilitating team collaboration through structured areas for peer reviews and feedback.

### Content Organization: Getting Started with Workspaces

Document360 automatically creates a default workspace ("v1") upon project creation. Using multiple workspaces streamlines documentation, targeting information for specific users (internal teams and customers), and improves access to relevant content.

### Content Organization: Workspace Use Cases

- **Product-specific documentation:** Organize knowledge bases for multiple SaaS products within a single project, using separate workspaces to maintain clear boundaries for each product.
- **Audience-specific documentation:** Create dedicated workspaces for different user roles (e.g., developers, end-users, administrators) to provide relevant content and avoid confusion.
- **Internal and external knowledge bases:** Separate workspaces for internal (e.g., support teams) and external (e.g., customers) documentation, enabling access control and clear content separation.

### Content Organization: Troubleshooting Workspace Issues

404 errors navigating secondary workspaces often stem from the workspace being private, lacking published articles, or hidden articles. Ensure the workspace is public, at least one article is published, and visible within the knowledge base. Workspace status directly impacts visibility and the availability of 'Main workspace' options. The document also covers workspace management, recovery, and display options. Subscription tiers (Free, Professional, Business, Enterprise) affect the quantity of available workspaces and associated features (e.g., backup/restore).

## Billing

### Billing: Purchasing Additional Workspaces

To purchase additional workspaces:

1. Navigate to **Settings** > **Knowledge base portal** > **Localization & Workspaces** > **Localization & Workspaces**.
2. Click the **buy more** link (available only to users with the Owner role).
3. Adjust the number of workspaces in the **Purchase add-on** window and review the **Amount due**.
4. Confirm payment and await confirmation; workspaces will be added upon successful payment.
5. Download your invoice after payment.

Additional workspaces can also be purchased through the Billing section in Document360 settings.

## Data Management

### Data Management: Backup and Restore

Document360 automatically backs up projects daily at 00:00 UTC. Manual backups are also possible. You can restore documentation, API docs, homepage builder, custom CSS & JavaScript to a previous state. Lost/altered content can be recovered from the latest backup.

### Data Management: Restoring from Backup

To restore from a backup, navigate to Settings > Knowledge Base Portal > Backup & Restore. Select the desired backup and the elements (documentation, API, Homepage, CSS, JS) you want to restore. Compare Custom CSS/JS versions before restoring. Click "Restore," confirm, and wait for the "Backup restored" message.

## Content Organization

### Content Organization: Adding New Workspaces

To create a new workspace, navigate to **Settings > Knowledge base portal > Localization & Workspaces > Localization & Workspaces**, then click **Add workspace**. Choose the workspace type, enter a name (max 30 alphanumeric/hyphen characters), and customize the URL. Select a status: Main (default, public), beta, public, or deprecated. Option to create a new workspace or copy existing content, including specific categories and link handling. Configure languages with options for default, display name, right-to-left scripts, and visibility. Finish by clicking **Add**.

## Data Management

### Data Management: Creating Manual Backups

To create a manual backup, go to **Settings** > **Knowledge base portal** > **Backup and Restore**, click **New backup**, enter a backup name, and click **Backup**. The backup will be added to the backup log once complete.

![Creating a manual backup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_manual_backup.gif)

### Data Management: Restore Options

Restore various knowledge base components (docs, API, homepage, custom CSS/JS) from backups. Select specific elements to restore or everything. Preview before restoring. Backups are automatic daily (00:00 UTC), retain for 90 days, and cannot be manually deleted. Compare and copy code snippets for custom CSS/JS.

## Notifications

### Notifications: Webhook Notifications

Document360's webhook feature enables real-time notifications (e.g., to Slack) about knowledge base updates (article changes). This automates information sharing between applications.

### Notifications: Configuring Notification Channels

Configure notification channels in Document360's Knowledge base portal (Settings > Knowledge base portal > Notifications > Notification channels). Available channels include webhook, Slack, Microsoft Teams, and SMTP (email). An SMTP channel is pre-configured and cannot be deleted but its configuration is customizable. Edit, delete, or add new channels.

### Notifications: Slack Notifications

Document360 allows configuring Slack notifications for new articles and updates to knowledge base documents. This feature enables real-time updates for support teams within Slack. Functionality is likely available across all subscription plans.

### Notifications: Overview

Document360 offers notification setup for project changes through channels like email, Slack, Teams, and webhooks. All plans (Professional, Business, Enterprise) support notification settings, enabling real-time updates for users like project managers to stay informed about team modifications.

### Notifications: Setting Up Slack Notifications

To receive Document360 notifications in Slack, create a Slack app, activate incoming webhooks, copy the generated webhook URL, configure the channel in Document360's settings (specifying a "Friendly name" and the copied webhook), and optionally map specific notifications to the Slack channel in the Notification Mapping.

### Notifications: Microsoft Teams Notifications

Document360 users can receive real-time notifications about knowledge base updates (article publications/updates) within their Microsoft Teams channels. This feature is available across different subscription tiers.

### Notifications: Setting Up Webhook Notifications

To set up a Webhook channel in Document360, navigate to Settings > Notifications, select Webhook, configure with a friendly name, choose request method (POST/PUT), specify the URL, format, headers, and authorization if needed, then save and map notifications.

### Notifications: SMTP Notifications

Document360 allows configuration of SMTP to send email notifications about knowledge base updates (article changes) from the portal, site, and widget. This ensures team members are instantly alerted to updates.

### Notifications: Setting Up SMTP Notifications

Configure an SMTP notification channel for your knowledge base portal by navigating to Settings > Knowledge base portal > Notifications > New channel > SMTP. Input a descriptive name, recipient emails (separated by semicolons), and save. Then, map events to trigger email notifications.

### Notifications: Notification Mapping

Document360's notification mapping allows users to configure alerts for updates (documentation, security, analytics) across different user roles (Professional, Business, Enterprise). This facilitates automated updates without manual checking. The table, however, is empty, so there's no specific mapping to summarize.

### Notifications: Mapping Channels to Events

Configure notifications in the knowledge base portal by enabling events (all or specific modules/events), then mapping those events to desired channels (e.g., email). All events are initially off. Specific events like "Analytics weekly mail" can be enabled per module. Each enabled event requires at least one assigned notification channel.

### Notifications: Notification History

Document360's notification history tracks delivery statuses of alerts (e.g., system updates, errors) sent to configured channels (like Slack). This allows teams to monitor delivery, troubleshoot failures, and ensure critical updates are received.

### Notifications: Setting Up Teams Notifications

Setup involves three main steps: creating a Teams channel, obtaining a webhook URL, and configuring it in Document360. For each step:

1. **Create a Teams Channel**: Open Teams, navigate to the desired team, add a new channel named (e.g., "Document360 Notifications").
2. **Get Webhook URL**: In the new channel, manage settings, add an incoming webhook, generate and copy the URL.
3. **Configure in Document360**: Navigate to Notification channels, add a new channel, select Teams, enter a friendly name, paste the webhook URL, and save.

Test the setup by triggering a notification and check the channel for receipt. Use Notification Mapping to customize which events trigger alerts. For multiple channels, repeat the process with different webhooks and map accordingly.

### Notifications: Custom Email Domains

Enterprise users can configure custom email domains for notifications in Document360. Requires configuring MX and TXT records on your DNS provider. Follow steps to add domain, obtain records from Document360, add records to DNS, verify the configuration, and specify the "From" email address and sender name. Verification and troubleshooting are addressed.

### Notifications: Notification Event Types

The document describes notification events across multiple modules, including Documentation editor (e.g., article updates, visibility changes, workflow status), Drive (e.g., folder and file modifications), Knowledge base portal settings (e.g., workspace updates, tag changes), Knowledge site (e.g., feedback and user interaction alerts), AI notifications (e.g., credit usage alerts), Analytics (e.g., weekly metrics), and comments (e.g., inline comment notifications). These events enable users to stay informed about changes and activities within their knowledge base ecosystem.

## API Integration

### API Integration: Postman Integration

Import the Document360 API into Postman using `https://apihub.document360.io/swagger/v2/swagger.json`. Authenticate using a Document360 API token, obtained from Settings > Knowledge Base portal > API tokens. Create a Postman environment variable (`base_URL`) with the API hub URL (`https://apihub.document360.io`). This allows accessing Document360 API endpoints via Postman. Re-authentication might be needed if the Postman session ends.

## Notifications

### Notifications: Managing Notification History

Access notification history by navigating to **Settings > Knowledge base portal > Notification** and selecting the **Notification history** tab. The history provides details for each notification, including channel name, delivery status, submission date, sent date, and event details. Use the **View details** option to review the content sent to users. This feature allows tracking and verification of notification delivery.

## API Integration

### API Integration: Swagger Documentation

Authenticate with API token. Use `GET` to retrieve, `POST` to add, `PUT` to update, and `DELETE` to remove items. Required fields use underscores (e.g., `email_id`). Proper formatting and usage of the specified API methods are crucial. Authentication is required to use the API. Refresh may end session, requiring re-authentication.

## Search

### Search: Full Portal Search

Full portal search allows users to simultaneously search across all project content, files, tags, users, content tools, and settings across all workspaces and languages.

## API Integration

### API Integration: Using Postman

Postman is an API platform that allows users to build and use APIs. It can be easily integrated with a Document360 project, offering both on-premises and web-based access. For guidance, refer to the following resources:

- [Download Postman](https://www.postman.com/downloads/)
- [Install and Update Postman](https://learning.postman.com/docs/getting-started/installation-and-updates/)
- [Postman Documentation](https://learning.postman.com/docs/)
- [Postman FAQs](https://www.google.com/search?q=FAQs+in+Postman%3F&rlz=1C1CHBD_enIN1119IN1119&oq=FAQs+in+Postman%3F&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgoIARAAGIAEGKIE0gEHNjI5ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8)

### API Integration: Using Swagger

Swagger is a tool that creates interactive API documentation. Here's a concise guide:

1. **Definition**: Define your API using Swagger's JSON/YAML specification, detailing endpoints, methods, and parameters.
2. **Documentation**: Use Swagger UI to generate a web interface where users can explore and test API calls.
3. **Interaction**: Users can send requests and view responses directly in the interface, aiding development and testing.
4. **Integration**: Automatically updates with API changes, ensuring documentation stays current.

Swagger simplifies API understanding and testing through visual, real-time interaction.

## Search

### Search: Article Search

A tool allows searching all project articles and categories across all workspaces and languages.

### Search: Accessing Articles via Search

To find articles, click the search icon, select "Articles" in the dropdown menu. Type keywords; results show article title, workspace, language, status. Use filters to refine. Preview results by clicking and use the full-screen option to expand. Click "Go to article" to access the full document.

### Search: Article Search Filters

TLDR; Search filters for articles allow users to refine results by workspace/language, visibility (None, Visible, Hidden), status (None, New, Draft, Published), contributors (search by username), tags (multi-select), and updated date (7 days, 30 days, 3 months, 1 year, or custom). Filters can be cleared.

### Search: Accessing Full Portal Search

- Access the search by clicking the icon on the top navigation bar.
- Use the dropdown to select a module: All, Article, Drive file, Users & Groups, Tags, or Settings.
- Enter keywords; each module displays up to five results.
- Expand results by clicking "More articles."
- Apply filters or preview items as needed.
- Navigate using "Go to article."
- Press Escape to exit.

### Search: Drive File Search

The Drive - Full portal search feature enables searching through all files in the Drive on a project. The table listing support across Professional, Business, and Enterprise plans is incomplete.

### Search: Accessing Drive Search

Search the entire drive by clicking the search icon, selecting "Drive" from the dropdown, and typing keywords. Results show file name, dependencies, update details, size, and tags. Filter by status (all, deleted, starred), file type (image, word, etc.), uploaded by, tags, upload date, or custom date range. Click on a file to see details (location, type, upload info). View dependencies to see where the file is used in articles/categories.

### Search: Accessing Users and Groups Search

To find users and groups, use the search icon, select "Users & Groups," and type a keyword. This returns results categorized as "Team accounts & groups" (view permissions, manage permissions, see associated members) or "Readers & groups" (view readers, manage associated readers). Clicking on an entry provides detailed information and further actions. This feature allows for searching team accounts, groups, readers, and reader groups within the portal.

### Search: Tag Search

The "Tags - Full portal search" page enables knowledge base tag searching and viewing, including dependency information. Different user roles (Professional, Business, Enterprise) may have varying access or search options.

### Search: User and Group Search Filters

The Users and Groups module offers two key filters:

1. **Type**: Options include All entity, Team account, Team account groups, Reader, and Reader Groups (default: All entity).
2. **Last logged in**: Options are All, 7 days, 30 days, 3 months, 1 year, or Custom date (default: All).

After selecting filter criteria, click **Apply** to apply them or **Clear** to reset.

### Search: Users and Groups Search Overview

The **Users & Groups - Full portal search** feature enables searching for team accounts, team account groups, readers, and reader groups in a knowledge base project. The support status for Professional, Business, and Enterprise plans is not specified.

### Search: Settings Search

A dedicated search page exists within the knowledge base portal to find features and settings. No details on the search functionality or supported plans are provided.

### Search: Accessing Settings Search

To access settings, click the Search icon, select "Settings" from the dropdown, search for the desired setting by keyword, and click on it to view/modify the settings page. Settings are grouped by Knowledge base portal, Knowledge base site, and Users & Security. Search results display setting names, icons, and short descriptions.

## Site Configuration

### Site Configuration: Custom Domain Mapping

Document360 allows users to customize their knowledge base website address from the default `project-name.document360.com` to a custom domain (e.g., `help.yourcompany.com`). This improves branding and user experience. Access via Settings > Knowledge base site > Custom domain. New projects use the project name as the default domain.

## Search

### Search: Accessing Tag Search

- Click the Search icon () on the top right, press Escape to close.
- Select "Tags" from the dropdown, type your keyword to see results.
- Results show tag name and dependencies (articles, categories, files).
- Click a tag to view detailed dependency info:
- For articles/categories: name, version, language, contributor, status, publish date.
- For files: thumbnail and filename.
- Download files or remove dependencies by selecting checkboxes and clicking "Remove dependencies."
- Cancel to close the panel.

## Site Configuration

### Site Configuration: Setting Up Custom Domains

To use your own domain with Document360, add the domain in Document360's settings, create a CNAME record in your domain registrar pointing to Document360's provided value, verify this setup in Document360. If you get a "Deceptive site ahead" warning, check Google's Safe Browsing site status and address reported issues. Various domain registrar instructions are included.

### Site Configuration: Custom Domains for Apex Domains

To use your root domain (Apex) with Document360, ensure your domain registrar supports DNS flattening (some don't, like GoDaddy). If not, use a DNS provider like Cloudflare. Document360 provides a custom SSL certificate, which needs to be renewed within 90 days to continue using the custom domain properly. Important details like the Common Name (CN) are needed for the certificate.

### Site Configuration: Editing Default Domains

To edit the default web address:

1. Go to the **Custom domain** page in Document360 settings.
2. Click the **Edit** icon next to the default domain.
3. Enter your preferred domain.

- If unavailable, the **Update** button is disabled; try a different domain.
- If available, the **Update** button is enabled.

4. Click **Update** to save changes.

### Site Configuration: Subdirectory Hosting Support

No information is available in the provided table regarding which plans support hosting Document360 on a subdirectory.

### Site Configuration: Load Balancer

A **load balancer** distributes traffic across multiple servers to keep your site fast and reliable, especially during high traffic periods. Upgrading it enhances security, traffic management, and performance. The upgrade is free, causes no downtime, and involves these steps:

1. Navigate to **Settings > Knowledge base site > Custom domain > Custom domain mapping**.
2. Click **Upgrade**.
3. Verify the configuration in Document360.
4. Copy the generated CNAME record.
5. Set up the CNAME record in your domain registrar.
6. Re-verify the configuration in Document360.

Contact [support](mailto:support@document360.com) if needed.

### Site Configuration: Understanding Subfolder Hosting

Subfolder hosting organizes website content hierarchically within folders under the root domain (e.g., `example.com/docs`). This approach is often preferred over subdomains for SEO reasons. Subfolders are subdirectories that reside beneath the primary website's root domain, improving SEO.

### Site Configuration: Troubleshooting Domain Issues

- **Domain Verification Failed**: Ensure CNAME records match and no duplicate DNS records exist. Use tools like Digwebinterface to verify DNS settings. Some registrars like Cloudflare may mask records.
- **DNS Propagation**: Allow up to 24 hours for DNS changes to propagate. Check TTL settings if issues persist.
- **CAA Restrictions**: Check for CAA records restricting SSL providers. Add required CAA entries for Digicert, LetsEncrypt, and Google.
- **"This site can't be reached" Error**: Verify DNS configuration, check for duplicate records, and ensure SSL provider CAA entries are present.
- **SSL Certificate Issues**: Check certificate expiration, browser settings, and DNS resolver configuration. Try accessing via different browsers or without VPN.
- **FAQs**:
- Document360 provides SSL certificates automatically.
- Custom domains reflect in invitation emails.
- Multiple domains per project are not supported.
- Naked domains are those without "www" prefix.
- Domain registrars manage domain purchases and DNS settings.

### Site Configuration: Post-Configuration Steps

Knowledge base site is live on custom subfolder, but needs a redirect from main domain to prevent duplicate content issues with search engines (e.g., `example.com/docs`). Contact Document360 support for this redirect. Configure canonical URL (e.g., `https://www.yourdomain.com`) in knowledge base portal settings to globally indicate preferred URL for search engines. This avoids duplicate content and ensures the correct URL ranks better.

### Site Configuration: Web Server Information

A web server delivers website content (text, images, video, application data) to clients like web browsers. Common web servers include Apache HTTP Server, Nginx, ASP.NET Core, Microsoft IIS, OpenResty, LiteSpeed, and Cloudflare.

### Site Configuration: Enabling Subfolder Hosting

- Enable subfolder hosting by navigating to **Settings > Knowledge base site > Custom domain > Subfolder hosting tab** and toggle on the feature. Default path is `/docs`.
- For custom subfolder paths (e.g., `/help`), enter the desired path and click **Update**. Ensure subfolder hosting is enabled and configure languages for your server.
- For **KB site 2.0**, customize the Site API path (e.g., `/docs-api`) in the same tab. Both Subfolder and Site API paths must be defined for proper functionality.

> **Note**: Article preview is not supported for custom domains with subfolder hosting. Site API path is separate from API documentation.

### Site Configuration: Nginx Subfolder Hosting

Nginx is an open-source web server that supports hosting websites in subfolders. For more details, refer to the [**Nginx documentation**](https://nginx.org/en/docs/).

### Site Configuration: Nginx Configuration Resources

Nginx location blocks direct requests to different parts of your web server based on URL patterns. There are selection algorithms that determine which location block to use when matching incoming requests. See external Nginx documentation and tutorials for details about configuring and understanding these algorithms.

### Site Configuration: Nginx Sitemap Proxy

Configure Nginx to proxy sitemap requests to a backend server. Example uses `example.document360.io`, but replace with your domain (e.g., `your-custom-domain.com`). Supports language-specific sitemaps (e.g., `/sitemap.xml.en`). Ensures proper header forwarding for security and tracking.

### Site Configuration: Nginx Post-Configuration

After configuring the web server, your knowledge base is accessible via both your project's existing URL and your custom domain. This may cause duplicate content, so a redirect from the existing Document360 subdomain URL to your custom domain URL is needed. Contact support to implement this redirect.

### Site Configuration: Nginx Subfolder Setup

Configure Nginx by adding location blocks for your desired subdirectory, specifying proxy_pass, headers, and sub_filter directives to rewrite URLs. For multiple workspaces, add separate blocks and redirects. Restart Nginx to apply changes.

### Site Configuration: Nginx Home Page Subfolder

To host a project's home page on a custom subfolder, add Nginx configuration blocks for each workspace. Each block proxies requests to the Document360 domain and sets appropriate headers. Redirects are used for language-specific paths. After updating the configuration, restart Nginx.

**TLDR;** Configure Nginx with exact location blocks for each subfolder, proxy to Document360, set headers, handle redirects, then restart Nginx. Customization of domains, subfolders, and workspaces is required.

### Site Configuration: ASP.NET Core Subfolder Hosting

Host a knowledge base as a subfolder (`/docs`) of your main website using an ASP.NET Core server. Install the `Microsoft.AspNetCore.Proxy` package and configure a proxy to route requests to the knowledge base's actual server (e.g., `example.document360.io`). Define both the subfolder path and the knowledge base's API path if on KB Site 2.0. Replace example domain with your specific Document360 or custom domain.

### Site Configuration: ASP.NET Core Post-Configuration

Duplicate content issue arises after configuring knowledge base in a custom subdirectory (e.g., `example.com/docs`). A redirect from the original site URL (`example.document360.io`) to the new subfolder URL is required. Contact `support@document360.com` to implement this redirect.

### Site Configuration: IIS Subfolder Hosting

Integrate knowledge base into existing website via subfolder (`/help`). Pre-requisites include Application Request Routing and URL Rewrite IIS modules. Replace example domain with your Document360 or custom domain.

### Site Configuration: Troubleshooting Nginx Issues

TLDR of common NGINX setup issues and their solutions:

- **Invalid "location" Directive**: Ensure location blocks are within a server block. Example configuration:

```nginx
server {
listen 80;
server_name example.com;
location /docs {
      proxy_pass https://example.document360.io/docs;
      proxy_set_header Host example.document360.io;
}
}
```

- **Certbot Package Unavailable**: Enable EPEL repository and install Certbot:

```bash
sudo yum install epel-release
sudo yum install certbot
```

- **NGINX Configuration Test Failed**: Run `sudo nginx -t`, check error messages, and fix syntax issues. Example correction:

```nginx
## Incorrect
proxy_pas https://example.com;

## Correct
proxy_pass https://example.com;
```

- **SSL Certificate Issue**: Verify certificate with OpenSSL and ensure correct NGINX configuration:

```bash
openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout
```

Example configuration:

```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
}
```

Each resolution includes essential steps and examples for quick troubleshooting.

### Site Configuration: IIS Post-Configuration

To avoid duplicate content issues, a URL redirect is required from your original project URL (e.g., `yourcompany.document360.io`) to the custom subfolder (e.g., `yourcompany.com/help`). Contact `support@document360.com` to enable this redirect. Using a custom subfolder on your existing domain prevents duplicate content impacting search engine rankings.

### Site Configuration: Web Server Sitemap Proxy

Configure a web server to proxy requests for sitemap.xml files (e.g., `/sitemap.xml.en`), forwarding them to an internal or external server hosting the actual sitemap data. This hides the internal location of the sitemap file. The configuration example uses `example.document360.io` as a placeholder.

### Site Configuration: Subfolder Hosting Next Steps

The knowledge base is now accessible via two URLs (project URL + custom subfolder). To avoid duplicate content issues, a URL redirect (from project URL to custom subfolder) is necessary. Contact support to enable the redirect.

### Site Configuration: IIS Subfolder Setup

To set up a sub-folder path for hosting documentation, follow these steps:

1. **Install Required Modules**:

- Install the [URL Rewrite module for IIS Server](https://www.iis.net/downloads/microsoft/url-rewrite).
- Install and enable the Application Request Routing (ARR) module.

2. **Configure web.config**: Add the following rewrite rules to your `web.config` file to proxy requests to your documentation:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
   <rewrite>
      <rules>
            <rule name="ReverseProxy_HomePage" enabled="true" stopProcessing="true">
               <match url="^help$" />
               <action type="Rewrite" url="https://example.document360.io/v1" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
            <rule name="ReverseProxy_DocsPage" enabled="true" stopProcessing="true">
               <match url="^help/(.*)" />
               <action type="Rewrite" url="https://example.document360.io/help/{R:1}" />
               <serverVariables>
                  <set name="HTTP_requested_by" value="proxy" />
                  <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                  <set name="HTTP_ACCEPT_ENCODING" value="" />
               </serverVariables>
            </rule>
      </rules>
   </rewrite>
</system.webServer>
</configuration>
```

**Important Considerations**:

- Backup your `web.config` file before making changes.
- If using KB Site 2.0, ensure you define both the Subfolder path and the Site API path.

## User Management

### User Management: Reader Self-Registration

Users can independently create reader accounts on knowledge base sites by following a self-registration process. Share the knowledge base URL. Users enter name & email, then verify the email for password set-up. Project members control reader access. Email verification is a one-time process usable across projects.

### User Management: Reader Self-Registration - Plan Availability

The self-registration feature is available for Business and Enterprise plans when the Knowledge base site access is set to Private or Mixed.

## Site Configuration

### Site Configuration: Apache Subfolder Hosting

The Apache HTTP server is a free, open-source solution offering flexibility and customization for hosting Document360 knowledge bases as subfolders. Key steps include enabling necessary modules (proxy, headers, substitute, etc.), configuring VirtualHost for proxying and URL substitutions, setting up redirects, and restarting the server. Substitutions ensure links reflect the subfolder structure, and redirects manage URL paths seamlessly.

## User Management

### User Management: Configuring Reader Self-Registration

Enable reader self-registration in Document360 settings to allow users to register themselves. Configure default reader groups and/or restrict access by email domain (allow or block specific domains). Newly registered readers are added to default groups unless their domain is already assigned.

### User Management: Domain Restrictions for Self-Registration

Configure knowledge base self-registration by domain. Specify email domains (allowing or blocking) and assign reader groups to those domains. Domain-specific settings override default reader groups.

### User Management: Creating Reviewer Accounts

Create Reviewer accounts individually by selecting "Reviewer" in the portal role during team account creation. Bulk import is possible by using a CSV file with email addresses. Ensure correct roles (portal and content) are selected in both methods. Specify content access permissions as needed.

### User Management: Reader Self-Registration FAQs

- **No default reader group selected:** Self-registered readers get unrestricted access to the knowledge base.
- **Multiple group memberships:** Readers receive the highest level of access for each content item.
- **Individual vs. group access:** The highest privilege from both settings is granted to the reader.
- **Access prioritization:** The highest privilege at each content level determines access.
- **Self-registration not working with SSO:** Self-registration requires the Document360 login page, which is bypassed by SSO.

### User Management: Reviewer Role Overview

The **Reviewer** role in Document360 allows users to view articles, add comments, and update workflow statuses without editing content. This role is available across Professional, Business, and Enterprise plans, providing controlled access to the Documentation module for streamlined content review.

### User Management: Managing Reviewer Accounts

Manage reviewer accounts in the "Team accounts & groups" section of settings. Edit/delete existing accounts, convert to/from reader accounts, and purchase reviewer add-ons through the billing section. Conversion to reader involves content access permissions selection and optional mapping to reader groups.

### User Management: Reviewer Role Capabilities

Reviewer role enables content review without editing. Reviewers access articles (in draft mode), leave comments, suggest edits, and update workflow statuses. Access is controlled (usually by category/article). Specific number of Reviewer accounts depend on plan tier (Professional: 5, Business: 10, Enterprise: 20). No direct content edits are permitted.

### User Management: Account Lockout

Five incorrect password attempts lock an account for 30 minutes. User receives "Account locked due to multiple failed attempts! Please try again after 30 minutes" message.

### User Management: Reviewer Permissions

Reviewers have access to the Documentation module, enabling them to view articles in Draft or workflow states, add comments (inline or general), update workflow statuses, set due dates, and manage assignments. They can also perform bulk updates across multiple articles. However, they cannot add comments when an article is in Read only mode, and only one Reviewer can review an article at a time, with others notified when a Reviewer is active.

### User Management: Password Requirements

Password must be ≥8 characters, containing at least 1 uppercase, 1 lowercase, 1 number, and 1 special character.

### User Management: Password Reset

To reset your password, follow these steps: Click "Forgot password?", enter your email, check your inbox for the reset link, click the link, set your new password, and confirm. Password changes apply to your entire account.

## Access Control

### Access Control: Block Inheritance Plan Support

No information about block inheritance plan features is provided in the table. The table is empty.

## User Management

### User Management: Changing Passwords

To change your current password, follow the instructions in the [Change password article](https://docs.document360.com/v3/docs/change-password).

## Access Control

### Access Control: Blocking Inheritance

Block inheritance lets you override inherited content access permissions, allowing granular control over who can see specific content (like workspaces, languages, categories, articles) within a system, regardless of broader team permissions. Administrators selectively grant access to targeted accounts on a per-content-level basis. Removing inherited permissions isolates access to only the accounts explicitly added in the content access list.

## Security

### Security: IP Restriction

Project-level IP restriction controls access to a knowledge base by allowing/blocking specific IP addresses (IPv4 and IPv6). Restrictions apply to all workspaces and languages within a project.

## Access Control

### Access Control: Block Inheritance FAQs

Disabling inheritance restricts access to only specified team accounts and groups, and the team account performing the action is automatically selected and cannot be removed.

### Access Control: Enabling Inheritance

To enable inheritance, navigate to the desired category/article in the Documentation section, access Security settings via the More icon, toggle off **Block inherited account**, confirm by clicking **Yes**, and then close the blade. This allows inherited team accounts and groups to access the content, streamlining permission management.

N/A - No Think section needed as per instructions, moving to output.

## Security

### Security: Managing IP Restrictions

- **Overview**: Navigate to Settings > User & Security > IP Restriction to manage IP access.
- **IP Details**: View Friendly name, IP address (IPv4/IPv6), Allow/Block status, and Remove/Save options.
- **Add IP**: Enter a name, IP or range, and save; supports specific IPv6 formats.
- **Permissions**: Set IPs to Allow or Block access; avoid duplicates to prevent conflicts.
- **Deletion**: Permanently remove IPs using the Remove icon.

## Authentication

### Authentication: Single Sign-On (SSO) Plans

Single Sign-On (SSO) plans are not yet defined for Professional, Business, or Enterprise tiers. More details are needed to create a descriptive TLDR.

### Authentication: Understanding SSO

**Single Sign-On (SSO)** enables users to access multiple applications/websites with a single login. Users log in once and gain access to all connected applications without repeatedly entering credentials. SSO operates via a central authentication service (the service provider).

### Authentication: Benefits of SSO

- **Enhanced Security:** Reduced credential storage points, harder for attackers.
- **Increased Productivity:** Faster access to systems/apps, fewer passwords.
- **Improved UX:** Fewer login prompts, less frustration.
- **Simplified IT:** Centralized credential management, easier access control.
- **Compliance Support:** Adherence to industry/sector mandates.
- **Cost Reduction:** Less need for redundant systems and support staff.

## Security

### Security: IP Restriction FAQs

**What is an IP address?**\
An identifying number for a computer or network on the internet, enabling communication.

**What is an IPv4 format?**\
Four numbers (0-255) separated by dots (e.g., 49.206.113.170).

**What is an IPv6 format?**\
Eight groups of hexadecimal digits, colon-separated (e.g., FE38:DCE3:124C:C1A2:BA03:6745:EF1C:683D).

**What is an IPv6 unicast address?**\
Identifies a single interface for direct communication, unlike multicast or anycast.

## Authentication

### Authentication: SSO Process

Single Sign-On (SSO) works through a collaboration between a **Service Provider** (e.g., Document360) and an **Identity Provider (IdP)**. When a user accesses the Service Provider, they are redirected to the IdP to authenticate using their credentials. Upon successful authentication, the IdP issues an **Access/ID token**, which the Service Provider validates. This establishes a trust relationship, allowing the user to access SSO-enabled applications without additional sign-ins. Document360 supports multiple IdPs, offering flexibility for users to choose their preferred authentication method.

### Authentication: Identity Providers (IdPs)

An **Identity Provider (IdP)** is an external entity that manages user identities and authenticates users, enabling Single Sign-On (SSO) to access multiple services with one login. It stores credentials and handles logins for various applications. Each stored entity is called a **principal**. Examples include **Okta**, **Entra ID**, **Google**, **ADFS**, and **OneLogin**.

### Authentication: Logging In with SSO

Access the Document360 Knowledge base portal using SSO. Enter email/domain, click "Continue with SSO," authenticate via your Identity Provider (IdP) login.

- **Step 1:** Navigate to the Knowledge base portal URL.
- **Step 2:** Input your email or subdomain.
- **Step 3:** Click "Continue with SSO."
- **Step 4:** Log in to your IdP.
- **Result:** Automatically logged into the Knowledge base portal.

### Authentication: IdP-Initiated Sign-In

Document360 login is possible directly from the Identity Provider (IdP) dashboard if configured. Find the Document360 app within the IdP's dashboard to initiate SSO login, bypassing the need for a separate portal visit. Uses existing SSO credentials.

### Authentication: Supported SSO Standards

Document360 supports Single Sign-On (SSO) through SAML 2.0 and OpenID Connect. SAML 2.0 is a robust standard enabling secure cross-application authentication, while OpenID Connect offers a modern, user-friendly alternative. Both protocols support various Identity Providers (IdPs) such as Okta, ADFS, Google, and others, with comprehensive configuration guides available for setup and removal.

### Authentication: SSO Login - Portal

SSO enables access to the Knowledge base portal using existing credentials from an identity provider, eliminating the need for multiple passwords. The document does not specify which plans (Professional, Business, Enterprise) support SSO.

### Authentication: SSO Login - Site

Document360's Knowledge base site supports single sign-on (SSO), allowing users to log in with their existing credentials from another identity provider (IdP), eliminating the need for separate passwords.

### Authentication: SSO Login Process

Use your existing identity provider (IdP) credentials to log into the Document360 Knowledge Base. Visit the site, select your IdP's login button, log into your IdP, and you'll be automatically logged in. SSO login buttons vary based on configurations.

### Authentication: Troubleshooting SSO Login

The HTTP 500 error during SSO login likely stems from an outdated SAML certificate or incorrect attribute mappings. Update the IdP with the latest metadata from Document360 to ensure the correct certificate is used. Verify that SAML attributes like email and name match exactly between the IdP and Document360. If issues persist, contact support for further assistance.

## User Management

### User Management: Adding SSO Team Accounts

To add a new team account linked to SSO, follow the standard Document360 team account creation process in the Knowledge Base portal, but additionally: 1) Ensure the user email matches the SSO domain; 2) Select the desired SSO configuration; 3) Optionally, skip the invitation email. Only Owners/Admins can add accounts.

## Authentication

### Authentication: Enabling IdP-Initiated Sign-In

Enable the **Allow IdP initiated Sign-In** feature during SSO setup to log in directly from your IdP's dashboard—find the Document360 application, click to initiate login, and securely access the Knowledge base with your SSO credentials.

## User Management

### User Management: Inviting SSO Users

After configuring Enterprise SSO using SAML or OpenID, users can authenticate via identity providers like Okta, Azure AD, or Google Workspace. You can add new SSO users directly or invite existing users to use SSO.

### User Management: Deleting SSO Users

To delete an SSO user in Document360, navigate to Team accounts & groups, hover over the SSO account, click "Delete", then confirm. SSO users are identified by the SSO label. Deleting an SSO user does _not_ delete the associated team account.

## Authentication

### Authentication: SSO FAQs

You can't add a user twice as an SSO reader account in a project. If the user exists as an SSO reader, the "Create reader account" button is disabled. SAML is used for single sign-on.

## User Management

### User Management: Inviting Existing Users to SSO

To invite existing users to login via SSO in Document360, follow these steps: log in, navigate to **Settings > Users & Security > SAML/OpenID**, edit the SSO configuration, select **All users** or **Selected users only**, and save. Users receive an invitation email, and an additional SSO account is created alongside their existing one.

## Authentication

### Authentication: Mapping SSO Configurations

To map an existing SAML/OpenID SSO configuration to another Document360 project, log in, navigate to project settings, and select "Create SSO," then choose the existing configuration from a dropdown. Existing IdP and SSO protocol (SAML/OpenID) must match.

### Authentication: Disabling the Default Login Page

To bypass the Document360 common login page in a specific project, enable the "Disable Document360 login page" toggle within the project's SAML/OpenID settings. This affects SAML and OpenID SSO setups.

### Authentication: Login Page FAQs

Turning on the "Disable Document360 login page" toggle forces users to log in via single sign-on (SSO) using SAML, eliminating email/password login.

## User Management

### User Management: Auto-Assigning SSO Readers

To automatically assign SSO readers to a Document360 knowledge base, configure SAML/OpenID settings in the project's "Users & security" section. Enable the "Auto assign reader group" option and select the desired existing reader groups. Ensure reader groups are already created.

## Authentication

### Authentication: Disabling Default Login

Organizations using only SSO users can disable the Document360 login page, redirecting users directly to the SSO login. This feature is supported in certain plans, though specifics aren't detailed. Caution is advised if both SSO and regular accounts are present, as disabling the login page may prevent regular users from accessing their accounts.

## User Management

### User Management: Converting to SSO Accounts

Convert Document360 team/reader accounts to SSO accounts for single sign-on access, simplifying login. SAML/OpenID projects only. Select accounts, click "Convert to SSO account," confirm. Previous contributions remain but appear as "Anonymous." Owner accounts become both Document360 and SSO, preserving access. SSO accounts cannot be converted back.

### User Management: Auto-Assigning Reader Groups

The Auto assign reader group feature simplifies knowledge base access by automating reader access for those using SSO, supported across Professional, Business, and Enterprise plans, eliminating manual invitations.

### User Management: Account Conversion FAQs

Document360 account owners/admins and team account managers can convert to SSO accounts. JWT projects cannot be converted. Accidental SSO conversions require manual recreation of Document360 accounts and roles.

## Authentication

### Authentication: SSO Account Conversion Support

- Single Sign-On (SSO) is typically supported in Business and Enterprise plans, while availability for Professional plans may vary by provider.

### Authentication: SSO Session Timeout FAQs

User accounts logging into the Knowledge Base via SSO will timeout after 2 hours of inactivity. This timeout is configurable. SAML is the SSO standard used.

### Authentication: SAML SSO

SAML 2.0 enables single sign-on (SSO) for Document360. Users can log in with their existing identity provider (IdP) credentials. Document360 supports multiple SSO endpoints for teams and readers.

### Authentication: SSO Idle Timeout

The **Sign out idle SSO team account** feature enhances Document360 security by automatically logging out inactive SSO accounts (SAML/OpenID) after a idle period, preventing unauthorized access and streamlining management.

### Authentication: Enabling SSO Idle Timeout

To enable the feature, follow these steps in the Knowledge base portal:

1. Navigate to **Settings > Users & Security > SAML/OpenID**.
2. Hover over an existing SSO configuration and click the **Edit** icon.
3. Under the **More settings** tab, toggle **ON** the **Sign out idle SSO team account** option.
4. Set the idle timeout duration in **hours:minutes** format.
5. Click **Save** to apply the changes.

> **Note**: Applies only to SSO team accounts, not Document360 team accounts.

### Authentication: Troubleshooting SAML SSO

Document360 SAML SSO login problems often stem from using an incorrect or expired certificate in your Document360 settings. To fix this: 1) Obtain the _active certificate_ from your Identity Provider (IdP). 2) Replace the certificate in Document360's settings. If issues persist, use the SAML Tracer extension to capture logs, then contact support with screenshots of IdP configuration, certificate details, and the logs.

### Authentication: SAML SSO with Okta

Document360 users with Owner or Admin Project roles can configure SAML SSO with Okta. Users authenticate once in Okta, then access Document360. The configuration requires switching between Okta and Document360 multiple times. Use separate browser tabs for this process.

### Authentication: Configuring SAML SSO

- Set up SSO via SAML by selecting an identity provider in Document360, configuring both service provider (SP) and identity provider (IdP) settings using the provided details, enabling SSO access for users alongside traditional email/password login.

### Authentication: Supported Identity Providers

Document360 supports the following identity providers: Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and others.

### Authentication: Configuring Okta SAML SSO

To configure SAML SSO between Okta and Document360, first gather the required parameters from Okta's Application settings (Sign-on URL, Identity Provider Issuer, and X.509 Certificate). Next, on the Document360 side, enter the Okta-provided mappings (Sign-on URL, Identity Provider Issuer) into the relevant fields, upload the downloaded X.509 certificate, configure optional settings (Idle sign-out, auto-assign reader groups, custom login button text), and then complete the configuration by clicking "Create". The process involves mapping Okta's Identity Provider data to Document360's Service Provider, and allowing the selected SSO methods to manage user accounts on Document360.

### Authentication: Setting Up an Okta Account

Sign up for an **Okta** account by visiting <https://developer.okta.com/signup/>. After signing up, you'll receive an email with your **login credentials** and an **activation link**. Click the link to activate your account, then log in to your **Okta Domain** and access the **developer console**.

To add a Document360 application in Okta for SSO, follow these steps:

1. **Log in as Admin**: Access Okta with admin credentials and switch to the admin role.

2. **Create App Integration**: Navigate to Applications and click "Create App Integration," selecting SAML 2.0 as the sign-in method.

3. **Configure SAML Settings**:

- Enter the app name and optional logo/app visibility.
- Obtain parameters from Document360's Service Provider page.
- Map parameters to Okta fields: Callback path to Single sign-on URL and Service provider entity ID to Audience URI.
- Set Name ID format to EmailAddress and Application username to Email.
- Add Attribute Statements for email and name, ensuring case sensitivity.

4. **Finish Configuration**: Complete the setup in Document360 using Okta's application details.

### Authentication: Configuring Azure AD for SSO

Customize Azure AD for SSO by editing User Attributes & Claims (add new/group claims), managing SAML signing certificates (add/import), configuring multiple notification emails, and testing the configuration with user credentials.

### Authentication: SAML SSO with Entra ID

Learn how to configure SAML Single Sign-On (SSO) in Document360 using Microsoft Entra as the Identity Provider. Only users with Owner or Admin roles can perform this setup. It’s recommended to use separate browser tabs for Document360 and Entra to streamline the configuration process.

### Authentication: Setting Up a Custom SAML App in Google

To add a custom SAML app to Google, create the app, download the certificate, note the SSO URL & Entity ID, enable the service for all users. These details will be used to configure the Identity Provider in another system (like Document360).

### Authentication: Adding an Application in Azure AD

To add an application and configure SAML-based SSO with Document360 in the Azure portal, follow these key steps:

1. **Access the Azure AD Portal**: Sign in to your Azure account and navigate to the Azure portal at [portal.azure.com](https://portal.azure.com).

2. **Add a New Application**:

- Click on "+ New application" and select "Non-gallery application."
- Enter your application name and click "Add."

3. **Set Up Single Sign-On**:

- In the "Getting started" section, choose "Set up single sign-on" and select "SAML."
- Configure SAML settings using the parameters from Document360.

4. **Configure Service Provider (SP) in Document360**:

- Navigate to Document360 Settings > Users & security > SAML/OpenID.
- Click "Create SSO" and select "Entra ID" as your Identity Provider to auto-configure SP settings.

5. **Map Azure AD Fields to Document360**:

- Copy and paste the required SP parameters (e.g., Identifier, Reply URL, Sign-on URL, Logout URL) from Document360 to Azure AD.

6. **Complete Identity Provider (IdP) Configuration in Document360**:

- Input the corresponding Values from Azure AD (e.g., Sign On URL, Entity ID, Logout URL, and certificate).
- Optionally enable "Allow IdP initiated sign-in."

7. **Finalize More Settings**:

- Assign a name to your SSO configuration.
- Customize the login button and other optional settings.

8. **Save and Complete**:

- Click "Create" to finalize the SSO configuration, enabling seamless authentication between Azure AD and Document360.

### Authentication: SAML SSO with Google Workspace

To configure Google SAML SSO, log in to Document360, select your project, and ensure you have an Owner or Admin project role. Log in to your Google Workspace account, navigate to the Admin console, and follow the SSO configuration steps, switching between Document360 and Google Workspace as needed.

### Authentication: SAML SSO with OneLogin

Configure Document360 Single Sign-On (SSO) with OneLogin using SAML. Only users with Owner or Admin Project roles can configure SSO. Keep both Document360 and OneLogin open during the configuration process.

### Authentication: Configuring the Identity Provider

Configure the Identity Provider (IdP) by navigating to the appropriate page in Document360, entering the necessary SAML details from Google (Sign on URL, Entity ID, and certificate), adjusting toggles for features like IdP-initiated sign-in, and completing the setup with additional settings such as SSO naming and user assignments.

### Authentication: Configuring the Service Provider - Google

To configure SSO with Google Workspace, follow these steps:

1. Navigate to **Settings > Users & Security > SAML/OpenID** and click **Create SSO**.
2. Select **Google** as your Identity Provider.
3. Copy the **ACS URL** and **Entity ID** from Document360's **Configure Service Provider** page.
4. In Google Workspace:

- Paste the copied ACS URL and Entity ID into the Google custom SAML app.
- Set **Name ID format** to **EMAIL** and select **Primary email** for **Name ID**.

5. Map Google Directory attributes:

- Add **Primary email** for `name`, `email`, and `urn:oasis:names:tc:SAML:2.0:nameid`.
- Click **Add Mapping** for each attribute and then **Finish**.

### Authentication: Adding a OneLogin Application

To configure Document360 SSO in OneLogin, add a SAML Custom Connector application with the name "Document360 SSO," following the OneLogin Admin interface steps.

### Authentication: Configuring Document360 for SSO

Configure Document360's Single Sign-On (SSO) by populating fields in the service provider configuration with details from your identity provider (IdP). Match the `Issuer URL`, `SAML 2.0 Endpoint`, and `SAML Certificate` fields from your IdP with corresponding fields in Document360. Enable/disable IdP-initiated sign-in as needed, and proceed to the more settings page. This establishes the connection between your IdP and Document360 for SSO functionality.

### Authentication: Advanced SSO Settings

Configure SSO settings including: SSO name, custom login button text, auto-assign reader groups, idle account sign-out, and existing account invitation. Click "Create" to finish.

### Authentication: Adding an ADFS Application

Create a new claims-aware Relying Party Trust in ADFS, naming it (e.g., "Document360 SAML SSO"), and enabling SAML 2.0 WebSSO protocol support.

### Authentication: Configuring SAML in OneLogin

- Configure SAML in OneLogin using Document360 parameters.
- **Document360 Steps**:

1. Navigate to **Settings > Users & security > SAML/OpenID**.
2. Click **Create SSO**, select OneLogin as IdP.
3. From the SP page, gather: Service provider entity ID, Callback path.

- **OneLogin Configuration Tab**:
- Audience (EntityID): Service provider entity ID.
- Recipient: Callback path.
- ACS (Consumer) URL Validator: Callback path.
- ACS (Consumer) URL: Callback path.
- **Parameters Tab**:
- Add fields:
- `urn:oasis:names:tc:SAML:2.0:nameid` = Email.
- `email` = Email.
- `name` = Email.
- Ensure **Include in SAML assertion** is checked.
- **SSO Tab**:
- Download X.509 Certificate (select SHA256 and PEM format).
- Copy Issuer URL and SAML 2.0 Endpoint (HTTP).

### Authentication: Configuring ADFS for Document360

Configure ADFS for Document360 SSO using SAML. Retrieve Subdomain, Callback, Signed-out Callback, Metadata, & Service Provider Entity ID from Document360. Enter these values into ADFS's Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL, Relying Party Trust Identifier and Metadata URL). Complete ADFS wizard, review, and finalize.

### Authentication: Configuring ADFS Claim Rules

Configure claim rules to map Active Directory LDAP attributes (User-Principal-Name, E-Mail-Addresses, Display-Name) to Name ID, Email, and Name claims, respectively. This translates LDAP data into a usable format.

### Authentication: SAML SSO with ADFS

To set up Single Sign-On (SSO) between Document360 and ADFS using SAML, ensure you have **administrative access** to both platforms. Only users with **Owner** or **Admin** roles in Document360 can configure SSO. Open both **Document360** and **ADFS** in separate tabs for easier switching during setup.

### Authentication: SAML SSO with Other IdPs

Configure SSO with non-listed IdPs using Owner/Admin project roles in Document360. Keep Document360 and IdP in separate tabs for easier navigation during configuration.

### Authentication: Configuring SAML in Your IdP

To configure SAML in your identity provider, get the Callback path, Service Provider Entity ID and potentially the Single Sign-On URL from Document360. Configure these in your IdP's SAML settings. Often, attribute mapping (like email, name, and user ID) is needed; consult your IdP's documentation and Document360 for specific requirements. Save your settings after verification.

### Authentication: Configuring Document360 for ADFS SSO

Configure SAML SSO in Document360 by mapping ADFS values, uploading the X.509 certificate, enabling/disabling IdP-initiated sign-in, and customizing additional settings like SSO name and login button text before finalizing the setup.

### Authentication: Adding an Application in Your IdP

- Log in to the Identity Provider admin console.
- Navigate to the application management section (e.g., Applications or Enterprise Applications).
- Create a new application and configure the basic settings:
- Application Name: Choose a descriptive name (e.g., "Document360 SSO").
- Application Type: Select SAML 2.0 as the sign-in method.
- Save the application settings.

### Authentication: Enabling IdP-Initiated Sign-In

To enable IdP-initiated sign-in in Document360, navigate to Settings > Users & security > SAML/OpenID, edit an existing SSO configuration, enable the "Allow IdP initiated sign in" toggle in IdP configurations. Users then use a dedicated IdP sign-on URL to access Document360, authenticating via their IdP.

### Authentication: SAML SSO FAQs

Document360 supports Okta, Microsoft Entra, Google Workspace, OneLogin, and ADFS identity providers. To access Document360 from Okta, ensure "Allow IdP initiated sign in" is enabled. Document360 is a knowledge base platform allowing content creation, file management, and site configuration.

### Authentication: Configuring Document360 for SAML SSO

Configure Document360 SSO by following these steps: Enter Identity Provider (IdP) details, including SSO URL, Entity ID, and SAML certificate. Upload the X.509 certificate, enable or disable IdP-initiated sign-in, and configure additional settings such as SSO name, login button text, auto-assigning reader groups, idle sign-out, and user invitations. Complete the setup to enable SSO with your chosen IdP.

### Authentication: Supported IdPs for IdP-Initiated Sign-In

Document360 supports IdP-initiated sign-in using SAML for Single Sign-On (SSO) with the following identity providers: Okta, Entra ID, Google Workspace, OneLogin, and ADFS.

### Authentication: OpenID Connect SSO

OpenID Connect (OIDC) is an open standard for single sign-on (SSO). Document360 users can log in with existing identity provider accounts, eliminating multiple passwords and improving security. Document360 supports multiple SSO endpoints for both team accounts and readers.

### Authentication: Removing a SAML SSO Configuration

To remove a SAML SSO configuration in Document360:

1. Go to your project's Knowledge base portal.
2. Navigate to **Settings > Users & security > SAML/OpenID**.
3. Hover over the configuration, click the Delete icon, and confirm by clicking Proceed.

> **Important Note:** Deleting an SAML SSO configuration also removes all associated users.

**SAML (Security Assertion Markup Language):** A standard for Single Sign-On (SSO) that allows users to access multiple applications with a single set of credentials.

### Authentication: Configuring OpenID Connect SSO

To configure SSO using OpenID in Document360, navigate to settings, select OpenID, and input details from your identity provider (IdP) and Document360 (SP) into the respective configuration screens. This allows users to log in via either their existing credentials or the external SSO provider.

### Authentication: Supported Identity Providers

Document360 supports Okta, Entra ID, Google, Auth0, ADFS, OneLogin, and other identity providers.

### Authentication: Troubleshooting OpenID Connect SSO

Document360 OpenID SSO error (IDX20803) likely stems from a wrong IdP Authority URL. Fix it by: 1) finding the correct "issuer" from your IdP's discovery document (`.well-known/openid-configuration`); 2) pasting this "issuer" into Document360's SSO settings Authority field; 3) verifying the URL, network/firewall, and IdP certificate validity.

### Authentication: Adding an Okta Application for OpenID

Log in to Okta as admin, navigate to Applications, click "Create App Integration," select OIDC and Web Application, and proceed to next step.

### Authentication: Configuring Document360 as an OpenID SP

Configure Document360 SSO with Okta by creating a new OpenID connection in Document360, selecting Okta as the identity provider. Copy the provided subdomain name, sign-in, and sign-out redirect URIs from Document360. Paste these into the corresponding fields in Okta's new web app integration setup. This establishes the SSO connection.

### Authentication: Obtaining an Okta Account

An Okta account is required to configure Single Sign-On (SSO) with Document360. If you don't already have one, sign up at [Okta Developer Sign-Up](https://developer.okta.com/signup/).

### Authentication: Setting Up OpenID Connect SSO with Okta

To configure Single Sign-On (SSO) between Document360 and Okta using OpenID, you need administrative access to Okta. Only users with **Owner** or **Admin** as their **Project role** in Document360 can set up SSO. For a smoother configuration process, open both Document360 and Okta in separate tabs or browser windows to easily switch between them.

### Authentication: Creating an Auth0 Application

To create an Auth0 application, log in, navigate to Applications, create a new application, specify the name, select "Regular Web Application" type, and click create.

### Authentication: Configuring Auth0 OpenID

To configure Auth0 OpenID with Document360, navigate to Document360 settings, choose "OpenID" as the protocol, and enter the Auth0 "Sign in redirect URI" and "Sign out redirect URI" in Document360's corresponding fields. Save the changes to complete the setup.

### Authentication: Configuring Document360 for Okta OpenID

Configure Document360 SSO by entering Okta's Client ID, Client Secret, and Issuer URI in the Identity Provider settings. Enable or disable IdP-initiated sign-in based on project needs. In More Settings, customize the SSO name, login button text, auto-assign reader groups, idle sign-out, and SSO invitations. Complete by saving the configuration.

### Authentication: Setting Up OpenID Connect SSO with Auth0

To integrate Auth0 with OpenID SSO in Document360, an Auth0 account is required. Configuration is limited to users with Owner or Admin project roles. It's advised to use separate tabs for Auth0 and Document360 during setup. The document notes empty SSO plan details and includes incorrect steps for Microsoft Entra instead of Auth0.

### Authentication: Setting Up OpenID Connect SSO with ADFS

To configure SSO between Document360 and ADFS using OpenID, ensure you have administrative access to both systems. Document360 users with Owner or Admin project roles can configure this. Open both Document360 and ADFS in separate browser windows during setup, due to switching between them.

### Authentication: Configuring Document360 as an OpenID SP - ADFS

Configure Document360 with ADFS for SSO using OpenID. Obtain subdomain, sign-in/sign-out URIs from Document360. Enter these into ADFS Relying Party settings (Relying Party Identifier, Sign-On URL, Sign-Out URL). Complete the ADFS setup wizard, review settings, and enable user access.

### Authentication: Configuring ADFS Claim Rules

Configure claim rule to send LDAP attributes as claims. Select "Send LDAP Attributes as Claims" template. Map LDAP attributes (User-Principal-Name to Name ID, E-Mail-Addresses to Email, Display-Name to Name) using Active Directory as the attribute store. Click "Finish" and "Apply" to save.

### Authentication: Adding an ADFS Application for OpenID

Log in to the ADFS Management console, navigate to Relying Party Trusts, and add a new Relying Party Trust. In the wizard, select "Claims aware," choose to enter data manually, provide a display name, and optionally configure a certificate (can skip if not needed).

### Authentication: Configuring Document360 for ADFS OpenID

Configure Document360's OpenID SSO by following these key steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter your Identity Provider's **Client ID**, **Client Secret**, and **Authority** (domain).
3. Enable/disable **IdP initiated sign-in** as needed.
4. Configure **More Settings**:

- Provide an **SSO name**.
- Customize the **login button text**.
- Toggle **Auto assign reader group** and **Sign out idle SSO team account**.
- Choose whether to invite existing accounts to SSO.

5. Click **Create** to complete the configuration, enabling secure OpenID-based authentication.

### Authentication: OpenID Connect SSO with Other IdPs

To configure SSO with an _unlisted_ OpenID Identity Provider in Document360, users with Owner or Admin Project roles need access to both Document360 and the chosen IdP. Keep Document360 and the IdP open in separate browser tabs for smoother configuration.

### Authentication: Configuring OpenID in Your IdP

Configure OpenID in your IdP by accessing Document360's SSO settings, selecting "Others" as IdP and choosing "OpenID". Document360 provides the Subdomain name and Redirect URIs (sign-in/sign-out). Crucially, include the scopes _openid_, _email_, and _profile_ and map claims (_sub_, _email_, _name_) according to Document360's specifications. Review and save your configuration in your IdP.

### Authentication: Configuring Document360 for OpenID SSO

Configure Document360 SSO by providing Identity Provider (IdP) Client ID, Secret, and Authorization URL. Enter details like SSO name, custom login text, and enable/disable auto-assignment of reader groups, IdP initiated logins, and account sign out. Upload certificates/keys where needed. Then, click 'Create' to finalize the configuration.

### Authentication: Adding an Application in Your IdP for OpenID

To create a new OpenID application in your Identity Provider:

1. Log in to the admin console.
2. Navigate to the Applications or Enterprise Applications section.
3. Create a new application, naming it (e.g., "Document360 OpenID SSO") and selecting OpenID Connect as the sign-in method.
4. Save your settings.

### Authentication: Configuring Document360 with ADFS

To configure OpenID SSO in Document360, follow these steps:

1. Navigate to the **Configure the Identity Provider (IdP)** page in Document360.
2. Enter the **Client ID** and **Client Secret** from ADFS into the corresponding fields.
3. Ensure the **Client Identifier** matches the **Relying Party Identifier** in ADFS.
4. Toggle the **Allow IdP initiated sign in** option based on project needs.
5. Enter the **Issuer URL** from ADFS as the **Authority** in Document360.
6. Proceed to the **More settings** page and configure:

- **SSO Name**: Enter a descriptive name.
- **Customize login button**: Provide user-friendly text.
- **Auto assign reader group**: Enable/disable based on access policies.
- **Sign out idle SSO team account**: Set according to security requirements.
- Choose to invite existing users to SSO.

7. Click **Create** to complete the configuration.

This setup integrates Document360 with ADFS for seamless user authentication.

### Authentication: Enterprise SSO using JWT

**Key Information:** Document360's JWT SSO leverages a customer application for user authentication. User logs in to customer app, which requests an auth code via backchannel from Identity Provider (using client credentials). Document360 receives the auth code and requests an ID token/access token. Document360 creates a session, automatically renewing it within a configurable timeframe (5 to 1440 minutes). No separate Document360 reader account is required (only app account). This approach is exclusive to other SSO methods (SAML, OpenID).

### Authentication: Removing an OpenID SSO Configuration

Delete an O configuration in Document360 by accessing the project's Knowledge base, navigating to Settings > Users & security > SAML/OpenID. Hover over the SSO configuration to reveal the Delete icon. Confirm deletion in the popup, understanding it removes associated user accounts.

### Authentication: JWT SSO Configuration

Configure SSO in Document360 by creating a JWT under Settings > Users & security > JWT, then copy the Client ID, Callback URL, and Client secret for your application. Enable/disable JWT SSO login, configure the login URL, and set up redirection using the `redirectUrl` parameter in the URL. Note: Client secret is only available once and must be regenerated if lost.

### Authentication: Setting Up JWT SSO

To set up JWT-based Single Sign-On (SSO) in Document360, follow these steps:

1. **Understand JWT**: A JSON Web Token (JWT) securely transfers authentication and authorization data between applications. It consists of a header, payload, and signature.

2. **Check SSO Plan Compatibility**: Verify if your subscription plan supports SSO. While the table provided is empty, typically higher-tier plans like Enterprise include such features.

3. **Generate JWT Token**: Upon user login, generate a JWT token. Include necessary claims (e.g., user ID, email) and set an expiration time for security.

4. **Configure Secret Key**: Use a strong secret key to sign the JWT. Ensure this key is shared with Document360 for token verification.

5. **Set Up Redirect Flow**: When accessing Document360, users are redirected to your login page. Post-login, generate the JWT and redirect them back with the token.

6. **Test the Flow**: Validate the entire process, ensuring smooth user authentication without additional logins.

7. **Consult Documentation**: Refer to Document360’s API documentation for specific requirements and endpoints.

This setup enhances user convenience and security, streamlining access to Document360.

## User Management

### User Management: Reader Groups

Document360 reader groups grant precise access to private knowledge base content. Users must log in. Groups can be created to restrict access to specific categories (e.g., sales team only sees pricing/billing). Members are then assigned to those groups.

To resolve the 401 Unauthorized error during JWT testing in Postman, follow these organized steps:

1. **Authorize the Request**:

- In Postman, navigate to the Authorization tab of your request.
- Set the authorization type to **Basic Auth**.
- Enter your **Client ID** as the Username and **Client Secret** as the Password.

2. **Verify Request Format**:

- Switch to the Body tab.
- Select **raw** and ensure the format is set to **JSON**.
- Include all required parameters, such as **grant_type**, in your JSON payload.

3. **Confirm Credentials**:

- Double-check that the Client ID and Secret are correct and properly entered.

4. **Check Endpoint URL**:

- Ensure you're using the correct token endpoint URL as specified in the documentation.

5. **Inspect Server Response**:

- If an error occurs, examine the response body for additional details that can indicate the issue, such as "invalid grant type" or "bad credentials."

6. **Review System Configuration**:

- Verify with your system administrator that the Client ID and Secret are correctly registered on the server side.

By systematically addressing each of these areas, you can identify and resolve the cause of the 401 error.

## Authentication

### Authentication: JWT Reader Groups

JWT reader accounts can be linked to existing Document360 reader groups, inheriting their restriction settings to control knowledge base access. These groups function like regular reader groups, with support for single sign-on (SSO) across Free, Professional, Business, and Enterprise plans.

## User Management

### User Management: Finding Reader Group IDs

For JWT SSO-enabled projects, Reader group IDs can be found in **Settings > Users and Security > Readers & groups**. Each reader group displays a **Group Id** below its name, with a copy icon for easy pasting into the payload. Note: Available only for JWT-configured projects, not regular private knowledge bases.

## Authentication

### Authentication: Using JWT Reader Groups

Configure JWT reader access by providing a user's details (name, email) and a list of reader group IDs in a specific JSON format. Changes to reader groups only apply after the current JWT session expires (token validity). Use comma-separated IDs in the `readerGroupIds` array. Min token validity is 5 minutes, max is 1 day.

## Site Customization

### Site Customization: Customizing Search Highlight Color

To customize highlighted search results in knowledge base articles, navigate to Knowledge Base site > Customize site > Custom CSS & JavaScript. Modify the provided CSS snippet (different for KB Site 1.0 and KB Site 2.0) changing the `background-color` and `color` properties. Save the changes. This allows altering the highlight color from the default yellow, to any desired color.

### Site Customization: Hiding the Workspace Dropdown

To hide the project workspace dropdown in the knowledge base site, add the CSS `header .header_bottom .header_bottom_nav ul li.versions-selection { display: none; }` to the site's custom CSS. This removes the dropdown, requiring users to navigate to workspaces using direct URLs.

### Site Customization: Customizing Hyperlink Color in Dark Mode

Access the Custom CSS section in your Knowledge Base settings, add a CSS snippet targeting hyperlinks in Dark mode, and customize the color to your preference. Save changes to apply the new hyperlink color in Dark mode.

### Site Customization: Enlarging PDF Previews

To enlarge the PDF preview, access your Knowledge Base site settings, navigate to the Custom CSS section, and apply the CSS snippet to adjust the PDF container width. This ensures the preview expands to full width, improving visibility across different browsers.

## Content Formatting

### Content Formatting: Adding Scrollbars to Code Blocks

Add vertical scrollbars to code blocks by either:

1. Wrapping specific code blocks in `<div class="scroll">` and adding custom CSS to set height and enable scrolling.
2. Applying global CSS to all code blocks using `.code-toolbar` selectors.

Outcome: Scrollbars appear for code blocks exceeding the specified height, keeping content within a fixed area.

### Content Formatting: Aligning Table Content

To vertically align table content to the top in your knowledge base, add this CSS code to custom CSS settings: `table td, table th, table tr { vertical-align: top !important; }`. This overrides the default alignment. Follow the Knowledge base customization steps to save the changes.

## Site Customization

### Site Customization: Customizing Table Borders

To make table borders bold, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript. Add the CSS snippet:

```css
table td,
table th,
table tr {
  border: 3px solid #000000 !important;
}
```

Adjust the `3px` thickness and `#000000` color as needed, then save. This will apply the changes to all tables in the knowledge base.

### Site Customization: Restricting Content Copying

Prevent content copying by intercepting the "cut," "copy," and "paste" events using JavaScript on specific HTML elements (`content_block`, `d360-article-content`). This solution uses custom CSS and JavaScript, is adjustable to different content areas, and has minimal disruption on user experience. User selection of content is allowed but prevents copying with Ctrl+C or alternative actions. This is a mitigation strategy, not a foolproof solution.

## Content Enhancement

### Content Enhancement: Setting Default PDF Dimensions

To set custom dimensions for embedded PDFs, navigate to the CSS settings in your knowledge base site and add the provided CSS snippet with your desired height and width in pixels.

## Content Formatting

### Content Formatting: Centering Headings in Markdown

To center-align headings in Markdown, use HTML `<hN style="text-align:center;">` tags. Markdown lacks built-in centering. Document360 provides a WYSIWYG editor and markdown editor for content creation and formatting. It's a platform for knowledge base management and content creation.

### Content Formatting: Centering Text in Markdown

To center-align text in Markdown, use the HTML `<p>` tag with `style="text-align:center;"`. Replace "Text_content" with your desired text. Example: `<p style="text-align:center;">Sample text</p>`. You can also apply basic formatting inside the paragraph.

### Content Formatting: Changing Text Color in Markdown

Use an HTML `<span style="color:desiredColor;">` tag to change text color. Markdown doesn't directly support inline styles, so HTML is needed. Replace `desiredColor` and the text within the span tags with your desired values.

## Site Customization

### Site Customization: Customizing Code Block Language Names

To change the language name in code blocks to a custom name (e.g., "Example") across your entire knowledge base, modify the site's Custom CSS, specifically targeting the code block toolbar. Hide the default language name, and display a new "Example" label. This is a global change.

To set dark mode as the default for your Knowledge Base site, you can use custom JavaScript. Here's how:

1. **Access Customization Settings**: Go to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**.

2. **Add JavaScript**: Paste this snippet into the JavaScript tab to trigger dark mode on page load:

```javascript
$(document).ready(function () {
  setTimeout(function () {
    document.getElementById('darkTheme').click();
  }, 100);
});
```

Then save your changes.

3. **Disable Theme Switching (Optional)**: To enforce dark mode, navigate to **Settings > Knowledge base site > Customize site**, select **Dark only** under **Site theme**, and save.

This ensures dark mode is the default, with the option to prevent users from switching to light mode. The script reliably triggers dark mode if the 'darkTheme' element is present, and testing post-implementation is recommended to ensure compatibility.

### Site Customization: Centering Headings

To center-align headings (H2, H3, H4) in Document360 articles, navigate to Settings > Knowledge base site > Customize site > Custom CSS & JavaScript, paste the CSS snippet `H2, H3, H4 { text-align: center; }`, and save. This globally centers all specified headings.

### Site Customization: Changing Table Header Color

To change table header color in a knowledge base site, navigate to customization settings, add custom CSS targeting either `table th` (KB site 1.0) or `.editor360-table th` (KB site 2.0). Change the background color in the CSS to meet your requirements and save. This modifies the header color across all tables on the site.

### Site Customization: Changing Callout Colors in Dark Mode

To change the callout colors in dark mode, navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, then add the provided CSS snippet. Modify the `background-color`, `color`, and `border-left` properties for `.infoBox`, `.errorBox`, and `.warningBox` classes to update the callout colors in dark mode. Remember to use `!important` to override default styles.

## Content Formatting

### Content Formatting: Adding Extra Space in Markdown

To add space in Markdown, use HTML tags: `<br>` for vertical space between lines, and `&nbsp;` for horizontal space between words within a line. Markdown doesn't natively support extra spacing.

### Content Formatting: Aligning Images in Markdown

Images are left-aligned by default in Markdown. Markdown lacks built-in image alignment. The document suggests a workaround, but the details are missing.

### Content Formatting: Adding Accordions in Markdown

To add an accordion in Markdown, use HTML's `<details>` and `<summary>` tags. Wrap your content within `<details>`, use `<summary>` for the title, and place content inside `<p>`. You can include headings by using `<h2>`, `<h3>`, etc.

**Code Example**:

```html
<details>
  <summary><strong>Accordion Title</strong></summary>
  <p>Content here...</p>
</details>
```

**Caution**: Adding headings in the summary may affect text alignment. You can nest lists, headings, and other HTML within the content section.

## Site Customization

### Site Customization: Advanced Accordion Customization

Enhance accordions with colors, dotted borders, and icons using CSS. Add header colors via CSS, create hover effects with border transitions, and set accordions to always open with the `open` HTML attribute. Use CSS to add rotating plus icons. While Markdown can create basic accordions, advanced styling requires CSS/HTML.

### Site Customization: Adding Background Images to Text

To add a background image to text in a knowledge base site, use custom CSS (via Custom CSS & JavaScript settings). Apply a CSS class to the text element, specifying the background image URL. Then, apply that class to your desired text in HTML. This approach works in the site's editor, either through code view or directly applying the styled element. Web-accessible images are required.

### Site Customization: Sorting Table Content

To sort tables on a knowledge base site, add custom CSS (to style headers and display sort indicators) and JavaScript (to handle the sorting logic). The CSS styles headers for clickability and displays ascending/descending icons. JavaScript code sorts table rows based on selected column content, maintains current sort state (ascending or descending), and updates the sort indicator in the header. Users click on headers to initiate sorting.

1. Use the HTML `<p>` tag with inline styling to align images. For center alignment, use:

```html
<p style="text-align: center"><img src="[Image-URL]" /></p>
```

2. Replace `[Image-URL]` with the image URL from Document360 Drive. To find the URL:

- Navigate to the image in Drive.
- Click "View details" and copy the URL from the file details.

3. Adjust alignment by changing the `text-align` value to `left` or `right`.

4. This method works for any image file type, including buttons and logos.

### Site Customization: Opening Links in New Tabs

To open all links in knowledge base articles in new tabs, customize the site's CSS & JavaScript. Insert provided JavaScript code targeting specific HTML elements containing links (`content_block_text a` or `block-article a`) setting the `target` attribute to `_blank`. Save the changes. This will force all links within those elements to open in new tabs.

### Site Customization: Changing Table of Contents Color

To change the table of contents color, use custom CSS. For **KB Site 1.0**, target `.content_block .content_container .page-action .article_action_links ul li a` and set the color. For **KB Site 2.0**, use `d360-table-of-content .toc-item .toc-toggle-icon, d360-table-of-content .toc-item a` for all items and `d360-table-of-content .toc-item.selected a` for selected headings. Replace color values as needed and save changes.

## Content Enhancement

### Content Enhancement: Setting Default Featured Images

In Document360, set a default featured image for knowledge base articles to ensure consistent thumbnails on social media shares. This replaces a random article image if no specific featured image is defined for an article. The default image must be publicly accessible.

## Site Customization

### Site Customization: Customizing Hyperlink Size

To customize hyperlink size, use custom CSS available in the Enterprise plan:

1. Go to **Settings** > **Knowledge Base Site** > **Customize Site** > **Custom CSS & JavaScript**.

2. Add CSS:

```css
.CustomLink {
  font-size: 25px;
}
```

3. Apply the class to hyperlinks:

```html
<a class="CustomLink" href="your-link">Link Text</a>
```

4. Adjust the font-size value and save changes.

## Content Formatting

### Content Formatting: Adding Image Borders in Markdown

Use HTML within Markdown. Add a `style="border: [width]px [style] [color];"` attribute to the `<img>` tag. Example: `<img src="image.jpg" alt="description" style="border: 2px solid grey;">` Adjust width, style, and color as needed. Alternative, consult linked article for shadows.

## Content Enhancement

### Content Enhancement: Embedding YouTube Shorts

To embed a YouTube Short, use an iframe. Replace `/shorts/` with `/embed/` in the Short's URL. Use the provided iframe code, adjusting the `src` attribute with the embed URL. The optimal size is 315px x 560px, but you can vary it as needed.

## Content Formatting

### Content Formatting: Adding Image Shadows in Markdown

Use HTML within Markdown to add shadows with `box-shadow` CSS. Example:

```html
<img
  src="image.jpg"
  alt="Image description"
  style="box-shadow: 3px 3px 3px gray;"
/>
```

Customize horizontal offset, vertical offset, blur radius, and color to your preference.

1. Navigate to Knowledge base portal Settings () > Knowledge base site > Integrations.
2. Under Custom HTML, click Add.
3. Paste the meta tags with your image URL:

```
<meta property="og:image" content="Image_URL" />
<meta property="og:image:secure_url" content="Image_URL" />
```

4. Replace "Image_URL" with your image link (e.g., from Document360 drive) and click Add.

This sets a default image for social media shares when articles don't have a featured image.

## Content Enhancement

### Content Enhancement: Embedding Excel Files

Document360 allows embedding Excel files directly into articles, making documentation more engaging and informative. Specific features and availability likely vary by plan level (Professional, Business, Enterprise).

### Content Enhancement: Embedding Excel Files - Process

Embed an Excel file in Document360 by: 1) sharing the Excel file in Excel (File > Share > Embed). 2) Copying embed code. 3) Pasting the code into the Document360 editor (Markdown or Advanced WYSIWYG). Screenshots and sample code provided.

## Site Customization

### Site Customization: Changing Feedback Button Colors

Change the colors of "Yes" and "No" feedback buttons in a knowledge base site (Document360) by adding custom CSS code targeting specific classes and elements. Navigate to settings > Knowledge base site > Customize Site > Custom CSS & Javascript, add the given CSS snippets, update color values, save, and the buttons will change color. Before/after screenshots demonstrate the change.

### Site Customization: Changing Feedback Button Colors

To change the color of feedback buttons, follow these steps:

1. **Access Custom CSS/JS**: Ensure you're on an Enterprise plan, as this feature is only available there.
2. **Target Feedback Buttons**: Use CSS to select the feedback buttons using their class or ID.
3. **Apply Color**: Define a new color using a hex or RGB value within your CSS rules.
4. **Save and Test**: Implement the changes and test the appearance of the buttons.

Example CSS:

```css
.feedback-button {
  background-color: #ff6b6b; /* Replace with desired color code */
}
```

### Site Customization: Hiding the Footer on Mobile

Hide custom footers on mobile for better user experience. Mobile-optimized layouts prioritize content above the footer on smaller screens.

## Content Enhancement

### Content Enhancement: Embedding Loom Videos

To embed a Loom video into your Document360 page:

1. Access your desired video in Loom.
2. Click **Share** > **Embed**, select the fixed size, and copy the embed code.
3. Paste the code into the editor you're using:

- **Markdown editor**: Paste directly.
- **WYSIWYG editor**: Use the Insert video > Embedded code option.
- **Advanced WYSIWYG editor**: Go to Insert > Video > Embed code.

The video will then be embedded in your article.

## Site Customization

### Site Customization: Changing Header Hover Color

To change the hover color of knowledge base header menu options, add specific CSS targeting those elements, in the Knowledge Base site's custom CSS settings. The example provided uses red, but you can adjust as needed. The documentation shows both the initial state and the state after the CSS changes are applied.

### Site Customization: Changing Header Hover Color

To customize the hover color of header options, users with Business or Enterprise plans can use custom CSS. Apply a CSS rule targeting the header elements' hover state. For example:

```css
.header-link:hover {
  color: #yourdesiredcolor;
}
```

### Site Customization: Repositioning Related Articles

To move the related articles above the feedback section, follow the unspecified steps and likely utilize custom CSS or Javascript to change the default placement.

### Site Customization: Hiding Footer in Mobile View

To hide the footer on mobile devices for a Knowledge Base site, follow these concise steps:

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Choose the correct CSS snippet based on your site version:

- **KB site 1.0**: Use CSS targeting `.custom-footer` with `max-width: 469px`.
- **KB site 2.0**: Use CSS targeting `site-footer-section` with `max-width: 767px`.

3. Paste the selected CSS snippet into the CSS tab and click **Save**.
4. **Test the site** to ensure the footer is hidden on mobile without affecting other elements.

### Site Customization: Hiding the Change Password Option

To remove the "Change Password" option for knowledge base readers, customize the site's CSS by hiding related HTML elements. This edits `.user-dropdown-content .user-detail .portal-link a` and `.nav-bar-profile button.dropdown-item` selectors to hide the link in the user dropdown; save the change.

### Site Customization: Hiding the Category Manager

Project-specific solution (impacting all workspaces) uses custom CSS/JS to restrict article access to specific URLs. Readers can only view articles with matching URLs . This hides the category manager.

The solution involves adding a JavaScript snippet to your Document360 Knowledge Base 1.0 site to move the related articles section above the feedback section. Here's a concise overview of the steps:

1. Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. Under the JavaScript tab, paste the provided snippet:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Save the changes to implement the modification.

This script appends a separator line to the content block and moves the related articles above the feedback section.

1. Access **Settings**, navigate to **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. In the JavaScript section, paste the following code:

```javascript
window.onload = function () {
  $('.content_block_text').append('<div class="sperator"><hr></div>');
  $('.related-articles-container').appendTo('.content_block_text');
};
```

3. Click **Save** to apply the changes.

To hide the change password option for readers using custom CSS or JS on Business or Enterprise plans:

1. **Identify the Element**: Locate the HTML element (e.g., button or link) for the change password option. Use browser developer tools to find its class or ID.

2. **CSS Implementation**: Write CSS to hide the element. For example:

```css
.change-password-link {
  display: none;
}
```

3. **JavaScript Enhancement**: If the element is dynamically loaded, use a Mutation Observer to detect and hide it when it appears. Alternatively, remove it directly after DOM loads:

```javascript
window.addEventListener('DOMContentLoaded', function () {
  document.querySelector('.change-password-link').remove();
});
```

4. **Consider Dynamic Content**: If the site uses AJAX, ensure your script runs after content loads or use a mutation observer for real-time changes.

5. **Test Across Scenarios**: Verify functionality across browsers, devices, and page scenarios, ensuring no accessibility issues arise.

6. **Security Note**: Hiding the UI doesn't prevent direct URL access. Consider backend restrictions for full security.

By following these steps, you can effectively hide the change password option while maintaining site functionality.

### Site Customization: Configuring Custom Fonts

To configure a custom font in Document360, obtain the font details, add the font link to Custom HTML, and add the font family details to Custom CSS. Example: configuring a Google font in Document360.

### Site Customization: Hiding the Category Manager

Hide the category manager in Knowledge Base by adding custom CSS. For version 1.0, target `.left_sidebar` and `.left-sidebar-toggle`. For version 2.0, use `site-docs-left-panel-container`. Navigate to **Settings > Knowledge base site > Customize site > Custom CSS & JavaScript**, paste the relevant code, and save.

### Site Customization: Hiding the Left Navigation Bar

Custom CSS/JS can hide the knowledge base's left navigation bar, but users can still display it by clicking a "Show category" icon.

## Billing

### Billing: Plans and Pricing

To configure a Google font in Document360, follow these concise steps:

1. **Get the Font Code**: Select your font on Google Fonts, then obtain the embed link under the "Get font" section.
2. **Add to Custom HTML**: In Document360, navigate to Settings > Knowledge base site > Integrations > Custom HTML, and paste the embed link in the Header section.
3. **Apply via Custom CSS**: Update your CSS by adding `font-family: 'YourFont', sans-serif;`, replacing "YourFont" with your chosen font name.

Embed Google Fonts in Document360 by adding the font link to Custom HTML and specifying the font family in Custom CSS.

## Site Customization

### Site Customization: Hiding the Left Navigation Bar

To hide the left sidebar on your Knowledge Base site:

1. **Access Customization**: Go to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.
2. **Add CSS Code**: In the CSS tab, paste the following snippet:

```css
site-docs-left-panel-container {
  display: none !important;
}
```

3. **Save Changes**: Click **Save** to apply the changes.

After implementing, the left sidebar will be hidden by default.

## Billing

### Billing: Accessing Billing Overview

To access billing, navigate to Settings > Knowledge base portal > Billing. Key tabs: My Plan (change via support), Payment Information, Invoice History. Changing plans requires support for legacy users. Free plan is discontinued. Check the pricing page for current details.

### Billing: Upgrading Your Plan

Document360 users can upgrade their Professional, Business, Enterprise, Legacy, or Legacy Free plans. Upgrades incur a prorated cost for the remainder of the current billing cycle. Legacy plan upgrades may include credits. Only Owners or users with Billing & Invoice permissions can make changes to the plan.

### Billing: Available Plans

Document360 offers five subscription plans tailored to different needs: **Professional**, **Business**, **Enterprise**, **Enterprise +**, and a **Startup program**. The **Professional**, **Business**, and **Enterprise** plans differ in features such as storage capacity, translation credits, workspace count, sandbox availability, and team/reader accounts. The **Enterprise +** plan provides dedicated servers for enhanced performance and security, while the **Startup program** offers six months of free access to select plans, followed by a discounted rate. Additional add-ons for storage, languages, and customizations are available across all plans.

### Billing: Plan Comparison

Document360 offers tiered plans (Professional, Business, Enterprise) with increasing feature sets. Business offers more storage, team collaboration (readers/reviewers), advanced analytics, Workflow Designer, Ticket Deflector, & various AI features compared to Professional. Enterprise expands on Business with substantially more storage, larger teams, a sandbox, IP restrictions, comprehensive AI (including premium support), and health checks. Upgrading from Professional to Enterprise provides all Business and Enterprise features.

### Billing: Upgrading Your Plan

To upgrade your subscription plan in Document360, navigate to **Settings > Knowledge base portal > Billing** and click **Change plan**. Choose from Professional, Business, or Enterprise plans. Compare features in the **Compare plans and features** section, then select your plan and click **Let’s talk** to contact the sales team for assistance. [Upgrading from a trial version](/help/docs/upgrading-from-trial-version) directs to specific guidance.

### Billing: Upgrading from Legacy Plans

Users on legacy pricing plans (pre-August 31, 2024), can't upgrade directly; they need support assistance. Navigate to Billing > Change Plan > Let's Talk > Raise Request. Support team processes upgrade within 2 business days. Contact support for questions.

### Billing: Upgrade FAQs

Upgrading gets you more features, storage, and support. Billing adjusts immediately or at the end of your cycle, with a prorated credit for unused portion when upgrading mid-cycle. Trials are available. Data and settings are preserved. Minimal setup is usually required. Downgrading is possible but may result in feature loss.

### Billing: Upgrading from Legacy Free Plan

The Free plan was discontinued as of November 2024, but existing users retain access. To upgrade, navigate to **Settings > Billing > My plan**, click **Change plan**, compare features, and select your preferred plan. Click **Let’s talk**, and the Document360 sales team will assist with the upgrade process.

### Billing: Downgrading Your Plan

To downgrade from your current Document360 plan, navigate to settings, select "Change plan," and choose from Professional, Business, or Enterprise. Compare features and limits to ensure your current usage fits the new plan. The sales team will assist and discuss add-ons for features lost in the downgrade. Check the pricing page for details on plan limitations.

### Billing: Downgrading Your Plan

To downgrade your Document360 plan, note that some features may no longer be available. Only users with **Owner** permissions or **View and Update** access for **Billing & Invoice** can make changes. You can downgrade from:

- [Enterprise to Business](/help/docs/downgrading-your-plan#enterprise-to-business)
- [Business to Professional](/help/docs/downgrading-your-plan#business-to-professional)
- [Enterprise to Professional](/help/docs/downgrading-your-plan#enterprise-to-professional)

### Billing: Downgrade - Plan Comparison

Downgrading loses features and capacity. Enterprise to Business: Reduced storage, users, reviewers, and some AI tools (with reduced credits). Business to Professional: Losses in workflow tools, analytics, integrations, AI summarization, and reduced storage and users. Enterprise to Professional loses all Enterprise and Business features. Storage, user limits, and AI credits decrease significantly. Some features are retained with reduced capacity or access to specific tools.

### Billing: Downgrade Considerations

Downgrading retains most existing data and some features but limits new content creation, removes access to some features, and restricts add-on usage based on the lower plan's capabilities. Data exceeding plan limits may be lost. Existing articles, tags, feedback, and PDF exports are generally preserved, but new creation, editing, and customization are restricted. Widget and custom JS/CSS functionality are also affected by the reduced plan.

### Billing: Downgrade FAQs

Downgrading preserves data but may limit features and storage. Billing adjusts with a potential credit. Features tied to the higher plan might be lost, but data remains. Upgrade is possible later, but limits from the lower plan apply until upgraded again. Review new plan details before downgrading and consult support if needed.

### Billing: Downgrading from Legacy Plans

Legacy pricing plan users (subscribed before 31st August 2024) must contact support to downgrade. Navigate to the Billing page, select "Change plan," click "Let's talk," and raise a request. Support will review and process within two working days. For additional help, contact support via email, live chat, or phone.

### Billing: Post-Downgrade Tips

- After downgrading, review your content and update workflows, communicate changes to your team, monitor usage, and consider future needs. Downgrading doesn't reduce quality or performance, and support is available if needed.

### Billing: Changing Plans During Trial

During the 14-day Document360 trial, you can freely switch between plans to evaluate different features. Navigate to Settings > Billing, choose "Try other plans," select your desired plan, and confirm. Downgrading may result in loss of certain features. This process is free and allows informed subscription decisions.

### Billing: Subscribing to a Plan

To subscribe, navigate to Settings > Knowledge base portal > Billing. Click "Buy now" to view plans. Select a plan and click "Let's talk." Document360 sales will help with the purchase.

### Billing: Purchasing Add-ons

Document360 offers various add-ons to enhance your documentation setup, available across Professional, Business, and Enterprise plans. Add-ons include workspaces, languages, translation credits (1M chars), storage (50GB), team accounts, readers (5000 per unit), and PDF export limits. Business users can add Crowdin and Phrase extensions, while Enterprise users can purchase Salesforce extensions and additional sandbox environments. To buy add-ons, visit the Billing section under Settings, select add-ons, and confirm payment. Note: A saved card is required. Legacy plan users can purchase select add-ons; contact support for offline purchases.

### Billing: Upgrading from Trial

Document360 offers a 14-day trial with full access to all features. Users can switch plans during the trial and upgrade anytime. Only project owners can access billing features.

### Billing: Updating Payment Information

This document describes how to change payment information. Specific instructions are needed for a comprehensive TLDR.

### Billing: Payment Information FAQs

You can't delete your primary payment card, but you can edit it. Secondary cards can be deleted. To change your primary card to a secondary, select "Set as primary". To edit any card, navigate to Settings > Billing > Payment information, and follow the on-screen instructions for the action you need (edit, delete, or set primary). The platform is a knowledge base management tool for content creation, team management, and site configuration.

### Billing: Trial Period FAQs

- **Trial Features:** Access all features during the trial to evaluate the platform thoroughly.
- **Downgrading:** Data remains, but features and limits adjust based on the new plan.
- **Trial Extension:** Possible in some cases; contact support.
- **Post-Trial:** Project is held and scheduled for deletion if not subscribed; action can be taken before deletion.
- **Trial Limitations:** None; same as paid plans.
- **Support:** Available via chat, demo, or direct contact.
- **Auto-Charge:** Manual subscription required post-trial.
- **Currency Pricing:** Varies by currency selection.
- **Exchange Rates:** Fixed pricing, changes notified via email.

To change your payment information, follow these steps:

1. **Access Settings**: Log into the Knowledge base portal and navigate to the Settings section.
2. **Billing Section**: Click on **Billing** to enter the billing area.
3. **Payment Information Tab**: In the My plan section, switch to the **Payment information** tab.
4. **Edit Payment Details**: Under the Credit card tile, you can update your payment method and billing address.
5. **Add Secondary Card (Optional)**: If needed, add another card by clicking **Add another card**. The secondary card will be used if the primary card fails.

Remember that only the team account owner can access and modify billing information.

## Notifications

### Notifications: Managing Notification Channels

Configure a custom notification channel to monitor specific events. Navigate to **Settings -> Notifications > Event Mapping** to enable alerts for changes in areas like custom domains, CSS/JavaScript, backups, and project members. Also, monitor documentation, landing pages, articles, and payments. This ensures timely notifications for maintaining functionality and content.

### Notifications: Viewing Notification History

The 'History' section in Document360's Notification feature allows users to view all previously sent notifications across configured channels.

## Content Organization

### Content Organization: Hiding Categories

The feature allows hiding categories from the Knowledge base and search results, maintaining privacy for categories under development, including their subcategories and articles.

## Site Customization

### Site Customization: Custom Footers

Document360's custom footers offer two configuration paths: (1) a blank layout for complete HTML/CSS customization, or (2) predefined themes A & B with pre-built styles.

## Updates

### Updates: Category Tree Enhancements

Improved emoji library loading speed in the category manager, enhancing user performance.

## Support

### Support: Viewing Ticket Status

To view your Document360 support ticket status: 1) Log in to support.document360.com; 2) Search for your ticket using keywords; 3) Filter by status (All, Open/Pending, Resolved/Closed, Archive); 4) Click the ticket; 5) The status will be displayed on the right, along with the ticket history.

### Support: Support Ticket Information

| Professional | Business | Enterprise |
|--------------|----------|------------|
|              | ✓        | ✓          |

Need support? Visit the [Document360 support page](https://support.document360.com/support/login) to raise and track tickets. Our experts respond within minutes for Business and Enterprise plans.

### Support: Raising Support Tickets

To raise a support ticket in Document360, log in via the [support page](https://support.document360.com/support/login) using your credentials or SSO. Customers without support credentials can log in using their Document360 account. Once logged in, click "Submit a ticket," fill in the required fields (Requester, Subject, Group, Description), attach any relevant files, and submit. After submission, you'll be redirected to a status page with your Ticket ID and other details.

### Support: Exporting Support Tickets

Export Document360 tickets as **.csv** or **.xls** files by logging in, selecting Tickets, and configuring export settings like date range, format, and fields before downloading.

## Troubleshooting

### Troubleshooting: Understanding HAR Files

A HAR (HTTP Archive) file is a JSON log of a web browser's interaction with a webpage, capturing requests, responses, timings, cookies, and other metadata for debugging and performance analysis. Web browsers and tools can generate them. Used by Document360 team.

### Troubleshooting: Generating HAR Files

To troubleshoot Document360 issues, generate a HAR file capturing network activity in your web browser's developer tools. Open dev tools, enable network recording, reproduce the problem, stop recording, and save the generated HAR file. Follow browser-specific UI variations. Instructions are similar across Chrome, Firefox, Edge, Safari, and Opera. Targeted at Document360 users.

To generate a HAR file, follow these steps in your browser:

1. **Chrome**:

- Open Developer Tools (F12 or right-click > Inspect).
- Navigate to the Network tab.
- Begin recording (Ctrl+E or the record button).
- Refresh the page or perform the desired actions.
- Once done, right-click on the request list and choose "Save All As HAR" to export.

2. **Firefox**:

- Open Developer Tools (F12 or right-click > Inspect).
- Go to the Network tab.
- Start recording (toggle the record button).
- Carry out the necessary actions.
- Right-click anywhere in the Network tab > Select "Save All As HAR" to save.

**Tips**:

- Clear your browser cache before recording to capture accurate data.
- Be cautious as HAR files contain sensitive data; ensure personal information is removed before sharing.

This method effectively captures network traffic for troubleshooting using built-in browser tools.

</document_content>
</document>

<document index="24">
<source>docs/d366.json</source>
<document_content>
[
  {
    "heading": "Introduction",
    "text": "## Introduction\n\n### Introduction\n\nDocument360 is a knowledge management platform enabling creation and curation of public, private, or mixed-access knowledge bases. Key features include My Projects, Knowledge base portal/site, and Document360 AI (Eddy AI) for interacting with the platform.",
    "summary": "## Introduction\n\n**Document360:** Knowledge management platform for creating & curating public/private/mixed-access knowledge bases.  Features include: My Projects, knowledge base portal, and Document360 AI (Eddy AI)."
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="25">
<source>docs/d366.md</source>
<document_content>
## Introduction

**Document360:** Knowledge management platform for creating & curating public/private/mixed-access knowledge bases.  Features include: My Projects, knowledge base portal, and Document360 AI (Eddy AI).

## Documentation Guide

Comprehensive guide covering Document360's platform overview, project creation, editor tools (Markdown, WYSIWYG), article management (publishing, SEO, access control), AI features (Eddy AI, translation, analytics), security (SSO, CSP), file management, collaboration (workflow, templates), branding, and customizations. Includes 2019–2025 release notes detailing updates.

The Document360 Knowledge Base Portal is a comprehensive platform for creating, managing, and configuring knowledge base sites. It offers tools to manage categories, articles, templates, files, teams, and readers, with features like branding, domain, and security configuration. The portal includes a dashboard for project overviews, a tree-view documentation structure, interactive API documentation, analytics, widgets, cloud storage, and universal search. These interconnected functions streamline knowledge base maintenance and enhance user engagement.

## Project Management

**TLDR:** Document360's project dashboard displays all user-owned, team-associated, and reader-associated projects.  Project visibility is categorized as public, private, or mixed.

## Additional Resources and Support

**Document360:** Knowledge management platform with public feedback, trial explorer, and in-app support.  Features include categorized articles, templates, file/team/reader management, analytics, Eddy AI assistance, revision history.  Supports in-app chat, email, docs, tutorials. Scheduled maintenance may impact access.

## Getting Started

To get started with **Document360**, create an account by visiting the signup page.

## Key Components

Knowledge base site offering public, private, and mixed access levels for end-user articles.  Website provides access to content.

## AI Integration

Eddy AI is Document360's AI-powered writing assistant, offering article writing, SEO descriptions, tag, title, and related article recommendations, plus assistive search and article summarization to improve knowledge base sites and reader experiences.

## Troubleshooting and Support

TLDR: Resolve Document360 login issues by switching browsers, clearing cache, checking VPN and system time, or contacting support with HAR files. Ensure system meets requirements: OS (Windows 10+, macOS High Sierra+, Ubuntu 18.04+), dual-core processor, 4 GB RAM, 500 MB disk space, integrated graphics, stable internet with TLS 1.2, and dependencies like Java 8. Use supported browsers (Chrome 90+, Firefox 88+, Safari 13+, Edge 90+), enable JavaScript/cookies, and ensure screen reader compatibility. Test on VMs/physical hardware, allow auto-updates, and verify HTTPS/SAML support.

## Getting Started

**TLDR:**  Document360 signup requires basic details, email verification, password creation (security criteria), use case/template selection, personalization (URL/branding), privacy setting choice, and setup completion. A free trial leads to paid plans; FAQs address common issues like language support, plans, and verification.

## System and Browser Requirements

- **Supported Operating Systems:** Windows 7+, OSX Mavericks+, Linux, Android 5+, iOS 12+  
- **System Requirements:** Minimum 2-core CPU, 4GB RAM  
- **Supported Browsers:** Google Chrome 91+, Firefox 79+, Safari 13.1.2+, Microsoft Edge 88+  
- **Browser Features Required:** JavaScript, Cookies, Session/Local Storage, IndexedDB, HTTPS-TLS v1.2+  
- **Unsupported Browser:** Internet Explorer  
- **Support Contact:** support@document360.com

## User Interface

**TLDR:** Top-right menu provides access to user profile, security, and help.  Access to "My profile" is plan-based, but details are currently unavailable.

## Project Management

Document360's "Your Projects" dashboard allows users to manage projects based on roles (owner, team, reader) with varying access tiers: Professional (basic access), Business (enhanced team features), and Enterprise (unlimited project associations). The dashboard streamlines navigation and provides essential tools for efficient documentation project management.

## User Profile

- Access profile options via your profile picture in the top-right corner.
- **My profile**: Edit personal info (image, name, email, bio, portal language, role, content access).
- **View Access/Permissions**: Displays portal and content role permissions (editable by Team accounts with admin rights).
- **Change Password**: Requires current password, a strong new password (8+ chars, mix of uppercase, lowercase, number, special character), and confirmation. Password change logs you out automatically.

## User Interface

**TLDR:** Document360's UI offers a top-right menu for profile management (personal info, permissions, password), system updates, and help.  The help menu includes searchable documentation, support chat, ticket creation, system status, and a feedback portal.  Contact support at `support@document360.com`.

## Updates and Releases

TLDR: Document360 release notes are accessible via the Knowledge base portal button, project summaries, or the dedicated Document360 Updates - Changelog page, with full details available through an external link.

## Localization

**TLDR:** Document360 supports internationalized knowledge base sites, enabling multilingual content for improved user experience.

## Project Dashboard

**TLDR:** Document360 Dashboard provides a two-tabbed view, "My Contribution" and "Overview", for project and team insights.  It includes a plans table, though with no specific details.

## Project Management

Document360 offers robust project management features, enabling easy switching between projects via dropdown or dashboard, with options for public, private, mixed, or sandbox projects. Access control and article revisions ensure security and version management. Creating a project involves selecting a use case, choosing up to two templates, customizing branding and privacy settings, and accessing a preloaded portal. The overview tab provides key metrics and insights, including contributions, performance, storage, and user data, with filtering and drill-down options for detailed analysis.

## Project Management

**TLDR:** Document360's Sandbox project is an isolated testing environment for safely experimenting with, refining, and training teams on features, workflows, and setups without impacting live users.  Encourages early issue identification and optimized feature setup.

The **My Contribution** tab in Document360 provides a detailed overview of your work, including articles, tasks, and performance metrics. It offers features like tracking created, published, or draft articles, monitoring performance metrics such as views, reads, likes, and dislikes, and managing assigned tasks with workflow status and due dates. Additionally, it includes review reminders for stale articles, access to user feedback, and identification of broken links within articles. Filters allow you to focus on specific workspaces, languages, or date ranges to refine the data.

## Localization

**TLDR:** To add multiple languages to a workspace, navigate to Settings > Knowledge base portal > Localization & workspaces.  Choose Method 1 (edit workspace and add languages) or Method 2 (use the "Add new language" icon).  Translate content manually or with tools like Crowdin. Manage settings like default language, display name, and text direction.

## Frequently Asked Questions (FAQ)

- **Languages per Plan:** Professional (2), Business (3), Enterprise (5). Add-ons available.
- **Knowledge Base:** Self-service platform with articles, managed by teams via categories, branding, and security.

## Business Continuity and Disaster Recovery

**TLDR:** Document360 prioritizes high availability and data safety through geographically replicated databases, multiple service instances.  DevOps practices (code reviews, QA, version control) and daily/weekly/monthly backups ensure reliability.  Disaster recovery includes incident management and Azure CDN for rapid service restoration.

## Security and Infrastructure

Document360 employs a robust security and infrastructure framework, utilizing MongoDB Atlas for encrypted data storage and Azure Cloud for hosting, with TLS encryption for data in transit. It maintains daily/weekly/monthly backups in Azure Blob Storage. Partnerships with Algolia, MongoDB Atlas, and Azure ensure compliance with standards like SOC2/SOC3, while features like API token authentication and DDoS protection enhance security. An expert technical team manages the system, ensuring adherence to modern SaaS security practices.

## Best Practices

- Secure API keys by not sharing them publicly and revoking compromised ones immediately.
- Assign only necessary permissions to API keys and use predefined roles to manage team access effectively.
- Regularly perform automatic and manual backups to prevent data loss.
- Set document visibility to private when needed to control access.

## Security

**TLDR:** X-Frame Options header prevents unauthorized embedding of the knowledge base in iframes from other domains, thus mitigating clickjacking attacks.

## Support and Help

**TLDR:** Document360 provides expert support for security and infrastructure, including API and X-Frame-Options related issues.

## Compliance

Document360 is fully GDPR compliant, ensuring it only collects and stores essential data with explicit customer consent. [Learn more](https://document360.com/gdpr-compliance/).

## Content Creation

**TLDR:** Document360 offers three editors: Markdown (custom syntax/HTML), WYSIWYG (rich text formatting), and Advanced WYSIWYG (combining Markdown & WYSIWYG features).  These editors are vital for creating and managing knowledge base articles, accommodating different formatting and customization needs.

## Security

Document360 offers robust security measures through Content Security Policy (CSP) and bot management. CSP restricts external resources to prevent XSS attacks, configurable by specifying allowed domains for stylesheets, scripts, and frames, with nonce attributes for custom scripts. X-Frame options prevent unauthorized embedding, protecting against clickjacking. Bot management leverages Cloudflare's heuristics and machine learning to detect and block malicious bots, categorizing them into good (e.g., GoogleBot) and bad (e.g., DDoS bots). Enhanced features include widget security for Enterprise plans with specific CSP directives and troubleshooting guidance for resolving blocked content. Regular updates and proper configurations ensure data integrity and protection against sophisticated threats.

## Fair Usage Policy

Document360's Fair Usage Policy employs rate limiting to prevent misuse, ensuring quality service. It restricts requests to 1,500 per minute (or 300 per 10 seconds) per IP, enforced by Cloudflare using bot detection with heuristics and machine learning. The policy aims to prevent bot traffic and DoS attacks, though specific bot management rules are not detailed here.

## Fair Usage Policy

**TLDR:**  This policy prevents anyone from using resources excessively, ensuring fair access and consistent service for everyone.  Expect limits on resource use to maintain a balanced system.

## Fair Usage Policy

Adhere to this policy to maintain system health, prevent server overload, ensure responsive service for all users, and avoid abuse or unintended high-volume requests. Contact support if higher limits are needed.

## Content Creation

- **Markdown Editor**: A split-screen editor for writing and previewing articles, ensuring consistent formatting. It supports image insertion with adjustable sizes and is ideal for professional documentation.
- **WYSIWYG Editor**: An HTML-based editor like WordPress, offering real-time formatting and extensive options for text, code, and media. Best for articles with substantial code or multimedia content.

## Content Creation

**TLDR:** Document360 offers Markdown, WYSIWYG, & Advanced WYSIWYG editors, with project-level default editor selection.  Switching between Markdown and WYSIWYG editors is article-level only, and Advanced WYSIWYG is irreversible.  The interface now features unified workspace/language selection and accessibility improvements. Content creation tools allow users to create categories, articles, utilize templates and import content.

## Related Resources

**TLDR:** Markdown is a formatting language for text that converts plain text to HTML. It enables easy creation of various content formats like lists, headers, images, and links.

## Content Organization

Document360's content organization system uses categories and subcategories for logical grouping of articles within a knowledge base.  Users can create, rename, delete, move, clone, star, and customize categories.  Integration with Google Drive allows automated image placement based on category.  Methods for various tasks (hiding, renaming, deleting) are clearly outlined, catering to different user needs.  Three category types (Folder, Index, Page) are available, each with distinct functionalities.  Key to the system's operation is a logical, hierarchical structure, and user accessibility considerations for optimal experience and knowledge base usability.

## Content Creation

Entity-dense TLDR:

Document360 supports both Markdown and WYSIWYG editors for content creation. Markdown offers syntax for headings, text styles (bold, italic, strikethrough), lists, links, blockquotes, and more. The WYSIWYG editor provides a Word-like experience with rich text formatting, media insertion, and advanced features like LaTeX, callouts, and content reuse. The Advanced WYSIWYG editor includes tabs, conditional blocks, and detailed table customization but lacks support for Markdown tables and certain styles. Key Markdown commands include `## Heading`, `**bold**`, `*italic*`, `1. numbered`, `- bullets`, `[links](URL)`, and `> blockquotes`. Best practices emphasize clear structure, concise formatting, and effective use of features to enhance readability and professionalism.

## Content Creation

**TLDR:** Document360 articles are created via four methods: top bar, Flywheel, More icon, or within folders/indexes.  Navigation to Documentation is required, along with naming and category selection.  Article limits exist: Professional/Business 5,000; Enterprise 10,000.

## User Interface

- **Left Navigation Bar:** Includes sections like Dashboard, Documentation, API Documentation, Analytics, Widgets, Drive, and Settings. The Categories & Articles section contains options such as All articles, Workflow assignments, Starred, Recycle bin, Site builder (redirects to Customize site in Settings), and Content tools. Recent updates have improved the usability of the More options menu.

- **Article Editor's Header Section:** This section displays the article's URL/slug, shows the status (New, Draft, Published, Stale), provides article information (contributors, stats, dates) with a Manage option. It includes a preview feature, editing options for title, slug, and description, AI Glossary recommendations, workflow status updates, a More menu (•••) for actions like clone, move, hide, delete, SEO, tags, and Related articles. Additionally, it facilitates discussions with a comments section and offers a full-screen view option.

## Content Export

Export categories and articles into PDFs with customizable templates, exclusive to private projects. Enable via Settings > Knowledge base site > Article settings. Users can choose templates during export. A 500 MB daily limit applies, with options to buy more. Note: KB site customizations don't affect PDFs, and visibility settings may limit exports.

## Content Management

**TLDR:**  Clone articles in the knowledge base using either the category/article view or the folder/index view by navigating to "Documentation," hovering over the article, clicking "More" > "Clone," and filling in details.  Cloning can be across workspaces but respects security restrictions.  Auto-update links adjust to the new location.

## Content Import

Document360 allows importing .docx files under 15MB for efficient knowledge base content transfer, simplifying the article import process.

## Content Import

**TLDR:** Document360 imports .docx files as single or multiple articles based on headings.  Errors `documentation.categoriesAndArticles.maxArticlesCountReached` or `documentation.categoriesAndArticles.articleLimitExceedsPerCategory` indicate exceeding article limits (100 articles/category, varying workspace limits). Reduce article count, verify plan limits, or contact support if issues persist.  Media and hyperlinks are preserved during import.

## Content Management

- **Tiered Features**: Document360 offers article management with Professional including basic handling, Business adding version control and collaboration, and Enterprise providing advanced access and custom workflows.
- **Article Locking**: Prevents simultaneous edits with 15-minute auto-unlock or manual unlock via portal icon or navigation away.
- **Templates**: Allows creation from Flywheel, More option, or Create button, useful for consistent content like troubleshooting guides.
- **Deleting**: Five methods to delete single or bulk articles, each requiring navigation and confirmation.
- **Renaming**: Done via article name click or More menu, with confirmation for published articles.
- **Moving**: Five methods include drag-and-drop and More menu, with security restrictions.
- **Editing**: Involves changing content, with markdown viewing option, and republishing.
- **Replicating**: Copies articles to multiple categories, with possible setting restrictions.
- **Hiding/Unhiding**: Controls visibility, with four methods and a strikethrough indicator for hidden articles.

This structured approach efficiently covers Document360's content management capabilities.

## Collaboration

**TLDR:**  Add inline comments to knowledge base articles by selecting text, clicking the comment icon, typing, and sending.  Mention collaborators with the `@` symbol.  Enable notifications for updates. Published articles automatically delete unresolved comments.

## Content Publishing

- **Publishing from Editor**: Publish articles with optional comments, configure settings (tags, SEO, related articles, status indicators) using AI assistance for tagging and descriptions. Status indicators can be auto-updated. Follow visual instructions via screenshots.

- **Bulk Publishing**: Select multiple articles to publish, ensuring only unpublished ones are chosen. AI features require articles to be at least 50/200 words. Verify publication by checking hidden status, restrictions, and workspace settings.

- **Publishing Process**: Involves making reviewed/drafted articles available to users, with plans offering different features:
  - **Professional**: Basic customization and SEO.
  - **Business**: Advanced targeting and analytics.
  - **Enterprise**: Custom domains and multi-language support.

## Content Import

The process of importing .docx files involves selecting an appropriate editor in the Knowledge base portal settings under **Settings > Knowledge base portal > General > Editor**. Choose either WYSIWYG or Advanced WYSIWYG, as Markdown does not support .docx imports. Ensure files are under 15MB and consider splitting large documents for efficiency. Common issues include TOC header conflicts, firewall blocks, password-protected files, style mismatches, and the "maximum articles" error, which can be mitigated by adjusting heading tags. Best practices include testing with small files and addressing formatting inconsistencies post-import.

tag, provide a markdown heading, and a concise TLDR. I need to ensure the TLDR captures the key points from the document, making it entity-dense and informative yet brief. I must avoid markdown in the thinking section and use it only in the output as specified.
</thinking>

<output>
## Content Enhancement

**Content Enhancement:** Adding images to articles enhances reader comprehension, boosts engagement, and improves user experience by simplifying instructions and clarifying complex information. Images can be inserted using methods available in both Markdown and WYSIWYG editors.

## Content Enhancement

**TLDR:** Insert images using Markdown (upload/URL/picker/drag & drop) or Advanced WYSIWYG editor (`/image` command, Insert menu).  Use specified dimensions, save images to Document360 Drive for permanence. Local changes to inserted images are not reflected in the stored version.

tag. I'll focus on the inline comment feature in Document360's Advanced WYSIWYG editor, its purpose in article reviews, and its impact on collaboration and documentation quality.
</thinking>

<output>
## Collaboration

Document360's inline comment feature in the Advanced WYSIWYG editor facilitates efficient article reviews and feedback, enhancing collaboration and maintaining high documentation standards.

## Collaboration

**TLDR:**  Users view comments via highlighted areas or icons.  Only the comment creator can resolve comments.  Comment editing/deletion and replying (with character/comment limits) are user-specific.  Team accounts can reply/Team accounts can reply within the system, with filtering options (All, Mentioned me, Open, Resolved).

## Localization

**TLDR:** Machine translation automatically updates internal links to translated content.  Consistent article slugs are vital.  Relative paths are recommended for internal links to avoid broken links.  An FAQ addresses linking before publication, linking to headings, and troubleshooting hyperlink problems.

## Content Enhancement

Document360 offers robust content enhancement capabilities, including **video insertion** via URLs, embed codes, or uploaded files, with broken link detection. **Broken image troubleshooting** involves checking URLs in code view or browser, ensuring correct paths, and using Document360 Drive for stability. **Hyperlinks** can be added to text, images, or files for navigation, with editing options in both WYSIWYG and Markdown editors. **File attachments** enable users to upload or link files, visible on the article's right side, with options to arrange and ensure visibility. Finally, **bookmark links** can be created for specific headings within articles using the WYSIWYG editor, enhancing navigation within long content.

## Content Enhancement

- Add email links in Markdown using `[link_text](mailto:email_id)`.  
- In WYSIWYG, highlight text, use `Ctrl + K` or `/link`, and enter `(mailto:email_id)` in the Link field.

## Content Management

**TLDR:**  Changing article headings breaks hyperlinks.  Use anchor tags within headings to maintain functional hyperlinks when the heading text is updated.

## Content Formatting

Document360 utilizes Prism.js for syntax highlighting, supporting languages like HTML, C#, Java, JavaScript, XML, JSON, CSS, SQL, Python, Markdown, PHP, PowerShell, and Text. Refer to Prism.js documentation for the full list of supported languages.

## Content Formatting

**TLDR:**  Create code blocks with triple backticks (Markdown) or Insert > Code Block, `\`\`\`\`\ + Enter, or `/code block` (WYSIWYG).  WYSIWYG supports custom languages, preserves pasted formatting, and allows non-highlighted code blocks via indentation.  Syntax highlighting available for many languages.

## Content Formatting

**TLDR:**  To create code blocks in the WYSIWYG editor, click the "Code block" icon, select a programming language, enter the code, and click "Insert." Use "Edit" or "Delete" for modifications/removal. The process is shown in a GIF.

## Collaboration

Document360's private notes enhance collaboration by allowing teams to add private reminders or context visible only to specific groups or team members, editable in Markdown or WYSIWYG editors across Professional, Business, and Enterprise plans. While excluded from Knowledge Base PDF downloads, private notes are retained in browser-generated PDFs when using the browser's print/save function.

## Collaboration

**TLDR:** Manage private notes in the WYSIWYG editor by clicking the private note icon and using the floating menu to adjust visibility, copy, or delete. Image reference illustrates the process.

## Collaboration

**TLDR:**  Private notes in Markdown documents, accessible only to team accounts, utilize the syntax `:::(Internal) (Private notes)\nOnly visible to team accounts\n:::` for inclusion, editing, and deletion.

## Content Enhancement

**TLDR:** Document360 now allows embedding Microsoft SharePoint Stream videos (both recent and older) within articles using Markdown or WYSIWYG editors.  No implementation details are given.

## Content Enhancement

**TLDR:** Embed Google Forms, Draw.io diagrams, and Microsoft Stream videos into knowledge base articles using HTML embed code.  Ensure diagrams are publicly accessible; forms allow user interaction/data submission; videos use iframe embeds.  Specific instructions for each type are provided.

**Step-by-Step Explanation:**

1. **Access the Video:** Navigate to the SharePoint Stream video you wish to embed.
2. **Generate Embed Code:** Select the "Share" option, then choose "Embed code" to obtain the embedding script.
3. **Customize Embedding:** Adjust settings such as start time, video size, autoplay, and enable responsive layout to fit your needs.
4. **Set Permissions:** Ensure viewers have appropriate access permissions to watch the video.

By following these steps, you can seamlessly integrate SharePoint videos into your content while maintaining control over viewer access.

## Content Management

**TLDR:** Document360's new "All articles" feature enables bulk actions on multiple articles, streamlining article management (publishing, previewing, hiding, moving, deleting, tagging, translation, PDF download).  Filtering by status, date, tags is key.  Bulk operations are restricted when working with categories that have subcategories.  Details on specific filters for bulk actions are lacking.

## Collaboration

### Collaboration: Private Notes - Advanced WYSIWYG

Create private notes using `/Private note` or the Insert menu. Manage visibility with security or reader groups. Notes can be copied, edited, or deleted except in published articles, serving as internal comments. Access settings via the floating menu.

## Content Optimization

**TLDR:** Optimize knowledge base article SEO for better search engine visibility.  Implement review reminders (with options for Now, 30 days, 3 months, or Custom) to flag articles needing updates.  Reminders include a brief reason for review and a visual "Needs review" tag.

## Content Management

**TLDR:** Platform allows filtering, exporting, and managing knowledge base articles by status, review reminders, contributors, categories, dates, and more.  Custom filters can be created and shared.  Articles can be exported in .csv format, including title, category, status, and URLs. Review reminders ensure timely reviews.  A robust API enables programmatic export of articles.

## Content Enhancement

Embed Draw.io diagrams into Document360 via two methods: **1)** embedding an interactive image tag from Diagrams.net, allowing adjustable dimensions, or **2)** exporting diagrams as static images (PNG/SVG) and uploading them. Choose embed for interactivity or static images for fixed visuals. Optimize size for performance.

## Content Management

**TLDR:** To change article slugs in Document360, use portal settings (SEO tab) or the article editor.  **MANDATORY:** Create a redirect for the new slug to preserve links.  Proper URL encoding (for special characters) and consulting support are crucial for success.

## Content Management

Features review reminders for flagging articles needing review and bulk status updates. Reminders can be set individually or in bulk, with red "Needs review" tags and hover explanations. Two methods for bulk updates: filter "Stale" articles under All Articles, or use Content Tools with filters for efficient management.

## Content Optimization

Document360 offers content optimization tools to manage search visibility and SEO. Users can exclude articles/categories from internal search (including Eddy AI) via Article settings under More, and from external search engines by checking the relevant option in SEO settings. Exclusions depend on pricing plans and don't affect URL or menu access. Cloned articles inherit parent visibility settings. For SEO, meta titles (5-60 chars) and descriptions (150-160 chars) can be added via SEO tab, with AI generation available for articles over 200 words. Meta titles must be updated for name changes, and SEO descriptions need manual updates per language version.

## Content Organization

Knowledge Base allows internal organization of articles using labels (not visible on the site, but for internal sorting/filtering).  Five methods exist to add up to 10 labels per article (maximum 10,000 per project) within the Article Editor, All Articles section, Workflow Assignments, Starred section, and Folders/Index Categories. Labels, unlike tags, aren't searchable.

## Content Organization

Article tags enable searching, filtering, sorting, and bulk actions across knowledge base articles, categories, and drive files. Managed via the "Tags" page, tags can be added by navigating to "More" > "Tags," with AI-generated suggestions available for content over 200 words. Tag limits include 30 characters and permissible symbols, with drive file tags visible only within the knowledge base.

## Content Navigation

Related articles are added to the bottom of knowledge base articles, linking only to published content. They can be manually selected, suggested by Eddy AI (for articles over 50 words), or automatically added via "Auto relate." Access restrictions control visibility of related articles.

## Content Enhancement

**TLDR:** Attachment limits increase with plan.  Professional (5MB), Business (10MB), Enterprise (20MB).

## Content Enhancement

**TLDR:** Learn how to enhance your Document360 knowledge base articles by adding featured images and attachments. Featured images (JPEG/PNG, 1200x800-2000x1200 pixels) improve SEO and link previews but don't appear in the article; available only in Business and Enterprise plans. Attachments can be added via URL or file upload, appear near the Table of Contents and Tags, and support various file types for easy access.

## Content Status

A knowledge base site displays status indicators (New, Updated, or Custom) near article titles, with no specific implementation details or relationships between status and category types (Professional, Business, Enterprise).

## User Interface

**TLDR:** Public knowledge base website allows users to view articles; project members manage content (articles, categories, templates, files, user accounts and site settings).  Article status (new=green, updated=orange, custom) is visually indicated.

## Content Preferences

**TLDR:** No content preferences are defined for Professional, Business, or Enterprise plans.

To update the status indicator for an article, follow these steps:

1. **Navigate to the Article**: Open the specific article in the knowledge base.

2. **Access Article Settings**: Click on "More article options," then select "Article settings."

3. **Update Status Indicator**: Change the status in the settings. Select from a list or type a new status.

4. **Customize Text**: Modify localization variables in the system settings to change the display text.

5. **Adjust Color**: Use the color picker in settings to choose the indicator color.

6. **Set Duration**: Specify the display timeframe in the article settings.

These steps allow you to customize the status indicator's text, color, and display duration effectively.

## Content Status

Article status feature helps track content states, including New (internal draft), Draft (updates in progress), Published (live content), and Needs Review (flagged for evaluation). Enhances content management efficiency and user clarity.

## Content Structure

**TLDR:** Manage knowledge base table of contents (TOC) visibility at site-wide or individual article level.  Site-wide settings affect all articles; individual article settings control each article's TOC independently. Only headings (H2, H3, H4) are included in the TOC, not bold text.

## Content Status

Enable automatic status updates via Settings > Knowledge base site > Article settings & SEO, including a configurable duration. Hidden articles are marked with a strikethrough, remain inaccessible on the site, and can be in any status, with Needs review flagging them for contributors. Hidden categories also conceal articles. Category pages display statuses, aiding maintenance.

## Content Status

**TLDR:**  Two methods for deprecating knowledge base articles exist: bulk deprecation (select & deprecate) and individual article deprecation (article settings).  Both methods require adding a reason and visually indicate deprecated status.

## Content Customization

Update article preferences by navigating to the article, clicking More (•••), selecting Preferences, adjusting checkboxes for comments, table of contents, and feedback, then saving. This process is article-specific; some features may require additional setup (e.g., Disqus).

## Content Status

Deprecated articles are outdated and may be replaced due to subject removal, changes, or new concepts. They are marked as obsolete at the article/page category level, with optional custom messages explaining the reason and providing links to updated versions for improved user experience. The document also discusses plans for a "mark as deprecated" feature, used to indicate content retirement or phasing out.

## Content Management

Document360 automatically tracks contributors based on their actions (create, update, publish) and publicly displays their contributions. Readers can view additional articles by these contributors. Only Enterprise plan users can manually add or remove contributors; this feature is unavailable in Professional and Business plans.

## Content Publishing

**TLDR:** Schedule knowledge base article or category publication by navigating to the item, selecting "Publish later," setting date, time, timezone, and optionally comments; then clicking "Schedule."  Feature applies to both articles and categories.

## Content Publishing

Document360’s scheduled publishing allows content to be published at specific dates/times, improving content calendar planning, consistency, and reducing last-minute publishing issues.

## Content Management

Manage contributors in Document360 via the Article information icon, using the Manage popup to add (search) or remove contributors. Assign a contributor if none are listed, which persists until account deletion.

## Collaboration

**TLDR:** Discussion feeds enable cross-role collaboration (peer review, approval) on articles/categories.  Available on all tiers, but limitations exist; comments disabled after publication. Users can delete their own comments.  Draft/edit mode enables comments, while published articles disable them. Inline commenting is possible in the Advanced WYSIWYG editor.

## Content Publishing

TLDR: Edit scheduled publications by navigating to the article, selecting "Edit schedule," and saving changes. Bulk schedule multiple articles by selecting them and specifying a date/time in the "Publish later" panel. Cancel scheduled publishing by selecting "Cancel" in the dropdown and confirming. Notes: Scheduled articles cannot be edited without canceling the schedule first, cannot be published via API, and lose their schedule when moved between workspaces.

## Content Management

**TLDR:** Document360's content management system allows for creating and managing article revisions.  Newly edited articles are saved as unpublished versions, preserving history until publication. Users can compare/revert to previous versions and collaborate with @-mentions creating email notification. Creating versions involves editing or forking revisions (and must be published). Revision history includes features varying by subscription level. Version comparisons highlight changes and reversion is possible. Published articles cannot have dates changed.

## Content Management

**TLDR:**  Content management system (CMS) allows for article versioning (fork, delete, open).  Workflow history tracks revisions (stages, assignees, comments, dates). Publish functionality makes versions public, and version details (number, contributor, date, visibility) are recorded.

`. They want the response to first provide a reasoning section within the `<thinking>` tag and then a concise TLDR within the `<output>` tag. The TLDR should be entity-dense, keeping key information while being concise. The document provided discusses Document360's Article Analytics, which offers insights into article performance, including metrics like reads, views, likes, dislikes, and link status, across different pricing tiers. The goal is to use this data to optimize content and improve user experience. I need to extract the most important information and present it succinctly in the required format.
</thinking>

<output>
## Analytics

Document360's Article Analytics provides detailed insights into article performance, including metrics like reads, views, likes, dislikes, and link status, across Professional, Business, and Enterprise tiers. This data helps optimize content strategy and enhance user experience.

## Content Optimization

**TLDR:** Content optimization health checks analyze English articles/categories for readability (e.g., long sentences, missing internal links), improving content quality and SEO.

## Security

The system provides granular access control to knowledge base articles using team/reader accounts and groups, offering three tiers of access: Professional, Business, and Enterprise.

## Content Optimization

**TLDR:** Optimize SEO by keeping titles (50-70 chars), descriptions (120-160 chars), and featured images.  One to three internal/external links are best.  Automated tools categorize issues, suggestions, and good work to guide improvements.

## Security

**TLDR:** Manage article access by navigating to the article's security settings.  Choose "Portal" for team access (updates, settings) or "Site" for viewer access (published articles).  Linked resources provide specific details and troubleshooting guidance.

## Analytics

To access article analytics, click the **More (•••)** icon in the editor and select **Analytics**. Key metrics include **Reads** (updated daily), **Views**, **Likes**, **Dislikes**, and **Link Status**. Use the validation tool to ensure links are reliable. Analytics update in real-time, with reads reflecting unique sessions. Use **Go to Analytics** for project-wide insights to refine engagement strategies.

## Collaboration

**TLDR:** Document360 supports public article comments through Disqus plugin integration. Comments can be automatically activated on all articles. See the Disqus integration help article for configuration details.

## Content Optimization

**TLDR:** The document details how to optimize content using Health Check Metrics in the Knowledge Base portal. It explains the readability score, which ranges from 0-100, with higher scores indicating better readability. Scores are categorized as Problems (below 30), Suggestions (30-59), or Good Work (above 59). Metrics can be accessed by navigating to an article, clicking "More" -> "Health Check Metrics." Key readability factors include paragraph length (optimal ≤150 words), sentence length (recommended ≤20 words), and sub-heading distribution (presence improves readability). Metrics exclude LaTeX and code blocks. The panel also includes SEO metrics, categorizing issues into Problems, Suggestions, or Good Work. Updates require clicking "Check now" for the latest insights.

## SEO

Document360 allows users to manage sitemaps for SEO optimization by navigating to **Settings > Knowledge base site > Article settings & SEO > SEO**. There, you can access the sitemap URL, set an update frequency (e.g., daily), and generate the XML sitemap. Submit this sitemap to Google Search Console by following their specific submission guidelines to enhance search engine crawling and indexing of your content.

## SEO

- **Sitemap Support**: Available for Business and Enterprise plans, not for Professional. Only for public projects.
- **Robots.txt**: Controls web crawler access, prevents indexing, and defines site-specific rules.

## Collaboration

**TLDR:** To enable public comments on a public article, activate Disqus integration, select "Enable feedback" in article preferences, and save. To disable, deselect the checkbox. Removal of Disqus requires reconfiguration.

## Content Management

Read receipts confirm article acknowledgment and are crucial for tracking communication, especially for important updates. They are available in KB site 2.0 for private and mixed projects but are not available for JWT configured projects.

## Content Management

Manage read receipts via bulk actions, individual article settings, or category rules, with settings rules taking priority. Republishing forces re-acknowledgment, and category visibility can be controlled by rules.

## Content Management

**TLDR:** Content management system enables user-defined read receipt rules for knowledge base articles. Users can create, modify, and prioritize rules, managing visibility and dependencies. Readers acknowledge reading via a confirmation process.

## SEO

Manage Robots.txt in Document360 via **Settings > Knowledge base site > Article settings & SEO > SEO** tab, enabling edits to set crawl rules, block pages/folders, add delays, and control access. Use cases include restricting admin data access and preventing tag pages indexing. Best practices: include sitemap links and avoid duplicates. For advanced needs, consult FAQs on excluding content or restricting crawlers like Googlebot/Bingbot.

## AI Integration

**TLDR:** Eddy AI customizable by Business/Enterprise users, allowing for response tone/length adjustments and AI assistant name changes (Enterprise).  Legacy users & certain Document360 users also have customization options;  branding possible via Eddy AI renaming.

## Content Sharing
TLDR: Document360 KB Site 2.0 (projects created after June 10th) allows sharing articles with external users via private links, even for unpublished content. External users don't need portal access. Links can be managed (deleted or regenerated) and expire if the article is deleted.

## Analytics

**TLDR:** Monitor read receipts in Analytics by navigating to Articles > View all in Top articles.  Read receipt details are displayed in the All Articles page.  Updates appear within 15 minutes.  Important limitations include a maximum of 20 read receipt rules, rules not transferring when cloning, and republished articles requiring re-acknowledgment.

## Localization

**TLDR:** Document360's machine translation uses credits, with two methods (bulk or individual article). Customize the AI (Eddy) by renaming, adjusting tone, and response length.  Translation status indicators guide users.  Troubleshooting includes splitting large articles, manually updating after content changes, and managing character limits (50,000).  Credits are tied to subscription tiers (Professional: 1M, Business: 2M, Enterprise: 5M) and are purchasable in 1M increments.  Manual translation may be needed for new languages added after content creation.  Delete/hide actions in one language affect all language versions.

## Content Management

The Knowledge Base site includes an Announcement icon on the top-right of the home page, indicating pending acknowledgments. Clicking this icon directs users to the Acknowledgement required page, where they can filter articles by workspace (Current, All, or Specific) and acknowledgment status (Required or Acknowledged). This feature allows users to efficiently manage and track article acknowledgments across multiple workspaces.

## AI Integration

**TLDR:** Document360's "Eddy AI" AI writer suite offers tools for content creation, optimization, and recommendations within its knowledge base.  Features include AI-generated outlines, FAQs, titles, descriptions, tags, and related articles.  Access varies by plan (freemium, professional, business, enterprise), with credit limitations.  The suite supports 16 languages and integrates with Document360's Advanced WYSIWYG editor.  Key requirements include sufficient plan access & credits, minimum content length, and proper browser configurations.

## AI Integration

Eddy AI complies with GDPR and SOC 2 Type 2, ensuring data privacy, security, availability, and confidentiality. It utilizes subprocessors such as MongoDB, OpenAI, Azure, Stripe, and Segment to enhance functionality. Eddy AI prioritizes trust and transparency through detailed documentation of AI capabilities and security practices. Data is encrypted at rest and in transit, and while Eddy AI uses OpenAI's models with data retention limited to 30 days, a Data Processing Agreement and respective privacy policies from OpenAI and Document360 provide further privacy assurances.

## Content Management

**TLDR:**  Establish consistent, limited, and relevant tags for knowledge base articles using the free AI tag recommender.  Regularly review and update tags to optimize content retrieval.  Permissions like "update article settings" or "manage tags" allow teams to create and edit tags. Manual tagging remains possible.

## Security

Document360's Information Security Policy Framework includes categorized data handling (Confidential, Restricted, Public), employs encryption (AES-256, hash functions), and features a robust incident response plan with root cause analysis. It assigns clear roles and responsibilities, integrates secure-by-design practices into SDLC, and implements operations security covering change management, capacity planning, and data leakage prevention. Access control adheres to the least privilege principle, while policy enforcement includes audits, documented procedures, and disciplinary actions. The framework spans all internal and external systems and data.

## AI Integration

**TLDR:** To use the Eddy AI API, authorize with an API token in Swagger, send a prompt, version ID, and language code to `/v2/ProjectVersions/ask-Eddy AI`, and receive the response.

## AI Integration

Document360's AI integration with Eddy AI enhances content management, search, and user experience through various tools. It offers AI-recommended related articles, automated tag suggestions, and chart generators that convert text or tables into visual formats like pie charts and flow charts. The AI alt text generator improves accessibility and SEO for images. Advanced search features include Ask Eddy AI, a conversational search, and an API for custom integration. The AI article summarizer condenses lengthy content, while AI-driven chatbots provide direct support. Language support spans 16 languages, and features are customizable with proper credits and subscriptions, ensuring a seamless and efficient user experience.

## Accessibility

The Knowledge Base site 2.0 includes a read-out-loud feature to enhance accessibility and engagement. Available on all plans except older pricing plans, which require the AI assistive search add-on for Enterprise, this feature allows users to listen to content, accommodating multitasking and auditory learning preferences.

## Accessibility

**TLDR:** Read-aloud feature for articles, including alt text.  "Listen" button in header, toggles to "Listening", opens player with controls (play/pause/skip/close).  Alt text read, missing alt text indicated.  Enabled via Settings > Knowledge base site > Article settings > Accessibility. Disabled by default on trial plans.

## AI Integration

**TLDR:** AI tools automate business glossary creation, standardizing terminology across departments for improved understanding and communication.  The "Premium Suite" offers more advanced functionalities.  English language support only.

## Accessibility

"Read Out Loud" reads glossary, snippets, variables, headings (H2-H4), lists, callouts, private notes, accordions, FAQs, link text, and emojis, but skips tables, inline code, code blocks, images, videos, LaTeX, and attached files. Audio playback supports seeking.

## Content Optimization

**TLDR:**  Optimize GenAI content for clarity and reliability by using keyword-rich headings, short paragraphs, structured data (tables), code snippets (commented), alt text, contextual links.  Prioritize examples, FAQs, and a consistent glossary (like Document360) to reduce hallucinations and improve accuracy.  Use conversational tone and SEO best practices.  Test with AI tools and review output.

tags that includes a markdown heading and a concise, entity-dense TLDR of the document. 

The document describes the AI Premium Suite, which offers tailored plans for different user types, and the AI Glossary Generator, which has specific functionalities like treating singular/plural terms as separate and requiring manual rescans. I need to ensure that the TLDR captures these key points succinctly while maintaining clarity and conciseness.
</thinking>

<output>
## AI Integration

TLDR: The AI Premium Suite enhances user experience through automation and AI-powered tools, offering tailored plans for Professional, Business, and Enterprise users. The AI Glossary Generator treats singular/plural and synonymous terms as separate, requires manual rescan every 7 days, and updates suggestions while notifying users.

## File Management

Document360 Drive is a centralized cloud file storage system for teams, enabling folder/file management, recent/starred/deleted file access, and content overview.  Features include folder/subfolder creation mirroring knowledge base structure.  Storage tiers include: Free (1GB), Professional (50GB), Business (100GB), and Enterprise (500GB).

## AI Integration

Enable and utilize AI features like the glossary generator and Eddy AI to enhance your Document360 knowledge base. Enable via Settings > AI Features > Eddy AI, then access the glossary tool under Content tools > Content reuse > Glossary. Use Eddy AI for tasks such as article categorization, error message documentation, and guide creation. Apply best practices in prompt engineering with precise instructions and context for better results.

## AI Integration

**TLDR:** Eddy AI is a versatile AI tool enhancing content creation & management across sectors like LMS, customer support, compliance, product development, and retail/e-commerce. It automates, organizes, and improves content accuracy & engagement.

## Bulk Folder Actions

TLDR: Document360 enables efficient bulk folder management through actions like moving, copying, deleting, and adding tags to multiple folders simultaneously. Users can navigate via the Drive section, utilize the All Files view for bulk operations, and leverage the Recycle Bin to restore deleted items. Key features include the ability to view dependencies, ensuring file links remain intact during moves, and enhancing file discoverability with tags and alt-text. Regular audits and dependency checks are recommended to maintain organization and avoid data loss.

## Workflow Management

**TLDR:** Document360's workflow management system (Workflow designer & Workflow assignments) streamlines document creation, review, and publication.  Admins customize step-by-step workflows for writers/editors/illustrators. Access via Documentation > Content tools > Workflow designer. Allows for adding, editing and reordering workflow statuses.

## File Management

**TLDR:** Starred folders/files are accessible via the "Starred" section in the left navigation pane.  The Recycle Bin automatically deletes unused items after 30 days; permanently deleted files cannot be recovered.

## Content Templates

**TLDR:** Document360 offers pre-made article templates (professional, business, enterprise) for knowledge base articles. Users can create custom templates.  Templates are created/edited through a portal,  named, described (max 250 chars), and saved. Default templates are automatically generated during onboarding.

## Workflow Management

The Workflow Assignments Overview offers a centralized view for tracking knowledge base articles and category pages, displaying workflow statuses, due dates, and assignments. Accessible via Documentation > Workflow assignments, it shows article counts per status and allows users to view their assigned articles. To create an article from a template:

- Hover over a category and click the () icon.
- Select "Article from template" and enter the name.
- Choose the category location and template, previewing if needed.
- Click **Create** to finalize. Use the **Manage templates** link for additional template management.

## Content Templates

**TLDR:**  Save articles as reusable templates via a menu option. Manage, edit, and delete templates.  Clone within the same language to speed creation.  Deleting a template doesn't impact existing articles.  Templates are shareable, but cannot be directly cloned across languages – translation/recreation is required for different languages.  Templates use local copies, so updating a template doesn't affect existing articles.

## Workflow Management

- **Workflow Designer**: A tool for managing documentation processes, including creating, editing, reviewing, and publishing articles, with varying features across Professional, Business, and Enterprise plans.
- **Troubleshooting**: Resolve read-only workflows by accessing the Workflow Designer, disabling the read-only toggle, and updating the status (admin permissions required).
- **Workflow Statuses**: Manage system (predefined) and custom (user-defined) statuses with options to add, edit, reorder, or delete custom statuses.
- **Assignments**: Assign articles to team members, set due dates, and enable notifications for workflow events.
- **Resources**: eBooks provide guidance on establishing documentation workflows, best practices, and creating high-quality content.
- **Actions**: View status history, set due dates, assign team members, activate next statuses, and access revision history.

## Content Reuse

**TLDR:** Document360 allows content reuse via variables (dynamic, updating in place) and snippets (static, reusable blocks).  Variables are created with a name, content, and language; snippets are stored in a library and inserted into articles. Both are easily inserted via merge codes or a toolbar. Snippets are managed within the knowledge base.  200 snippets/project are included, variable renaming is not possible, and snippets are placed on new lines.

## Content Reuse

TLDR: Document360 allows content reuse via variables for frequently changing text (e.g., contact info). Updating a variable once applies changes everywhere, ensuring consistency. Variables can be managed through a portal with options to edit, delete, view usage, and perform bulk deletions, enhancing document-wide text management efficiency.

## Localization

Translates variables in documentation to localize content by creating new variables for target languages, starting with the default language, then translating to additional languages. Existing variables can be translated, retranslated, or removed per language, though global variables are exempt.

## Content Consistency

**TLDR:**  A glossary improves knowledge base readability and consistency by standardizing definitions for frequently used terms. This boosts clarity, ensures consistent terminology, saves writer time, and allows for reusable product-specific education accessible in the knowledge base and assistant.

## Localization

Maintain consistency in multi-language snippets; global snippets are non-translatable. Create new snippets by selecting a language, adding name/content, translating, and saving. Translate existing snippets by choosing the target language. Default language is marked as "Main," with translations indicated by a green tick.

-To create a snippet, access the Snippets section via Documentation > Content tools > Content reuse. Name your snippet with up to 30 characters (letters, numbers, hyphens, underscores), set the language (default: Global), choose the WYSIWYG or Markdown editor, add content, and click "Create snippet."

## Content Consistency

**TLDR:** Manage project-wide glossary terms in Document360 using content tools. Add, edit, delete, or import terms via CSV.  Ensure proper use in articles, via in-built tools or markdown. Check for dependencies before deleting and troubleshoot potential import issues. AI glossary generation and SEO optimization capabilities are included.  Key:  Check for article usage before deleting terms; use proper file formats (CSV), and use exact matching for terms.

## Localization

**TLDR:**  Manage consistent translations by creating and maintaining glossaries in multiple languages.  Choose a main language; enter terms, and translate to other languages.  Completed translations are visually marked.

## Content Consistency

**TLDR:** To improve glossary accessibility, add a link to `https://yourdomain/docs/glossary-overview` in your Knowledge Base header, footer, or secondary navigation.  To export glossary terms (Glossary Name, Definition, Dependencies, Updated By, Updated On), navigate to Documentation > Content tools > Content reuse > Glossary, select a language, and click Export CSV.

## Site Customization

**TLDR:** Document360's "Custom pages" feature lets KB site 2.0 users create standalone pages (e.g., policies, terms) separate from articles.  Customization, multilingual support, and navigation options are available.

## User Feedback

Document360's Feedback Manager is a tool designed to track, evaluate, and respond to user feedback on knowledge base articles, aiming to enhance content quality. However, the document does not provide specific details about its features or functionalities beyond this general overview.

tags. The content provided is about a feedback management system in Document360, detailing how to handle user feedback for improving content and search functionality.

The reasoning section should explain the key points of the document, such as the two main tabs (Article Feedback and No Search Results Feedback), their functions, and how they contribute to better content quality and user experience. The output should be a concise TLDR that captures these elements while being entity-dense and in markdown format.

I need to ensure that the <thinking> section is thorough but not overly verbose, while the <output> is brief yet informative. Adhering to the user's structure is crucial for clarity and professionalism.
</thinking>

<output>
## User Feedback

The Document360 Feedback Manager enhances content quality and user experience by allowing users to provide feedback. It features two tabs: **Article Feedback** for ratings and comments on specific articles, and **No Search Results Feedback** to identify content gaps. Each tab enables the assignment of tasks, content updates, and progress tracking, ensuring improved search functionality and user satisfaction.

## Site Customization

**TLDR:** Manage custom knowledge base pages via "Content tools".  Edit, delete, or clone pages.  Clones are prefixed with "Clone -".  5 initial pages per project.  Access restricted by user role.  Deleted pages are unrecoverable.

## Content Organization

Document360 tags help manage content (articles, pages, files).  Tags are used for improved navigation, searching, and grouping. Users can create, edit, merge, and delete tags; AI helps recommend tags.  Tag groups organize related tags.  There are limitations on the number of tags per project and character limits for tag names/descriptions.  Tag dependencies exist, and deleting a tag with dependencies requires removing those first. Available plans offer varying degrees of tag management functionality.  Access tag management via Documentation > Content tools > Tags.

tag. The document focuses on user feedback features and custom page creation. My task is to extract key entities and present them succinctly while following the formatting guidelines. I'll ensure each important detail is included without unnecessary elaboration.
</thinking>

<output>
## User Feedback

- Manage feedback efficiently using filters, bulk actions, and CSV export (up to 90 days).
- Clarify feedback status: "Complete" allows reopening, while "Closed" indicates resolution.
- Users with Draft Writer or Editor roles can create custom pages via Documentation > Content Tools > Custom Pages, with options for SEO, collaboration, and publishing.

## Localization

Translate custom pages into multiple languages by selecting a language from the dropdown, viewing translation details, and clicking to translate.

## Content Organization

**TLDR:**  Manage tag dependencies for articles, page categories, and files by viewing (1) associated details,  like article title, status, or file name, (2) then removing them.  Bulk removal is supported.  The process ensures accurate and simple tag management.

## Content Optimization

**TLDR:** Generate concise, keyword-rich SEO descriptions for knowledge base articles via platform's Content tools.  AI assistance may be used.  Descriptions should align with user intent and be actionable (155-160 chars).  Title optimization (50-60 chars) is also important, using relevant keywords and engaging language.  Tool availability/features vary by user plan.

## Content Management

A find-and-replace tool allows users to search for and replace keywords, phrases, numbers, and selected characters across articles and categorized pages. It enables replacements with words, numbers, and specific characters. Additionally, tag dependencies can be viewed by navigating to **Documentation** > **Content Tools** > **Documentation** > **Tags**, where clicking on the numbers in the **Articles**, **Page Categories**, or **Files in Drive** columns opens a detailed **Tag Dependencies** window.

## Content Management

**TLDR:**  Find and replace tool lets Editor role users modify text within a single article (up to 1000 articles per operation).  Search excludes Recycle Bin.  Markdown/HTML not affected.  Empty "Replace with" removes found text. Access restricted to Editor content role or custom roles with specific permissions.

The Find and Replace feature in Content Management allows users to update articles efficiently. Access it via Content Tools > Documentation > Find and Replace. Enter the text to find and replace, apply filters, select articles, choose their status, and execute the replacement. It offers precise control with whole-word matching and advanced filters like workspace, language, and status.

## Content Import

**TLDR:** Import Document360 project ZIP files (max 1GB) into the Knowledge Base. Matching workspace slugs merge data; differing slugs create a new workspace.  Modify project ZIP workspace slug to prevent conflicts. Verify supported features & destination workspace before import. Check FAQs for common issues.

## Content Migration

**TLDR:** Document360 offers content migration from over 100+ knowledge base platforms (like Zendesk).  Their 3-step process includes expert consultation, automated/manual transfer, and thorough quality assurance, focusing on SEO-friendly redirects to prevent broken links and maintain search rankings.

## Content Export

Document360 allows projects to be exported as ZIP files, including articles, category pages, and optional media. EXPORT METHODS: (1) Direct download via "Import & Export project" with options to download or copy links. (2) API access for Business/Enterprise plans, limited to 2 exports/day, supporting Markdown (.md), HTML (.html), or JSON for multi-language exports. EXPORT PROCESS: Navigate to Documentation > Content tools > Import & Export project, select criteria (modification date, workspaces, languages, categories), include media if needed, and execute. ZIP contents include selected articles and optional media, with export time varying based on content size. The ZIP can be imported into other Document360 projects.

## Analytics

**TLDR:** Document360 offers various analytics (article, search, reader, etc.) categorized by different subscription plans (Professional, Business, Enterprise).  Professional plan is limited, while Business/Enterprise have more options.  Analytics data is workspace/language-specific and in UTC.

## Content Import

- **Supported Plans**: Professional, Business, Enterprise.
- **Functionality**: Imports articles, category pages, and media.
- **Permissions Required**: Editor role or custom role with Update and Publish access.

## Content Export

The platform allows users to customize and manage PDF templates for content export through the **Content tools > Import & Export > Export to PDF** portal. Features include template creation with options for layout, margins, cover pages, watermarks, headers, footers, and more. Users can set default templates, and templates are available across Professional, Business, and Enterprise plans. PDFs can be exported with customization, including password protection, and include tools for managing exported files. Known limitations exist with SVG rendering in PDFs, requiring workarounds like converting to PNG/JPG.

## AI Integration

**TLDR:** Eddy AI Search Analytics dashboard tracks knowledge base search performance (conversations, answered/unanswered queries, depth, popular/unanswered queries, referenced articles) across chatbots/widgets/languages, allowing for date filtering.  Analyze data to address unanswered queries, improving search accuracy. Metrics vary by language.

## Analytics

**TLDR:** Document360's article analytics (available in Enterprise plan) offers insights into user engagement, geographic distribution, and top article performance.  Search analytics monitors user search behavior to optimize content, identify knowledge gaps and improve the user experience by tracking search trends, successful queries, and no-result searches.

## Analytics

Access article analytics via Analytics > Articles. Metrics include views, reads, likes, and dislikes, filterable by date, user type, and JWT. Engagement is distinguished from views. Location and category breakdowns are available. Data, including deleted articles, is shown graphically or in lists, with export options. FAQs provide additional insights and clarify user roles.

## Content Export

To export published articles and category pages to PDF:

1. Navigate to **Documentation** > **Content tools** > **Import & Export** > **Export to PDF**.
2. Only published content is eligible for export.
3. Create a new PDF by providing a name, optional password, selecting a template, workspace, and language, then preview the template.
4. Choose the categories or articles to include and click **Export** to initiate the process.

## AI Integration

**TLDR:** Eddy AI search analytics provides performance insights for AI search (Professional, Business, Enterprise).  Metrics include unanswered searches and visualizations, supporting multiple languages. Conversational metrics depend on KB site 2.0.

## Analytics

The document provides a comprehensive overview of Document360's analytics capabilities, detailing various tools and metrics to enhance decision-making and user experience. The key areas covered include Search Analytics for identifying content gaps, Reader Analytics for tracking user engagement, Feedback Analytics for gathering user sentiments, Team Accounts Analytics for monitoring team performance, Link Status Analytics for maintaining functional links, and Ticket Deflector Analytics for measuring support effectiveness. These tools empower users to optimize content, improve SEO, and streamline support processes efficiently, with many features accessible across Professional, Business, and Enterprise plans.

## API Documentation

Document360 supports API documentation generation from URLs, JSON/YAML files, or via CI/CD pipelines. For CI/CD, Node.js and the `d360` npm package are required. Users can input the API specification, provide a token (for CI/CD), and preview drafts before publishing.

## Analytics

**TLDR:** Ticket Deflector system tracks user feedback on knowledge base solutions.  Key to success is an up-to-date knowledge base with relevant keywords,  analyzing search success rate, and reviewing frequently selected questions.  "Answered from Knowledge Base" metric shows effectiveness.

## Site Customization

**TLDR:** Knowledge Base Site 2.0 enhances user experience with an improved UI, AI-powered search (Eddy AI), real-time updates, interactive elements, and customizable themes/languages.  Customizable navigation (primary/secondary), announcements, and acknowledgment requests are included.  Users can customize site appearance (themes, colors, layouts). Migration from KB 1.0 is required. Key improvements include streamlined content, better image viewers, and a table of contents.  Detailed migration guide available.

## API Documentation

Document360 automatically regenerates API docs from updated specifications, preserving custom content. It supports CI/CD integration via the d360 npm package for automation and offers manual regeneration options. API documentation features are available across all plans (Professional, Business, Enterprise). The d360 npm package and its source code are accessible via provided links.

## Widgets

**TLDR:** The Knowledge Base widget (Enterprise plan) provides in-app support via a searchable knowledge base with 10 configurations.  Features include customizable positions, URL mapping, custom links, ticket deflection, domain restrictions, and default language detection.  It enhances user experience by enabling quick access to helpful content for onboarding, troubleshooting, and feature learning.

## Widgets

This guide provides comprehensive instructions for managing and customizing Knowledge Base widgets in Document360. Users can edit, clone, or delete widgets and customize their appearance and behavior through options like color, icon, positioning, and URL mapping. Advanced features include CSS/JavaScript customization, JWT authentication, and domain restrictions. The document also covers adding ticket deflectors, custom links, and configuring URL mappings, with steps for auto-opening widgets and customizing themes. Detailed instructions are provided for each feature, enabling users to tailor widgets to their specific needs.

## Site Migration

**TLDR:** KB Site 2.0, a knowledge base upgrade, offers improved features (following, private sharing), and configuration for various tiers.  Projects created after June 10, 2024, get automatic access.

## Troubleshooting

- **Website Fails to Load**: Check URL, clear browser cache, disable VPN, verify system date/time.
- **504 Gateway Timeout**: Review server configuration, revert Sub-folder Configuration if needed.
- **Page Unresponsive While Editing**: Clear cache, reduce article length, fix unclosed HTML tags.
- **Too Many Redirects**: Correct JWT Login URL, remove domain URL from config.
- **Project Not Found**: Ensure CNAME record is correct and verified.
- **/home/error/ Message**: Contact support with HAR file and console errors.
- **Icons Not Rendering**: Check FontAwesome settings in custom CSS.
- **Site Without CSS**: Whitelist Document360 domains.
- **Secure Connection Issues**: Verify CAA records, update DNS settings.
- **ResourceNotFound & AuthenticationFailed Errors**: Ensure SaaS tokens are added and not expired.

## Site Customization

Centralized customization for Knowledge Base site, enabling adjustments to branding, headers/footers, homepage, login, and error pages. Features include advanced CSS/JavaScript styling, real-time preview, light/dark themes, favicon uploads, and logo customization. FAQs and visual guides assist with theme settings, logo changes, fonts, buttons, and layout, ensuring user-friendly customization.

## Accessibility

Document360 ensures WCAG compliance through: text alternatives for images/icons, full keyboard navigation, readable text with sufficient contrast, and clear language.

## Site Customization

Customize your Knowledge Base site with themes (light, dark, or both), branding (logo, favicon, logo redirect), WCAG-compliant or manual colors, hyperlink colors, fonts, button styles (rounded, sharp, bubble), and layouts (full width or centered). Changes are applied upon saving.

## Site Customization

Access the KB Site 2.0 customization settings via Settings > Knowledge Base Site > Customize Site. Choose to go live immediately or customize further (headers, footers, CSS/JavaScript). Preview changes, with a 30-day rollback option to revert to version 1.0. Integrations remain intact during the transition.

## Site Customization

TLDR: Document360 knowledge base allows customization of primary & secondary navigation (menu types, links, ordering).  Footers can be customized with HTML/CSS, external links, or PDFs, but footer customization features support varies among subscription tiers.  Tools to delete RSS feeds are also noted.

## Accessibility

WCAG 2.1 ensures web content is accessible through four principles: perceivable, operable, understandable, and robust, ensuring an inclusive web experience.

## Site Customization

**TLDR:** Document360 homepages customizable via the "Customize site" settings.  Options include: rich text, image blocks, custom code, themes (Engage, Innovate, Learn, Default), meta data, hero image (1920x415 px). Section reordering, preview, and publishing are available. Customization requires Professional, Business, or Enterprise plans.

## Site Customization

**TLDR:** Document360 knowledge base offers extensive customization options for various site elements, including login pages, hero sections, documentation pages, and error pages.  Users can modify visuals, add/edit textual content, and implement HTML/CSS/JavaScript for advanced adjustments across plans/tiers. Customizable elements include homepage sections (images, text, buttons, search), documentation views, widgets (most viewed, etc.), and error page presentation (404, access denied, unauthorized, IP restricted).  Key configuration steps include navigating to settings, editing elements, using preview/save/publish;  plan levels determine custom CSS/JavaScript support.

## Site Features

RSS feeds provide real-time updates via XML, enabling automatic article notifications. They can be integrated into Primary Navigation, Secondary Navigation (single-level), or Footer (via basic or custom options). Subscribers can access updates using tools like Feeder.co or Feedly, enhancing engagement by keeping readers informed without manual checks.

## Site Structure

- Main pages of a Knowledge Base site.
- Home page customization: adding links, changing colors, incorporating categories.
- Structured comparison table for Professional, Business, and Enterprise plans.

## Content Enhancement

**TLDR:** Image alignment controls image placement (left, right, center) and maintains image aspect ratio when resizing.  Default alignment is left.

tag containing the markdown heading and a concise summary. 

I need to ensure that the summary is entity-dense, retains key information, and is written concisely while adhering to the specified format. I'll start by crafting the markdown heading, then extract the essential details from the provided document to form the TLDR. It's important to maintain clarity and brevity in the summary to meet the user's requirements effectively.
</thinking>

<output>
## Content Enhancement

A Callout in Document360 highlights important content and is available in four types: Info, Warning, Error, and Success. Each features a title and content section, accessible through Markdown or WYSIWYG editors.

## Site Customization

Document360 allows customization of site elements like body fonts and callouts using Custom CSS & JavaScript. Users can change the body font by adding code snippets in the Custom CSS section, modifying font face and color. For callouts, similar steps apply with optional dark mode customization available.

## Site Customization

**TLDR:** Document360 allows table customization via custom CSS/JS in the Settings.  Customization options include border, padding, colors, and fonts.  Professional plan has limited customization, Business plan has advanced customization, while the Enterprise plan includes full customization with priority support.  Refer to the table for specific plan capabilities.

tags. The <thinking> section should outline the reasoning process, while the <output> section should include a markdown heading and a concise TLDR. The content focuses on the importance of tables in organizing and presenting data effectively. The key points are tables' role in structuring data, enhancing understanding, and presenting complex information in a clear format.  
</thinking>  

<output>  
## Content Structure  

Tables are essential for organizing data into a structured format, making complex information easier to understand by presenting it in rows and columns.

## Site Customization

*No summary available for this section.*



## Accessing the What’s new feature

**TLDR:** Users can access recently published knowledge base articles via an announcement icon, workspace/language selection, and date range filtering (last 24 hrs, 7 days, or 30 days). Feature is configurable in Document360 settings. Availability across plans is unknown.

## Site Settings

**TLDR:** Configure knowledge base article settings globally (headers, sidebars, search, FAQs) and individually (read-aloud, comments) for consistent language and enhanced user experience (contributor lists, read times, sharing).  Individual article settings can override site-level defaults, but site settings often take precedence.  Localization supported.

## SEO

Manage SEO redirect rules in a knowledge base system to prevent broken links. Supports editing, adding, importing/exporting, filtering, and deleting redirects. Two redirect methods: "Ends with" and "Replace with." Configure correctly with URL paths and consider multi-language contexts. Enterprise plan required for advanced features. Permanent deletion of redirects possible. CSV bulk management supported with import/export options. Key for maintaining SEO integrity and user experience.

## User Engagement

**TLDR:** Document360's "Follow articles and categories" feature in KB site 2.0 (projects after June 10th, Private/Mixed projects only) notifies users of new/updated knowledge base articles.

## Site Features

- Article headers include contributors, read time, follow button, share icon, print option, published/updated dates, and PDF export.
- Localization supports customized text per language.
- FAQs provide guidance on hiding breadcrumbs, exporting drafts, setting default email apps, and disabling print/PDF options.

## User Feedback

**TLDR:** Document360 allows users to provide feedback on articles by liking/disliking them.  This feature improves content quality.  Undo functionality for likes/dislikes is limited to KB Site 2.0 and requires migration for usage.

## Site Features

**TLDR:** Customizable knowledge base banners (Smart Bars) allow for targeted display based on various criteria (URL, IP, browser, device, language, project).  Content and appearance are configurable.  Global or language-specific options are available.

## Site Features

- **Search Functionality**: Enables fast, relevant searches across articles, categories, and PDF attachments with advanced filters and keyword operators.
- **Search Attributes**: Utilizes titles, tags, slugs, breadcrumbs, and content text, prioritizing titles, then tags, slugs, breadcrumbs, and content.
- **Follow Button**: Can be enabled in Article settings & SEO under Settings.
- **Search Attachments**: Allows searching within PDF files, with options to filter by categories, articles, and files.
- **Advanced Search**: Includes filters for workspace, language, tags, contributors, date, and categories.
- **Search Filters**: Refines results by category, attachments, workspace, and language.
- **Search Operators**: Supports exact phrases with quotes and exclusion with minus signs.
- **No Search Result Feedback**: Shows a feedback form when searches yield no results, configurable in Search settings.
- **Smart Bars**: Customizable banners for announcements, tailored to user context.

## Support

**TLDR:** Ticket deflectors reduce support tickets by empowering users with self-service knowledge base solutions.  Manage deflection forms via an overview page, allowing creation, editing, and deletion, with preview and copy options.  Integration with helpdesks is possible.  Limited to the main workspace and its languages; set to offline before deletion.

## User Feedback

The user feedback process allows users to like or dislike articles via icons. Liking is straightforward, while disliking requires a comment. Both actions open a feedback panel for comments and email notifications. Actions can be undone within 30 days unless the cache is cleared. Dislikes without comments aren't counted, and analytics track only active interactions. Feedback can be updated by switching like/dislike, retaining previous comments. The process is consistent across the Knowledge base widget and Public site, with a 30-day undo window.

## Compliance

**TLDR:** Document360 platform allows users to add a customizable cookie consent bar or popup to comply with regulations like GDPR.  Configuration includes message localization, UI options (bar, popup, position, theme), and call-to-action elements.

## Site Features

The Smart Bar Management feature provides an overview page with tools like language selection, status toggles, detailed previews, show/hide rules, editing, deletion, filters, and new Smart bar creation, enabling efficient organization and customization.

## Integrations

Document360's integrations allow connecting helpdesks (Freshdesk, Zendesk) and other third-party apps (e.g., analytics, chat, marketing automation).  Configure helpdesk integration through Settings > Knowledge base site > Ticket deflectors, filling in API keys, domain URLs, and agent emails.  Adding new integrations follows the same settings page and requires app selection, basic or custom configuration, and necessary app details.  Over 25 integrations are available in Professional, Business, and Enterprise plans.

## Integrations

**TLDR:** Document360 allows managing integrations (edit, delete, status).  Integrations categorized by type (analytics, chat, etc.) are available, like Google Analytics, Intercom, and Disqus. Code filtering allows controlling app behavior by user, workspace, or IP. LiveChat integration enables access to Document360 knowledge base within the LiveChat interface.  Regular review and updates are crucial.

## Support

Improve self-service by adding ticket deflectors to header/footer navigation and key sections. Forms must be activated, with options to clone, preview, and delete. Links can also be embedded elsewhere, like articles. Use up to 10 deflectors on business/enterprise plans to guide users to FAQs or tailored contact forms.

markup heading `## Support` is printed and the TLDR is provided below.

## Support

Create ticket deflectors in Document360 to guide users and reduce support queries. Configure form titles, add context questions, customize contact forms with mandatory fields, enable CAPTCHA, set notifications, and localize texts. This streamlined process integrates seamlessly with existing systems for efficient ticket management.

## Site Customization

Integrate custom HTML snippets for third-party services like analytics or chat support by going to **Settings > Knowledge base site > Integrations**. Choose the placement (Header, Begin Body, or End Body), paste the code, and save. The snippet will appear on the Integrations overview page, enabling features based on its location.

## Integrations

* **Document360** integrates with various tools for knowledge base support, including Crisp (centralized inbox), Gorgias (multi-channel helpdesk), Doorbell (customer feedback), Belco (real-time chat), Kommunicate (AI-powered chatbots), and Sunshine Conversations (API-based CRM).  Integration levels vary by plan (Professional, Business, Enterprise).  Gorgias, and Sunshine Conversations integrate directly into Document360's knowledge base system, while others, like Crisp, have multiple integrations across various plans, from basic to enterprise-level advanced features.  Specific plan features support scaling between basic and advanced integrations.  Setup instructions for each integration are provided, detailed for configurations such as conditional code inclusion.

## Integrations

Document360 integrates with multiple live chat and support tools like Olark, LiveChat, Freshchat, and Chatra, enhancing customer support and user experience. Olark offers co-browsing, geolocation, and visitor insights, while LiveChat provides AI-powered real-time support and cost reduction. Freshchat supports messaging across platforms like WhatsApp and Apple Business Chat, with AI-powered chatbots. Integrations are configured through specific IDs or tokens, enabling features like targeted chats, visitor tracking, and knowledge base search within support platforms. Step-by-step guides are provided for each integration process.

## Integrations

Document360 integrates with numerous tools for analytics, customer support, and workflow automation.  Integrations include: Google Analytics/GA4, Kommunicate, Heap, Hotjar, Amplitude, FullStory, Segment, Mixpanel, GoSquared, Freshmarketer, Zendesk, Intercom, Salesforce, Drift, Commento, Disqus, Slack, Microsoft Teams, Zapier, and Make.  Users obtain necessary IDs, configure code snippets, and sometimes set conditions for code inclusion.  Zapier automation between various apps is emphasized.  Different tiers of Document360 support varying integrations.

## API Management

To generate an API key in Document360, go to **Settings > Knowledge base portal > Extensions**, click **Connect** on the Make extension tile, and copy the generated Token. Secure the Token for integration with third-party apps on Make.

## Integrations

**TLDR:**  Document360 integrates with Asana, Monday.com, and Typeform via Make to automate content creation.  Asana task updates trigger new Document360 articles.  Monday.com integration is planned, and a Google Docs integration is in the works for future plans.  Detailed steps and procedures for setting up the Asana integration are provided.

## Localization

TLDR: Configure default language and script direction (LTR/RTL) for translated knowledge base articles in workspace settings.  Choose language, set default, and toggle script direction (LTR/RTL).

## Integrations

- **Phrase Configuration**: Configure translations via Knowledge Base portal > Extensions > Phrase. Select workspace, languages, and articles, then click "Translate". Monitor statuses: Yet to initiate, Translated, Failed, or In Progress. Translated articles move to Advanced WYSIWYG editor and cannot be recovered. Supports single or multiple workspaces.

- **Phrase Setup**: Connect Phrase by navigating to Settings > Knowledge Base portal > Extensions. Use API token, select workspaces, and click Create. Use Resync to update translations if languages change.

- **Crowdin Integration**: Not included in Document360 subscriptions, but integration is possible via API. API facilitates communication between software applications.

## Localization

**TLDR:** Translation options are restricted to languages supported by the specific project.

To integrate Document360 with various tools, follow these organized steps:

### Google Docs Integration via Make
1. **Create a Make Scenario**: Monitor a specific Google Docs folder for new documents.
2. **Set Up Triggers**: Configure the folder and execution frequency.
3. **API Tokens**: Set up necessary API tokens for secure communication.
4. **Test & Schedule**: Ensure the workflow operates smoothly before automating.

### Jira Integration via Make
1. **Connect APIs**: Use Make to link Jira and Document360.
2. **Field Mapping**: Align Jira task fields with Document360 attributes.
3. **Triggers**: Set up new Jira tasks to create Document360 articles.
4. **Authentication**: Use Make account, Jira API token, and Document360 API key.
5. **Testing**: Validate the integration thoroughly.

### Chrome Extension Setup
1. **Installation**: Add the extension from the Chrome Web Store.
2. **Extension Management**: Adjust settings like Incognito access.
3. **API Key Configuration**: Obtain the Internal Integration Token from Document360 and input it into the extension.

### Crowdin Integration
1. **Project Setup**: Create a Crowdin project matching Document360's structure.
2. **API Tokens**: Configure tokens from both platforms.
3. **Sync Content**: Ensure categories and articles are synced for seamless translation.
4. **Push Updates**: Enable direct content updates from Document360 to Crowdin for current translations.

### Phrase Integration
- **Enterprise Feature**: Utilize for multilingual support if on the Enterprise plan.

By systematically addressing each integration with these steps, you can efficiently automate workflows and enhance functionality. Testing each integration is crucial for smooth operation and minimal issues.

## Auditing

**TLDR:** Knowledge Base portal allows accessing team audit logs via Settings > Knowledge base portal > Team auditing.  Logs can be filtered by event, date, user, and refreshed.  Export as CSV.  Display limited to 20 records per page.

` tag with a markdown heading followed by a concise TLDR. I need to extract key information from the document and present it clearly, ensuring I follow the formatting and conciseness requirements.
</thinking>

<output>
## Settings

Document360's "Project settings" allows customization of your knowledge base portal with options like project details, editor preferences (Markdown, WYSIWYG), file formats, and analytics rules. Access the settings via Settings > Knowledge base portal > General to configure review reminders, media format restrictions, IP exclusions, and support access, then save your changes.

## Integrations

Integrate Phrase for translation by navigating to Documentation, setting the workspace language, previewing unpublished articles, and viewing published ones; requires a Phrase subscription.

## Localization

**TLDR:** Document360 supports multi-language knowledge base localization via manual/machine translations, followed by review.  Prioritize languages based on customer demographics, leverage a single workspace, use style guides/glossaries, and track key metrics (engagement, tickets, satisfaction) for success.  Machine translation can be a starting point, but human review is crucial. Consider third-party integration tools like Crowdin.

## Auditing

**TLDR:** Document360's audit feature logs all or selected activities (article edits, folder changes, user actions, etc.) across modules like Documentation Editor, Drive, and more.  Real-time updates are available, filtered by user, event, or date.  Access is role-based, and while it doesn't recover deleted content, it provides a detailed activity log.

## Localization

Document360 offers robust localization support with options for either a single project accommodating multiple languages or separate language-specific knowledge bases, providing flexibility in managing multilingual content.

## Localization

**TLDR:** Document360 supports 48 languages.  Adding languages requires manual translation effort via either editing existing workspaces or creating new ones.  Automatic translation isn't available; bulk translation is manually performed per language.  The platform comprises a CMS, an online library, and a public website.

tag. The document details how Team Auditing tracks actions like adding or updating articles, changing settings, and provides accountability by logging who performed actions and when. It’s useful for tasks like restoring deleted articles or reviewing product release changes. Audit configuration allows selective monitoring, and access is restricted to Owners, Admins, and users with custom roles. I need to condense this information into a brief summary that includes all key entities and actions while maintaining clarity and conciseness.
</thinking>

<output>
## Auditing

Team auditing tracks actions like adding, updating articles, or changing settings, providing accountability by logging who performed each action and when. It aids in tasks such as restoring deleted articles or reviewing product release changes. The audit configuration enables selective monitoring of key actions, with access restricted to Owners, Admins, and users with custom roles.

## Content Organization

**TLDR:** Document360 Workspaces let you divide a single project's knowledge base into separate, focused workspaces for different audiences or products.  This improves organization, accessibility, and collaboration.  Common issues involve workspace visibility (public/private, published articles).  Workspace availability depends on subscription tier.

` tags. They want me to first explain my reasoning and then provide a concise summary with a markdown heading. The document provided is about content organization using workspaces in Document360 projects. Key points include: workspaces as specialized areas within projects, organization by audience or product lines, and improvements in content management efficiency. I need to ensure the summary is entity-dense and keeps key information while being concise.
</thinking>

<output>
## Content Organization

Document360's workspaces within projects help organize content by audience or product lines, enhancing content management efficiency.

## Localization

Setup and customize localization variables to tailor the text within a Knowledge Base portal for language-specific user experiences. Follow these steps:

1. **Access Settings**:
   - Navigate to **Settings > Knowledge Base Portal > Localization & Workspaces > Localization Variables**.

2. **Edit Variables**:
   - Choose the desired **language**.
   - Modify the variables in the respective **accordion sections** (e.g., Eddy AI, Accessibility).
   - **Save changes** after updating the variables.

**Key Details**:
- Updates may take up to **15 minutes** due to caching.
- Each language must be updated **manually**.
- Examples of customization include changing labels like "Search" or "In this article".

## Billing

**TLDR:**  Owners can buy additional workspaces by navigating to Localization & Workspaces settings, adjusting quantities, confirming payment, and downloading the invoice.  Alternative purchase route is also available via Document360 settings.

The document details Document360's backup and restore processes. Automatic daily backups occur at 00:00 UTC, with manual backups also available. These backups include documentation, API docs, homepage, CSS, and JS, allowing users to restore to a previous state if needed. The restore process involves navigating to the Backup & Restore section under Settings, selecting the desired backup and elements, comparing CSS/JS versions if necessary, and confirming the restore.

## Data Management

**TLDR:** Manual backups are created through the Settings > Knowledge base portal > Backup & Restore interface.  Automatic backups run daily, are retained 90 days, and cannot be deleted manually.  Restores allow selection of specific components.  Compare/copy code snippets for custom CSS/JS are also provided.

## API Integration

**TLDR:** Integrate Document360 API in Postman using `https://apihub.document360.io/swagger/v2/swagger.json`.  Auth with a Document360 API token (from Settings > Knowledge Base > API tokens).  Use Postman environment variable `base_URL` set to `https://apihub.document360.io` for consistent endpoint access.  Re-authentication may be required if session ends.

To add a new workspace, follow these organized steps:

1. **Navigate**: Log in, go to Settings > Knowledge base portal > Localization & Workspaces.
2. **Initiate**: Click "Add workspace."
3. **Configuration**:
   - Choose workspace type.
   - Name it (max 30 characters: alphanumeric & hyphens).
   - Customize URL.
   - Select status: Main (public), beta, public, or deprecated.
4. **Content**:
   - Create new or copy existing content, selecting categories and link handling.
5. **Languages**: Set default, display name, right-to-left scripts, and visibility.
6. **Finalize**: Review settings, then click "Add."

Testing post-creation is recommended to ensure functionality. Plan purpose and settings in advance.

## Notifications

**TLDR:** Access notification history in Settings > Knowledge base portal > Notification > Notification history. This history includes channel name, delivery status, submission/sent dates, and event details.  Use "View details" for full notification content.  This allows tracking delivery verification.

## Notifications

Document360 offers robust notification features across multiple channels, enabling real-time updates for teams. Key features include:

- **Channels**: Supports Webhook, Slack, Microsoft Teams, SMTP (email), and custom email domains (Enterprise only).
- **Setup**: Configure channels via settings; generate and integrate webhook URLs for Slack and Teams; customize SMTP and email domains with DNS settings.
- **Customization**: Use notification mapping to assign specific events to channels, ensuring relevant alerts without overload.
- **Event Types**: Covers documentation updates, drive changes, portal settings, site interactions, AI notifications, analytics, and comments.
- **Tracking**: Notification history allows monitoring of alert deliveries and troubleshooting failures.
- **Accessibility**: Available across all plans (Professional, Business, Enterprise), ensuring all users can stay informed.

## API Integration

**TLDR:**  Integrate APIs using Postman (platform for building/using APIs, on-premises/web access) or Swagger (creates interactive docs for APIs using JSON/YAML, generates user interfaces for testing & exploration).  Postman provides platform access, while Swagger offers a documentation & testing interface.

## API Integration

TLDR: Integrate via Swagger documentation using API token authentication. Utilize GET, POST, PUT, and DELETE methods. Required fields are underscored (e.g., `email_id`). Proper formatting is essential. Note that session refresh may require re-authentication.

## Search

TLDR: A knowledge base portal offers comprehensive search capabilities.  Users can search for articles, drive files, users/groups, tags, and settings.  Filters refine results by workspace, language, status, contributors, and dates.  Search results are displayed with previews and options to access full documents/profiles.  Access and search functionality may vary depending on user roles (Professional, Business, Enterprise).

## Search

Full portal search enables users to search across all project content, files, tags, users, content tools, and settings, spanning every workspace and language for comprehensive results.

## Search

**TLDR:** Search allows accessing tag-based content (articles, categories, files).  Use keywords in the tag search to find related items, view details (name, version, status, etc.), and remove dependencies.

## Incorrect

**TLDR:**  Configuration directive, likely a typo of `proxy_pass` intended to forward requests to `https://example.com`.

To configure a custom domain for your Document360 site, follow these steps: navigate to Settings > Knowledge base site > Custom domain, enter your desired domain, and update your DNS settings according to Document360's instructions. This involves setting a CNAME record pointing to Document360 and verifying domain ownership, possibly via a TXT record. After DNS propagation, your site will be accessible through the custom domain, enhancing your brand presence.

## Site Configuration

Configure custom domains via CNAME records; manage apex domains with DNS flattening and SSL renewal every 90 days. Set up subdirectory hosting for SEO benefits and ensure redirects to prevent duplicate content. Troubleshoot domain issues using DNS tools and CAA records. Use Nginx, ASP.NET Core, or IIS with specific configurations, and enable subfolder hosting with proper proxy settings. Contact support for necessary redirects and configurations.

## Site Configuration

**TLDR:** Apache subfolder hosting for Document360 requires configuring necessary modules (proxy, headers, substitute), setting up VirtualHost for proxying and URL substitutions, implementing redirects, and restarting the server.  This ensures correct file serving and seamless URL handling within the subfolder structure.

## User Management

User self-registration allows readers to create accounts independently by providing name and email, with a one-time email verification for password setup. Project members manage reader access. This feature is available on Business and Enterprise plans with Private or Mixed site access.

## Correct

TLDR: Configure servers for documentation hosting withSSL verification and reverse proxy setups. 

- **Nginx Configuration**: Use `proxy_pass` directive. Verify SSL certificates with OpenSSL and configure server blocks for SSL settings.
- **IIS Setup**: Install URL Rewrite and ARR modules. Configure `web.config` with reverse proxy rules to proxy requests to Document360. Backup `web.config` before changes.
- **URL Redirects**: Implement redirects from project URLs to custom subfolders to avoid duplicate content issues.
- **Sitemap Proxy**: Configure web servers to proxy sitemap.xml requests to internal/external servers.
- **Subfolder Hosting**: Ensure accessibility via project URLs and custom subfolders with necessary URL redirects.

## User Management

**TLDR:** To change your password, consult the dedicated "Change password" article.

## Access Control

No information is available regarding block inheritance plan support, as the table is empty.

## Access Control

**TLDR:**  Administrators can override inherited permissions for specific content (e.g., workspaces, articles).  Access is granted on a per-content item basis, not just by user group.  This isolates access to only the explicitly authorized users for each content item.

## User Management

Document360's User Management includes configuring reader self-registration with default groups and domain restrictions, allowing email domains to control access. The Reviewer role enables content review without editing, with access to articles, comments, and workflow updates. Reviewer accounts can be created individually or via CSV import, with permissions based on categories or articles. Security features include account lockouts after 5 failed attempts, password requirements (8+ characters with mix of cases, number, and special character), and a reset process via email. Reviewer capabilities include managing assignments, bulk updates, and due dates, though they cannot edit content directly. Self-registration may not work with SSO, and the number of Reviewer accounts varies by plan (5-20). Password changes apply to the entire account to maintain security.

## Security

**TLDR:**  Manage IP access restrictions via Settings > User & Security > IP Restriction. View, add (with names & IPs/ranges), and remove IP addresses.  Allow or Block access.  Avoid duplicates for conflict prevention. Supports IPv4 & IPv6 (including specific IPv6 formats).

## Authentication

**TLDR:** SSO is a single login for multiple applications. Benefits include enhanced security, productivity, UX, simplified IT, compliance support, and cost reduction.  SSO plans aren't yet defined for Professional, Business, or Enterprise tiers.

## Access Control

Access control allows managing permissions by blocking or enabling inheritance. Blocking inheritance restricts access to only specified team accounts and groups, with the acting team account being non-removable. Enabling inheritance permits inherited team accounts and groups to access the content, simplifying permission management by toggling the "Block inherited account" setting in the Security menu.

tag needs a concise TLDR. I'll analyze the key points from the provided content regarding IP restrictions, ensuring all critical aspects are included. This includes mentioning project-level control, allowing/blocking IPs, support for IPv4 and IPv6, and its application across all workspaces and languages. I'll present this information clearly and succinctly in the output section.
</thinking>

<output>
## Security

Project-level IP restrictions control access by allowing or blocking specific IPv4 and IPv6 addresses, applying universally across all workspaces and languages within the project.

## User Management

**TLDR:** Document360 team accounts linked to SSO require a matching SSO domain email, selection of the desired SSO configuration, and optionally, skipping the invitation email. Only Owners/Admins can add these accounts.

## Authentication

Document360's SSO allows users to access its Knowledge Base portal or site using credentials from supported Identity Providers (IdPs) like Okta, Google, or ADFS via SAML 2.0 or OpenID Connect. Users log in by entering their email, selecting SSO, and authenticating through their IdP, eliminating the need for multiple passwords. IdP-initiated sign-in is also supported. Troubleshooting common SSO issues, such as HTTP 500 errors, involves updating SAML certificates and verifying attribute mappings.

## Security

TLDR: An IP address uniquely identifies computers/networks online. IPv4 addresses are in the format of four 0-255 numbers separated by dots (e.g., 49.206.113.170). IPv6 addresses use eight hexadecimal groups separated by colons (e.g., FE38:DCE3:124C:C1A2:BA03:6745:EF1C:683D). An IPv6 unicast address is a unique identifier for direct communication with one interface.

## Authentication

**TLDR:** Enable IdP-initiated SSO sign-in to securely access the Document360 Knowledge base directly from your IdP dashboard.

## Authentication

**TLDR:**  SSO (using SAML) prevents duplicate user accounts in projects as a reader.  If a user already exists as an SSO reader, adding them again is blocked.

## Authentication

**TLDR:**  Map existing SAML/OpenID SSO configurations to Document360 projects by selecting them from a dropdown.  Disable the Document360 login page to force SSO login (SAML/OpenID).  Existing IdP and SSO protocol type must match the chosen config.

`
## User Management

- **Inviting SSO Users:** Configure Enterprise SSO using SAML or OpenID Connect, then invite users via email or add them directly through identity providers like Okta, Azure AD, or Google Workspace.
- **Deleting SSO Users:** Navigate to Team accounts & groups, select the SSO user, click "Delete", and confirm. Note that deleting an SSO user does not remove the associated team account.
`

## User Management

To invite existing users to login via SSO in Document360, follow these steps: log in, navigate to **Settings > Users & Security > SAML/OpenID**, edit the SSO configuration, select **All users** or **Selected users only**, and save. Users receive an invitation email, and an additional SSO account is created alongside their existing one.

## User Management

To automatically assign SSO readers in Document360, configure SAML or OpenID settings in the project's "Users & security" section. Enable the "Auto assign reader group" option and select existing reader groups. Ensure reader groups are created beforehand.

## User Management

**TLDR:** Document360 accounts can be converted to SSO accounts for single sign-on, simplifying login.  This conversion is SAML/OpenID exclusive, and previous contributions become anonymous.  Auto-assignment of reader groups for SSO users automates access control.  Conversion is irreversible, and JWT projects aren't supported.  Owners become both Document360 and SSO accounts. Accidental SSO conversions require manual account recreation.

tag, print a markdown heading "## Authentication," and provide a concise TLDR of the given document. I need to focus on key information while keeping it brief.

The document discusses disabling the default login for organizations using SSO, redirecting users to SSO login. It's available in certain plans, but the exact plans aren't specified. There's a caution about mixing SSO and regular accounts, as it might lock out regular users.

So, the TLDR should mention the feature, its applicability, the redirect, the plan support, and the warning about regular user access.
</thinking>

<output>
## Authentication

Organizations using only SSO users can disable the Document360 login page, redirecting users to the SSO login. This feature is supported in certain plans. However, if both SSO and regular accounts are present, disabling the login page may prevent regular users from accessing their accounts.

## Authentication

Document360 supports various SSO methods (SAML, OpenID Connect, JWT) using multiple IdPs (Okta, Entra, Google, ADFS, etc.).  Key configurations involve obtaining IdP details (certificates, URLs), mapping attributes, enabling/disabling IdP-initiated login, custom settings (idle timeout, login button), and handling various integration scenarios.  Troubleshooting advice and FAQs are included.  JWT SSO is a separate flow, leveraging a customer application to handle authentication. Deleting an SSO configuration removes associated users.

## Authentication

**TLDR:** JWT reader accounts in Document360 leverage existing reader groups for knowledge base access control, inheriting restriction settings and supporting single sign-on (SSO) across all plans (Free, Professional, Business, Enterprise).

## User Management

**TLDR:**  Reader group IDs for JWT SSO projects are accessible in Settings > Users and Security > Readers & groups.  Each group has a visible ID with a copy function.  This is only applicable to JWT-configured projects, not standard private knowledge bases.

## User Management

Resolve the 401 Unauthorized error in JWT testing by verifying authorization settings, credentials, request format, and server configuration.

## Site Customization

**TLDR:** Customize knowledge base site's search highlights, hide workspaces dropdown, adjust hyperlink color in dark mode, and enlarge PDF previews by modifying site-specific CSS.

* **Search Highlights:** Change `background-color` and `color` in KB Site 1.0/2.0 Custom CSS.
* **Hide Workspace Dropdown:** Add CSS rule `header .header_bottom .header_bottom_nav ul li.versions-selection { display: none; }` to custom CSS.
* **Dark Mode Hyperlinks:**  Customize hyperlink color in Dark mode Custom CSS.
* **Enlarge PDF Previews:** Adjust PDF container width  in Custom CSS to enlarge preview.

## Authentication

Configure JWT-based authentication by providing user details (name, email) and reader group IDs in a specific JSON format. Changes to reader groups take effect after the current JWT session expires. Tokens are valid for a minimum of 5 minutes and a maximum of 1 day. Reader group IDs must be provided as a comma-separated list.

## Content Formatting

*No summary available for this section.*



## Site Customization

**TLDR:**  Customize table borders by adding CSS (adjust thickness/color). Prevent content copying by intercepting copy/cut/paste events using JavaScript on specific HTML elements (`content_block`, `d360-article-content`).  Adjust CSS/JS settings for desired results on tables and selected content areas.  Mitigation, not complete prevention.

## Content Formatting

**TLDR:**  To center headings or text, or change text color in Markdown, use HTML `<hN style="text-align:center;">` for headings, `<p style="text-align:center;">` for paragraphs, and `<span style="color:desiredColor;">` for inline text formatting.  Markdown itself doesn't support these directly.

## Content Enhancement

TLDR: To set default PDF dimensions, add a CSS snippet to your knowledge base site's CSS settings, specifying desired height and width in pixels.

## Site Customization

**TLDR:** Customize your Knowledge Base site using custom CSS and JavaScript.  Change code block language names, center headings, alter table header colors, and modify callout colors (especially in dark mode).  Custom CSS targets elements like `table th`, `H2`,  `.infoBox`; custom JavaScript automatically applies dark mode initially, disabling further theme switching is possible.  Follow the provided steps in the document for specific changes and element targeting.

## Site Customization

**TLDR:** Customize your knowledge base site with advanced accordion styling, background images on text, sortable tables, new tab links, and customizable table of contents via CSS & JavaScript.  Use provided code snippets, adjusting image URLs and colors as needed, to target specific HTML elements.  Essential to finding the right HTML selectors in your site framework.

## Content Enhancement

**TLDR:** Document360 will now use a default featured image for knowledge base articles, replacing any missing image.  This default image must be publicly accessible and ensures consistent thumbnails on social media shares.

## Site Customization

**TLDR:**  Enterprise users can increase hyperlink size by adding custom CSS to a Knowledge Base Site.  Add CSS to adjust `font-size` in a specific class.  Apply this class to `a` (anchor) tags to affect hyperlink size.  Adjust value and save changes.

## Content Formatting

**TLDR:**  To add borders to images in Markdown, use HTML's `style` attribute within the `<img>` tag.  Example: `<img src="image.jpg" alt="description" style="border: 2px solid grey;">`.  Adjust border width, style (e.g., solid, dashed), and color as needed.

## Content Formatting

- Use `<br>` for vertical line breaks and `&nbsp;` for horizontal space between words in Markdown.
- Images are left-aligned by default; Markdown lacks built-in alignment features.
- Accordions can be added with `<details>` and `<summary>` tags, wrapping content in `<p>` and supporting nested elements.

## Content Enhancement

To embed YouTube Shorts, replace `/shorts/` with `/embed/` in the URL and use an iframe. Optionally, adjust the iframe size from the optimal 315px x 560px to your preference.

## Content Enhancement

**TLDR:** Document360 allows embedding Excel files.  The process involves sharing the Excel file, copying embed code, and pasting it into the Document360 editor (Markdown or WYSIWYG).  Features and availability depend on the plan level (Professional, Business, Enterprise).

## Content Enhancement

**TLDR:** Embed Loom videos in Document360 pages by copying the 'Embed' code from Loom, then pasting it into your Document360 editor (Markdown, WYSIWYG, or Advanced WYSIWYG).  Follow the specific instructions for your chosen editor type.

## Content Formatting

- **Adding Image Shadows in Markdown**: Use HTML and CSS within Markdown to apply shadows to images with the `box-shadow` property. Example:
  ```html
  <img src="image.jpg" alt="Image description" style="box-shadow: 3px 3px 3px gray;" />
  ```
  Customize by adjusting horizontal offset, vertical offset, blur radius, and color.

- **Setting Default Social Media Images**: Add meta tags to specify default images for social media shares when no featured image is available:
  1. Navigate to Knowledge Base portal Settings > Knowledge Base Site > Integrations.
  2. Under Custom HTML, add:
     ```
     <meta property="og:image" content="Image_URL" />
     <meta property="og:image:secure_url" content="Image_URL" />
     ```
  3. Replace "Image_URL" with your image link.

## Site Customization

TLDR: Customize your Document360 site by changing feedback button colors using custom CSS (e.g., `.feedback-button { background-color: #ff6b6b; }`) and hide footers on mobile for better UX. Steps include accessing custom CSS/JS, targeting specific elements, applying styles, and saving changes.

## Billing

**TLDR:** Integrate Google Fonts into Document360 by adding the embed link to Custom HTML and specifying the font family in Custom CSS.  Get the font code from Google Fonts, paste it into Document360's Custom HTML, and update the CSS with the corresponding font family.

## Site Customization

*No summary available for this section.*



## Site Customization

**TLDR:** To hide the Knowledge Base site's left sidebar, add the CSS `site-docs-left-panel-container { display: none !important; }` in the site customization CSS editor.  Save changes to apply the hidden left sidebar by default.

## Content Organization

**TLDR:**  Feature allows hiding categories, subcategories, and articles in the Knowledge base and search results for privacy during development.

## Notifications

**TLDR:** Document360 allows configuring custom notification channels for various events (custom domains, CSS/JS, backups, project members, documentation, landing pages, articles, payments).  A notification history feature is available to view all past alerts.

## Updates

**TLDR:**  Improved emoji loading speed in the category manager enhances user performance.

## Billing

Document360's billing process allows users to manage subscriptions and payment methods. Here's a concise overview:

- **Access**: Navigate to Settings > Knowledge base portal > Billing to view billing details, which include tabs for My Plan, Payment Information, and Invoice History.

- **Upgrading Plans**: 
  - **Available Plans**: Professional, Business, Enterprise, Enterprise +, and Startup program with varying features (storage, users, AI tools, etc.).
  - **Process**: Upgrade via Settings > Billing > Change plan. Prorated costs for mid-cycle upgrades. Legacy and trial users may need support assistance.

- **Downgrading Plans**: 
  - **Implications**: Loss of features, reduced storage, and user limits. Data is preserved but with restricted functionality.
  - **Process**: Requires Owner permissions; contact support for legacy plans.

- **Payment & Trials**:
  - **Payment Information**: Update via Settings > Billing > Payment information. Only primary card can't be deleted.
  - **Trial Period**: 14 days with full features. No auto-charge; manually subscribe post-trial. Trials can switch plans freely.

- **Add-Ons**: Available for Professional, Business, and Enterprise plans, including options for workspaces, languages, storage, and more.

- **Support**: Available via live chat, email, or phone for billing-related assistance.

## Site Customization

Document360 offers two site customization paths: (1) a blank layout allowing full HTML/CSS customization, and (2) predefined themes A & B with built-in styles.

## Troubleshooting

**What:** HAR (HTTP Archive) files for Document360 troubleshooting to log network interactions related to issues.

**How:** Use browser developer tools (Chrome, Firefox, Edge, Safari, Opera) to capture traffic during a problem occurrence.  Enable network recording, reproduce the issue, and save the generated file as a HAR.  Clear browser cache for accurate data. Be careful about sensitive data in the HAR.

**Who:** Document360 users.

## Support

Document360 support allows users to view ticket status by logging in, searching, filtering, and clicking on tickets to see status and history. Support is available via a ticket system with varying responses for Business and Enterprise plans. Tickets can be raised by logging in, submitting a request with required fields, and attaching files. Tickets can also be exported as .csv or .xls files with configurable settings.

[Document360 support page](https://support.document360.com/support/login)
</document_content>
</document>

<document index="26">
<source>docs/document360.json</source>
<document_content>
[
  {
    "heading": "What is Document360?",
    "text": "## What is Document360?\n\nHere is an overview and a navigation guide to help you get started with your Document360 experience.\n\n### What is Document360?\n\n**Document360** is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.\n\nWhen using Document360, you'll interact with several key interfaces:\n\n* #### [My Projects](/help/docs/document360-getting-started#my-projects)\n* #### [Knowledge base portal](/help/docs/document360-getting-started#knowledge-base-portal)\n* #### [Knowledge base site](/help/docs/document360-getting-started#knowledge-base-site)\n* #### [Document360 AI - Eddy AI](/help/docs/ai-features)\n* #### [Resources](/help/docs/document360-getting-started#other-resources)\n\n---",
    "summary": "## What is Document360?\n\n**Document360** is a Knowledge management platform for creating public, private, or mixed-access self-service knowledge bases. Key interfaces include **My Projects**, **Knowledge base portal**, **Knowledge base site,** ** Eddy AI**, and **Resources.**"
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="27">
<source>docs/document360.md</source>
<document_content>
# Combined Documentation

## Table of Contents

- [What is Document360?](#document360-getting-started)
- [Sign up to Document360](#sign-up-to-document-360)
- [System and browser requirements](#system-and-browser-requirements)
- [Project dashboard](#document360-my-projects)
- [Top-right menu overview](#top-right-menu-overview)
- [Creating a project in Document360](#creating-a-project)
- [Dashboard](#dashboard)
- [Multilingual Knowledge bases](#getting-started-with-multi-lingual-knowledge-base)
- [Creating a sandbox project](#creating-a-sandbox-project)
- [Document360 security and infrastructure](#quick-summary-of-the-security-and-infrastructure-aspects)
- [X-Frame options](#x-frame-options)
- [Content security policy](#content-security-policy)
- [CSP and Whitelisting guidelines for Document360 widget](#csp-guidelines-for-document360-widget)
- [Bot management](#bot-management)
- [Fair usage policy for bot management](#fair-usage-policy-for-bot-management)
- [Editor choices in Document360](#using-the-text-editor)
- [Elements of the editor](#elements-of-the-editor)
- [Markdown editor](#markdown-editor-overview)
- [Basic Markdown syntax](#markdown-basics)
- [WYSIWYG editor](#wysiwyg-editor)
- [Advanced WYSIWYG editor](#advanced-wysiwyg-editor)
- [Advanced WYSIWYG editor basics](#advanced-wysiwyg-editor-basics)
- [Movable blocks in Advanced WYSIWYG editor](#movable-blocks-in-advanced-wysiwyg-editor)
- [Conditional content blocks in Advanced WYSIWYG editor](#conditional-content-blocks)
- [Tables in Advanced WYSIWYG editor](#tables-in-advanced-wysiwyg-editor)
- [Image formatting in the Advanced WYSIWYG editor](#image-formatting-in-the-advanced-wysiwyg-editor)
- [Tabs in the Advanced WYSIWYG editor](#tabs-in-the-advanced-wysiwyg-editor)
- [Categories and subcategories](#categories-and-subcategories)
- [Managing categories](#managing-categories)
- [Category types](#category-types)
- [Mapping a category with a folder in Drive](#assigning-drive-folder-for-a-category)
- [Downloading category and article in KB site](#downloading-category-and-article-in-kb-site)
- [Managing articles](#managing-articles)
- [Word .docx files](#article-import-from-word-files)
- [Publishing an article](#publishing-an-article)
- [Reviewing an article using Inline comments](#reviewing-an-article-inline-comments)
- [Adding images to articles](#adding-images-to-articles)
- [Adding videos in articles](#adding-videos-in-articles)
- [Adding files to article](#adding-files-to-articles)
- [Adding hyperlinks](#linking-to-other-articles)
- [Code blocks](#code-blocks)
- [Adding private notes](#private-notes)
- [Embedding Stream videos in articles](#embedding-microsoft-streams-video-in-articles)
- [Embedding Google forms in articles](#embedding-google-forms-in-article)
- [Embedding a Draw.io diagram](#embedding-a-drawio-diagram)
- [All articles - Overview page](#all-articles-overview-page)
- [Using filters in All articles page](#filter-bulk-operations)
- [Export All articles list](#export-bulk-operations)
- [Article review reminder](#review-reminders)
- [Article SEO](#article-seo)
- [Excluding articles from search engines](#excluding-articles-from-searches)
- [Change the URL of an article](#changing-the-url-of-an-article)
- [Article tags](#article-tags)
- [Add article labels](#adding-article-labels)
- [Related articles](#related-articles)
- [Featured image](#featured-image)
- [Attachments](#attachments)
- [Status indicator](#status-indicator)
- [Article status](#article-status)
- [Preferences](#preferences)
- [Show/hide table of contents for an article](#showhide-table-of-contents-for-an-article)
- [Mark as deprecated](#marking-articles-as-deprecated)
- [Update article contributors](#updating-article-contributors)
- [Schedule publishing](#schedule-publishing)
- [Discussion feed](#article-discussion-feed)
- [Revision history](#revision-history)
- [Article analytics](#article-analytics)
- [Security - Article access control](#article-access-control-knowledge-base-site)
- [Health check metrics](#health-check-metrics)
- [Readability score](#readability-score)
- [Sitemap](#sitemap-generator)
- [Public article comments](#public-comments)
- [Robots.txt](#robotstxt)
- [Read receipt](#read-receipt)
- [Share articles via private link](#share-articles-via-private-link)
- [Eddy AI customization](#ai-customization)
- [AI machine translation](#ai-machine-translation)
- [Eddy AI trust page](#eddy-ai-trust-page)
- [AI writer suite](#ai-writer-suite)
- [AI writer](#ai-writer)
- [AI FAQ generator](#ai-faq-generator)
- [AI title recommender](#ai-title-recommender)
- [AI SEO description generator](#seo-description-generator)
- [AI tag recommender](#ai-tag-recommender)
- [AI related articles recommender](#ai-related-articles-recommender)
- [AI Chart generator](#ai-chart-generator)
- [AI alt text generator](#ai-alt-text-generator)
- [AI search suite](#ai-search-suite)
- [AI assistive search (Ask Eddy AI)](#ai-assistive-search-ask-eddy)
- [AI dynamic related articles recommendation](#ai-dynamic-related-articles-recommendation)
- [AI Chatbot](#ai-chatbot)
- [Securing Chatbot authentication using JWT](#securing-chatbot-authentication-using-jwt)
- [Styling the Chatbot](#styling-the-chatbot)
- [Adding external sources for AI Assistive search](#eddy-ai-federated-search)
- [AI article summarizer](#ai-article-summarizer)
- [Ask Eddy AI API](#ask-eddy-ai-api)
- [Enhancing accessibility with our read out loud feature](#text-to-voice-functionality)
- [AI premium suite](#ai-premium-suite)
- [AI glossary generator](#ai-glossary-generator)
- [How to write GenAI friendly content](#how-to-write-genai-friendly-content)
- [Prompt engineering tips](#prompt-engineering-tips)
- [File management](#drive)
- [Adding folders and files](#adding-folders-and-files)
- [Folder actions in Drive](#folder-actions-in-drive)
- [File actions in Drive](#file-actions-in-drive)
- [All files overview](#all-content-overview)
- [Recent, Starred, and Recycle bin files](#recycle-bin-recent-and-starred-files)
- [Workflow designer](#workflow-designer)
- [Managing workflow status](#managing-workflow-status)
- [Workflow assignment](#workflow-assignment)
- [Templates](#article-templates)
- [Variables](#variables)
- [Snippet](#snippets)
- [Glossary](#glossary)
- [Adding glossary terms](#adding-glossary-term)
- [Inserting glossary term in an article](#adding-glossary-term-in-articles)
- [Managing glossary terms](#editing-and-deleting-glossary-term)
- [Managing the glossary landing page](#glossary-overview-page)
- [Feedback manager](#feedback-manager-overview)
- [Custom pages](#custom-pages)
- [Tags](#tags)
- [Manage tags page overview](#tag-manager-overview-page)
- [Adding a new tag](#adding-a-new-tag)
- [Tag groups page overview](#tag-groups-overview)
- [Manage tag dependencies](#tag-dependency-viewer)
- [Find and replace](#find-and-replace)
- [SEO descriptions](#seo-descriptions)
- [Exporting your Document360 project as a ZIP file](#export-documentation-as-zip)
- [Importing a Document360 project ZIP file](#import-a-documentation-project)
- [Migrating documentation from other platforms](#migrating-documentation-from-another-knowledge-base-platform)
- [Designing a PDF template](#pdf-design-templates)
- [Compiling content for PDF](#compliling-content-for-pdf)
- [Analytics](#analytics)
- [Articles analytics](#articles-analytics)
- [Eddy AI search analytics](#eddy-ai-search-analytics)
- [Search analytics](#analytics-search)
- [Reader analytics](#reader-analytics)
- [Team accounts analytics](#analytics-team-accounts)
- [Feedback analytics](#feedback)
- [Links status analytics](#links-status)
- [Ticket deflector analytics](#ticket-deflector-overview)
- [Managing API documentation](#manage-api-documentation)
- [Edit, Clone, and Delete widget](#edit-clone-and-delete)
- [Managing and customizing the Knowledge base widget](#managing-and-customizing-the-knowledge-base-widget)
- [URL Mapping](#url-mapping)
- [Customizing the Knowledge base widget using Custom CSS/JavaScript](#customizing-the-kb-widget-using-custom-css-javascript)
- [FAQ - Knowledge base widget](#faq-knowledge-base-widget)
- [Knowledge base site 2.0](#knowledge-base-site-20)
- [Customize site](#customize-site)
- [KB site 2.0 migration](#kb-site-20-migration)
- [Web Content Accessibility Guidelines (WCAG)](#web-content-accessibility-guidelines-wcag)
- [Header - Primary navigation](#header-primary-navigation)
- [Header - Secondary navigation](#header-secondary-navigation)
- [Footer](#footer-navigation)
- [Custom footer](#custom-footer)
- [RSS Feeds](#rss-feeds)
- [Main pages](#main-pages)
- [Hero section](#hero-section)
- [Rich text blocks](#text-block)
- [Multicolumn card section](#text-columns-block)
- [Image with text block](#image-and-text)
- [Custom code section](#html-block)
- [Knowledge base categories block](#knowledge-base-categories)
- [Widgets block](#widgets)
- [Error pages](#error-pages)
- [404 page](#404-page)
- [Access denied page](#access-denied-page)
- [Unauthorized page](#unauthorized-page)
- [IP restriction page](#ip-restriction-page)
- [Custom CSS & JavaScript](#custom-css-javascript)
- [CSS Snippets](#css-snippets)
- [Callout styles](#callout-styles)
- [Body font style](#body-font-style)
- [Image alignment](#image-alignment)
- [Header font style](#header-font-style)
- [Table style](#table-style)
- [Article redirect rule](#article-redirect-rules)
- [Article settings & SEO](#configuring-the-article-settings)
- [Article header](#article-header)
- [Site header-What's new](#document-header)
- [Follow articles and categories](#follow-articles-and-categories)
- [Search in Knowledge base site](#search-in-knowledge-base-site)
- [Liking or disliking an article](#liking-or-disliking-an-article)
- [Smart bars](#smart-bar)
- [Cookie consent](#cookie-consent)
- [Accessing the ticket deflectors in portal](#accessing-the-ticket-deflectors)
- [Adding a new ticket deflector](#adding-a-new-ticket-deflector)
- [Integrations in Document360](#integrations-getting-started)
- [Code inclusion and exclusion conditions](#advanced-insertion-rules-in-integration)
- [LiveChat](#livechat)
- [Olark](#olark)
- [Freshchat](#freshchat)
- [Crisp](#crisp)
- [Chatra](#chatra)
- [Doorbell](#door-bell)
- [Gorgias](#gorgias)
- [Belco](#belco)
- [Sunshine Conversations](#sunshine)
- [Kommunicate](#kommunicate)
- [Google Analytics](#google-analytics-integration)
- [Google Analytics (GA4)](#google-analytics-new)
- [Google Tag Manager](#google-tag-manager)
- [Heap](#heap)
- [Segment](#segment-integration)
- [Hotjar](#hotjar)
- [Amplitude](#amplitude)
- [FullStory](#fullstory)
- [Mixpanel](#mixpanel)
- [VWO](#vwo)
- [Freshmarketer](#freshmarketer)
- [ZOHO PageSense](#zoho-page-sense)
- [GoSquared](#gosquared)
- [Commento](#commento)
- [Disqus](#disqus)
- [Document360 Extensions - Getting started](#all-extensions)
- [Freshdesk](#freshdesk)
- [Freshservice](#freshservice)
- [Zendesk](#zendesk)
- [Intercom](#intercom-integration)
- [Salesforce](#salesforce)
- [Cases page](#cases-page)
- [Slack](#slack)
- [Microsoft Teams](#microsoft-teams)
- [Drift](#drift)
- [Zapier - Setup guide](#zapier-setup-guide)
- [Integrating Google Docs with Document360](#google-docs-document360-integration)
- [Integrating Google Sheets with Document360](#document360-with-google-sheets-integration)
- [Integrating Document360 with Google Drive](#google-drive-document360)
- [Integrating Trello with Document360](#document360-with-trello-integration)
- [Integrating GitHub with Document360](#github-document360)
- [Integrating Confluence Server with Document360](#confluence-document360)
- [Integrating Zoho CRM with Document360](#zoho-crm-document360)
- [Integrating Pipedrive with Document360](#pipedrive-document360)
- [Integrating Hubspot with Document360](#hubspot-document360)
- [Integrating Asana with Document360](#asana-document360)
- [Integrating Monday.com with Document360](#mondaycom-document360)
- [Integrating Typeform with Document360](#typeform-document360)
- [Integrating Gmail with Document360](#document360-gmail)
- [Integrating Mailchimp with Document360](#document360-mailchimp)
- [Make - Setup guide](#make-setup-guide)
- [Integrating Asana with Document360](#asana-and-document360-integration)
- [Integrating Monday.com with Document360](#monday-document360-integration)
- [Integrating Typeform with Document360](#typeform-and-document360-integration)
- [Integrating Google Docs with Document360](#google-docs-and-document360-integration)
- [Integrating Jira with Document360](#jira-and-document360-integration)
- [Chrome](#chrome-extension)
- [Crowdin](#crowdin)
- [Phrase](#phrase)
- [General project settings](#general-project-settings)
- [Team auditing](#team-auditing)
- [Localization - Getting started](#localization-getting-started)
- [Setting up a Multi-lingual knowledge base](#setting-up-a-multi-lingual-knowledge-base)
- [Localization variables](#localization-variables)
- [Workspaces](#workspaces)
- [Backup and restore](#backup-restore)
- [Notifications](#notifications)
- [Webhook notification channel](#webhook-notification-channel)
- [Slack notification channel](#slack-notification-channel)
- [Microsoft Teams notification channel](#microsoft-teams-notification-channel)
- [SMTP notification channel](#smtp-email-notification-channel)
- [Notification mapping](#notification-mapping)
- [Notification history](#notification-history)
- [Email domain](#send-notifications-from-custom-email-domain)
- [How to use Postman?](#how-to-use-postman)
- [How to use Swagger?](#how-to-use-swagger)
- [Portal search](#full-portal-search)
- [Article-portal search](#article-full-portal-search)
- [Drive-portal search](#drive-full-portal-search)
- [Users & groups-portal search](#users-groups-full-portal-search)
- [Tags-portal search](#tags-full-portal-search)
- [Settings-portal search](#settings-full-portal-search)
- [Custom domain mapping](#custom-domain-mapping)
- [Hosting Document360 on a sub-directory](#document360-on-a-sub-folder)
- [Nginx server - Subfolder hosting](#nginx-server)
- [ASP.NET Core server](#aspnet-core-server)
- [Microsoft - IIS server](#microsoft-iis-server)
- [Apache HTTP server](#apache-http-server)
- [Readers self registration](#reader-self-registration)
- [Managing reviewer accounts](#managing-reviewer-accounts)
- [Account locked](#account-locked)
- [Block inheritance](#block-inheritance)
- [IP restriction](#ip-restriction)
- [Single Sign-On (SSO)](#single-sign-on-sso)
- [Login using SSO - Knowledge base portal](#login-using-sso-knowledge-base-portal)
- [Login using SSO - Knowledge base site](#login-using-sso-knowledge-base-site)
- [Inviting or Adding SSO users](#inviting-or-adding-sso-users)
- [Mapping an existing SSO configuration to other projects](#mapping-an-existing-sso-configuration-to-other-projects)
- [Disable Document360 login page](#disable-document360-login-page)
- [Auto assign reader group](#auto-assign-reader-group)
- [Convert to SSO account](#convert-to-sso-account)
- [Sign out idle SSO team account](#team-account-idle-timeout)
- [SAML](#saml)
- [SAML SSO with Okta](#saml-sso-with-okta)
- [SAML SSO with Entra](#saml-sso-with-entra)
- [SAML SSO with Google](#google-sso-saml-configuration)
- [SAML SSO with OneLogin](#saml-sso-with-onelogin)
- [SAML SSO with ADFS](#saml-sso-with-adfs)
- [SAML SSO with other configurations](#saml-sso-with-other-configurations)
- [Identity Provider (IdP) initiated sign in](#idp-initiated-login)
- [Removing a configured SAML SSO](#removing-a-configured-saml-sso)
- [OpenID](#openid)
- [Okta with OpenID SSO](#okta-with-openid-sso)
- [Auth0 with OpenID SSO](#auth0-with-openid-sso)
- [ADFS with OpenID SSO](#adfs-with-openid-sso)
- [Other configurations with OpenID SSO](#other-configurations-with-openid-sso)
- [Removing a configured OpenID SSO](#removing-a-configured-openid-sso)
- [Setting up JWT SSO](#configuring-the-jwt-sso)
- [JWT reader groups](#jwt-reader-groups)
- [How to enlarge the pdf preview in the article?](#how-to-enlarge-the-pdf-preview-in-the-article)
- [How to change the color of the hyperlinks in Dark mode?](#how-to-change-the-color-of-the-hyperlinks-in-dark-mode)
- [How to change the highlighted search result color in articles?](#how-to-change-the-highlighted-search-result-color-in-articles)
- [How to hide the project's workspace dropdown in the Knowledge base site?](#how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site)
- [How to add a vertical scrollbar to the code blocks?](#how-to-add-a-vertical-scrollbar-to-the-code-blocks)
- [How to set the default height and width of the embedded PDF?](#how-to-set-the-default-height-and-width-of-the-embedded-pdf)
- [How to make the table border bold in knowledge base?](#how-to-make-the-table-border-bold-in-knowledge-base)
- [How to vertically align table contents at the top in the Knowledge base?](#how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base)
- [How to restrict the readers from copying the content?](#how-to-restrict-the-readers-from-copying-the-content)
- [How to keep dark mode for the Knowledge base site by default?](#how-to-keep-dark-mode-for-the-knowledge-base-site-by-default)
- [How to center align the text in Markdown?](#how-to-center-align-the-text-in-markdown)
- [How to change the color of the text in Markdown?](#how-to-change-the-color-of-the-text-in-markdown)
- [How to change the language name text in code blocks?](#how-to-change-the-language-name-text-in-code-blocks)
- [How to change the callouts color in dark mode?](#how-to-change-the-callouts-color-in-dark-mode)
- [How to center align the heading in the articles?](#how-to-center-align-the-heading-in-the-articles)
- [How to change the color of the table header?](#how-to-change-the-color-of-the-table-header)
- [How to add accordion in Markdown?](#how-to-add-accordion-in-markdown)
- [How to add extra space in Markdown?](#how-to-add-extra-space-in-markdown)
- [How to align the image in Markdown?](#how-to-align-the-image-in-markdown)
- [How to add a background image for a text content?](#how-to-add-a-background-image-for-a-text-content)
- [How to change the color of the table of contents?](#how-to-change-the-color-of-the-table-of-contents)
- [How to sort the contents of a table?](#how-to-sort-the-contents-of-a-table)
- [How to customize the hyperlink size?](#how-to-customize-the-hyperlink)
- [How to make all links open in new tab?](#how-to-make-all-links-open-in-new-tab)
- [How to set a default featured image in knowledge base?](#how-to-set-a-default-featured-image-in-knowledge-base)
- [How to add shadows to an image in Markdown?](#how-to-add-shadows-to-an-image-in-markdown)
- [How to add borders to an image in Markdown?](#how-to-add-borders-to-an-image-in-markdown)
- [How to embed YouTube Shorts?](#embed-youtube-shorts)
- [How to embed a Loom video?](#how-to-embed-loom-video)
- [How to embed an Excel file?](#how-to-embed-an-excel-file)
- [How to change the color of Feedback buttons?](#how-to-change-the-color-of-feedback-buttons)
- [How to hide footer in mobile view?](#how-to-hide-footer-in-mobile-view)
- [How to change the hover color of the header options?](#how-to-change-the-hover-color-of-the-header-options)
- [How to move the related articles above the feedback section?](#how-to-move-the-related-articles-above-the-feedback-section)
- [How to hide the change password option for readers?](#how-to-hide-the-change-password-option-for-readers)
- [How to hide the category manager?](#how-to-hide-the-category-manager)
- [How to configure a custom font in the knowledge base?](#how-to-configure-a-custom-font-in-the-knowledge-base)
- [How to hide the left navigation bar in the knowledge base site?](#how-to-hide-the-left-navigation-bar-in-knowledge-base-site)
- [Plans and pricing](#plans-and-pricing)
- [Upgrading your subscription plan](#upgrading-your-plan)
- [Downgrading your subscription plan](#downgrading-your-plan)
- [Purchasing add-ons](#add-ons)
- [Upgrading from trial version](#upgrading-from-trial-version)
- [Changing payment information](#changing-payment-information)
- [February 2025 - 11.1.2](#february-2025-1112)
- [January 2025 - 11.01.1](#january-2025-1111)
- [December 2024 - 10.12.1](#december-2024-10121)
- [November 2024 - 10.11.1](#november-2024-10111)
- [October 2024 - 10.10.1](#october-2024-10101)
- [September 2024 - 10.9.1](#september-2024-1091)
- [September 2024 - 10.8.2](#september-2024-1082)
- [August 2024 - 10.8.1](#august-2024-1081)
- [July 2024 - 10.7.1](#july-2024-1071)
- [July 2024 - 10.6.2](#july-2024-1062)
- [June 2024 - 10.6.1](#june-2024-1061)
- [June 2024 - 10.5.2](#june-2024-1052)
- [May 2024 - 10.5.1](#may-2024-1051)
- [May 2024 - 10.4.2](#may-2024-1042)
- [April 2024 - 10.4.1](#1041-release-note)
- [April 2024 - Minor release](#april-2024-minor-release)
- [March 2024](#march-2024)
- [February 2024](#february-2024)
- [January 2024](#january-2024)
- [December 2023](#december-2023)
- [November 2023](#november-2023)
- [August 2023](#august-3)
- [July 2023](#july-2)
- [June 2023](#june-3)
- [May 2023](#may-1)
- [April 2023](#april-3)
- [March 2023](#march-4)
- [February 2023](#february-3)
- [January 2023](#january-2)
- [December 2022](#december-2022-release-note)
- [November 2022](#november-2022-release-note)
- [October 2022](#october-2022-release-note)
- [September 2022](#september-2022-release-note)
- [August 2022](#august-2022-release-note)
- [July 2022](#july-2022-release-note)
- [June 2022](#june-2022-release-notes)
- [May 2022](#may-2022-release-note)
- [April 2022](#april-2022-release-note)
- [March 2022](#march-2022-release-note)
- [February 2022](#february-2022-release-note)
- [January 2022](#january-2022-release-note)
- [December 2021](#december-2021-release-note)
- [November 2021](#november-2021-release-note)
- [October 2021](#october-2021-release-note)
- [September 2021](#september-2021-release-note)
- [August 2021](#august-2021-release-notes)
- [July 2021](#july-2021-release-note)
- [June 2021](#june-2021-release-note)
- [May 2021](#may-2021-release-note)
- [April 2021](#april-2021-release-note)
- [March 2021](#march-2021-release-note)
- [February 2021](#february-2021-release-note)
- [January 2021](#january-2021-release-note)
- [November 2020](#november-2020-release-note)
- [October 2020](#october-2020-release-note)
- [August 2020](#august-2020-release-note)
- [June 2020](#june-2020-release-note)
- [May 2020](#may-2020-release-note)
- [April 2020](#april-2020-release-note)
- [March 2020](#march-2020-release-note)
- [February 2020](#february-2020-release-note)
- [January 2020](#january-2020)
- [December 2019](#december)
- [November 2019](#november)
- [October 2019](#october)
- [September 2019](#september-2019)
- [August 2019](#august)
- [July 2019](#july)
- [June 2019](#june)
- [May 2019](#may-2019)
- [April 2019](#april-2019)
- [March 2019](#march)
- [February 2019](#february)
- [January 2019](#january-2019)
- [Support ticket](#support-ticket)
- [Generating a HAR file](#document360-support-generating-a-har-file)

---

<a id="document360-getting-started"></a>

## What is Document360?

Here is an overview and a navigation guide to help you get started with your Document360 experience.

### What is Document360?

**Document360** is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.

When using Document360, you'll interact with several key interfaces:

* #### [My Projects](/help/docs/document360-getting-started#my-projects)
* #### [Knowledge base portal](/help/docs/document360-getting-started#knowledge-base-portal)
* #### [Knowledge base site](/help/docs/document360-getting-started#knowledge-base-site)
* #### [Document360 AI - Eddy AI](/help/docs/ai-features)
* #### [Resources](/help/docs/document360-getting-started#other-resources)

---

## My projects

The **project dashboard** is the first thing you see when logging in to [**Document360**](https://portal.document360.io). The dashboard features all the projects you own, projects associated with a team account, and projects associated with a reader.  
Here, each project will have a visibility tag to indicate the type of project (public, private, or mixed).

![1_Screenshot-My_projects](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-My_projects.png "My-Projects.png")

---

## Knowledge base portal

The **Knowledge base portal** is where you can:

* **Create** Category, Articles, and Templates
* **Manage** files, team accounts, and readers
* **Set up** branding, domain, security, and more for the Knowledge base site

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-What_is_Document360.png)

Here are some elements you'll find on the knowledge base portal:

1. Dashboard
2. Documentation
3. API Documentation
4. Analytics
5. Widgets
6. Drive
7. Settings
8. Search
9. Open Site

> NOTE
>
> Anything created and/or configured on the Knowledge base portal will affect what an end-user or reader would see on the Knowledge base site.

### 1. Dashboard

This page provides an overview of your entire project and serves as a hub for contributors. In the **Overview** section, Team accounts can access information such as created articles, published articles, drafts, and the performance insights of published articles (views, reads, likes, and dislikes). You can use the filter option to select the time frame. You can also view other project-related information including **Recently seen**, **Team accounts**, **Readers**, **Drive capacity**, **Broken links**, **No result searches** and **Last backed up** date.

![3_Screenshot-Knowledge_base_portal_dashboard_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Knowledge_base_portal_dashboard_overview.png)

In the **My contribution** section, the user can view their contributions to the project, article performance metrics, workflow assignments, review reminders, feedback, and broken links.

![Document360 dashboard showing article metrics summary with number of articles created, published or drafted, and an area to display assigned tasks.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Knowledge_base_portal_dashboard_my_contribution.png)

---

### 2. Documentation

The **Documentation** page is where you'll create and maintain the tree-view folder structure of categories that will keep your articles organized. Start a knowledge base by creating a Category and then populate them with Subcategory and Articles.

Drag and drop categories and articles to reorder, hide, rename, and delete them using the More options () menu that appears when you hover your mouse over any item on the Category manager (left navigation pane).

![ocument360 user interface showing navigation menus for managing articles, workflow assignments, starred items, recycle bin, site builder, content tools, and categories/articles hierarchy.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Knowledge_base_portal_documentation_view.png)

#### a. All articles

The **All articles** section allows you to perform bulk operations (publish, hide, move, delete, etc.) on multiple articles at once, saving time compared to performing these actions individually on each article.

![Document360's 'All articles' interface showing a list of articles with editing options like publish, hide, move, delete, review reminder, and live status, as well as features for reusing content through templates, variables, snippets, and a glossary.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Knowledge_base_portal_documentation_view_all_articles.png)

#### b. Workflow assignments

The Workflow assignments section gives you an idea about what the team is currently working on, and any recently published articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Knowledge_base_portal_documentation_view_workflow_assignments.png)

Any articles that you are assigned will show up on this page. You can filter articles based on the following workflow statuses: **Draft**, **In review**, or **Published**. If you missed the review due date for any article, it will appear under the **Overdue** category.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7.1_Screenshot-Knowledge_base_portal_workflow_assignments_page.png)

#### c. Starred

The Starred section contains the articles you marked as favorites. This allows quick access to important articles.

![Document360's 'Starred' interface showing a list of articles with the respective tags and article status, along with an arrow pointing at 'Starred' on the left navigation panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Knowledge_base_portal_documentation_view_starred.png)

#### d. Recycle bin

The Recycle bin section includes a list of articles and categories deleted in the past 30 days. You can restore the deleted categories and articles in the available time frame.

![Document360's 'Recycle bin' interface showing an empty recycle bin, along with an arrow pointing at 'Recycle bin' on the left navigation panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Knowledge_base_portal_documentation_view_recycle_bin.png)

#### e. Site builder

You can personalize the look and feel of your knowledge base site from the **Site builder** section.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Knowledge_base_portal_documentation_view_site_builder.png)

You can choose the desired logo and icon for your knowledge base site. From this section, you can also customize the brand colors, font, and styling of the site.

#### f. Content tools

The **Content tools**, as the name implies, contain all the necessary tools to manage your article and project content.

![5_Screenshot-Knowledge_base_portal_Content_tools](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-Knowledge_base_portal_documentation_view_content_tools.png)

You can manage the following features from this menu.

* **Content reuse** - Manage all the variables, snippets, templates, and the glossary.
* **Import and Export** - Manage all your project import and export activities from this section. In this section, you can export your content as a PDF or migrate content from other knowledge management tools.
* **Content essentials** - Manage the project-level find and replace, review reminders, tags, and SEO descriptions from the menu.
* **Feedback manager** - View and respond to articles and no search feedback from a unified module.
* **Workflow designer** - Craft your workflow statuses and sequence from this section.

#### g. Categories & Articles (Category manager)

Writing and publishing articles in Document360 is simple: pick your category, create an article(title and slug), add SEO details, and publish to your knowledge base.

When you update or edit an article (Fork), Document360 will create a new Article revision without affecting the live/public workspace.

![12_Screenshot-Knowledge_base_portal_documentation_view_categories_and_articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Knowledge_base_portal_documentation_view_categories_and_articles.png)

You can make the necessary changes and republish when you're ready. You can identify the articles easily using the Article status indicators (Yellow dot). Document360 maintains all the workspaces to check the differences between them.

---

### 3. API documentation

The API documentation feature in Document360 provides a complete solution for creating and managing API references. This feature allows you to create high-quality API documentation that helps users understand and consume your APIs effectively.

![13_Screenshot-Knowledge_base_portal_api_documentation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-Knowledge_base_portal_api_documentation.png)

This API module includes the **Try it!** feature, which allows the users to test the API endpoints within the Knowledge base site. You can create dedicated versions of your API documentation. The feature provides an intuitive interface for uploading API references as URLs or JSON/YAML files. After uploading the OpenAPI definition, the interactive API endpoint articles are created in the Knowledge base portal. Now, end users can access the **Try it!** option with the available endpoints, parameters, and responses in the API documentation on the Knowledge base site.

---

### 4. Analytics

Document360 includes an **Analytics** menu with tools to help you understand end-user engagement with your knowledge base.

![12_Screenshot-Knowledge_base_portal_Analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-Knowledge_base_portal_analytics.png)

Here is the list of metrics and modules you can track with the Analytics tool:

* **Articles**
* **Eddy AI**
* **Search**
* **Team accounts**
* **Feedback**
* **Links status**
* **Page not found**
* **Ticket deflector**

---

### 5. Widget

The Knowledge base widget (previously known as *Knowledge base assistant* (or) *In-app assistant*) helps readers find their answers without leaving your site or application.

![8_Screenshot-Knowledge_base_portal_Widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_Screenshot-Knowledge_base_portal_widgets.png)

You can update the following Knowledge base widget settings from this menu.

* **Installation & setup**
* **Custom CSS**
* **Custom JavaScript**
* **URL mapping**

---

### 6. Drive

Centralized and cloud-based storage for Document360 projects that stores and let team members manage all the Knowledge base artifacts (files). If you have already used any other heavyweights, such as Google Drive or OneDrive, getting accustomed to the functions in Document360 Drive should be relatively easy. You can access your Drive by clicking the Drive icon on the left menu.

![7_Screenshot-Knowledge_base_portal_Drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_Screenshot-Knowledge_base_portal_drive.png)

---

### 7. Settings

You can set and configure all aspects of the project and knowledge base in the **Project settings** such as inviting team members, editing notification settings, configuring domains, setting up article redirects, and more.

![9_Screenshot-Knowledge_base_portal_Settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_Screenshot-Knowledge_base_portal_settings.png)

The different features are mapped under the following classifications in the Settings menu:

* **Knowledge base portal**
* **Knowledge base site**
* **Users & Security**
* **AI Features**

---

### 8. Search

A dedicated space to search the entire project content is now available on the Knowledge base portal. Perform a combined search across all the workspaces and languages simultaneously. The search bar is available at the top of all the modules and pages in the Knowledge base portal.

![10_Screenshot-Knowledge_base_portal_Search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/18_Screenshot-Knowledge_base_portal_search.png)

The search engine works similarly to the other search functionalities in the portal. Type in the keyword and narrow the results using filters such as workspace, language, visibility, tags, and date range. You can preview the article/category page, and then preview the article or navigate to the article in the Editor.

![11_Screenshot-Knowledge_base_portal_Search_results](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/19_Screenshot-Knowledge_base_portal_search_bar_dropdown.png)

As the search is performed universally in the project, it covers files. Users can switch between the article and Drive search using the tabs below the search bar.

---

### 9. Open site

The Open site () action is used to navigate to and view the Knowledge base site. Clicking the icon will take you to the Knowledge base site of the workspace that is currently open in your knowledge base portal. If you are in the API documentation workspace, the Open site action will take you to the API documentation home page. If your API documentation site does not have a home page, you will be directed to the first article or category page in the API documentation.

---

## Knowledge base site

The Knowledge base site is the website that end-users will access to read articles and find helpful answers.

Set your knowledge base access settings to public, private, or mixed. **Public** means it is accessible to anyone on the internet, **Private** is restricted by login screens, and **Mixed** combines elements of both public and private attributes.

![14_Screenshot-Knowledge_base_site_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/20_Screenshot-Knowledge_base_site_preview.png)

---

## Document360 AI - Eddy AI

Eddy AI is an AI writing assistant integrated into the Document360 platform. Eddy AI can help you with many actions, such as **writing articles**, **generating SEO descriptions**, and **recommending article tags**, **titles**, and **related articles**. Eddy AI is also available on the knowledge base site, helping your readers find information faster using **assistive search** and the **article summarizer**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/24_Screenshot-Eddy_settings_aifeatures_eddy.png)

---

## Other Resources

### Got Feedback?

We actively maintain a public [**product feedback portal**](https://feedback.document360.com/) to receive customer and user feedback. It also features our roadmap, so if you're curious about what's coming to the product, this is the best place to look!

![27_Screenshot-An_overview_of_project_feedback](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/21_Screenshot-User_feedback.png)

### Quick start (Feature explorer)

The **Quick start** is a learning wizard available on all Document360 trial projects. This feature explorer helps you track your progress as you learn about the various features included in Document360. Each time you use or explore a new part of the product, the Feature Explorer automatically updates your progress. It allows you to visualize how much of the product you have explored.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-What_is_Document360.png)

---

### Need Help?

If you need any help or have any questions, contact us! Just click your profile avatar to:

![21_Screenshot-My_projects_Help_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/23_Screenshot-Resources_need_help.png)

* Send an **in-app chat**
* Send us an **email** at [**support@document360.com**](mailto:support@document360.com)
* Read our [**documentation**](https://docs.document360.com/docs)
* Watch some [**tutorial videos**](https://document360.com/tutorial-videos/)

---

### FAQs

#### **What is Document360?**

Document360 is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.

#### **What can I do in the Knowledge base portal?**

In the Knowledge base portal, you can create categories, articles, and templates, manage files, team accounts, and readers, and set up branding, domain, and security for your Knowledge base site.

#### **What features are available in the Analytics section?**

The Analytics section includes tools to track metrics such as articles, user engagement, search performance, team accounts, feedback, and link status.

#### **Can I restore deleted articles in Document360?**

Yes, you can restore articles and categories that have been deleted within the past 30 days from the Recycle bin section.

#### **Is there an AI feature in Document360?**

Yes, Document360 includes Eddy AI, an AI writing assistant that helps with writing articles, generating SEO descriptions, and assisting readers in finding information.

#### **What is a knowledge base?**

A knowledge base is a centralized repository of information designed to provide answers, guidance, and support for users, customers, or employees. It contains structured content like articles, FAQs, guides, and documentation, allowing users to easily search and access information to solve problems or learn more about a product, service, or topic. Knowledge bases are commonly used in customer support, internal training, and product documentation to streamline information sharing and improve efficiency.

#### Why does it show ‘Maintenance’ on the top navigation bar in the knowledge base portal?

The **Maintenance** badge on the top navigation bar indicates scheduled maintenance of the Knowledge base portal. The knowledge base portal will be unavailable for the scheduled time however, the Knowledge base site will be accessible to all the users.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/26_ScreenShot-What_is_Document360.png)

For further assistance, please contact the Document360 support team: [Contact Document360 Support](https://document360.com/support/).

Organizes related articles under a common theme in the knowledge base.

A written document on a specific topic in your knowledge base, serving as a unit of organized information.

Pre-designed article structures in Document360 that team accounts can use to create consistent and well-organized articles for the Knowledge base.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

Organizes related articles under a common theme in the knowledge base.

A secondary category in Document360 used to organize and display groups of related articles. Subcategories act as folders within a primary category, helping structure similar topics for better organization and navigation.

A written document on a specific topic in your knowledge base, serving as a unit of organized information.

A tool in the editor’s left pane for managing article-category relations.

The practice of optimizing content to improve its visibility in search engine results and attract organic traffic. In Document360, Search Engine Optimization (SEO) elements can be added for each article through the article settings.

An option in Document360 used to create a new version of an article, containing the content of the original version for revision.

A feature to view and manage an article’s revision history, workflow updates and compare different versions.

Custom styling code used to modify the appearance of elements on a webpage.

A tool in Document360 used by writers to draft and format content. Document360 offers three types of editors: Markdown, WYSIWYG, and Advanced WYSIWYG.

<a id="sign-up-to-document-360"></a>

## Sign up to Document360

Before you start using Document360, you need to create a Document360 account. To create a Document360 account, navigate to the [**signup page**](https://document360.com/signup/).

---

## **Signing Up to Document360**

### **Navigate to the Signup page**

1. On the signup page, you'll need to provide some basic details:

   * First Name
   * Last Name
   * Work Email
   * Job Title
   * Implementation timeline
   * Phone Number
2. After filling in these details, click the **Start Free Trial** button.

![Exploring the onboarding experience while signing up the Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Initial_step_of_onboarding.png)

### **Email verification**

3. You will receive a 6-digit verification code in your email. Enter this code on the verification page to continue.
4. Click **Verify.**

> NOTE
>
> If you enter the wrong verification code five times, your account activation will be locked. In such cases, you'll need to contact the Document360 support team for help.

### **Set your account password**

5. After verifying your email, you will need to create a password for your Document360 account. Make sure your password meets the following requirements:

   * At least 8 characters long
   * Includes at least one number
   * Includes at least one special character
   * Includes both uppercase and lowercase letters
6. Once you've created a password that meets these criteria, re-enter it to confirm, and then click **Get Started**.

### **Choose your use case**

7. Select any of your following primary use case for which you’re using Document360 by clicking **Get started.**

|  |  |
| --- | --- |
| **Knowledge base platform** | You can create a centralized hub where all your team's knowledge and resources are stored. It helps your team quickly find answers and enhances customer self-service by providing them with easy access to the information they need. |
| **Software documentation/****Technical documentation** | You can efficiently organize and maintain all your software or technical documentation. It helps your team document product features, APIs, release notes, and more, making sure that developers and users have clear and up-to-date information. |
| **SOP documentation** | You can create detailed SOPs that your team can follow consistently. It ensures that everyone adheres to the same processes, reduces errors, and helps in onboarding new employees by providing them with clear procedural guidelines. |
| **User manual** | You can develop comprehensive user manuals that guide your customers or team members through your product's features and usage. It helps in reducing support queries by offering step-by-step instructions and troubleshooting tips. |
| **API Documentation** | Document detailed information about API endpoints, request and response formats, authentication methods, and examples. This ensures developers have a clear understanding of how to integrate with your APIs. |
| **Others** | Choose this option if your use case does not fall into the predefined categories. You can customize your knowledge base based on specific organizational or project needs. |

### **Select a Template**

8. Select the type of content you'll create in your Document360 project. You can pick up to two templates that suit your needs.

> NOTE
>
> Based on your selection, these templates will be embedded within your project during creation.

**Knowledge base platform templates**

If you have selected the Knowledge base platform in step 7, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Getting started guides** | Help new users quickly understand and begin using your product with clear, step-by-step instructions. This ensures a smooth onboarding experience. |
| **How-to guides** | Provide detailed instructions for specific tasks, enabling users to fully utilize and explore your product’s features efficiently. |
| **FAQs** | Address common questions at any stage of the user journey, helping users find quick answers and reducing support queries. |
| **Policy & procedures** | Outline essential organizational protocols, helping users understand and adhere to company guidelines effectively. |

**Software/Technical documentation templates**

If you have selected Software/Technical documentation in step 7, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Release notes** | Keep users informed about updates, new features, bug fixes, and improvements with each software release. |
| **Software Design Documentation (SDD)** | Outline software architecture and design, including diagrams and specifications for development guidance. |
| **Software Requirement Documentation** | Describe the software's purpose, functionalities, and environment to ensure development aligns with project goals. |
| **Product Requirement Documentation (PRD)** | Define the product’s purpose, value, and functionalities to meet user needs and business objectives. |
| **Process documentation** | Detailed steps and procedures involved in software development to standardize workflows and enhance efficiency. |
| **User guide** | Give comprehensive instructions on using your product, covering all features and functionalities. |

**SOP documentation templates**

If you have selected SOP documentation in step 7, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Compliance policies and procedures** | Ensure your organization meets regulatory requirements by documenting policies that enforce compliance. |
| **Operation SOP** | Enhance efficiency and productivity by standardizing operational procedures across your organization. |

**User manual templates**

If you have selected the User manual in step 7, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Installation manual** | Provides all necessary setup information including product overview, specifications, and assembly instructions, ensuring a smooth start with the Knowledge base platform. |
| **Instruction manual** | Offers step-by-step assembly and usage instructions with diagrams and safety warnings, ideal for precise setup and safety warnings for proper usage. |
| **Maintenance manual** | Provide detailed instructions for regular upkeep, troubleshooting, and repair procedures to ensure optimal performance. |
| **Training manual** | Provides comprehensive guidance on installation, operation, and troubleshooting, and support for user training and effective platform usage. |
| **Operations manual** | Provide detailed instructions for daily maintenance and troubleshooting, ensuring ongoing effective management of the Knowledge Base platform. |

### **Personalize your Knowledge base**

9. Enter your preferred website URL. If you want to skip this step, the domain will default to the one linked to your registration email.

### **Brand guidelines**

10. Your project name, default language, branding logo, and brand colors will be automatically set based on your provided URL. However, you can edit the fields if needed.

    Your browser’s language settings determine the default language. English will be selected by default if other languages don’t support your browser’s language.

> NOTE
>
> * If you choose Spanish or Brazilian Portuguese as your default language, the portal language will be set to Spanish or Brazilian Portuguese. Otherwise, English will be the default language.
> * The branding logo and primary/secondary colors are extracted from your website. If you choose to **Skip** this step, the project name will be derived from your registration email, and Document360’s default logo and colors will be applied.

11. You can preview your Knowledge base on the right side of the screen.

### **Set documentation privacy**

12. Choose the desired privacy settings for your site:

    * **Private**: Restrict access to the Knowledge base so that only team accounts can view and interact with the content, keeping it secure and internal.
    * **Public**: Make the Knowledge base accessible to everyone, including external users, allowing open access to all content.
    * **Mixed**: Combine private and public access by allowing some sections of the Knowledge base to be visible to the public while keeping other sections restricted to team accounts only.
13. Click **Next** to proceed.

### **Access the Document360 Knowledge base portal**

Once you complete the setup, enter the Document360 Knowledge base portal. Here, you’ll find pre-loaded articles based on the use case and templates you selected.

> NOTE
>
> The articles seeded into your project are tailored to your selected use case and templates, giving you a head start on creating your content.

![Exploring the onboarding experience while signing up the Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Final_onboarding_process.gif)

---

### FAQs

**Does Document360 support different languages in the onboarding flow?**

Yes, Document360 offers multi-lingual support in the onboarding flow, including languages such as English, Spanish, Brazilian Portuguese, German, and Swedish. However, within the Document360 portal, language support is currently limited to English, Spanish, and Brazilian Portuguese.

**Do I need to pay to create a Document360 account?**

You don’t need to pay or enter your credit card details to create an account. When you sign up, you will get a 14-day trial account. After trying Document360, you can upgrade to one of the available plans to continue using it beyond the trial period.

**What are the available plans I can upgrade to?**

You can choose from 4 plans: Free, Professional, Business, and Enterprise. To learn about the pricing and features of each plan, [**click here**](https://document360.com/pricing/).

**I haven’t received the verification code. How do I continue with the signup process?**

If you haven’t received the code, click **Resend Code** on the **Email verification** page. If you still can’t find the email in your inbox, check your spam/junk folder. If you cannot locate the verification code, contact the Document360 support team for further assistance.

**I have an existing knowledge base, and I want to migrate to Document360. How should I proceed?**

Once you decide to sign up for Document360, there are two ways to migrate your existing knowledge. You can fill out the migration request form even before signing up, and our migration experts will contact you to kick-start the migration process. If you have already created a trial account, simply navigate to **Documentation** > **Content** **tools** > **Import & Export** > **Migrate content**. From there, follow the on-screen instructions to migrate your knowledge base to Document360. To learn more about migrating your existing knowledge base to Document360, click [**here**](/help/docs/migrating-documentation-from-another-knowledge-base-platform).

**My Document360 trial period ended. Can I still access my data?**

Once your Document360 trial ends, you can no longer access any content you created within Document360. To regain access to your data, you'll need to upgrade to one of our subscription plans. To learn more about selecting a subscription plan and upgrading your account, click [**here**](https://docs.document360.com/docs/billing).

**What happens if I don't complete the password setup during signup?**

If you return to the signup page and enter your details again, the system will recognize your previous session and automatically redirect you to the password creation screen.

<a id="system-and-browser-requirements"></a>

## System and browser requirements

## Recommended

Here are the system and browser requirements for the Document360 Knowledge base portal to function efficiently on your device.

> NOTE
>
> You can access the Document360 Knowledge base portal and site on your web browser, even if you are using earlier or less recent versions of the hardware and software mentioned below. However, the advanced features of our platform may not perform as quickly or efficiently.

---

### Operating System and Hardware

Ensure your computer is installed with one of the following operating systems:

| # | **Operating system requirements** |
| --- | --- |
| 1 | **Windows 7.0** or **higher** |
| 2 | **OSX Mavericks** or **higher** |
| 3 | **Linux** |
| 4 | **Android 5.0** or **higher** |
| 5 | **iOS 12.0** or **higher** |

| # | **Hardware requirements** |
| --- | --- |
| 1 | **2 core CPU** or **higher** |
| 2 | **4 GB RAM** or **higher** |

---

### Web browser requirements

Document360 works well on the latest versions of these web browsers, as mentioned below.

| # | **Supported web browsers** | **Knowledge base portal** | **Knowledge base site 1.0** | **Knowledge base site 2.0** |
| --- | --- | --- | --- | --- |
| 1 | **Google Chrome** version 91.0.4472 or higher | Yes | Yes | Yes |
| 2 | **Firefox** version 79.0 or higher | Yes | Yes | Yes |
| 3 | **Safari** version 13.1.2 or higher | Yes | Yes | Yes |
| 4 | **Microsoft Edge** version 88 or higher | Yes | Yes | Yes |
| 5 | **Internet Explorer** version 11 | No | No | No |
|  | Other web browsers |  |  |  |

#### Browser features

Depending on the browser of your choice, you must ensure the following browser attribute conditions are met.

* **JavaScript** must be **enabled**.

  > Limited access is provided when disabled.
* **Cookies** must be **enabled**.
* **Session Storage** must be **enabled**.
* **Local Storage** must be **enabled**.
* **IndexedDB** must be **enabled**.
* **HTTPS - TLS v1.2** or **higher**.

---

### Support and feedback

If you face any difficulty in working with Document360 using any of the requirements mentioned above, or if there are issues that are not previously specified, you can always **write to us** at [support@document360.com](mailto:support@document360.com).

## Troubleshooting

If you encounter any issues while logging in to the Knowledge base portal, refer to the following common errors and their solutions:

### reCAPTCHA Error: “Having trouble?”

**Error**: When attempting to log in, users may encounter the error message **"Having trouble?"** while interacting with the reCAPTCHA verification. This issue can occur due to browser restrictions, VPN interference, or network-related blocks preventing reCAPTCHA from loading correctly.

![Login form displaying an error message from Cloudflare regarding login issues.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Troubleshooting_srecaptcha_error.png)

**Steps to resolve**:

Follow these steps to resolve the issue:

1. Try accessing the site in a different browser**.** If the site loads successfully in another browser, disable any browser extensions in the affected browser and try again.
2. If you are using a VPN, disconnect it and attempt to log in again.

If the issue persists after following the above steps, follow the below steps:

* Generate a HAR file by following [these steps](https://docs.document360.com/docs/document360-support-generating-a-har-file).
* Take a screenshot of any console errors that appear.
* Contact [**support@document360.com**](mailto:support@document360.com) with the HAR file and screenshots for further investigation.

![Document360 console interface displaying support articles and troubleshooting options for users.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Browser_console.png)

### Access blocked: “Sorry, you have been blocked” / “You are unable to access us.document360.io”

**Error**: When attempting to access `us.document360.io`, you may receive an error message stating **"Sorry, you have been blocked"** or **"You are unable to access** `us.document360.io`**"**, along with a **Cloudflare Ray ID:** **8dbb32d07fb2e4d4**. This error indicates that access to the site has been restricted due to network, browser, or security-related issues.

![Access denied message indicating a block by Cloudflare with a Ray ID.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Troubleshooting_cloudfare_error.png)

**Steps to resolve**:

Follow these steps to resolve the issue:

1. Check if the site is accessible using a different browser, network, or computer.

   * If the site is accessible in another browser, provide the **browser name and version** of both working and non-working browsers.
   * If the site is accessible on a different computer, provide the **operating system name and version** of both devices.
   * If the site is accessible on a different network, provide details about the **network setup and the IP address** from which the error occurs.
2. Generate a HAR file by following [these steps](https://docs.document360.com/docs/document360-support-generating-a-har-file).
3. Take a screenshot of any console errors that appear.
4. Contact [**support@document360.com**](mailto:support@document360.com) with the HAR file, screenshots, and the details collected in Step 1 for further investigation.

![Document360 console interface displaying support articles and troubleshooting options for users.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Browser_console.png)

### Login issue: Knowledge base portal keeps loading

**Error**: You are unable to log in to the knowledge base portal because the login page keeps loading indefinitely. This issue may occur due to your browser cache, extensions interfering with the login process, or incorrect system time settings.

**Steps to resolve**:

To resolve this issue,

1. Clear your browser cache and cookies. If the issue persists, check whether it affects all team accounts or only specific users. Use the following steps to clear your cache:

   * **Google Chrome:** Menu (3 dots) > Settings > Privacy and security > Clear browsing data
   * **Mozilla Firefox:** Menu (3 lines) > Settings > Privacy & Security > Clear Data
   * **Microsoft Edge:** Menu (3 dots) > Settings > Privacy, search, and services > Choose what to clear
   * **Safari (Mac):** Safari > Preferences > Privacy > Manage Website Data > Remove All
   * **Safari (iPhone/iPad):** Settings > Safari > Clear History and Website Data
   * **Opera:** Menu > Settings > Advanced > Privacy & Security > Clear browsing data
2. Try accessing the portal in an incognito or private browser window. Some browser extensions may be blocking the login page or affecting loading times.
3. Inspect the page to check for loading time issues:

   * Right-click on the page and select **Inspect**.
   * Check the console for error messages and monitor loading times.
   * If you see an invalid login persisting for a long time, your system’s time settings may be incorrect.
4. Make sure your system time zone is set correctly. An incorrect system clock or time zone mismatch can cause login failures. Update your system time zone to match your region.
5. If the issue still persists, capture diagnostic data:

   * Generate a HAR file by following [these steps](https://docs.document360.com/docs/document360-support-generating-a-har-file).
   * Share the HAR file with [**support@document360.com**](mailto:support@document360.com) for further troubleshooting.

---

### FAQs

#### **Can I download the Document360 desktop application?**

Document360 is available only as a **web application**, which can be accessed using web browsers on desktop and laptop devices.

#### **Can I access the Knowledge base portal on smartphones and tablets?**

Yes, the Knowledge base portal can be accessed via a web browser on both computers and mobile devices (smartphones and tablets).

However, for the best user experience, it is not recommended to use a web-view workaround in the mobile browser to access the portal.

#### **How do I clear the Document360 project cache?**

Clearing the cache helps resolve display or functionality issues caused by old, cached data. To clear your project’s cache in Document360, follow these steps:

1. Navigate to the specific location in the Knowledge base portal where you need to clear the cache.
2. You can open the developer tools:

   1. On Windows: Press `Ctrl+Shift+I`.
   2. On macOS: Press `Cmd+Shift+I`.
3. Right-click and hold the **refresh** button.
4. Select **Empty Cache and Hard Reload** from the menu.

#### Why am I unable to log in to my Document360 account? The callback URL is not working.

This issue may occur due to an intermittent cache issue or an incorrect system time setting on your device. If your system's internal clock is not synchronized with your time zone or region, it can cause login failures, including issues with the callback URL (`portal.document360.io/callback`).

**Steps to resolve:**

* Clear your browser cache and cookies, then try logging in again.
* Verify your system time settings and ensure they are correctly synchronized with your time zone.

![Webpage displaying a loading document360 icon and a highlighted URL in the address bar.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Callback_while_logging.png)

<a id="document360-my-projects"></a>

## Project dashboard

**Plans supporting access to Your projects page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

### What is Document360 - Your projects?

The "Your Projects" space serves as your main dashboard upon logging into your Document360 account. It provides a centralized view of all the projects you're associated with, whether as an owner, team member, or reader, along with essential navigational tools.

---

## Navigating the 'Your projects' page

Upon logging in, you are greeted with a dashboard displaying tiles representing each Document360 project you have access to. These tiles include projects you own or are associated with as part of a team account or as a reader. Here's what you can do from this space:

### 1. **Create New or Sandbox Project**

Easily initiate a new [Project](/help/docs/creating-a-project) or a [Sandbox project](/help/docs/creating-a-sandbox-project) using the buttons conveniently located at the top right corner of the dashboard.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/My projects.png "My projects.png")

---

### 2. Projects

The Document360 projects you own and those you are associated with as a team account or reader are available. You can click the project tile to navigate to the project easily.

#### Project tile elements - Team account

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Project tile elements.png "Project tile elements.png")

1. **Logo:** Project logo for quick identification.
2. **Project name:** Clearly labeled to identify each project
3. **Project site access:** Indicates whether the project is of Public, Private, or Mixed access.
4. **Settings:** Manage project-specific settings directly from the tile.
5. **Documentation editor:** Access the knowledge base portal to create and manage documentation within the project.
6. **View in knowledge base site:** Navigate directly to the knowledge base site associated with the project.

---

### 2. Profile

Manage your personal account settings and log out from Document360 using the profile menu.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Profile.png "Profile.png")

---

### 3. Release updates

Stay informed about the latest Document360 product enhancements and features by clicking on the Release updates () icon. Expand release posts to read detailed updates and improvements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Release updates(1).png "Release updates(1).png")

---

### 4. Help

Access various support resources from the  Help menu:

* **Documentation:** Access detailed guides and resources to help you navigate and utilize the platform effectively.
* **Issues/Clarifications:** Report any issues or seek clarifications about the platform's features and functionality.
* **Submit a Feature Request:** Suggest new features or improvements to enhance your experience with Document360.
* **System Status:** Check the current status and performance of the platform’s services.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Help.png "Help.png")

This dashboard serves as a central hub for managing and accessing all your Document360 projects, ensuring streamlined navigation and efficient project management from a single interface.

<a id="top-right-menu-overview"></a>

## Top-right menu overview

**Plans supporting access to My profile page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The top-right corner of the Knowledge base portal provides quick access to key features. Quickly access essential features, including viewing and editing your profile, checking access levels, changing your portal password, staying informed about the latest updates, and exploring help resources in Document360.

## Key features in the top-right menu

* **My profile**: Here, you can view and edit your personal information, including your profile picture and biography. This section also displays your assigned portal and content roles and permissions.
* **View access and permissions**: Check the roles and permissions assigned to your account. This helps ensure you have the right level of access to perform your tasks.
* **Change password**: Securely update your login credentials by setting a new password. Make sure to choose a strong password to protect your account.
* **Release updates**: Stay informed about the latest updates and feature releases in Document360. Notifications keep you aware of changes that may impact your work.
* **Help menu**: Access helpful resources, including:

  + **Documentation:** Explore user guides and feature instructions.
  + **Support portal**: Raise support tickets and seek assistance.
  + **Contact support**: Directly reach out for help with any issues.

![Document360 interface showing user profile settings.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Top_right_menu_overview.png)

---

## Accessing profile options

You can access the first three options —  **My profile,  View access and permissions, and  Change password** — by clicking your **profile picture** in the top-right corner of the portal.

> NOTE
>
> This icon displays your profile image or a default placeholder if no image is set. It will display your initials until you upload your profile image.

### My profile

The  **My profile** section allows you to view and edit your personal information.

To access your profile,

1. Click your profile picture.
2. Click  **My profile** from the dropdown menu. This will open the  **My profile** side panel.

![Document360 interface showing user profile access menu.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Top_right_menu_my_profile.png)

#### Features available in my profile

* **Profile image** - Update or delete your profile picture.
* **First and last name** - View and edit your name.
* **Email ID** - View your email address.
* **Author page URL** - View and edit your author page URL.
* **Author bio** - Add or update a biography. This field will be blank if no biography is added.
* **Edit button** - Use this button to update or delete your profile image, name, author URL slug, and biography directly within your profile settings.
* **Portal language** - You can use this dropdown to change the language for your knowledge base portal. The UI elements will adapt based on your selection. Available languages include English, Spanish, and Portuguese (Brazil). Note that this setting applies only to your portal view and does not change the content language.
* **Portal role** - View your assigned role (e.g., Owner, Admin, Contributor).
* **Content role & access** - Check content roles and access levels, including workspace names, languages, and categories.
* **View contributions** - Click the **Click here** hyperlink to view your contributions in the Team Accounts module under Analytics.

![User profile settings showing role, language, and access details in Document360.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-My_profile_side_panel.png)

> NOTE
>
> Email IDs in the user profile cannot be edited for SSO users.

### View access and permissions

The **View access and permissions** section allows you to check your assigned permissions within Document360 for the Portal role and Content role. Portal roles manage administrative settings within the knowledge base portal, while Content roles control access and actions related to content management.

![User interface showing access permissions in Document360.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Top_right_menu_view_access_permissions.png)

To view your access permissions,

1. Click your profile picture in the top-right corner.
2. Click  **View access and permissions** in the dropdown menu. This will open the **View access permissions** popup window.

In the View access permissions window, you will be able to see the permissions assigned to you for each feature under the Portal role and Content role.

You can edit/update your permissions from the Team accounts & groups [Insert article link here] page in Document360 settings. You will only be able to make any changes if you have the required Portal role permissions (For example, Owner or Admin).

To learn more about the various roles and permissions in Document360, and creating custom roles, read the article on Roles & permissions.

![Access permissions for project settings, team auditing, and event notifications overview.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-View_access_permissions_window.png)

> NOTE
>
> The View access and permissions option is only available when accessing the top-right menu from within a project.

### Change password

The **Change password** section allows you to securely update your login credentials in Document360.

![User interface showing the option to change password in settings.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Top_right_menu_change_password.png)

To update your Document360 password,

1. Click your profile picture in the top-right corner.
2. Click **Change password** from the dropdown menu. This will open the **Change password** popup window.
3. Enter your **current password** in the provided field.
4. Enter a **new password** in the next field. Ensure the new password meets security requirements.

> NOTE
>
> Your new password should:
>
> * Be at least 8 characters long
> * Contain at least 1 UPPERCASE letter
> * Contain at least 1 lowercase letter
> * Contain at least 1 number
> * Contain at least 1 special character

5. Confirm the new password by re-entering it.
6. Click **Save** to update your password.

![Password change interface with fields for current, new, and confirm password.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Change_password_popup.png)

> NOTE
>
> Changing your password will log you out immediately. You will need to log in with your updated password.

#### Best practices for updating your password

Here are a few pro tips for creating a strong and secure password.

**Dos**

* Create a unique password that uses a combination of numbers, words, symbols, and both uppercase and lowercase letters.

> **For example:** En37df\_n4r-hufling

**Don’ts**

* Don’t use easily guessed passwords, such as "password," "123456," or "user."
* Don’t choose passwords based on easily obtainable details, such as your birth date, Social Security number, phone number, or the names of family members.
* Don’t use words that can be found in the dictionary. Password-cracking tools often come with dictionary lists that will try thousands of familiar names and words.

  + If you must use dictionary words, try adding numbers and special characters to them, such as "In$t@llat10n."
* Don’t use simple adjacent keyboard combinations like "qwerty," "asdzxc," "abcdef," or "123456." These are generic and easy to crack.

---

## Release updates

Stay up-to-date with the latest updates and announcements from the Document360 team.

To read about the latest updates to Document360,

1. Click the **Release updates** icon () in the top-right corner in the Knowledge base portal. A popup appears, displaying information about the three latest releases.
2. Click any update to read a brief summary. To view the full details, click **Read the whole post.**
3. You can also click **Document360 updates**. This will redirect you to the [**Document360 Updates - Changelog**](https://changelog.document360.com/?utm_medium=widget) page.

![Document360 interface showing recent updates in a sidebar.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Top_right_menu_release_updates.png)

> NOTE
>
> To read the latest Document360 release note, click [**here**](https://docs.document360.com/docs/release-note).

---

## Help menu

The **Help menu** provides several tools to assist users in resolving queries, accessing resources, and staying informed about Document360.

Click  **HELP** in the top-right corner of the Knowledge base portal to access the help menu.

### Options available in the help menu

1. **Get assistance:** Opens a side-panel widget where you can search for answers to your queries or access Document360 documentation directly.
2. **Documentation:** Redirects you to the Document360 knowledge base at `https://docs.document360.com/docs`, where you can browse detailed articles, guides, and tutorials.
3. **Chat with us:** Opens a chat widget that connects you with the Document360 customer support team for real-time assistance.
4. **Issues and clarification:** Launches a widget allowing you to create a support ticket. You can include details and attachments to help the support team resolve your issue effectively.
5. **Submit a feature request:** Provides a platform to share feedback and suggest new features. Feature requests are visible to other users, who can vote to prioritize them.

> NOTE
>
> Only Document360 authenticated users can access the feedback portal.

6. **System updates:** Redirects you to `https://status.document360.com/`, where you can view the operational status and updates regarding Document360's services.

![Document360 interface showing help features for users.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Top_right_menu_help_menu.png)

> NOTE
>
> For further assistance, you can also contact the support team directly via email at [support@document360.com](mailto:support@document360.com).

---

### FAQs

#### What happens if the browser does not support the selected portal language?

If the browser does not support the selected language, Document360 automatically defaults to English.

#### What if I select Spanish as my portal language but my browser's preferred language is set to English?

If the browser's preferred language is English but the user selects Spanish within the application, all projects will be displayed in Spanish, following the user's preference. Similarly, if the browser's preferred language is set to Spanish, all projects are displayed accordingly.

<a id="creating-a-project"></a>

## Creating a project in Document360

#### Plans supporting the creation of new project

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A project in Document360 serves as a comprehensive container for all your documentation needs. It encapsulates your articles, categories and subcategories, the home page, team accounts, readers, and groups (for private and mixed projects), and custom configurations or settings. This centralized approach ensures that your knowledge base is organized, easily accessible, and scalable.

## How to create a knowledge base project in Document360?

Projects in Document360 are designed to streamline your documentation process, offering a structured and efficient way to manage your information. Whether you're creating user manuals, internal process documents, or API documentation, a Document360 project provides the framework to store, manage, and distribute content effectively. Follow these steps to create your knowledge base project.

### Accessing the dashboard

1. Log in to the [**Document360 portal**](https://portal.document360.io/) with your account to access the **Dashboard**.   
   If you are logged in and are in a different project's Knowledge base portal, click the Document360 icon at the top left to be redirected to the **Dashboard**.
2. Click the **+****Project**button on the top right to create a new project.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/My projects.png "My projects.png")

### Choose your use case

3. Select any of your following primary use case for which you’re using Document360 by clicking **Get started.**

|  |  |
| --- | --- |
| **Use case** | **Description** |
| **Knowledge base platform** | You can create a centralized hub where all your team's knowledge and resources are stored. It helps your team quickly find answers and enhances customer self-service by providing them with easy access to the information they need. |
| **Software documentation/Technical documentation** | You can efficiently organize and maintain all your software or technical documentation. It helps your team document product features, APIs, release notes, and more, making sure that developers and users have clear and up-to-date information. |
| **SOP documentation** | You can create detailed SOPs that your team can follow consistently. It ensures that everyone adheres to the same processes, reduces errors, and helps in onboarding new employees by providing them with clear procedural guidelines. |
| **User manual** | You can develop comprehensive user manuals that guide your customers or team members through your product's features and usage. It helps in reducing support queries by offering step-by-step instructions and troubleshooting tips. |
| **API Documentation** | Document detailed information about API endpoints, request and response formats, authentication methods, and examples. This ensures developers have a clear understanding of how to integrate with your APIs. |
| **Others** | Choose this option if your use case does not fall into the predefined categories. You can customize your knowledge base based on specific organizational or project needs. |

### Select a Template

4. Select the type of content you'll create in your Document360 project. You can pick up to two templates that suit your needs.

> NOTE
>
> Based on your selection, these templates will be embedded within your project during creation.

**Knowledge base platform templates**

If you have selected the Knowledge base platform in step 3, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Template** | **Purpose** |
| **Getting started guides** | Help new users quickly understand and begin using your product with clear, step-by-step instructions. This ensures a smooth onboarding experience. |
| **How-to guides** | Provide detailed instructions for specific tasks, enabling users to fully utilize and explore your product’s features efficiently. |
| **FAQs** | Address common questions at any stage of the user journey, helping users find quick answers and reducing support queries. |
| **Policy & procedures** | Outline essential organizational protocols, helping users understand and adhere to company guidelines effectively. |

**Software/Technical documentation templates**

If you have selected Software/Technical documentation in step 3, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Template** | **Purpose** |
| **Release notes** | Keep users informed about updates, new features, bug fixes, and improvements with each software release. |
| **Software Design Documentation (SDD)** | Outline software architecture and design, including diagrams and specifications for development guidance. |
| **Software Requirement Documentation** | Describe the software's purpose, functionalities, and environment to ensure development aligns with project goals. |
| **Product Requirement Documentation (PRD)** | Define the product’s purpose, value, and functionalities to meet user needs and business objectives. |
| **Process documentation** | Detailed steps and procedures involved in software development to standardize workflows and enhance efficiency. |
| **User guide** | Give comprehensive instructions on using your product, covering all features and functionalities. |

**SOP documentation templates**

If you have selected SOP documentation in step 3, you can choose templates from the list below.

|  |  |
| --- | --- |
| **Template** | **Purpose** |
| **Compliance policies and procedures** | Ensure your organization meets regulatory requirements by documenting policies that enforce compliance. |
| **Operation SOP** | Enhance efficiency and productivity by standardizing operational procedures across your organization. |

**User manual templates**

If you have selected the User manual in step 3, you can choose any two templates from the list below.

|  |  |
| --- | --- |
| **Template** | **Purpose** |
| **Installation manual** | Provides all necessary setup information including product overview, specifications, and assembly instructions, ensuring a smooth start with the Knowledge base platform. |
| **Instruction manual** | Offers step-by-step assembly and usage instructions with diagrams and safety warnings, ideal for precise setup and safety warnings for proper usage. |
| **Maintenance manual** | Provide detailed instructions for regular upkeep, troubleshooting, and repair procedures to ensure optimal performance. |
| **Training manual** | Provides comprehensive guidance on installation, operation, and troubleshooting, and support for user training and effective platform usage. |
| **Operations manual** | Provide detailed instructions for daily maintenance and troubleshooting, ensuring ongoing effective management of the Knowledge Base platform. |

### Personalize your knowledge base

5. Enter your preferred website URL. If you want to skip this step, the domain will default to the one linked to your registration email.

### Brand guidelines

6. Your project name, default language, branding logo, and brand colors will be automatically set based on your provided URL. However, you can edit the fields if needed.   
   Your browser’s language settings determine the default language. English will be selected by default if other languages don’t support your browser’s language.

> NOTE
>
> * you choose Spanish or Brazilian Portuguese as your default language; the portal language will be set to Spanish or Brazilian Portuguese. Otherwise, English will be the default language.
> * The branding logo and primary/secondary colors are extracted from your website. If you choose to **Skip** this step, the project name will be derived from your registration email, and Document360’s default logo and colors will be applied.

7. You can preview your Knowledge base on the right side of the screen.

### Set documentation privacy

8. Choose the desired privacy settings for your site:

   * **Private**: Restrict access to the Knowledge base so that only team accounts can view and interact with the content, keeping it secure and internal.
   * **Public**: Make the Knowledge base accessible to everyone, including external users, allowing open access to all content.
   * **Mixed**: Combine private and public access by allowing some sections of the Knowledge base to be visible to the public while keeping other sections restricted to team accounts only.
9. Click **Next** to proceed.

### Access the Document360 Knowledge base portal

Once you complete the setup, enter the Document360 Knowledge base portal. Here, you’ll find pre-loaded articles based on the use case and templates you selected.

> NOTE
>
> The articles seeded into your project are tailored to your selected use case and templates, giving you a head start on creating your content.

![Exploring the onboarding experience while signing up the Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Final_onboarding_process.gif)

---

## Switching between Document360 projects

Once you’ve created your projects in Document360, you may need to work on multiple projects or switch between them for various tasks. Document360 provides an intuitive project switcher to help you manage this seamlessly.

There are two ways to switch projects from the Knowledge base portal:

1. Using the Projects dropdown
2. From the Projects dashboard

### Switching projects using the Projects dropdown

1. From any module in the Knowledge Base portal, click on the project dropdown at the top-left of the screen.
2. You can view the "Project Name," "Site Access" (Public -  , Private -  , or Mixed ), and a "Sandbox" label if it is a Sandbox project.
3. Click on the project you want to view from the list.

![Screenshot for switching between projects in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Switching%20between%20projects%20-%201.png)

### Switching projects from the Projects dashboard

1. Click on the Document360 logo at the top-left.

   ![Screenshot for switching between projects in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Switching%20between%20projects%20-%202.png)

   You will be redirected to the "My Projects" page.

   The list of all projects owned or associated with your account will be displayed.
2. Click on the project you want to navigate to.

   ![Screenshot for switching between projects in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Switching%20between%20projects%20-%203.png)

---

### FAQs

#### **Does Document360 support different languages in the onboarding flow?**

Yes, Document360 offers multi-lingual support in the onboarding flow, including languages such as English, Spanish, Brazilian Portuguese, German, and Swedish. However, within the Document360 portal, language support is currently limited to English, Spanish, and Brazilian Portuguese.

#### **Can I customize the appearance and structure of my Document360 project?**

Yes, Document360 projects offer extensive customization options. You can customize the look and feel of your knowledge base by designing your home page, themes, adding your organization's branding, editor oriented, and organizing articles in a hierarchical structure (categories) that suits your documentation needs.

#### **Is it possible to control access and permissions within Document360 projects?**

Absolutely. Document360 offers robust access control and permission settings. You can assign roles and permissions to team accounts, restricting or granting access to specific features and contents based on their responsibilities and requirements.

#### **How does Document360 help with version control and documentation history?**

Document360 projects maintain a comprehensive article version control system referred to as "Article revisions." It automatically saves and tracks changes made to articles, allowing you to revert to previous versions if needed. This ensures the integrity of your documentation and simplifies collaboration on content updates.

#### **How do I know which project I am currently working on?**

You can check the project name displayed at the top-left of the screen in the Knowledge Base portal.

#### **What happens if I don't see the project I want to switch to?**

Ensure you have the necessary access permissions for that project. If the project still doesn't appear, contact your Document360 administrator for assistance.

#### **What is a "Sandbox" project, and how is it different from other projects?**

A Sandbox project is a test environment where you can experiment without affecting your live projects. It will have a "Sandbox" label in the project dropdown.

#### **What does "Site Access" mean in the project dropdown?**

"Site Access" indicates whether the project is Public, Private, or Mixed. This defines the accessibility level of the project's content.

#### **How can I request access to a project I am not currently associated with?**

Contact your team administrator or project owner to request access to the desired project.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="dashboard"></a>

## Dashboard

**Plans supporting the use of Dashboard**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Document360 dashboard provides insights on your project, team members, and tasks to complete. There are two tabs in the dashboard: **My contribution** and **Overview**. The **My contribution** tab provides information regarding your articles and contributions to the knowledge base. The **Overview** tab provides information regarding all the team accounts associated with the project.

## My contribution tab

The **My Contribution** tab in the Document360 dashboard provides you with an overview of your contributions to the associated Document360 project. This includes all the workspaces and languages that are part of the project. You can view your contributions in terms of:

* **Article summary** (number of articles created and published, and performance metrics)
* **Articles assigned to you**
* **Review reminders**
* **Feedback to address**
* **Any broken links in your articles**

![Screenshot of the dashboard](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Dashboard_my_contribution_overview.gif)

NOTE

You can filter the data in the **My contribution** page for a particular workspace and language from the dropdown at the top. You can also choose to view data for all workspaces and languages by selecting All workspaces and All languages from the dropdown at the top.

### Article summary

The section on the left of the **My contribution** tab is called **Article summary**. It contains information regarding any articles you have worked on. View your article count in three categories:

* **Created articles** (number of created articles)
* **Published articles** (number of articles published)
* **Draft articles** (number of articles updated, but still in Draft mode)

Along with these statistics, you can also view statistics related to the performance of all your articles. You can view these performance metrics:

* **Overall views** (total views for all articles)
* **Reads** (total reads)
* **Likes** (total likes received)
* **Dislikes** (total dislikes received)

> NOTE
>
> You can use the **Date** filter from the top right corner of the Article summary section to view the statistics for your articles during the last week, last month, or during a custom date range.

### Assigned to me

The **Assigned to me** tab shows all articles assigned to you across all workspaces and languages within the project. Each assigned article displays its current workflow status and, if applicable, the assigned due date.

### Review reminders

Each article in Document360 is marked as stale after a set period without updates. If you are a contributor to a stale article, it will appear under the **Review reminders** tab, along with the date it was marked as stale.

### Feedback

Any user feedback to an article in the knowledge base site will be recorded in the Feedback manager under Content tools. If any feedback from the Feedback manager is assigned to you, it will appear in the **Feedback** tab. You will also be able to view the Feedback status, as well as the date the feedback was assigned to you.

### Broken links

If any of your articles contain any broken links, the article will be listed under the **Broken links** tab. You can see the workspace and language of the article, along with the number of broken links in the article.

## Overview tab

The **Overview** section allows team members with Owner or Admin roles to view key project information, including article contributions, performance metrics, Drive capacity, total team accounts, reader count, broken links and more. You can view the following metrics on this page:

* **Article summary** (number of articles created and published, and performance metrics)
* **Project overview**

  + Recently seen
  + Team accounts
  + Readers
  + Drive capacity
  + Broken links
  + No result searches
  + Last backed up

![1_Screenshot-Dashboard_Project_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Project_dashboard_overview_page.png)

NOTE

You can filter the data in the **Overview** page for a particular workspace and language from the dropdown at the top. You can also choose to view data for all workspaces and languages by selecting All workspaces and All languages from the dropdown at the top.

### Article summary

The Article summary section shows the total articles created, published and in Draft mode as well as the article performance metrics for the time frame selected from the Date dropdown. You can filter this data by contributor by selecting one or more users from the Filter option.

### Project overview

This section allows you to manage the project by displaying important information, such as:

* **Recently seen**: Displays the gravatars of contributors who recently accessed the project.
* **Team accounts**: Shows the total team accounts added to the project. Click **View all** to navigate to the **Team accounts & groups** page (**Settings** > **Users & security**).
* **Readers**: Shows the total readers added to the project. Click **View all** to navigate to the **Readers & groups** page (**Settings** > **Users & security**)
* **Drive capacity**: Shows the used and total available Drive capacity. Click **View all** to navigate to the Drive module.
* **Broken links**: Shows the total broken links in the knowledge base. Click **View all** to navigate to the link status overview page (**Analytics** > **Link status**)
* **No result searches**: Shows the total searches on the Knowledge base site that showed no results. Click **View all** to navigate to the search analytics page (**Analytics** > **Search**)
* **Last backed up**: Shows the most recent date a backup was created for the project.

---

### FAQ

**How can I filter the data in the My Contribution page?**

You can filter the data by selecting a specific workspace and language from the dropdown at the top, or view data for all workspaces and languages by selecting **All workspaces** and **All languages**.

<a id="getting-started-with-multi-lingual-knowledge-base"></a>

## Multilingual Knowledge bases

**Plans supporting the use of multilingual knowledge base**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

### What is a multilingual Knowledge base?

A multilingual knowledge base is essentially similar to a standard knowledge base, with the primary distinction being that it provides content in various language choices, enabling users to obtain information in their chosen language for a more integrated experience.

> NOTE
>
> Document360 supports the internationalization (i18n) of your project's Knowledge base site.

---

## Adding multiple languages to a single workspace

To add multiple languages to a single project workspace or a language-specific Knowledge base in Document360.

Navigate to Settings () > **Knowledge base portal** > **Localization & workspaces** in the Knowledge base portal.

You can find a list of workspaces available in the project.

There are two ways to add a new language to the project workspace from here.

#### Method 1 - From the edit workspace module

1. Click the **Edit** (🖉) icon to the right of the workspace, and the **Edit workspace** blade window will appear.
2. Click the **New language** at the bottom, and a list of languages appears.
3. Use the search bar to search language(s).
4. Select the checkbox of the desired language(s) and click **Apply**.
5. Then click the **Update** button at the bottom of the blade.
6. Click on the More () icon for the below edit options,

   **Set as default** - To set the language as the default language of the workspace.

   **Edit display name** - To edit the display name of the language for the workspace.

   **Right to left** - Most languages are written from left to right, but a handful of languages are written in the opposite direction. By enabling this toggle, article content in the HTML editor and reader view (Knowledge base site) would start on the right and end on the left.

   **Hide** - To hide the language. The Knowledge Base portal indicates hidden languages by strikethrough for reference.

   **Remove** - To remove the language from the list of languages.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Multilingual_Knowledge_Base.gif)

#### Method 2 - Using the localization icon on the overview page

1. Click on the **Add new language** () icon next to the Edit icon.
2. Search for the desired language(s) in the search bar and select the checkbox of the languages you wish to add to your workspace.
3. Once done, click **Add**.

> NOTE
>
> While selecting a language for your workspace, all languages other than English will be displayed in their native script.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Multilingual_language_base.gif)

> NOTE
>
> All the categories and articles from your default language will be available in the new language(s). However, these articles and categories have to be manually translated, using machine translation (HTML editor only) or with extensions like **Crowdin**.

---

## FAQ

**How many languages can I use per workspace in each plan?**

Each plan includes the following number of languages per workspace by default:

* **Professional Plan:** 2 languages
* **Business Plan:** 3 languages
* **Enterprise Plan:** 5 languages

Also, you can purchase more languages as an add-on on your existing plan.

The public-facing website where end-users can access articles and find answers to their questions.

An online library where users can find information about a product, service, department, or topic. It helps users self-serve by providing answers and guidance.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="creating-a-sandbox-project"></a>

## Creating a sandbox project

**Plans supporting for creating a Sandbox project**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

### What is a Sandbox project?

A Sandbox project is an essential feature of Document360, offering an isolated test environment to explore features and configurations without impacting your live knowledge base. Whether testing new designs, refining workflows, or training your team, the Sandbox project provides a secure space to experiment and optimize your setup.

A sandbox project allows you to:

* Safely test new features and settings before going live.
* Identify and resolve issues early.
* Refine your setup and train your team without disturbing the end-user experience.

For instance, if you want to redesign your Knowledge base site's layout to enhance user-friendliness, you can use the Sandbox project to test the new design, gather feedback from internal teams and beta customers, and make adjustments before implementing changes in the live environment.

---

## Creating a Sandbox project

To create a new sandbox project,

1. Navigate to **Settings** () > **Knowledge base portal**> **General**in the Knowledge base portal.
2. In the **Sandbox** section, click **Create Sandbox**.

   The **Create a knowledge base sandbox** panel will appear.
3. Enter your desired project name in the **Project name** field.

> NOTE
>
> **Naming Guidelines:**
>
> * Only alphabets (A-Z, a-z), numbers, hyphens (-), and spaces are allowed.
> * Special characters, except hyphens, are restricted.
> * The project name must not exceed 30 characters (including spaces).

4. Select the language from the **Language** dropdown.
5. If required, select the **KB site 1.0** checkbox, if the Sandbox project should be based on KB site 1.0.
6. The **Knowledge base visibility** for Sandbox projects will be set to [**Private**](/docs/site-access#private-access) by default.
7. Click **Next**.
8. Optionally, to invite team accounts, enter their email addresses.

   For multiple team accounts, separate the addresses with commas (,).
9. Select the desired **Role** for each team account.
10. Once all details are entered, click **Create project**.

    Your Sandbox project will be created.
11. Click **Open Sandbox**  to access the newly created Sandbox.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_UI_1_ScreenGIF-Creating_a_Sandbox_project.gif)

The **Sandbox** badge will appear next to **Open site**  in the top bar and beside the workspace name in the dropdown, indicating that the workspace is a Sandbox project.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-New_Sandbox_badge_in_the_top_bar.png)

> NOTE
>
> SSO users cannot create sandbox projects because logging in as an SSO user requires having a regular user who assigns SSO access to another user. Therefore, a new SSO user cannot create a sandbox project.

### Reasons to own a sandbox project

* **Reduced Risk**: By isolating the sandbox from the live knowledge base, you can experiment without risk.
* **Increased Efficiency**: Pre-launch testing in the Sandbox project ensures that transitions to the live environment are seamless and efficient.
* **Testing and Exploration**: The Sandbox project empowers you to explore Document360’s features and integrations in a safe and dynamic environment, completely free from any live project disruptions.
* **Training Through Isolation**: The sandbox serves as an excellent training platform, equipping team members with hands-on experience in Document360 without risking unintended impacts on the live environment.

---

### FAQs

#### How do I configure my subdomain name for the Sandbox?

The subdomain name for a Sandbox project will have `sandbox` appended to distinguish it from your live project. Once the Sandbox is created, you can modify the subdomain name using [custom domain mapping](https://docs.document360.com/docs/custom-domain-mapping).

#### How does the Sandbox project improve knowledge base management?

By offering a controlled environment, the Sandbox project lets you assess and refine new features before implementing them in the live knowledge base. This enhances content quality and customer support.

#### Can I test new configurations without disrupting the live project?

Yes. The Sandbox project allows you to evaluate different configurations, such as templates, integrations, and scripts, without impacting your primary knowledge base.

#### How does the Sandbox project prevent customer impact during testing?

Before introducing them to customers, you can verify changes like navigation menus and search algorithms in the Sandbox project. This safeguards their experience and helps identify and address issues before launch.

#### Can I migrate a sandbox project to production in Document360?

No, there is currently no direct option to migrate a sandbox project to production in Document360. To achieve this, you need to manually export the data from the sandbox project and then import it into the production environment.

#### Why can't I log in as an SSO user in the Sandbox environment?

Only non-SSO users can access the Sandbox environment. To gain access, request a team member with a non-SSO account to create a standard user account for you.

<a id="quick-summary-of-the-security-and-infrastructure-aspects"></a>

## Document360 security and infrastructure

**Plans supporting the Document360 security and infrastructure**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Security is one of the most important aspects of any SaaS application. As a company specializing in SaaS products, we ensure our offerings align with the latest market standards. **Document360** prioritizes data protection, ensuring your information is always secure.

We collaborate with industry-leading partners like **Algolia** and **MongoDB Atlas**, who are certified for TLS-standard encryption for data in transit. **Microsoft Azure Blob Storage** also safeguards your project backups with robust security protocols.

---

## Quick summary - Security and infrastructure

* Your data is securely stored in a remote database hosted by **MongoDB Atlas**, utilizing a three-server cluster to ensure zero downtime.
* Network traffic is encrypted using TLS, and data at rest resides in encrypted storage volumes.
* **Daily**, **weekly**, and **monthly** backups are maintained for up to **one month**, enabling quick restoration.
* Project back-ups are stored in **Microsoft Azure Blob Storage** across multiple geolocations to maintain data integrity.
* Our secured API allows data access via authenticated API tokens, ensuring complete control over access permissions.
* Document360 is hosted on **Microsoft Azure Cloud**, leveraging its advanced security protocols and compliance standards.
* **Microsoft Azure Cloud** offers protection against Distributed denial of service (DDoS) attacks by defending against common network-layer attacks through always-on traffic monitoring and real-time mitigation.
* The core team is highly technical and understands the importance of security and staying up to date with new technologies. They coordinate with an offshore team to provide the best services for the customers.

For more details on using Document360 APIs, refer to the [**Document360 API documentation**](https://apidocs.document360.com/apidocs).

---

## Best practices

Here at **Kovai.co**, we believe that best practices create secure and robust applications. We recommend that Document360 users follow our list of best practices to prevent unexpected data loss or unauthorized access.

### List of best practices:

1. **We do not recommend publicly sharing the API key via less-secured networks,** as it can result in unauthorized data access. The key can be used to view or exploit your data. In such a case, we recommend deleting the key immediately and creating a new API key for your usage.

> For more information, click [**here**](https://docs.document360.com/docs/creating-document360-api-tokens).

2. **We recommend giving** **an API key only the required permissions**, as this helps keep the data in safe hands and prevents unauthorized users from modifying it. For example, to view an *"example"* set of data, the API key only needs the GET method. This does not let users modify the data using the API key.

> For more information, click [**here**](https://docs.document360.com/docs/creating-document360-api-tokens).

3. **We suggest that the team manager give each user the correct access rights,** as most of our customers have a team that has access rights to the documentation. We simplify this by having roles corresponding to a certain access rights level.

> For more information, click [**here**](https://docs.document360.com/docs/team-roles-and-permissions-explained).

4. **We recommend that** **users take advantage of the backup functionalities**. The project will be automatically backed up every day at 00:00 UTC. You can also manually back up your project anytime to keep the changes made safe.  Both of these will back up the Settings, Landing Page, Documentation, and Entire Project contents and can be restored at any time to return to a previous version. This process is made available to keep the users in control and to prevent data loss.

> For more information, click [**here**](https://docs.document360.com/docs/backup-restore).

5. **We recommend you use the option to make the document private if needed**. Various customers have different use cases for our product. You might want the documentation to be visible to the public or internal team members. The project owners can make the documentation private in the latter case and make it not visible to the public.

> For more information, click [**here**](https://docs.document360.com/docs/making-a-knowledge-base-private).

---

## Security information of integrations and partners

### Algolia - Search partner

* **SOC2 and SOC3 compliant**- Algolia follows all SOC 2 best practices to ensure excellence in the AICPA’s five trust service principles. Resulting in securing your data from modern world threats.
* API servers use HTTPS and TLS (1.0, 1.1, and 1.2), which have an A rating from [Qualys SSL labs](https://www.ssllabs.com/ssltest/analyze.html?d=latency-dsn.algolia.net&hideResults=on).
* Algolia isolates each customer's data in separate applications, preventing leakage and exchange of information from preserving the integrity of your data.

> For more information about the security of Algolia Search, visit [**Algolia's security docs**](https://www.algolia.com/enterprise/security/).

### MongoDB Atlas - Database service partner

* **Network isolation** - MongoDB Atlas dedicated clusters are deployed in a unique Virtual Private Cloud (VPC) with dedicated firewalls. This means that a third party cannot access your private data.
* **MongoDB Atlas undergoes independent verification** of platform security, privacy, and compliance controls.
* **End-to-end encryption** - All network traffic is encrypted using TLS, and the minimum TLS protocol version can be configured. Encryption for data at rest is stored in encrypted storage volumes.

> For more information about the security of MongoDB Atlas, visit [**MongoDB's security docs**](https://www.mongodb.com/cloud/atlas/security).

### Azure Blob Storage

* **Encryption in transit** - HTTPS ensures data is encrypted during transfer. In contrast, client-side encryption secures data on your device before sending it to the server, where it is decrypted upon arrival.
* **Encryption at rest** - Storage-side encryption is always enabled and automatically encrypts storage service data when writing it to Azure Storage. Client-side encryption is also enabled to make the data stored as secure as possible.
* **Advanced threat protection** - Provides an additional layer of security to detect unusual behavior and potentially harmful attempts to access and exploit your storage account.

> For more information about the security of Microsoft Azure Blob storage, visit [**Azure security docs**](https://docs.microsoft.com/en-us/azure/security/security-storage-overview).

---

## GDPR compliance

Document360 is fully **GDPR compliant.** We collect and store only the data required to deliver our services, with explicit customer consent.

> For more information about GDPR compliance, visit [**Document360's GDPR compliance page**](https://document360.com/gdpr-compliance/).

---

## Business continuity and disaster recovery

We have High Availability configured for our web apps and database to ensure business continuity. Multiple nodes run for individual services, so if one goes down, you still get an uninterrupted experience using Document360.

For any possible disaster, our database and data storage are replicated in different geolocations, so your data is always safe with us.

### DevOps Team

The product owner defines and reviews a Product roadmap periodically. Security fixes are prioritized and bundled in the earliest possible sprint. Our DevOps sprints are powered by multidisciplinary team members, including the Product Owner, Director of Engineering, Developers, and Quality Assurance.

* **Code Review**

The Quality Assurance team tests all changes and establishes criteria for performing code reviews, web vulnerability assessments, and advanced security tests.

* **Quality Assurance**

Builds undergo a stringent functionality, performance, stability, and UX tests before they are certified "Good to go.”

* **Version Control**

Source code is managed centrally with version controls, and access is restricted based on various teams assigned to specific sprints. Records are maintained for code changes and code check-ins and check-outs.

* **Segregation of Duties**

Access to the production resources is restricted to a limited set of users based on the job roles.

### Highly Resilient Architecture

The architecture is built with resiliency to ensure the high availability of the product and data.

* **High Availability**

We have multiple instances of our services running to ensure the high availability of our services for our customers.

* **Highly Scalable DNS**

Route users to the best endpoint based on geo-proximity, latency, health, and other considerations.

* **Data Backup**

Cloud snapshots are taken daily and retained, weekly and monthly, and the backups are available for one month for restoration.

* **Incident & Breach Management**

Procedures are established for reporting and tracking incidents for timely communication, investigation, and resolution.

* **Azure CDN**

We use Azure CDN to make sure our application and customer documentation are served with speed and ensure that they are done from the nearest node.

---

## Help

**For more information about Document360's security and infrastructure,** [**contact us**](https://document360.com/contact-us/) **(or)** [**book a demo**](https://document360.com/request-demo) **with our experts today.**

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="x-frame-options"></a>

## X-Frame options

**Plans supporting access to security settings in the knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**X-Frame options** allow you to control whether your Knowledge base can be embedded in `<frame>, <iframe>`, `<embed>`, or `<object>` tags on other domains. This feature provides an additional layer of security by preventing malicious websites from embedding your Knowledge base using the above tags.

> NOTE
>
> Ensure that you are not using iframe-based embedding for unauthorized domains, as it will be blocked when the X-Frame options setting is enabled.

---

## Access X-Frame options

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enable_xframe_options_toggle.png)

1. Navigate to **Settings** > **Users & security** > **Security**. This section contains controls for various security settings.
2. Locate the toggle labeled **Enable X-Frame options** and switch it on to restrict iframe embedding from external domains.

For example, if your knowledge base domain is `help.example.com` and you want to prevent other sites like `support.test.com` from embedding your content via iframes, ensure the **Enable X-Frame options** toggle is turned on.

![2_Screenshot-XFrame_options_before_after](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-XFrame_options_before_after.png)

---

### FAQ

#### What is an iframe?

An iframe, also known as an inline frame, is an HTML element that allows web developers to embed another HTML document within the current document. The content within an iframe is a separate web page displayed within a specific section of another web page. Due to its ability to embed external content, managing iframe usage with security settings such as X-Frame options is crucial to prevent security risks like clickjacking.

#### What are the embedded tags that I can restrict with the X-Frame options?

The X-Frame options setting allows you to control whether your knowledge base can be embedded in `<frame>`, `<iframe>`, `<embed>`, or `<object>` tags on external domains.

#### Why are X-Frame options important?

The X-Frame options are vital for security as they help prevent clickjacking attacks, where an attacker embeds your knowledge base in a malicious website. This embedding tricks users into performing unintended actions. Enabling X-Frame options ensures your knowledge base cannot be embedded on external domains, safeguarding user interactions.

#### How can I configure the X-Frame options for my knowledge base?

1. Navigate to **Settings** > **Users & security** > **Security**
2. Locate the toggle labeled **Enable X-Frame options** and switch it on to prevent your knowledge base from being embedded on unauthorized external domains.

#### Can I allow specific domains to embed my Knowledge Base?

Yes, you can specify the allowed domains in the Frame source of content security policy setting. For more information, see the [content security policy](/docs/content-security-policy) article.

#### How can I test if my X-Frame options are working?

You can test if your X-Frame options are correctly configured by:

1. Using your browser’s developer tools and checking the **Network** tab to inspect response headers for the **X-Frame-Options** setting.
2. Using third-party services like [securityheaders.com](http://securityheaders.com) to verify that the correct X-Frame-Options header is applied.

#### What are the potential risks of not using X-Frame options?

If the X-Frame options are not enabled for your knowledge base, it may be embedded in an iframe on another website without your authorization. This lack of control exposes your site to clickjacking attacks, where attackers overlay invisible or misleading elements over your interface to trick users into performing unintended actions, such as divulging passwords or clicking on malicious links. Such vulnerabilities can compromise user security and potentially lead to data breaches.

#### What is clickjacking?

Clickjacking, also known as UI redressing or UI masking, is a malicious technique where attackers trick users into clicking on a button or link that is hidden or obscured within a web page or application. This is often achieved by overlaying a transparent layer with deceptive elements over a legitimate website or application. Users may think they are interacting with the actual site, but in reality, they are engaging with elements controlled by the attacker. Such interactions can lead to adverse outcomes, like downloading malware, making unauthorized purchases, or inadvertently sharing sensitive information. Utilizing security settings like X-Frame options can help protect against such attacks by preventing unauthorized embedding of your content.

#### What is a malicious website?

A malicious website is a site designed to cause harm to visitors or their devices. These sites may trick visitors into downloading malware, stealing personal information, or engaging in fraudulent activities. Using X-Frame options helps prevent your content from being embedded on such sites, enhancing your security measures against these risks.

An online library where users can find information about a product, service, department, or topic. It helps users self-serve by providing answers and guidance.

<a id="content-security-policy"></a>

## Content security policy

**Plans supporting Content security policy in the knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Content Security Policy** (CSP) is a security related feature which helps to manage and prevent the external CSS, scripts, and frames embedded in your Knowledge base. When the content security policy is enabled in the project, the `Content-Security-Policy` response header will be added to the request header with the default allowed domains for each source. It restricts the resource loading from external domains and allows resources only from the configured list of domains for each source.

---

## Enable the content security policy

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Content_Security_Policy_in_the_Knowledge_base_portal.png)

1. Navigate to **Settings** () > **Users & Security** > **Security** in the Knowledge base portal.
2. Turn on the **Enable content security policy** toggle.
3. You can find the following source fields:  
    a. [**Style source**](/docs/content-security-policy#a-style-source)  
    b. [**Script source**](/docs/content-security-policy#b-script-source)  
    c. [**Frame source**](/docs/content-security-policy#c-frame-source)**.**
4. Type in the desired domain URLs in the respective fields.
5. Click **Save.**

> NOTE
>
> * The character limit for each limit is 5000.
> * Use commas (,) to separate the URLs.
> * Keep the URLs in the following format: `https://example.com.`

### a. Style source

In the **Style source** field, you can define the valid sources of stylesheets that can be applied to your Knowledge base. Configuring the style sources will prevent malicious styles from being used to execute Cross-Site Scripting (XSS) attacks on your Knowledge base.

* Type the domain URLs of **stylesheet sources** in this field.
* All the stylesheets from other URLs will be restricted.

> NOTE
>
> Ensure that you have added Nonce attribute placeholder in all custom HTML script sections.
>
> **Example**: `<Script nonce='{{Document360-Nonce}}'>`

---

### b. Script source

In the **Script source** field, you can define the valid sources of JavaScript codes that can be executed on your Knowledge base. This helps to prevent malicious JavaScript code from being executed, even if it has been injected into the Knowledge base by an attacker.

* Type the domain URLs of **Javascript sources** in this field.
* All the JavaScript codes from other URLs will be restricted.

---

### c. Frame source

In the **Frame source** field, you can define the valid sources of frame elements like `<frame>` and `<iframe>` that can be embedded in your Knowledge base.

* Type the domain URLs of **frame sources** in this field.
* All the frames from other URLs will be restricted.

---

## Testing your content security policy settings

After setting up your CSP, it’s important to verify that the settings are working as expected. To check if the content security policy has been applied correctly:

1. Open the **Network** tab in your browser's developer tools.
2. Visit your knowledge base and review the **response headers** for the CSP.
3. Alternatively, you can use online tools like [securityheaders.com](http://securityheaders.com) to verify if your website has the correct **Content-Security-Policy** headers set.

---

### FAQs

#### **Why is my video showing as "This content is blocked" in one article but not another?**

This issue typically occurs due to Content Security Policy (CSP) settings in Document360. The video might not be allowed by the current CSP settings. Different articles might have different CSP settings. Ensure that the video source is allowed in the CSP settings for all articles where the video needs to be displayed.

#### **How can I resolve the issue of a blocked video in my article?**

To fix this, navigate to **Settings** > **Users & security** > **Security**. Under **Enable content security policy** section, add the video source (e.g., https://www.youtube.com/) to the "Frame source" list and click **Save**.

#### **Why does my CSP validation indicate that CSP is missing in the response header?**

In Document360, the Content Security Policy (CSP) is implemented using **meta elements** rather than the response header. If you validate CSP by inspecting the response header, it will appear as though CSP is missing or disabled.

To confirm that CSP is enabled on your Knowledge base site, follow these steps:

1. Open your Knowledge base site in a browser.
2. Right-click anywhere on the webpage and select **View page source**.

   The page's source code will appear.
3. Use the search function (**Ctrl + F** on Windows or **Cmd + F** on Mac) and look for the term “**Content-Security-Policy**”.
4. If the term “**Content-Security-Policy**” is found, the CSP configuration will appear as the code following this term.

By validating through the meta element in the page source, you can confirm that CSP is enabled for your Knowledge base site.

<a id="csp-guidelines-for-document360-widget"></a>

## CSP and Whitelisting guidelines for Document360 widget

**Plans supporting addition of widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Content Security Policy (CSP)** is a security feature that helps prevent attacks like Cross-Site Scripting (XSS) by allowing developers to specify which sources of content are trusted and can be loaded by the browser.

Whitelisting in software products involves specifying a list of approved entities (e.g., IP addresses, domains, email addresses) that are allowed to access certain resources or perform specific actions, thereby blocking any entities not on the list to enhance security.

### Adding trusted content sources for the Document360 widget

When using the Document360 widget, certain trusted content sources need to be added to your existing CSP. This ensures that the widget functions correctly and securely.

#### For US users

Add the following sources to your `connect-src`, `script-src-elem`, `font-src`, and `style-src-elem` directives:

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Security-Policy" content="
    connect-src 
        https://jx9o5re9su-dsn.algolia.net
        https://apihub.us.document360.io/
        https://api.us.document360.io/
        https://gateway.us.document360.io
        https://*.algolianet.com
        https://js.monitor.azure.com;
    script-src-elem 
        'nonce-document360Nonce'
        https://cdn.us.document360.io
        https://*.algolianet.com
        https://cdn.jsdelivr.net
        https://cdnjs.cloudflare.com;
    font-src 
        https://fonts.gstatic.com
        https://cdn.us.document360.io;
    style-src-elem 
        'unsafe-inline'
        'unsafe-eval'
        https://cdn.us.document360.io/
        https://cdn.jsdelivr.net
        https://fonts.googleapis.com;">
</head>
</html>
```

XML

Copy

Replace `"document360Nonce"` with the nonce variable already available in your system.

#### For EU users

Add the following sources to your `connect-src`, `script-src-elem`, `font-src`, and `style-src-elem` directives:

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Security-Policy" content="
    connect-src 
        https://jx9o5re9su-dsn.algolia.net
        https://apihub.document360.io/
        https://api.document360.io/
        https://gateway.document360.io
        https://*.algolianet.com
        https://js.monitor.azure.com;
    script-src-elem 
        'nonce-document360Nonce'
        https://cdn.document360.io
        https://*.algolianet.com
        https://cdn.jsdelivr.net
        https://cdnjs.cloudflare.com;
    font-src 
        https://fonts.gstatic.com
        https://cdn.document360.io;
    style-src-elem 
        'unsafe-inline'
        'unsafe-eval'
        https://cdn.document360.io/
        https://cdn.jsdelivr.net
        https://fonts.googleapis.com;">
</head>
</html>
```

XML

Copy

Replace `"document360Nonce"` with the nonce variable already available in your system.

### Updating your widget configuration

In your knowledge base portal:

1. Go to **Widget** () on the left navigation sidebar.
2. Select the required widget and click **Edit** ().
3. In the **Configure and connect** tab, expand the **Widget JavaScript** accordion under the **Connection** group.

### For US customers

Update your code as follows, replacing `"document360Nonce"` with the nonce variable already available in your system:

```
<!-- Document360 knowledge base assistant start -->
    <script nonce="document360Nonce">
        (function (w,d,s,o,f,js,fjs) {
            w['JS-Widget']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
            js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
            js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);
        }(window, document, 'script', 'mw', './widget.js'));
        mw('init', { nonce:'document360Nonce',apiKey: 'klhgeGoqB8wlUwq2hraJ1zbOCq/V+wBiyGQNhXEKQ6MO7V1AhLuakiEimM6ims92AR7Bqt/eOaAz3SgInMvZTkZrt3F7QaEmWtX7DDDTtIJTruZdyIv+bDBTKVuPx4BsVUavm68/y4HV7h0ahKmDgQ==' });
        //var jQuery_2_2_4 = $.noConflict(true);
    </script>
  <!-- Document360 knowledge base assistant end -->
```

XML

Copy

### For EU customers

Update your code as follows, replacing `"document360Nonce"` with the nonce variable already available in your system:

```
    <!-- Document360 knowledge base assistant start -->
    <script nonce="document360Nonce">
        (function (w,d,s,o,f,js,fjs) {
            w['JS-Widget']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
            js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
            js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);
        }(window, document, 'script', 'mw', './widget.js'));
        mw('init', { nonce:'document360Nonce',apiKey: 'klhgeGoqB8wlUwq2hraJ1zbOCq/V+wBiyGQNhXEKQ6MO7V1AhLuakiEimM6ims92AR7Bqt/eOaAz3SgInMvZTkZrt3F7QaEmWtX7DDDTtIJTruZdyIv+bDBTKVuPx4BsVUavm68/y4HV7h0ahKmDgQ==' });
        //var jQuery_2_2_4 = $.noConflict(true);
    </script>
  <!-- Document360 knowledge base assistant end -->
```

XML

Copy

By following these steps, you can ensure that the Document360 widget operates securely and efficiently in your environment.

---

## Troubleshooting

### Unable to view certain content on the site

**Error:** This content is blocked. Contact the site owner to fix this issue

You might encounter this issue when the CSP settings in the Knowledge Base portal block the requested content. It typically happens due to restrictions on file source URLs or incorrect CSP configurations.

**Steps to resolve:**

1. **Update the Content Security Policy:**

   a. Navigate to **Settings**() > **Users & Security** > **Security** in the **Knowledge base portal**.

   b. Under the **Content Security Policy** section, add the affected domain URL to the Source field to whitelist the required file source URLs.

   c. If you do not wish to enable this feature, toggle off the **Content Security Policy** option.
2. **Clear your browser cache:** After making changes, clear your browser cache and revisit the site to verify if the issue is resolved. It may take a few moments for the updated settings to take effect.
3. **Test the article in different environments:**

   a. Open the article in an incognito window.

   b. Test it across different browsers to confirm the issue is fixed.
4. **Review KB widget settings:** Ensure the application’s CSP settings are correctly configured to prevent errors in the Knowledge Base widget.

   If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

   Provide the following details:

   a. To verify whether the CSP has been applied correctly, open the **Network** tab in your browser’s **Developer tools**.

   b. Share the details of the response headers to confirm the presence and configuration of the CSP.

---

### FAQ

#### Why is the scroll bar not showing up on the Knowledge base widget?

The issue may be related to your application’s CSP rules. If your domain is not whitelisted in your CSP, it can prevent the scroll functionality from working properly. To resolve this issue, [add the domain URL to your application’s CSP](/help/docs/csp-guidelines-for-document360-widget#adding-trusted-content-sources-for-the-document360-widget).

<a id="bot-management"></a>

## Bot management

**Plans enabled with bot management capabilities**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A bot, short for "robot," is a software program that works on the Internet and handles repetitive tasks. While some bots are helpful, others can harm websites or apps.

## Types of bots

Bots fall into two main categories: Good Bots and Bad Bots.

• **Good Bots**: These bots, like GoogleBot, BingBot, and GPTBot, are transparent about their identity and purpose. They're often called Verified Bots.

• **Bad Bots/Malicious Bots**: These bots engage in harmful activities like scraping content, spreading spam, or perform credential stuffing attacks. Examples include bots used in DoS and DDoS attacks, web scrapers, and brute force password cracking.

---

## Bot management

Bot management involves blocking bad or malicious bots while still allowing good bots access online resources. This is crucial for keeping the online environment safe and efficient by mitigating potential threats.

### Why bot management matters?

Good bot management means legitimate users can have uninterrupted access to online resources by filtering harmful and bad bots. By spotting and stopping bad bots, it keeps servers running smoothly and makes things more secure. Plus, it helps watch for any suspicious bot activity to stop threats before they cause bigger issues.

---

## Heuristics and Machine Learning Detection

Cloudflare, as part of its security setup, utilizes both heuristics and machine learning to detect bots. This helps to proactively block malicious bots based on traffic patterns, user-agent anomalies, and other behavioral markers. By continuously analyzing incoming requests, this method effectively reduces the risk of sophisticated bot attacks.

---

## Security setup

Document360 provides enhanced security with bot detection and blocking for the knowledge base portal and knowledge base site. The bot management operates in Block mode for definite bot requests. This proactive measure prevents unwanted traffic safeguarding data integrity.

## User-Agent monitoring and IP/Port blocking

Cloudflare identifies bots using user-agent patterns. For instance, requests with empty user agents or unreleased browser versions are flagged and blocked. Additionally, if a site is accessed using unsupported port numbers, such as port 8443, Cloudflare will automatically block these attempts. Furthermore, it detects unusual traffic patterns coming from the same IP or ISP and blocks such traffic to protect against potential attacks.

> CAUTION
>
> Certain bot management measures, such as blocking specific bots or user agents, may impact custom automation scripts or integrations.

> NOTE
>
> Implementing these security measures is critical for safeguarding against malicious bot activity and maintaining the integrity of our online platforms.

<a id="fair-usage-policy-for-bot-management"></a>

## Fair usage policy for bot management

**Plans enabled with fair usage policy for bot management**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To ensure optimal system performance and equitable access for all users, Document360 implements a Fair Usage Policy for bot management. This policy outlines the restrictions on bot usage to maintain service quality and prevent abuse.

---

## Fair usage policy details

Document360's fair usage policy includes rate limiting rules to manage bot traffic effectively and protect the application against Denial of Service (DoS) attacks. Rate limiting is used to limit the number of requests made by one user, ensuring a seamless experience for other users. These rules are designed to balance the needs of all users while maintaining system integrity.

## Rate limiting

* Maximum request limit of **1,500 requests** per **minute** per **IP address,** or
* Maximum request limit of **300 requests** per **10 seconds** per **IP address.**

Cloudflare also complements this rate-limiting process by analyzing bot activity patterns using heuristics and machine learning detection.

---

## Purpose of the policy

This policy helps ensure equitable access to our services for all users by preventing any single bot or user from monopolizing system resources. By implementing these limits, we can maintain consistent performance and availability for everyone using the platform.

## Importance of compliance

Adhering to this Fair Usage Policy is crucial for maintaining the overall health of the system. It helps prevent server overload, ensures responsive service for all users, and protects against potential abuse or unintended high-volume requests that could impact other users' experience.

---

> NOTE
>
> If you have specific use cases that may require higher limits, please contact our support team to discuss your needs and potential solutions.

<a id="using-the-text-editor"></a>

## Editor choices in Document360

**Plans supporting the use of editors**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Using the text editor in Document360 is essential for creating and managing Knowledge base articles efficiently.

Document360 allows you to draft articles in three versatile editor options:

1. The [Markdown editor](/help/docs/the-markdown-editor) lets writers use syntax and HTML to customize articles.
2. The [WYSIWYG](/help/docs/the-wysiwyg-editor) (What You See Is What You Get) editor uses rich text formatting and includes an extensive formatting toolbar; however, you cannot use custom code in articles.
3. The [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview) is the latest addition to the editor options in Document360 and acts as a hybrid between the Markdown and WYSIWYG editors.

Document360 ensures a user-friendly experience that enhances content clarity, consistency, and engagement.

---

## Markdown editor

The Markdown editor has a split-screen workspace and features to help you manage an article as you write it.

1. The left side of the screen is where you type and apply the Markdown syntax.
2. The preview screen on the right side allows you to view how your article will look before publishing.
3. The Scroll on indicates that both sections scroll simultaneously. Click **Scroll on** to turn off auto-scroll.
4. Click  **preview** to see how your article will appear on the Knowledge base site.
5. After publishing, you can find the **Copy link** () icon near the View in Knowledge base () icon.

Use the arrows on the divider to collapse either window of the editor.

![1_Screenshot-Markdown_editor_new_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Markdown_editor_overview.png)

### Scenarios where the Markdown editor is recommended

The Markdown editor provides guided flexibility for article creation and customization and enforces a consistent writing style and formatting across the documentation. This consistency is crucial for maintaining a professional appearance in product documentation.

> **For example**, you can insert images using the toolbar, which injects the following Markdown:
>
> `![Image Alt Text] (Image URL){height="" width=""}.`
>
> You can adjust the image size by adding desired values (e.g., height="600px" width="400px"). Advanced formatting, such as shadows and borders, can be achieved with HTML customization snippets.

  

NOTE

For more information, refer to the articles on the [Markdown editor](/help/docs/markdown-editor-overview) and [Markdown basics](/help/docs/markdown-basics).

---

## WYSIWYG editor

The WYSIWYG, which stands for What You See Is What You Get, is an HTML-based editor that differs from the Markdown editor. It allows you to view the actual formatting of the article as you type or insert content.

![2_Screenshot-WYSIWYG_editor_new_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-WYSIWYG_editor_overview.png)

### Scenarios where the WYSIWYG editor is recommended

If team members who contribute to articles are familiar with HTML-based editors like WordPress, this editor is relatively easy to use. Additionally, if your documentation articles contain a lot of code and media, the WYSIWYG editor provides extensive formatting options for text, images, videos, and more.

> NOTE
>
> For more information, read the article on [WYSIWYG editor](/help/docs/the-wysiwyg-editor).

---

## Advanced WYSIWYG editor

The lightweight and powerful 'Advanced WYSIWYG editor' offers rich text editing capabilities and supports Markdown syntax, providing a more visual and intuitive experience compared to the Markdown editor while maintaining flexibility similar to the WYSIWYG editor.

Type `/` in the editor, and a list of options appears. You can search for the options by typing command names. Click the desired command or press Enter key to select the command.

![3_Screenshot-Advanced_WYSIWYG_editor_new_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Advanced_WYSIWYG_editor_overview.png)

### Scenarios where the Advanced WYSIWYG editor is recommended

Suppose you have Knowledge base articles with text-centric, code-heavy, and media-rich articles. In such cases, the Advanced WYSIWYG editor is a flexible alternative to the Markdown and WYSIWYG. This provides quick syntax-based editing similar to Markdown and broad text and image formatting options like the WYSIWYG editor.

> NOTE
>
> For more information, refer to the Document360 help article on [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview).

---

## Changing the default editor at the project level

To make the WYSIWYG/Advanced WYSIWYG editor the default editor:

1. Navigate to **Settings** () > **Knowledge base portal** > **General** in the Knowledge base portal.
2. In the **Editor** section, choose your desired editor.
3. Click **Save**.

![4_Screenshot-settingup_default_editor_in_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Changing_the_default_editor_in_settings.png)

> NOTE
>
> If you change your project's default editor, all the new articles you create will be in your respective editor's choice.

---

## Switching between Markdown - WYSIWYG - Advanced WYSIWYG editor

Markdown editor is the default editor for all new projects and articles in Document360. If you want to use the WYSIWYG or Advanced WYSIWYG editor, you can switch to it at a project or article level.

### Editor switching at article-level

|  |  |
| --- | --- |
| **Possible** | * Markdown > Advanced WYSIWYG (only in 'Edit' mode) * WYSIWYG > Advanced WYSIWYG (only in 'Edit' mode) |
| **Not possible** | * Markdown > WYSIWYG * WYSIWYG > Markdown * Advanced WYSIWYG > Markdown * Advanced WYSIWYG > WYSIWYG |

To switch editors in an individual /category page, follow the below steps

1. In the article/category page, click the **More** (•••) icon, and select **More article options**.

   The **Article settings** panel will appear.
2. In the **Editor** tab, select your desired editor.
3. Select **Are you sure want to continue?** checkbox.
4. Click **Save**.

   The same steps apply to API documentation.

   5\_Screenshot-Switching\_editors

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Switching_editors.png)

> NOTE
>
> Once you have switched to the Advanced WYSIWYG editor at the article level, you cannot revert the editor type for that particular article. However, for future articles, the user with the **Project Settings - Update** permission can set the default editor from **Settings** > **Knowledge base portal** > **General** > **Editor**.

---

### Handling unsupported HTML tags and attributes in the Advanced WYSIWYG editor

The Advanced WYSIWYG editor in Document360 ensures content security by managing unsupported HTML tags and attributes. Instead of removing them, the editor flags and preserves these elements for users to review and fix.

#### When does this happen?

1. **Migrating from WYSIWYG to Advanced WYSIWYG editor**

   When switching between the editors, unsupported content is automatically identified and flagged for users to address potential issues.
2. **Editing content in Advanced WYSIWYG editor**

   When unsupported tags or attributes are added in the **Code view**, the editor detects, flags, and visually marks them for correction.

#### What happens when unsupported elements are detected?

* The editor detects unsupported HTML tags (e.g., `<marquee>`, `<blink>`) and attributes (e.g., `onmouseover`, `style="text-decoration:blink"`) during parsing.
* These elements are visually flagged within the content using custom indicators, such as tooltips and block highlights, without disrupting the content structure.
* In editor, you cannot edit the desired unsupported element’s block. However, users can interact with flagged elements, receiving options to modify, remove, or correct them in the **Code view**.

**Supported tags in the Advanced WYSIWYG editor**

Below is the list of tags with custom attribute support in the Advanced WYSIWYG editor:

#### **Text formatting tags**

Tags that define or modify how text appears:

* **Abbr**: Represents abbreviations or acronyms.
* **Blockquote**: Indicates quoted content.
* **Heading**: Represents headings (e.g., `<h1>`, `<h2>`).
* **Paragraph**: Defines a paragraph of text.
* **Sub & Super Scripts**: Used for subscript (`<sub>`) and superscript (`<sup>`).
* **Inline Code**: Represents a short snippet of code within a line of text.

#### **List tags**

Tags that structure content as lists:

* **Bullet List**: Represents unordered lists (`<ul>`).
* **Ordered List**: Represents ordered lists (`<ol>`).
* **Task List**: Used for interactive or visual checklists.
* **List Items**: Represents individual list elements (`<li>`).

#### **Form and interactive tags**

Tags used for creating forms and interactive elements:

* **Input**: Defines input fields.
* **Label**: Labels associated with form elements.
* **Text Area**: Allows multi-line text input.

#### **Link and media tags**

Tags for linking or embedding media:

* **Link**: Defines hyperlinks (`<a>`).
* **Image**: Embeds images (`<img>`).
* **Video**: Embeds videos (`<video>`).
* **Object**: Embeds external resources (e.g., Flash).
* **Iframe**: Embeds inline frames (`<iframe>`).

#### **Additional tags**

Additional tags with unique purposes:

* **Div**: A generic container for grouping content.
* **Kbd**: Represents keyboard input.
* **Details**: Creates a disclosure widget for showing or hiding content.
* **Summary**: Provides a summary for the `<details>` tag.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-describing_the_unsupported_tags_in_the_Advanced_WYSIWYG_editor_.png)

---

### FAQs

#### **What is a text editor in Document360's knowledge base?**

A tool that allows team accounts to create, edit, and format content for their articles and category pages. Each editor option provides a user-friendly interface to facilitate content creation within the Knowledge base portal.

#### **What are the key features of any text editor for documentation?**

Text editors with context to knowledge bases typically offer features such as basic text formatting (bold, italics, underline, strikethrough), text type formatting (headings, callouts lists, tables), media embedding (images, videos), file attachments, code formatting, and most importantly an easy to use interface.

#### **Can I embed images and videos directly within the text editor?**

Yes, all the text editors available in Document360 support media embedding. Users can easily add images, videos, and other multimedia elements directly into their articles for better visual appeal.

#### **Can I switch between different text editor options?**

You have the option that allows you to choose the editor that best suits your preferences and needs at a project level. You can also switch the editors once at an article level, but switching back has some limitations. Please refer to the [Switching editor](https://docs.document360.com/help/docs/using-the-text-editor#switching-between-markdown---wysiwyg---advanced-wysiwyg-editor) section in this article.

#### **Do the keyboard shortcuts work in the different Document360 editors?**

Yes, each of the three editors (Markdown, WYSIWYG, and Advanced WYSIWYG editor) has its collection of keyboard shortcuts. Most conventional shortcuts universally used in tools such as Microsoft Word and Google Docs are available with the Document360 editors.

> NOTE
>
> There are plenty of shortcuts available in Advanced WYSIWYG editor, click [here](/help/docs/advanced-wysiwyg-editor-basics) to know more.

#### **How do keyboard shortcuts in the editor help in documentation?**

Keyboard shortcut, as the name implies, improves efficiency in writing by minimizing the need to use the mouse to perform specific actions and access tools in the article without your fingers leaving the device's keyboard.

#### **How do I choose the right text editor option for my knowledge base?**

Consider the following factors before selecting the editor at a project-level or article-level

* Ease of use
* Type of documentation you create
* Media files usage
* Author familiarity with the editor

#### **Will the existing articles be affected by the change in the default editor?**

Existing articles will continue to use the same editor as before, while only the newly created articles will use the newly selected default editor.

<a id="elements-of-the-editor"></a>

## Elements of the editor

**Plans supporting the use of editors**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Document360 Knowledge base portal editor exhibits fluid interactions, a simplified interface, and an enhanced user experience.

![1_Screenshot-Fresh_new_look](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Overview_of_the_Knowledge_base_portal_editor.png)

---

### Aesthetics and Functionality

#### Switching multiple projects

Within the project section, users can view a list of projects along with their respective icons denoting the type of knowledge base.

![2_Screenshot-Project_section](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Project_section_new.png)

#### Switching Workspaces and languages

![3_Updated_Screenshot-Workspace_area](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_New_Screenshot-Switching_workspaces_and_languages.png)

* The options for Workspace and Language are merged in the dropdown menu at the workspace.
* The Workspace name is displayed alongside the flag representing the language.
* From the dropdown, you can select the desired workspace and language.
* Clicking **Manage workspace & language** redirects you to the [**Localization and Workspaces**](/docs/localization-workspace) section in the settings.

  > NOTE
  >
  > The **Create** button is available in the header. With this, you can create a category, new article, article from template or import articles.

---

## Left navigation bar: Category tree manager

![4_Screenshot-Left_navigation_bar](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Left_navigation_bar_in_the_Knowledge_bse_portal.png)

1. The left navigation bar includes key sections such as Dashboard (), Documentation (), API Documentation (), Analytics (), Widgets (), Drive (), and Settings ().
2. At the top of **Categories & Articles** section, you will find the following options:

   * [All articles](/help/docs/all-articles-overview-page) ()
   * [Workflow assignments](/help/docs/workflow-assignment) ()
   * [Starred](/help/docs/starred-categories) ()
   * [Recycle bin](/help/docs/recycle-bin-recent-and-starred-files) ()
   * [Site builder](/help/docs/customize-site) ()
   * [Content tools](/help/docs/content-tools) ()

   The **Site builder** feature, now part of the category tree manager, redirects you to the **Customize site** section in the settings.
3. The **Categories & Articles** section is where all articles and categories are created. Recent enhancements to the **More options** () menu provide a more user-friendly and intuitive interface for improved usability.

> NOTE
>
> For more information, read the article on [Knowledge base portal](/docs/document360-getting-started#knowledge-base-portal).

---

## Article editor’s header section

The elements are positioned to enhance usability, providing you with a more intuitive and efficient workflow:

![5_Screenshot-UI_enhancements_in_the_editor_header_section](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-UI_enhancements_in_the_editor_header_section.png)

1. **Slug of the article**: The article's URL/slug is displayed for easy reference.
2. **Status of the article**: The article's status is prominently positioned to provide quick insights into its current state. An article can be in **New**, **Draft**, **Published**, or **Stale** state.
3. **Article information**: You can now access article information such as contributors, stats, last updated, and created dates. Additionally, the **Manage** option allows users to manage [add or remove] contributors efficiently.
4. **Preview**: You can instantly preview the article's appearance on the knowledge base site.
5. **Title**: You can modify the article's title, URL slug, and description. Once you have made your changes, click **Update.**
6. **Recommendations**: A dropdown menu displays terms recommended by the **AI Glossary generator.**
7. **Workflow status**: You can add or update the workflow status of the articles.
8. **More menu** (•••): Here you can access additional actions such as clone article, move, hide, and delete. Moreover, SEO, tags, and Related articles are conveniently separated.
9. **Comments**: You can engage in discussions and provide feedback.
10. **View full screen**(): Allows users to view Document360 in full-screen mode.

<a id="markdown-editor-overview"></a>

## Markdown editor

**Plans supporting the use of Markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Markdown Editor** uses a short-hand syntax style text to create documents and then converts that text to HTML. Markdown is useful when articles contain more text and fewer multimedia elements.

> NOTE
>
> To learn more about Markdown comments, refer to [**Basic Markdown syntax**](/help/docs/markdown-basics) article.

---

## Using Markdown in your Knowledge base

For more information on text editor options, refer to [**Editor choices in Document360**](/help/docs/using-the-text-editor)**.**

* When using the Markdown editor, you can use Markdown syntax manually while writing or formatting text using the Markdown toolbar.

  For example, you can make a text appear **Bold** by writing the respective syntax (such as `**word**` or using the **Bold** icon in the Markdown toolbar.
* When you write a syntax, ensure that the reference matches the required character arrangement.
* To learn more about Markdown syntax, read the [**Markdown basic syntax**](https://www.markdownguide.org/basic-syntax/) page.

> For example, In **Bold** syntax, no space should be present at the end or beginning of the characters mentioned inside the syntax.  
> `**Text**` and not `** Text **`
>
> In **Headings**, a space is required between the respective syntax and characters.  
> `### Heading3` and not `###Heading3`

---

## Markdown toolbar

The WYSIWYG toolbar offers various options to edit and format your text including the option to insert media files as well. The different toolbar sections and their uses are shown and elaborated below.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Markdown_Editor.png)

* **Headings**
* **Basic text formatting**
* **List**
* **Insert**
* **Callouts**
* **Private notes**
* **Find and replace**
* **Insert LaTeX**
* **Content reuse**
* **Code block**
* **Glossary**
* **Video**

### Headings

* **H2**: Refers to **Heading 2**
* **H3**: Refers to **Heading 3**
* **H4**: Refers to **Heading 4**

### Basic text formatting

* **Bold:** To **Bold** the text.
* **Italic:** To *Italicize* the text.
* **Strikethrough:** To ~~Strikethrough~~ the text.
* **Blockquote:** To offset a quote or paragraph with a line. For example, the below sentence is in **Blockquote**:

  > This is an example of Blockquote.
* **Line**: To insert a line in the article.

### List

* **Unordered list:** To make a list denoted with bullet points for each item.
* **Ordered list:** To make a list denoted with numbers for each item.

### Insert

* **Insert Table:** To add a table to the article.
* **Insert image:** To insert an image from the URL, local Drive, or Document360 Drive.
* **Insert file:** To insert a PDF or Word document from the Drive.
* **Insert a link:** Add a hyperlink from a provided URL or a Knowledge base article to the selected text.

### Callouts

* **Info**: To insert an editable blue info box. You can use this to add additional information.
* **Warning:** To insert an editable yellow warning box. You can use this to add important information.
* **Error:** To insert an editable red error box. You can use this to add essential information.

### Private notes

* **Private notes**: To insert an editable purple internal comment box that will only be visible to logged-in team members.

> **For example**, you can add internal feedback to the respective team members.

### Insert LaTeX

* **Insert LaTeX**: To add expressions and equations,

  1. Click on **Insert LaTeX** option and a sample latex syntax (a² + b² = c²) appears.
  2. Type in your desired syntax.
  3. The syntax must start and end with **$**.
  > NOTE
  >
  > Don't add a space between $ and syntax.

  + [**Read the help article**](http://docs.mathjax.org/en/latest/input/tex/macros/index.html) to view the basic latex commands used in latex syntax.

### Find and Replace

* **Find and Replace:** Search a text within your article and replace it with another text. You can also use this to find the article's text content occurrences. This is particularly handy in long articles.

### Content reuse

* **Content reuse:** To reuse the content across the project. Two content reuse options are available:  
  a. **Variable**: Only text content can be added inside a variable.  
  b. **Snippet**: You can add images, tables, etc., inside a snippet.

### Codeblock

* **Insert Codeblock**: Add a code block to your article.

### Glossary

* **Glossary:** Add a glossary to your article.

### Video

* **Insert Video**: To embed a video from YouTube, Wistia, or Vimeo.

### Scroll

* **Scroll on/off:** To enable or disable simultaneous scroll functionality for both the editor and the article preview sections.

---

### Spell checker in Markdown

1. Right-click on the misspelled word.
2. The suggestions for corrections will be displayed through your browser's native functions.
3. Click on the suggested correction to apply it as needed.

   ![5_Screenshot-Markdown_Spell_checker](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Markdown_Spell_checker.png)

---

### FAQs

#### What is a Markdown editor, and how does it differ from a regular text editor?

Markdown editor is a specialized text editor designed to simplify the process of writing in Markdown language — a lightweight markup language that converts plain text into HTML. Unlike regular text editors, Markdown editors provide live previews, making it easier to visualize how the content will appear once published. You can experience the full potential of the Markdown editor on Document360 using the customization solution objects help articles we offer.

#### What are the key features of the Markdown editor in Document360?

Markdown editor in Document360 includes real-time previews, syntax highlighting, keyboard shortcuts, drag-and-drop image support, and seamless integration with the article version control (revisions) feature.

#### Is a Markdown editor suitable for beginners with no syntax-based writing experience?

Absolutely! Markdown's simple syntax makes it accessible for beginners without coding experience. Its intuitive structure allows users to focus on content creation without learning complex markup languages.

#### How do I add ASCII code to my article?

You can add ASCII code to your article using the **Code Block** feature.

#### Is it possible to add a code block without any heading?

Yes, when using Markdown editor, you can add code blocks in your article without necessarily having any heading.

#### Can I use the HTML content in the Markdown editor?

Yes, you can use HTML content in the Markdown editor. However, using Markdown syntax in the Markdown editor is recommended to avoid inconsistency.

---

## Related blogs

#### [1. The Ins and Outs of Using Markdown for Technical Writing](https://document360.com/blog/markdown-for-technical-writing/)

#### [2. Introductory Guide to Markdown for Documentation Writers](https://document360.com/blog/introductory-guide-to-markdown-for-documentation-writers/)

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

<a id="markdown-basics"></a>

## Basic Markdown syntax

**Plans supporting the use of Markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Markdown editor is a powerful tool for creating clear, organized, and professional content in Document360. Whether you are new to Markdown or already familiar, this article will help you learn the basic commands and formatting options step by step.

Markdown is a lightweight markup language that lets you format text easily using special characters. You don't need coding knowledge to use it—just follow the syntax provided in this guide to create headings, lists, links, and more.

---

## Markdown commands

To format your text using Markdown commands, follow the table below to understand how to type Markdown commands and what they do. Here, **syntax** represents the way you type the content in your editor. You can use the examples in the **Example** column as reference.

For some Markdown commands, you also have alternate keyboard shortcuts, which you can use to quickly format your text. You can find these shortcuts in the **Notes** column in the below table.

| Feature | Syntax | Example | Output | Notes |
| --- | --- | --- | --- | --- |
| **Headings (H2, H3, H4)** | `##`, `###`, `####` before the text | `## Heading 2` | Heading 2 | This syntax helps in creating section titles. Use 1-6 hash symbols for heading levels. Document360 restricts H1 for article titles. |
| **Bold** | `**text**` | `**bold**` | **bold** | This syntax helps emphasize important text. Shortcut: Ctrl+B / Cmd+B |
| **Italics** | `*text*` or `_text_` | `*italics*` | *italics* | This syntax helps highlight text subtly. Shortcut: Ctrl+I / Cmd+I |
| **Strikethrough** | `~~text~~` | `~~strikethrough~~` | ~~strikethrough~~ | This syntax helps to cross out text. No shortcut available |
| **Numbered List** | `1.` followed by text | `1. First item` | 1. First item | Numbered lists automatically increment |
| **Bulleted List** | `*` or `-` followed by text | `* Bullet item` | \* Bullet item | Use an asterisk `*` or a hyphen `-` |
| **Link** | `[text](URL)` | `[Document360](https://docs.document360.com)` | [Document360](https://docs.document360.com) | Links are displayed as clickable text |
| **Blockquote** | `>` before text | `> This is a quote` | Creates a callout/blockquote | For quoting or highlighting text |
| **Horizontal Line** | `***` | `***` | Creates a horizontal line | Used to separate sections |

---

## Heading levels

| Heading Level | Syntax | Example | Output |
| --- | --- | --- | --- |
| H2 | `## Heading 2` | `## This is Heading 2` | This is Heading 2 |
| H3 | `### Heading 3` | `### This is Heading 3` | This is Heading 3 |
| H4 | `#### Heading 4` | `#### This is Heading 4` | This is Heading 4 |

TIP

Ensure a blank line above Heading tags and a space between hash symbols and text.

---

## Styling text

| Style | Syntax | Example | Output |
| --- | --- | --- | --- |
| **Bold** | `**text**` | `**bold text**` | **bold text** |
| *Italics* | `*text*` or `_text_` | `*italic text*` or `_italic text_` | *italic text* or *italic text* |
| ~~Strikethrough~~ | `~~text~~` | `~~strikethrough text~~` | ~~strikethrough text~~ |
| **Highlight** | `==text==` | `==highlighted text==` | ==highlighted text== |
| **Superscript** | `text^superscript` | `E = mc^2` | E = mc2 |
| **Subscript** | `text~subscript` | `H~2~O` | H2O |

TIP

Avoid spaces between syntax and text for proper styling.

---

## Lists

| List Type | Syntax | Example | Output | Description |
| --- | --- | --- | --- | --- |
| **Numbered List** | `1. Item` | `1. First item` | 1. First item | Automatically increments numbers for each item. |
|  | `2. Item` | `2. Second item` | 2. Second item | Use this format for each subsequent item. |
|  | `3. Item` | `3. Third item` | 3. Third item |  |
| **Bulleted List** | `* Item` | `* Bullet item` | - Bullet item | Use an asterisk (`*`), hyphen (`-`), or plus (`+`). |
|  | `- Item` | `- Another bullet item` | - Another bullet item | Any of these symbols will create a bulleted item. |
|  | `+ Item` | `+ Yet another bullet item` | + Yet another bullet item |  |

---

## Links and blockquotes

| Feature | Syntax | Example | Output |
| --- | --- | --- | --- |
| Link | `[text](URL)` | `[Document360](https://docs.document360.com)` | [Document360](https://docs.document360.com) |

**Blockquote**  
Include quotes or highlight important points by using '>' before the text.  
`> This will quote the entire line of text`  
Output:

> This will quote the entire line of text

---

## Horizontal line

You can enter a horizontal line to divide two lines of text using the three asterisks.

`***`  
Output:

---

## Quick tips for beginners

1. Use Headings to structure your content (e.g., sections and subsections).
   * Example: Use `##` for large headings and `###` for smaller ones.
2. Highlight key points with **Bold** or *Italics* to make the text easier to read.
3. Add Lists to organize information.
   * Use `1.` for numbered lists or `*` for bullet points.
4. Use **Links** to direct users to additional resources or websites.

---

## More elements

| Feature | Syntax | Example |
| --- | --- | --- |
| Image | `![Alt text](URL "Optional title")` | `![Logo](https://example.com/logo.png "Logo")` |
| Reference Link | `[Link text][ref]``[ref]: URL` | `[Document360][doc]``[doc]: https://docs.document360.com` |
| Escaping Characters (to avoid special characters being processed) | `\character` | `\*This is not italic\*` |
| YouTube Video | `<iframe src="https://www.youtube.com/embed/VIDEO_ID" width="560" height="315" frameborder="0" allowfullscreen></iframe>` | `<iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ" width="560" height="315" frameborder="0" allowfullscreen></iframe>` |
| Vimeo Video | `<iframe src="https://player.vimeo.com/video/VIDEO_ID" width="640" height="360" frameborder="0" allowfullscreen></iframe>` | `<iframe src="https://player.vimeo.com/video/76979871" width="640" height="360" frameborder="0" allowfullscreen></iframe>` |

If you're unsure about HTML, simply copy and paste the examples provided, replacing the URL with your own video link.

---

## Emoji usage

You can copy and paste the emojis directly into your document from the table below.

| **Emoji** | **Description** |
| --- | --- |
| 📝 | Memo |
| ✍️ | Writing Hand |
| 📄 | Page Facing Up |
| 📚 | Books |
| 📖 | Open Book |
| 🖋️ | Fountain Pen |
| 📑 | Bookmark Tabs |
| 🔍 | Magnifying Glass |
| 📅 | Calendar |
| 💻 | Laptop |
| 📊 | Bar Chart |
| 📈 | Chart with Upwards Trend |
| 🗂️ | Card Index Dividers |
| ✏️ | Pencil |
| 😊 | Smiling Face |
| ❤️ | Red Heart |
| 🌟 | Star |
| 🔥 | Fire |
| 🎉 | Party Popper |

Simply copy the emoji you want and paste it wherever you need it! You can also insert icons into your editor by pasting the HTML code from FontAwesome.

---

## Using Unicode characters in the Markdown editor

Unicode characters help you add symbols, special characters, and non-Latin scripts to your Markdown documents. This includes currency symbols, mathematical operators, arrows, and accented letters, which enhance your content's clarity and style.

### Syntax for inserting Unicode characters

In the Markdown editor, you can insert Unicode characters using either of the following methods:

1. **Direct copy-paste:** Copy the desired character from any Unicode reference site and paste it directly into your Markdown content.

   **Example:**

   ```
   ★ Star symbol

   ```

   Plain text

   Copy

   **Output:**  
   ★ Star symbol
2. **HTML entity code:** Use the Unicode hexadecimal code with the format `&#xXXXX;`, where `XXXX` is the character's hex code.

   **Example:**

   ```
   &amp;#x1F680; Rocket symbol

   ```

   Plain text

   Copy

   **Output:**  
   🚀 Rocket symbol

### Common Unicode characters

Here are some frequently used Unicode characters:

| Character | Description | Unicode (Hex) | HTML entity code |
| --- | --- | --- | --- |
| ★ | Star symbol | 2605 | `&#x2605;` |
| ✔ | Check mark | 2714 | `&#x2714;` |
| ✉ | Envelope | 2709 | `&#x2709;` |
| © | Copyright | 00A9 | `&#x00A9;` |
| € | Euro sign | 20AC | `&#x20AC;` |
| → | Right arrow | 2192 | `&#x2192;` |
| ♻ | Recycling symbol | 267B | `&#x267B;` |

#### Finding more Unicode characters

For an extensive list of Unicode characters and their corresponding codes, refer to the following resources:

* [Unicode Character Table](https://unicode-table.com/)
* [Unicode.org Code Charts](https://www.unicode.org/charts/)

Copy the character you need and paste it into your Markdown document, or use its HTML entity code for precise control.

---

## Example: Creating a simple article

Let’s bring it all together with an example.

```
#### Welcome to Markdown  
Learn how to use **Markdown** in Document360 to format your articles.  

#### Why use Markdown?  
* Easy to learn  
* Clean and organized formatting  
* Saves time  

#### Useful tips  
1. Use headings to structure your content.  
2. Add links for more resources: [Learn Markdown](https://markdownguide.org)  
3. Use `***` to create a divider.  

```

Plain text

Copy

### Output

#### Welcome to Markdown

Learn how to use **Markdown** in Document360 to format your articles.

#### Why use Markdown?

* Easy to learn
* Clean and organized formatting
* Saves time

#### Useful tips

1. Use headings to structure your content.
2. Add links for more resources: [Learn Markdown](https://markdownguide.org)
3. Use `***` to create a divider.

---

For more advanced Markdown syntax commands, refer to the official [Markdown syntax guide](https://www.markdownguide.org/basic-syntax/). With these tips, you’ll be formatting your articles like a pro in no time!

Tags in Document360 used to structure subheadings in an article. H1 is automatically applied to article titles and cannot be used in the editor. H2, H3, and H4 are available for creating subheadings, with each level displaying progressively smaller text.

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

<a id="wysiwyg-editor"></a>

## WYSIWYG editor

**Plans supporting the use of WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **WYSIWYG (What You See Is What You Get)** editor, also known as the HTML editor, is one of three editing options in Document360. It allows users to view content as it will appear on published articles or category pages within the Knowledge base site.

> NOTE
>
> You cannot switch from the WYSIWYG editor to the Markdown editor. Once articles are converted from Markdown to WYSIWYG, they cannot be reverted. However, switching from Markdown to WYSIWYG is possible.

---

## WYSIWYG toolbar

The WYSIWYG toolbar offers various options to edit and format your text including the option to insert media files as well. The different toolbar sections and their uses are shown and elaborated below.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-WYSIWYG_Editor(1).png)

### 1. Heading options

The below heading options are available:

Normal

## Heading 2

### Heading 3

#### Heading 4

### 2. Text formatting

The below text styling options are available:

* **Bold**: To Bold the text
* *Italic*: To Italicize the text
* Underline: To Underline the text
* ~~Strikethrough~~: To Strikethrough the text
* **More text**: Provides options to update font size, font family, text color, background color, subscript, superscript, and clear formatting.

### 3. Paragraph formatting

The below paragraph formatting options are available:

* **Unordered list**: Make a list denoted with the following symbols: •, ○, ◘. **Disc** and **Default** symbols are the same.
* **Ordered list**: Make a list denoted with numbering for each item. You can use numbers, alphabets, Roman numerals, and Greek numerals. Default refers to numbers.
* **More paragraph**: To update alignment, line height of paragraphs, indentations, and quote text.

### 4. Insert options

* **Insert link**: Add a hyperlink from a provided URL or Knowledge base article to the selected text. This is useful for referencing additional information.
* **Insert codeblock**: Add a codeblock to your article, such as a JavaScript snippet.
* **Insert image**: Insert an image from the URL, local storage, or Drive. For example, you can add a screenshot of the user interface. You can also use (Ctrl+p) to perform this action.
* **Insert file**: Add a {{glossary.File}} from the Drive, such as a Word or PDF file.
* **Insert callouts**: Add editable info boxes in blue, yellow, and red for additional, important, and essential information, respectively.
* **Private notes**: Insert an editable internal comment box visible only to logged-in team members for internal feedback.
* **Insert LaTeX**: Add mathematical expressions and equations using LaTeX syntax.

  + To add, click the **Insert LaTeX** option and an **Insert latex expression** window appears. Type in your desired LaTeX syntax and click **Insert**. For more information, [read this article](http://docs.mathjax.org/en/latest/input/tex/macros/index.html).
  + To edit, click the Edit (Pencil) icon on the expression. An **Insert latex expression** window appears. Make the required changes in the syntax and click **Update**.
  + To delete, click the Remove (Trashbin) icon.
* **Find & replace**: Search for and replace text within your article, useful in long articles.
* **Content reuse**: Reuse content across the project with:

  + **Variable**: For text content.
  + **Snippet**: For text, images, tables, code blocks, etc.
* **Glossary**:  Maintain a list of terms and their definitions within the Knowledge base.

### **5. More rich**

* **Insert video**: Embed videos from platforms like YouTube, Wistia, Streams, or Vimeo.
* **Insert table**: Add a table by selecting the desired number of rows and columns.
* **Insert horizontal line**: Add a line in the article.
* **Emoticons**: Insert emoticons to enhance the article's engagement.

### 6. Other options

Additional features include:

* **Code view**: Switch to HTML syntax editor.
* **Undo**: Undo the previous action.
* **Redo**: Repeat the previous action.

### 7. Editor switch

* The switch editor toggle comes in use if you want to convert your article to the Advanced WYSIWYG editor.
* Click the toggle and click **Switch to New Editor** and the article will be converted to Advanced WYSIWYG editor.
* For steps and guidance on using the Advanced WYSIWYG editor, refer to the article on [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-overview).

### Additional formatting options

### 1. Image

Once an image is added to an article, you can access the below options by clicking on the image:

a. **Replace**: To replace the image.  
b. **Align**: Add an image caption to align the image.  
c. **Image caption**. This will appear at the bottom of the image.  
d. **Remove**: To remove the image.  
e. **Insert link**: To add a link to the image. After adding the link, you can open, remove, and edit the link.  
f. **Display**: To change the display of the image. You can use Inline or Break Text options.  
g. **Style**: To change the border style of the image. You can use Rounded, Bordered, and Shadow options.  
h. **Alternative text**: To add alternative text for the image. If the image file cannot be loaded, the alternative text will appear in a blank box where the image will appear.  
i. **Change size**: Adjust the width and height of the image as pixels. Click update to confirm.  
j. **Advanced edit**: To edit your image, use advanced tools such as **Crop** for resizing, **Text** options to adjust **bold**, **italic**, **underline**, **color**, and **size**, and **Rotate** to adjust orientation. You can also **Zoom in** or **Zoom out** for detailed editing, use the **Hand** tool for navigation, and access **History** for previous states. Use **Undo** and **Redo** to reverse or repeat actions, **Reset** to return to the original image, **Delete** to remove specific edits, or **Delete all** to clear everything. When finished, click **Save** to apply and store your changes.

### 2. Video

Once you embed a video in an article, you can access the below options by clicking on the left or right of the video in the editor pane:

a. **Replace**: To replace the video.  
b. **Remove**: To remove the video.  
c. **Display**: To change the display of the video. You can use Inline or Break Text options.  
d. **Align**: To align the video.  
e. **Change size**: To change the size of the video.  
f. **Autoplay**: To turn the autoplay option on or off.

### 3. PDF

Once a PDF file is added to an article, you can access the below options by clicking on the left or right side near the PDF file in the editor pane:

a. **Remove**: To remove the PDF file.  
b. **Change size**: To change the size of the PDF file.

### 4. Word file

Once a Word file is added to an article, you can access the below options by clicking on the Word file:

a. **Open link**: Download the word file to the local system drive.  
b. **Remove**: To remove the Word file.

### 5. Table

Once a table is added to an article, you can access the below options by clicking on the table:

a. **Table header**: Turn the table header on or off. Click on this button, and the top row appears on the table.

b. **Remove table**: To remove the table. Click on this button, and the table and the content will be deleted. If you have accidentally clicked on the remove, you can always use the Undo action (Ctrl + Z) to restore the table.

c. **Row**: Place the cursor in any cell of the intended row and click 'Insert row above' or 'Insert row below' to add rows to the table. Click on the 'Delete row' to remove the current row.

d. **Column**: Place the cursor in any cell of the intended column and click 'Insert column above' or 'Insert column below' to add columns to the table. Click on the 'Delete column' to remove the current column.

e. **Table style**: To change the table style. You can use **Dashed Borders** and **Alternate Rows** options. The alternate rows option would distinguish the row color.

f. **Cell**: Click on this button and select the action to merge or split cells. You can split a cell vertically or horizontally any number of times. The merge option would be enabled only when you select more than one cell horizontally or vertically.

g. **Cell background**: To change the cell's background color. You can select from the color palette available or enter the HEX code.

h. **Vertical align**: To change the vertical alignment of the content in the cell. You can do this for a single cell or multiple selections of cells. If the cell height is bigger than the content fit, then you can choose to align the content at the top, middle, or bottom of the cell.

i. **Horizontal align**: To change the horizontal alignment of the content in the cell. You can do this for a single cell or multiple selections of cells. If the cell width is bigger than the content fit, you can align the content at the left, center, right, or justified style.

j. **Cell style**: To change the type of the cell border. You can use the options **Highlighted** (changes the cell border color) and **Thick** (increases the cell border thickness) of the selected cell.

---

## When, Where, and Why to Use the WYSIWYG Editor

#### Who can use the WYSIWYG editor?

Document360 users who are comfortable with HTML editors

#### Is the WYSIWYG editor easy to use?

Using the WYSIWYG editor will feel similar to using a word-processing application

> **For example**, Microsoft Word, Google Docs, etc.

You can copy and paste content directly from a Word document or any other source. No special syntax is required.

#### Why use the WYSIWYG editor?

* Unlike the Markdown editor, the WYSIWYG editor uses a single editing pane since the written content is already in preview mode.
* WYSIWYG editor provides a unique feature to paste large tables from a third-party site or another Knowledge base.

  ###

<a id="advanced-wysiwyg-editor"></a>

## Advanced WYSIWYG editor

**Plans supporting the use of Advanced WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The 'Advanced WYSIWYG editor' combines lightweight design with powerful, rich text editing capabilities, supporting specific Markdown syntax. It offers a highly visual and intuitive experience that surpasses traditional Markdown editors yet maintains more flexibility than the WYSIWYG editors.

> NOTE
>
> You can seamlessly switch between the Advanced WYSIWYG editor and the WYSIWYG editor when the article is in the **Draft/New** state. Document360 does not support this switching when the article is in the **Published** state.

> CAUTION
>
> The articles switched from the Markdown editor to the Advanced WYSIWYG editor cannot be reverted to the Markdown editor again.

---

## Using Advanced WYSIWYG editor

You can use the slash commands, toolbars, and specific Markdown syntax to create and edit content in the Advanced WYSIWYG editor.

### Slash commands

Type `/` in the editor, and a list of options appears. You can also search for the options by typing the command names. Click the desired command or press the Enter key to select the command.

> NOTE
>
> Ensure you type `/` at the start of a line or after a space. The options will not appear if you type it immediately after a character. You can navigate through each command and section in slash commands using the up, down, right, and left arrow keys.

You can also easily access **Eddy AI** right from the top of the slash menu. Additionally, the slash command options are categorized into three sections:

| **Format** | **Insert** | **Content Reuse** |
| --- | --- | --- |
| Heading 2 | Image | Variables |
| Heading 3 | Video | Snippets |
| Heading 4 | Link | Glossary |
| Ordered list | Table |  |
| Bullet list | Callouts |  |
| Checklist | Private notes |  |
| Inline code | Code block |  |
| Page break | Insert file |  |
|  | Accordion |  |
|  | Latex |  |
|  | Emoji |  |
|  | Divider |  |

![Updated_ScrenGIF-Slash_command_in_Adv_WYSIWYG](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_ScrenGIF-Slash_command_in_Adv_WYSIWYG.gif)

---

### Markdown syntax

The Advanced WYSIWYG editor supports a wide range of Markdown syntaxes; for a detailed list, read the article on [Markdown basics](/help/docs/markdown-basics).

> For example, if you want to add a Heading 2, type the following syntax: `## Heading of the section`. The syntax will be rendered and Heading 2 will be added instantly.

> NOTE
>
> The Markdown syntax will only work when you type it in manually. It will not be rendered when you copy and paste the syntax.
>
> To view the list of unsupported Markdown syntax, read the article on [Advanced WYSIWYG editor basics](/help/docs/Advanced-WYSIWYG-editor-basics#unsupported-markdown-syntax).

---

## Toolbar

The toolbar is categorized into three sections:

* **Format**: To change the layout or appearance of the content.
* **Insert**: To add elements such as images, videos, tables, and more.
* **Find & replace**: To search for a specific text and replace it with another text.

> NOTE
>
> By selecting the Pin () option, you can anchor the toolbar to the right side of the editor interface.

![1_Screenshot-General_view_of_toolbar_in advanced_WYSIWYG_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-General_view_of_toolbar_in%20advanced_WYSIWYG_editor.png)

### Format

![2_Screenshot-Format_seciton_toolbar](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Format_seciton_toolbar.png)

#### 1. Text styles

* **Undo** (): To reverse the last action.
* **Redo** (): To reapply the last undone action.

* **Clear** ( ): To remove all styling from selected text.
* **Lettercase** (): To change the letter case of the text.

#### 2. Headings

* : To apply the H2 (Heading 2) style to the selected text.
* : To apply the H3 (Heading 3) style to the selected text.
* : To apply the H4 (Heading 4) style to the selected text.
* **Paragraph** (): To apply the standard paragraph style to the selected text.

#### 3. Typography

* **Font family**: To select the typeface for the text.
* **Font size**: To adjust the size of selected text.

#### 4. Palette

* **Font color**: To change the color of the selected text.
* **Background color**: To set a background color for the selected text.

#### 5. Formatting & Lists

* **Bold** (): To bold the selected text.
* ***Italic*** (): To italicize the selected text.
* **Underline** (): To underline the selected text.
* **~~Strikethrough~~** (): To apply a strikethrough to the selected text.
* `Inline code` (): To add inline code to the text.
* **Align left** (): To align the text content with the left margin.
* **Center** (): To center your text content.
* **Align right** (): To align the text content with the right margin.
* **Justify** (): To distribute the text content evenly between the margins.
* **Bullet list** (): To add a list denoted with symbols for each item.
* **Ordered list** (): To add a list denoted with numbering for each item.
* **Checklist** (): To add a list denoted with checkboxes that users can mark as complete or incomplete.

#### 6. Controls

* **Increase indent** (): To move the content farther away from the margin.
* **Decrease indent** (): To move the content closer to the margin.
* **Subscript** (): To lower the text below the baseline.
* **Superscript** (): To raise the text above the baseline.
* **Line height** (): To choose the spacing between the lines.
* **Letter space** (): To change the spacing between the letters.
* **Line break** (): To switch to the next line.
* **Page break** (): To specify where to end the current page and begin the next page while exporting content as PDF.

---

### Insert

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1736939177920.png)

* **Image**: To insert an image.

> NOTE
>
> You can use the different tools available to format your added image. Click on the image, and the formatting tools appear as a floating menu. You can align, crop, add borders, add shadows, add captions, and more.

* **Video**: To insert a video.
* **Link**: To insert a hyperlink. You can also use the "Ctrl + k" keyboard shortcut.
* **Insert file**: To insert a file within the article.
* **Table**: To insert a table.
* **Divider**: To insert a horizontal line.
* **Accordion**: To add a container that can be expanded or collapsed to show or hide its content.
* **Callout**: To insert a callout. An info callout will be inserted when you click this option. To customize the callout, click within the callout, and you can find the following options in the contextual toolbar:

  + Callout info
  + Callout warning
  + Callout error
  + Callout success
  + Callout background color - To change the background color of the callout
  + Callout border color - To change the border color of the callout
  + Delete - To delete the callout
* **Private notes**: To insert private notes.
* **Code block**: To insert a block of code. Click within the code block, and you can find the following options in the contextual toolbar:

  + Language dropdown - Select the desired language
  + Copy - To copy the code block
  + Delete - To delete the code block
* **FAQs:** To insert the FAQ(s) templates.
* **Latex**: To insert mathematical equations and symbols.
* **Variable**: To insert a variable.
* **Snippet**: To insert a snippet.
* **Glossary**: To insert a glossary term.
* **Emoji**: To insert an emoji.

### Creating FAQs templates in Advanced WYSIWYG editor:

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. Click the **Insert (****)** icon and select **FAQs** from the dropdown.

   Three FAQ accordion templates will be inserted into your article.
3. In the inserted FAQs templates, you can perform the following options:

   1. Click the **Settings** () icon to customize the FAQ templates according to your preferences.
   2. Click the **Expand/Collapse** () icon to expand or collapse the FAQ accordions.
   3. Click the **Delete** () icon to remove the entire FAQ section.
   4. Click **Add question** ()in between the FAQs, to insert additional custom FAQs.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Advanced_WYSIWYG_Editor.gif)

> NOTE
>
> * FAQs templates is different from AI FAQ generator.
> * For more information, read the article [AI FAQ generator](/help/docs/ai-faq-generator).

#### Code view

* It allows you to view and edit the content in HTML code format.
* By switching to **Code view**, you can add custom HTML elements, apply inline styles, or make precise adjustments.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1736939256244.png)

> NOTE
>
> * You must click the Save button to save the changes made in the code view. `Ctrl/Cmd +S` will not work in code view.
> * Ordered and Unordered list misses out on sequential ordering.
> * Nested list types are not supported in the following scenarios:
>
>   + When the content is copied and pasted.
>   + In certain content migration scenarios.

---

### Adding an inline comment in Advanced WYSIWYG editor

1. Navigate to your desired article from the Knowledge base portal.
2. Select the desired text to add a comment, and a floating menu appears.
3. Click on the **Comment icon** (💬) from the floating menu.
4. Use basic formatting tools such as bold and lists, and by using **@** you can mention your project team members if needed.
5. Once done, click on the **Send** icon.

> NOTE
>
> To turn off this mode, navigate to the Knowledge base portal, Documentation ()> **Content tools** > **Workflow designer**. Hover over the desired status and click on the Edit (✎) icon and turn off the **Read only** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1736939279601.png)

**To view all the comments in an article:**

1. Navigate to the desired article.
2. Click on the **Comment icon** (💬) located on the right side near the publish button.
3. The Comments panel will appear. Use the dropdown at the top to filter the options, such as All comments, mentioned comments, open comments, and resolved comments.

Here, you can reply to the comments.

![6_Screenshot-View_all_the_comments_in_an_article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-View_all_the_comments_in_an_article.png)

> NOTE
>
> Only the user who created the inline comment can edit, resolve, or delete it.

---

### Formatting Choices for Pasting from Microsoft Word

You can choose to retain or clear formatting when pasting content from Microsoft Word, including elements like lists, tables, indentations, and fonts.

1. Click **Paste with formatting** to retain the content’s format from Microsoft Word.
2. Click **Paste as plain text** to clear the content’s format from Microsoft Word.

![Copy and pasting content from Microsoft Word](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-copy_pasting_from_Microsoft_word.png)

---

### FAQs

#### Is it possible to add a code block without any heading?

When using the Advanced WYSIWYG editor, it is not possible to add a code block without a name/heading. However, if you wish to hide the name of a code block, you can use Custom CSS code in the **Custom CSS & JavaScript** settings. Also, note that this change will apply to all the code blocks on your Knowledge base site.

To add a code block without a name/heading, you can use the Markdown editor.

#### How can I add spaces in LaTex formulas?

To insert spaces in LaTeX formulas, use `\;` (a backslash followed by a semicolon) between terms.

**Example:**  
`Area = length\;*\;width`

**Output:**

#### How can I add numbering to my content in the Advanced WYSIWYG editor?

You can add numbering to your content in three ways:

1. **Type and Press:** Type `1.` and press `space` to start numbering.
2. **Keyboard shortcut:** Select the desired content and use the shortcut `Ctrl + Shift + 7` or `Ctrl + Shift + O`.
3. **Format menu:** Select the desired content, go to **Format** () and choose the **Numbered list** () icon.

   You can choose from various numbering styles, including Default (1, 2, etc.), Lower Alpha, Lower Greek, Lower Roman, Upper Alpha, and Upper Roman.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="advanced-wysiwyg-editor-basics"></a>

## Advanced WYSIWYG editor basics

**Plans supporting the use of Advanced WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Keyboard shortcuts overview

To view the important keyboard shortcuts overview, follow these steps:

1. Navigate to the desired article on the Advanced WYSIWYG editor from the Knowledge base portal.
2. On the top-right corner click the **More** icon (•••) next to the **Publish** button.
3. Click **Keyboard shortcuts** from the dropdown menu.

#### Windows view

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Keyboard_shortcuts_overview%281%29.png)

#### Mac view

![Updated_Portal_Screenshot-Mac_Keyboard_Screenshot](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Keyboard_shortcuts_overview_macos.png)

The following shortcuts can also be used in the Advanced WYSIWYG editor:

### General

| S. No. | Command | Windows | Mac |
| --- | --- | --- | --- |
| 1 | Copy | Ctrl + C | + C |
| 2 | Cut | Ctrl + X | + X |
| 3 | Paste | Ctrl + V | + V |
| 4 | Paste as plain text | Ctrl + Shift + V | + Shift + V |
| 5 | Undo | Ctrl + Z | + Z |
| 6 | Redo | Ctrl + Shift + Z | + Shift + Z |
| 7 | Add a line break | Shift + Enter | Shift + Enter |
| 8 | Insert link | Ctrl + K | + K |

### Text formatting

| S. No. | Command | Windows | Mac |
| --- | --- | --- | --- |
| 1 | Bold | Ctrl + B | + B |
| 2 | Italicize | Ctrl + I | + I |
| 3 | Underline | Ctrl + U | + U |
| 4 | Strikethrough | Ctrl + Shift + X | + Shift + X |
| 5 | Highlight | Ctrl + M | + M |
| 6 | Code | Ctrl + E | + E |

### Paragraph formatting

| S. No. | Command | Windows | Mac |
| --- | --- | --- | --- |
| 1 | Paragraph style | Ctrl + Alt + 0 | + Alt + 0 |
| 2 | Heading 1 | Ctrl + Alt + 1 | + Alt + 1 |
| 3 | Heading 2 | Ctrl + Alt + 2 | + Alt + 2 |
| 4 | Heading 3 | Ctrl + Alt + 3 | + Alt + 3 |
| 5 | Heading 4 | Ctrl + Alt + 4 | + Alt + 4 |
| 6 | Heading 5 | Ctrl + Alt + 5 | + Alt + 5 |
| 7 | Heading 6 | Ctrl + Alt + 6 | + Alt + 6 |
| 8 | Numbered list | Ctrl + Shift + 7 | + Shift + 7 |
| 9 | Bullet list | Ctrl + Shift + 8 | + Shift + 8 |
| 10 | Check list | Ctrl + Shift + 9 | + Shift + 9 |
| 11 | Blockquote | Ctrl + Shift + B | + Shift + B |
| 12 | Left align | Ctrl + Shift + L | + Shift + L |
| 13 | Center align | Ctrl + Shift + E | + Shift + E |
| 14 | Right align | Ctrl + Shift + R | + Shift + R |
| 15 | Justify | Ctrl + Shift + J | + Shift + J |
| 16 | Code block | Ctrl + Alt + C | + Alt + C |
| 17 | Subscript | Ctrl + , | + , |
| 18 | Superscript | Ctrl + . | + . |

### Text selection

| S. No. | Command | Windows | Mac |
| --- | --- | --- | --- |
| 1 | Complete article | Ctrl + A | + A |
| 2 | One character to the left | Ctrl + ← | + ← |
| 3 | One character to the right | Ctrl + → | + → |
| 4 | One line up | Ctrl + ↑ | + ↑ |
| 5 | One line down | Ctrl + ↓ | + ↓ |
| 6 | To the beginning of the article | Ctrl + Shift + Home | + Shift + Home |
| 7 | To the end of the article | Ctrl + Shift + End | + Shift + End |

---

## Typography

The following table shows the regular symbols/syntax list and its outcome in the Advanced WYSIWYG editor.

| S. No. | Name | Symbol/Syntax | Outcome |
| --- | --- | --- | --- |
| 1 | Em dash | -- | — |
| 2 | Ellipsis | ... | ... |
| 3 | Opening double quote | ' | ‘ |
| 4 | Closing double quote | ' | ’ |
| 5 | Left arrow | <- | ← |
| 6 | Right arrow | -> | → |
| 7 | copyright | (c) | © |
| 8 | Registered trademark | (r) | ® |
| 9 | Trademark | (tm) | ™ |
| 10 | Service mark | (sm) | ℠ |
| 11 | One half | 1/2 | ½ |
| 12 | One quarter | 1/4 | ¼ |
| 13 | Three quarters | 3/4 | ¼ |
| 14 | Plus minus | +/- | ± |
| 15 | Not equal | != | ≠ |
| 16 | Laquo | << | « |
| 17 | Raquo | >> | » |
| 18 | Multiplication | 2 \* 3 | 2×3 |
| 19 | Superscript two | ^2 | ² |
| 20 | Superscript three | ^3 | ³ |
| 21 | Indian rupee | (R) | ₹ |
| 22 | Dollar | (USD) | $ |
| 23 | Pound | (GBP) | £ |
| 24 | Australian dollar | (AUD) | A$ |
| 25 | Triple bar | === | ≡ |
| 26 | Approx | (approx) | ≈ |
| 27 | Greater than or equal to | >= | ≥ |
| 28 | Lesser than or equal to | <= | ≤ |
| 29 | Pi | (pi) | π |
| 30 | Euro | (e) | € |
| 31 | Equivalent | <==> | ⇔ |

---

## Unsupported markdown syntax

The Advanced WYSIWYG editor does not currently support the following markdown syntax:

**1. Tables**  
Markdown tables are not supported. For example, the following syntax will not render as a table:

```
| header | header |
| --- | --- |
| cell | cell |
| cell | cell |

```

Plain text

Copy

**2. Subscript**  
Subscript syntax is not supported directly in the editor. You will need to apply the subscript option manually using Format tools for it to appear correctly.

**3. Superscript**  
Superscript syntax is also not supported directly in the editor. You will need to apply the superscript option manually using Format tools for it to appear correctly.

<a id="movable-blocks-in-advanced-wysiwyg-editor"></a>

## Movable blocks in Advanced WYSIWYG editor

**Plans supporting the use of movable blocks**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

### **What are movable blocks?**

Movable blocks simplify editing in the Advanced WYSIWYG editor by allowing you to rearrange content sections. This feature provides more flexibility to organize your content and improve its structure efficiently.

> NOTE
>
> In the Advanced WYSIWYG editor, a block is a section of content that ends with a line break. The next piece of content that starts on a new line is considered a new block.

### Accessing movable blocks

By just clicking an arrow or a quick drag-and-drop action, you can position your content exactly how you envision it. Whether you’re shifting paragraphs or reorganizing entire sections, this flexibility allows you to craft your articles intuitively, enhancing your overall editing experience. Follow the below steps to access movable blocks.

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. Hover over the intended block within the editor.
3. On the left side of the block, you will see two icons: the settings () icon and the ellipsis () icon.
4. Click on the ellipsis () icon to manage the block’s position:

   * Move up: Click the up arrow () icon to move the block above the previous block.
   * Move down: Click the down arrow () icon to move the block below the next block.
   * Delete: Click on the delete () icon to remove the selected block. The following block will automatically move up the order.
5. Click the settings () icon to add new blocks:

   * Choose **Insert block above** to place a new block above the selected one.
   * Choose **Insert block below** to place a new block below the selected one.

> NOTE
>
> By holding the reorder icon () icon of a specific block, you can drag it to any desired location within the editor.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Movable_blocks_all_in_one.gif)

> NOTE
>
> * In the current implementation, dividers cannot be moved using Movable blocks.
> * The entire FAQ section is considered as a single block. Therefore, you cannot move individual FAQs within the Eddy AI generated FAQ section.

---

### FAQs

**How do I move a block to a specific location in the Advanced WYSIWYG editor?**

  

By holding the ellipsis () icon of a specific block, you can drag it to any desired location within the editor.

**Can I add new blocks between existing content sections?**

Yes, hover over the desired block and click the settings () icon. Then, choose **Insert block above** to place a new block above the selected one.

**What happens when I delete a block in the editor?**

When you delete a block, the following block automatically moves up the order. If you want to undo the deletion, use the `Ctrl+Z` shortcut to restore the content.

<a id="conditional-content-blocks"></a>

## Conditional content blocks in Advanced WYSIWYG editor

**Plans supporting the use of Conditional content blocks**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Conditional content blocks** provide a powerful way to tailor the user experience by showing or hiding specific content based on predefined conditions. Whether you want to target users based on parameters like IP address, country, device type, reader groups, workspace, or specific dates, conditional content blocks ensure that your readers only see what’s relevant to them.

This feature helps streamline content management for large, diverse audiences and improves user engagement by delivering personalized content.

> For instance, use conditional content to show region-specific pricing for customers in different countries or provide different support information based on whether the user is on a desktop or mobile device.

> NOTE
>
> * This feature is exclusively available for **KB site 2.0** projects.
> * When a condition is applied to a specific content block, it will not be indexed or retrieved by Eddy AI or in general search results.

---

## Set up **conditional content blocks**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Navigating_to_the_conditional_content_panel.png)

To set up conditional content blocks, follow the steps below:

1. Navigate to the desired article in the Advanced WYSIWYG editor within the Knowledge base portal.
2. Hover over the content block and click the **Settings** () icon on the left.
3. Select **Conditional Content**.

   The **Conditional content** panel will appear.
4. Turn on the **Enable** toggle to activate the conditional content.

   In the **Visibility** section, choose:

   * **Show**: To display content when the condition is met.
   * **Hide**: To hide content when the condition is met.
   > NOTE
   >
   > When you select **Show**, the content will be visible only to users who meet the condition. When you select **Hide**, the content will be hidden from users who meet the condition.
5. Use the **AND** operator when all conditions need to be met, and the **OR** operator if any single condition should trigger the visibility rule.
6. Click **+ Add** to create a new condition.
7. In the **Parameter** dropdown menu, select the desired parameter, such as country, date, device type, workspace, reader groups, IP address.
8. Enter the relevant value for each parameter:

| **Parameter** | **Conditions** | **Example 1** | **Example 2** |
| --- | --- | --- | --- |
| **Country** | Equals, Not equals, In, Not in | If condition is **Equals** and value is **India**, only readers from India will see the content. | If condition is **Not in** and value is **USA**, readers from all countries except the USA will see the content. |
| **Date** | After, Before, Between | If condition is **Before** and date is **October 1, 2024**, only readers accessing before that date will see the content. | If condition is **Between** and range is **September 1, 2024, to October 1, 2024**, the content will be visible during that time. |
| **Device** | Equals, Not equals, In, Not in | If condition is **Equals** and value is **Mobile**, only users on mobile devices will see the content. | If condition is **Not in** and value is **Desktop**, the content will be hidden from desktop users but visible on mobile/tablet. |
| **Workspace** | Equals, Not equals, In, Not in | If condition is **Equals** and value is **Marketing workspace**, only content in that workspace will be visible. | If condition is **Not in** and value is **Sales workspace**, the content will be hidden from users in the Sales workspace. |
| **Reader groups** | Equals, Not equals, In, Not in | If condition is **Equals** and value is **Admins**, only users in the Admin group will see the content. | If condition is **Not in** and value is **Editors**, the content will be hidden from editors but visible to other groups. |
| **IP address** | Equals, Not equals, Range, In, Not in | If condition is **Equals** and value is **192.168.1.1**, only users from that IP address will see the content. | If condition is **Range** and range is **192.168.1.1 to 192.168.1.100**, users within that IP range will see the content. |

> NOTE
>
> * **Workspace** parameter will appear only if you have multiple workspaces.
> * For parameters with conditions like **In** or **Not in**, you can select multiple values from the dropdown. For example, if the parameter is **Country**, condition is **In** or **Not in**, you can select multiple countries in the Value dropdown.

10. Once you have set the condition for your content, click **Save for reuse** to save the condition.

> NOTE
>
> The **Save for reuse** is especially useful in large knowledge bases where similar conditions apply across multiple articles. For instance, a **Country equals India** condition can be saved and reused for all India-specific content, saving time and effort.

11. Enter a name for your condition and click the () icon.
12. Click **Save** to apply the condition, which will then be reflected on the Knowledge base site.
13. Click **Save as** to save the condition for future use, enter the condition name and click the () icon.
14. To remove a condition, click **Remove Condition** within the selected block.
15. Once done, click **Apply**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Performing_Conditional_content.gif)

---

### FAQs

**What are conditional content blocks?**

Conditional content blocks allow you to display specific content only when certain conditions are met, based on parameters like IP address, country, device type, reader groups, workspace, or specific dates.

**Can I create multiple conditions for a single article?**

Yes, you can create up to 25 conditions per article.

**Will the conditions remain intact if I move an article to a different workspace?**

Yes, the conditions will move along with the article to the new workspace.

**Can I edit conditions after publishing?**

To edit content conditions after publishing, fork the published article version. Once forked, you can modify the conditions as needed.

**If an article is translated into multiple languages, does conditional content apply to all languages?**

Yes, the conditions set on a content block will apply across all translated versions of the article. However, if different visibility rules are needed for different languages, you will need to apply conditions specifically for each translation.

**What happens if no conditions are met?**

If no conditions are met, the content block will behave according to the default visibility rules. By default, the block will be visible to all users unless explicitly set to **Hide** for all conditions.

**If I change the project type from Private to Public, what happens to the conditions?**

If your project type changes from **Private to Public**, any conditions using parameters like **IP address** or **Reader groups** (which are only applicable in private/mixed projects) will be automatically disabled, and those parameters will no longer be available for selection.

**What happens to conditional content if I clone a article?**

If you clone a article that contains conditional content blocks, all the conditions will be copied over as they are. You can then edit the conditions in the duplicated article if needed.

**Can I apply multiple "Or" conditions?**

Yes, you can apply multiple **OR** conditions. For example, if you want to show content to users in either **India** or **USA**, you can set the condition **Country equals India OR Country equals USA**. The content will be visible to users from either country.

**Can conditions be time-bound?**

Yes, conditions can be time-bound by using the **Date** parameter. For example, if you want content to be visible only between specific dates, you can set the condition **Date between Dec 1, 2024, and Dec 10, 2024**. The content will automatically stop being visible after Dec 10, 2024.

**What happens if I delete a reader group that is part of a condition?**

If a reader group that is part of a conditional content block is deleted, the condition associated with that group will no longer be applied.

**Can I apply conditions based on the user's session (e.g., logged-in vs. logged-out users)?**

At this time, conditional content does not apply directly to user session status (logged-in or logged-out).

**If I move an article with conditional content between workspaces, do the conditions still apply?**

Yes, the conditional content blocks and their conditions will move along with the article when it is transferred between workspaces. However, you should verify that the conditions are still relevant in the new workspace.

**How do conditions affect articles that have multiple versions (e.g., published and draft versions)?**

Conditional content settings are version-specific. If you fork an article to create a new version, the conditions set in the original version will carry over to the new version. You can then edit the conditions in the new version as needed.

**Is there a limit to the number of conditions I can apply to a single block?**

Yes, you can apply up to 25 conditions per article. However, for performance and clarity, it is recommended to limit the number of complex conditions to ensure that content loads efficiently and is easy to manage.

<a id="tables-in-advanced-wysiwyg-editor"></a>

## Tables in Advanced WYSIWYG editor

**Plans supporting the use of Advanced WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Tables are an essential tool for organizing and presenting data in a clear, structured format. Whether you're comparing features, listing options, or summarizing information, tables enhance content readability and make complex data easier to understand.

The Advanced WYSIWYG editor offers a range of powerful table formatting and management features designed to help you easily create visually appealing and functional tables. From adding rows and columns to customizing cell colors and implementing advanced table styles, these features help you create tables that meet your specific needs.

In this article, we will explore the various table-related tools available in the Advanced WYSIWYG editor, providing you the steps to create, format, and manage tables.

## Creating a table

There are two methods for creating a table. You can use the

* **Slash (/) command**
* **Insert option** in the **Format menu**

### Slash (/) command

To insert a table using the slash command, type the slash command **(/table)** anywhere in the editor, and hit **Enter**. This inserts a **3X3** table in the editor at the text cursor’s location.

> NOTE
>
> Inserting a table using the **slash** (/) command will always insert a 3X3 table with a header row by default. You can insert more rows and columns as per your requirement.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Insert_table_using_slash_command.gif)

### Insert option in the Format menu

To insert a table using the Format menu,

1. Click the **Insert** option in the Format menu on the right side of the editor to open the Insert menu.
2. From the Insert menu, click on the **Table** option.
3. Clicking the Table option opens the **Insert table** grid. Select the desired table size from the grid to insert the table in the editor.

> NOTE
>
> The maximum table size you can create from the Format menu is a **10X10** table. You can add additional rows/columns manually.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Insert_table_using_format_menu.gif)

## Formatting table content

### Inserting or deleting rows/columns

To insert a row, select an entire row. In the menu that appears upon selecting the row, click **Insert row above/Insert row below** based on your requirement. Similarly, to insert a column, select an entire column. In the menu that appears upon selecting the column, click **Insert column left/Insert column right** based on your requirement.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Insert_row_in_tables.png)

Select the entire row, then click **Delete row** in the menu. You can delete a column using the same steps after selecting a column.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Insert_column_in_tables.png)

### Merging cells

To merge cells, select multiple cells in the table. After selecting multiple cells, click **Merge cells** in the menu. Once you click the **Merge cells** option, the selected cells will be combined together into one cell.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Merge_cells_in_tables.png)

### Cell alignment

To align text within a cell, select one or more cells, and select the alignment option that appears in the menu. There are two alignment options available: **Vertical align** and **Horizontal align**.

#### Vertical align

If you select the **Vertical align** option, you can align the text to either the **Top**, **Middle**, or **Bottom** of the cell.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Vertical_alignment_in_tables.png)

#### Horizontal align

If you select the **Horizontal align** option, there are four options available: **Left**, **Center**, **Right**, and **Justify**. If you select either **Left**, **Center**, or **Right**, the text will be aligned accordingly. If you select **Justify**, the text will be aligned to the left, while the text will be equally spaced to cover the entire width of the cell.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Horizontal_alignment_in_tables.png)

### Fit table to page width

To fit a table to the page width, select the table. In the menu that appears upon selecting the table, click the **Fit to page width** option. This will automatically adjust the table to span the full width of the page, ensuring the content within the table is evenly distributed across the available space.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_Screenshot-Fit_table_to_page_width.png)

---

## Customizing table appearance

### Changing background

1. To change the cell background color, select one or more cells.
2. In the menu that appears, click the **Background color** option.
3. Select the desired color from the displayed color palette.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Background_color_in_tables.png)

> PRO TIP
>
> Once you make updates to the background color in tables, check the article preview in dark mode to verify the table’s visibility.

### Changing border

#### Border color

1. To change the cell border color, select one or more cells.
2. In the menu that appears, click the **Border color** option.
3. Select the desired color from the displayed color palette.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Border_color_in_tables.png)

#### Border style

1. To change the border style, select the entire table.
2. In the menu that appears, click the **Border style** option.
3. Choose your preferred border style: **Solid**, **Dashed**, or **Dotted**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Border_style_in_tables.png)

### Header rows

The top row is a header row by default when you insert a table in the Advanced WYSIWYG editor. The header row is indicated with the grey background.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-Header_row_in_tables.png)

* If you want to hide the header row, select the entire table and click the **Hide table header** option.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Hide_header_row_in_tables.png)
* If you have hidden the header row and wish to show it again, select the entire table and click the **Show table header** option.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-Show_header_row_in_tables.png)

### Alternate row style

To customize your tables even further, you can choose to have banded rows. If you implement this option, the color of your rows will alternate between white and light gray.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-Banded_rows_in_tables.png)

1. To implement this customization, select the entire table.
2. In the menu that appears, click the **Alternate row style** option.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_Screenshot-Alternate_rows_in_tables.png)

> PRO TIP
>
> You can customize your tables even further using **CSS code snippets**. To learn more, visit the [**Table Style**](https://docs.document360.com/docs/table-style) article.

---

### FAQs

#### **How do I copy the entire table?**

To copy the table, select the entire table and click the **Copy** option that appears in the menu.

#### **How do I delete the entire table?**

To delete a table: Select the table by clicking the top-left corner. Then, choose **Delete** from the menu that appears.

#### **Can I use automatic number in a table?**

While numbered lists are possible within a cell, you cannot apply automatic number for rows in a table.

#### **Can I add symbols or icons in a table?**

Yes, you can add symbols and icons in a table. For in-built symbols/icons, you can them directly from the **Format** menu. Symbols and icons from external sources can be added using **HTML**. To add symbols/icons in HTML,

1. Switch to **Code view** within the editor.
2. Place the text cursor in the desired location.
3. Paste the HTML code for the required symbol/icon.

Now, the symbol/icon should be visible within the table in the editor.

#### **Will slash commands work inside a table?**

Yes, all the slash commands will work inside a table.

#### Can I paste tables from Microsoft Word or Excel?

Document360 supports pasting tables from Microsoft Word and the web application of Microsoft Excel directly in the editor while retaining their structure.

At this time, pasting tables from the desktop application of Microsoft Excel is not supported. If you need to insert a table from Excel, we recommend using the web application, while will allow you to directly paste the table in Document360 without loss of formatting.

<a id="image-formatting-in-the-advanced-wysiwyg-editor"></a>

## Image formatting in the Advanced WYSIWYG editor

**Plans supporting formatting images in the Advanced WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Unlike the Markdown editor, the Advanced WYSIWYG editor offers different image formatting options. You can access the image formatting options when you click an image you wish to edit.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-floating_menu_in_image.png)

Click on the image, and you’ll have a floating menu with the following features to edit the selected image:

1. **Align**

   There are three common alignment options available for images:

   * **Align Left** ()**:** Aligns the image to the left side of the content.
   * **Center** ()**:** Centers the image within the content.
   * **Align Right** ()**:** Aligns the image to the right side of the content.
2. **Inline left** (), **Inline block** (), and **Inline right** ():

   When you select an inline display option, the image aligns side by side with the text. The alignment (left or right) places the image on the corresponding side of the text, while the inline block option keeps the image within the text flow without disrupting the layout.
3. **Image caption** ():

   You can add a caption to your image, which will appear at the bottom of the image. This is useful for providing additional context or descriptions.
4. **Alt text** ()**:**

   Also known as alt tags or alt descriptions, alt text is the written copy that appears in place of an image if it fails to load on a user's screen.

   Enter the alternative text for the image and click the () icon to save it.
5. **Hyperlinking images** ()**:**

   Click on the link icon to add hyperlinks to your images. Paste the URL and select the **Open in a new tab** box below if you want the link to be opened in a **new tab** and click **Insert**. After linking your image, three new options will appear in the formatting tray:

   * **Open Link:** Opens the link in a new tab.
   * **Edit Link:** Edits the attached link.
   * **Unlink:** Removes the link from the image.
6. Click on the [**Advanced edit**](/help/docs/image-formatting-in-the-advanced-wysiwyg-editor#advanced-editing-options-for-images) () icon to edit your image such as resize, crop, etc.,
7. **Style** ():

   There are three styling options available for images:

   * **Rounded:** The image appears as a rounded rectangle with blunt corners.
   * **Bordered:** A light gray border is added to the image.
   * **Shadow:** The image casts a visible drop shadow effect.
8. **Resize** (): You can customize the width and height of the image.
9. **Replace** (): Click the **Replace** icon to switch the current image with another using any of the three insert image methods.
10. **Copy** (): Click the **Copy** icon to copy the selected image for use elsewhere in the article.
11. **Delete** (): Click the **Delete** icon to remove the selected image from the article.

### Advanced editing options for images

![Editing images in the Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Editing_an_image(top_bottom).png)

### **1. Top menu options**

![Editing images in the Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-top_menu_over_view.png)

1. **Zoom In/Zoom Out:** Click **Zoom In** or **Zoom Out** to adjust the image size.
2. **Hand:** Click the **Hand** icon to move the image while editing.
3. **History:** Click **History** to view the edit history of the image.
4. **Undo:** Click **Undo** to revert the most recent action.
5. **Redo:** Click **Redo** to reapply the previously undone action.
6. **Reset:** Click **Reset** to return the image to its original state, removing all edits.
7. **Delete:** Select any edited element (e.g., circle, shape) and click **Delete** to remove that particular element.
8. **Delete All:** Click **Delete All** to remove all the edited elements from the image.

---

### **2. Bottom menu options**

![Editing images in the Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-bottom_menu_over_view.png)

1. **Resize:** Click **Resize** to adjust the width and height of the image, and lock aspect ratio. Once done, click **Apply**.
2. **Crop:** Click **Crop** to choose a cropping option such as Custom, Square, etc. Once done, click **Apply**.
3. **Flip:** Click **Flip** to select either horizontal or vertical flip. Use **Reset** to revert to the original image.
4. **Rotate:** Click **Rotate** to rotate the image between 0° to 360° (custom range available).
5. **Draw:** Click **Draw** to add lines or shapes. Options include:

   * **Free Draw:** Allows custom drawing.
   * **Straight:** Draw straight lines.
   * **Color:** Select the desired color for the drawing.
   * **Range Slider:** Adjusts the thickness of the drawing line.
6. **Shape:** Click **Shapes** to insert shapes like rectangles, circles, or triangles. Options include:

   * **Fill Color:** Choose a color to fill the shape.
   * **Stroke:** Select the outline color for the shape. You can also adjust the thickness using custom **Stroke** range slider.
7. **Icon:** Click **Icons** to add icons such as arrows, location markers, polygons, etc. You can also upload a custom icon from local storage. Adjust the icon color as needed.
8. **Text:** Click **Add** text to the image with formatting options (bold, italic, underline, alignment, color, text size).
9. **Filter:** Click **Filter** adjust image parameters such as grayscale, blur, brightness, sepia, contrast, etc., Once done, click **Save**.

---

### FAQs

**What image formatting options are available in the Advanced WYSIWYG editor?**

The Advanced WYSIWYG editor offers options such as alignment, inline display, image captions, alt text, hyperlinking, advanced edit options, styling, resizing, replacing, copying, and deleting images.

**How can I align an image in the Advanced WYSIWYG editor?**

You can align an image to the left, center, or right by selecting the corresponding alignment option from the floating menu after clicking on the image.

**Can I add a caption to my image?**

Yes, in the advanced WYSIWYG editor, you can add a caption to your image, which will appear at the bottom of the image for additional context or descriptions.

**Is it possible to hyperlink an image?**

Yes, you can hyperlink an image by clicking the link () icon, pasting the URL, and choosing to open the link in a new tab if desired.

<a id="tabs-in-the-advanced-wysiwyg-editor"></a>

## Tabs in the Advanced WYSIWYG editor

**Plans supporting Tabs in the Advanced WYSIWYG editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Tabs** feature in the Advanced WYSIWYG Editor helps writers organize related content into separate tabs within a single article. This helps to present lengthy or complex information in a clear and structured way. Readers can quickly find the content they need without scrolling through long pages, improving their experience.

---

## Creating tabs

### Adding tabs using the Insert option

To create tabs in your article,

1. Open the **Advanced WYSIWYG editor**.
2. Access the **Insert** option from either the **floating menu** or by using the **slash (/)** **command**.
3. Select **Tabs** from the available options.
4. A default tab structure with two tabs will appear in your article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Adding_new_tab_block.gif)

### Adding additional tabs

To add additional tabs in an existing tab structure,

1. Hover over the tab bar and click the **+ button** to add a new tab.
2. Enter a title for the new tab (up to 50 characters).
3. Repeat as needed to create multiple tabs.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Adding_additional_tabs.gif)

> NOTE
>
> * The tabs feature requires a minimum of two tabs to function.
> * A maximum of 10 tabs can be created within a single tab structure.

### Supported elements inside tabs

You can add the following elements to your tab content,

* **Text formatting**: Use headings (H2, H3, H4), bullet lists, numbered lists, and checklists.
* **Images and videos**: Insert, resize, and manage images or videos.
* **Tables**: Add and customize rows and columns.
* **Hyperlinks**: Insert and format links for easy navigation.
* **Callouts and private notes**: Add callouts or private notes that are visible only to specific users.
* **Code blocks and inline code**: Display code snippets or inline code for technical references.
* **Variables and snippets**: Reuse content across tabs using snippets and variables.
* **Glossary terms**: Add terms with definitions visible on hover or click.
* **Other enhancements**: Use emojis, dividers, accordions, and LaTeX equations.

---

## Editing tabs

### Duplicating tabs

To duplicate a tab,

1. Click the **Edit ()** icon next to the tab name.
2. Click the **Duplicate tab** option from the menu that appears.
3. A new tab will appear next to the original tab, with the same title, content, and color. You can edit the duplicated tab as needed.

### Changing tab names

To change the name of a tab,

1. Click the **Edit ()** icon next to the tab name.
2. Hover over the **Change tab name** option in the menu that appears.
3. Enter the new name (up to 50 characters) in the **Change tab name** field. The updated tab name will automatically reflect in the tab.

### Deleting tabs

To delete a tab,

1. Click the **Edit ()** icon next to the tab name.
2. Click the **Delete tab** option in the menu that appears.

Clicking this option will delete the tab immediately. Deleted tabs can be restored using the **Undo (Ctrl + Z)** option in the editor.

> NOTE
>
> If your content block contains only two tabs, you cannot delete either tab.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_GIF-Editing_tabs.gif)

---

## Customizing tabs

### Changing tab background and border color

To change the background/border color of a tab,

1. Select the tab content block to access the tab customization options.
2. Click **Tab background color** or **Tab border color** from the customization options.
3. Use the color picker to select a background or border color. You can choose from:

   * Preset colors
   * HEX values
   * RGB values

Click **Clear** in the color picked to remove any background or border color applied to the tab.

> NOTE
>
> The selected background or border color will be applied to the entire tab content block. It is not possible to apply different background or border colors to individual tabs.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_GIF-Customizing_tabs.gif)

### Moving tabs

To rearrange the order of tabs in your article,

1. Find the tab in the list of tabs under the **Tabs** section in the editor.
2. Hover over the **six-dot drag icon** to the left of the tab name.
3. Click on the drag icon, hold it down, and move the tab to your desired position.
4. Release the cursor to drop the tab in the new location.

#### Considerations when moving tabs

Keep the following tips in mind when working with multiple tabs to ensure smooth navigation and placement:

* **Scrolling while moving tabs:** If your list of tabs extends beyond the visible area, drag the tab toward the **dark grey area** near the **right or left arrow** to scroll and access hidden sections.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_GIF-Scrolling_while_moving_tabs.gif)

* **Moving a tab to the right:** Drag the tab until a **blue line** appears in the center of the target tab’s position. Dropping the tab here will replace the target tab, and the list will automatically realign.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_GIF-Moving_tabs_to_the_right.gif)

* **Moving a tab to the left:** Drag the tab until the **blue line** appears in the center of the tab **immediately to the left** of the desired position. This ensures the tab is placed correctly.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_GIF-Moving_tabs_to_the_left.gif)

* **Moving a tab to the first position:** To place a tab at the very beginning of the list, drag it near the first tab. Hold until a **blue line** appears on top of the first tab, then drop it.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_GIF-Moving_tabs_to_the_first_position.gif)

> NOTE
>
> For better control, drag tabs slowly and make small adjustments to avoid accidental replacements.

---

## Viewing tabs in the Knowledge base site

You can view tabs in the Knowledge base site exactly as they are configured in the editor:

* You can switch between tabs without needing to refresh the page.
* The tab colors, titles, and layouts will appear the same across the Knowledge base site, widgets, and extensions.
* Tabs work seamlessly on mobile devices, allowing you to switch between them just as you would on a computer.
* If you export an article with tabs as a PDF, the contents of the tabs will appear sequentially, and each tab's title will be displayed as a heading.

---

### FAQ

#### Can I create tabs within another tab?

No, nested tabs are not supported. You cannot create tabs inside other tabs. This ensures the layout and functionality of the editor remain consistent.

#### Can I include tab headings in the table of contents?

No, headings within tabs will not be included in the table of contents on the Knowledge base site.

#### Can I add page breaks inside a tab?

No, the page break option is disabled within tabs to preserve the layout and structure of the content.

#### Can I use tabs inside other editor components?

No, tabs cannot be created inside certain editor controls like tables, accordions, or callouts. This restriction ensures proper functionality and layout consistency.

<a id="categories-and-subcategories"></a>

## Categories and subcategories

In Document360, Category and Subcategory is essential for organizing and displaying articles on similar topics. They function as folders that group related content, offering a structured approach to knowledge management.

Imagine you manage a product support knowledge base for an e-commerce platform. You create a category called **Shipping Information** with subcategories like **Domestic shipping**, **International shipping**, **Shipping rates**, and **Delivery times**. This structure enables customers to easily find the exact information they need, reducing frustration and improving their overall experience.

![Document360 interface showing categories, articles, and their publication statuses for user guidance.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Catagory_n_subcategory_in_portal.png)

---

### FAQs

#### What are categories and subcategories in documentation?

Categories and subcategories are organizational structures in a knowledge base used to group related articles by topic. This makes it easier for users to navigate and find relevant information.

#### How do categories and subcategories differ?

Categories represent broad topics, while subcategories provide more specific divisions within those topics. Articles are hierarchically organized under subcategories, which are grouped under their respective parent categories.

#### Why do I need subcategories?

Subcategories help segment information into smaller, focused groups, enhancing understanding, accessibility, and navigation.

**Example:** If "Cars" is the main category, subcategories like "Sedan," "SUV," and "Convertible" allow users to quickly locate content specific to their interests.

#### Can I customize the categories and subcategories?

Yes, Document360 allows team accounts to create, edit, and delete categories and subcategories based on organizational needs. Customization options include changing icons for better visual appeal.

> NOTE
>
> For more information, read the article on Managing categories.

#### How can categories and subcategories improve knowledge base usability?

Logical groupings simplify browsing, enabling readers to find relevant information without sifting through unrelated content.

#### Can a single article belong to multiple categories or subcategories?

Yes, you can display an article in multiple categories or subcategories using the **Replicate** () option in Document360.

#### What is the best practice for naming categories and subcategories?

Use clear and descriptive names that reflect the content contained within each category or subcategory. Avoid jargon and aim for user-friendly naming conventions.

#### How should I organize my categories and subcategories for optimal user experience?

Structure categories and subcategories based on logical relationships and user needs. A tree-like format broad categories divided into specific subcategories works best.

**Example:** In the Document360 Knowledge base, categories and subcategories align with the sequential flow of features and menus in the portal.

#### Can I apply different access permissions to certain categories or subcategories?

Yes, Document360 supports role-based content access control, allowing restrictions on specific categories or subcategories. If no explicit restrictions are set, permissions inherit from parent categories.

#### Is it possible to reorder categories and subcategories after they are created?

Yes, Document360 lets you reorder categories and subcategories using the drag-and-drop () icon.

#### Why is the category/subcategory not visible on my Knowledge base site? How can I resolve this issue?

A category or subcategory might not appear on the site in the following scenarios:

* All articles within it are hidden or not published.
* The category/subcategory is empty, with no articles added.

Try the below steps if the category tree fails to load on the Knowledge base site:

* Check if JavaScript is enabled in your browser settings.
* Clear your browser cache and cookies to resolve potential caching issues.
* Ensure your browser is updated to the latest version.
* Test the category tree on a different browser or device to verify if the issue is browser-specific.

Organizes related articles under a common theme in the knowledge base.

A secondary category in Document360 used to organize and display groups of related articles. Subcategories act as folders within a primary category, helping structure similar topics for better organization and navigation.

<a id="managing-categories"></a>

## Managing categories

**Plans supporting management of categories**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Organizing content effectively is key to creating a user-friendly and efficient knowledge base. In Document360, categories and subcategories play a pivotal role in structuring your documentation. Whether you’re creating, renaming, deleting, or moving categories, Document360 provides a wide range of options to customize and manage them to meet your specific needs.

Managing categories helps to create and customize category icons to advanced tasks like cloning, reordering, and starring categories for quick access. With these features, you can ensure your knowledge base remains well-organized and accessible to your team and end users.

---

## Creating a category

In the Knowledge base portal, you can create a category using one of the following methods:

1. Method 1: Using the **Create** button on the top bar
2. Method 2: Using the **Flywheel** () icon
3. Method 3: Using the **More** () icon in the **Categories & Articles** section.
4. Method 4: Using the **Create** button in **Folder/Index** type category

![Document360 interface showing options to create  categories in a workspace.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Creating_a_categories.png)

Method 1

Method 2

Method 3

Method 4

To create a category using the **Create** button on the top bar:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Click the **Create**dropdown and select **Category**.

   The **Create new category** panel will appear.
3. Enter a **Name** for the new category.
4. In the **Nest category under** the dropdown, choose the category’s position (root level or inside an existing category).
5. Click **Reset** to create the category in Root level.
6. Choose the **Type** of category (Folder, Index, Page, or GitHub).
7. Click **Create**.

   A new category or subcategory is added.

To create a category using the **Flywheel** () icon:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over just below the desired category, and click the **Flywheel** () icon.
3. Click **Category**.

   The **Create new category** panel will appear.
4. Enter a **Name** for the new category.
5. In the **Nest category under** the dropdown, choose the category’s position (root level or inside an existing category).
6. Click **Reset** to create the category in Root level.
7. Choose the **Type** of category (Folder, Index, Page, or GitHub).
8. Click **Create**.

   A new category or subcategory is added.

To create a category or sub category using the **More** **(****)** icon in the **Categories & Articles**section:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category, and click the **More** () icon.

   The **Create new category** panel will appear.
3. Enter a **Name** for the new category.
4. In the **Nest category under** the dropdown, choose the category’s position (root level or inside an existing category).
5. Click **Reset** to create the category in Root level.
6. Choose the **Type** of category (Folder, Index, Page, or GitHub).
7. Click **Create**.

   A new category or subcategory is added.

To create a category using the **Create** button in a Folder/Index type category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Click the desired Folder/Index type category in the **Categories & Articles** section.
3. Click **Create** dropdown (on the right side of the category page) and select **Sub category**.

   The **Create new category** panel will appear.
4. Enter a **Name** for the new category.
5. In the **Nest category under** the dropdown, choose the category’s position (root level or inside an existing category).
6. Click **Reset** to create the category in Root level.
7. Choose the **Type** of category (Folder, Index, Page, or GitHub).
8. Click **Create**.

   A new category or subcategory is added.

![Creating a new category in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Creating_a_category_panel.png)

### Subcategories level

You can create up to **seven levels** of categories (1 root category + 6 subcategory levels). The **New category** option will be disabled for subcategories beyond this limit.

![4_Screenshot-Category_manager-Subcategory_levels](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Category_manager-Subcategory_levels.png)

> **NOTE**
>
> * When you have more subcategory levels, the user will find it challenging to navigate and discover the desired article without using the **Search** option.
> * You can structure the Knowledge base based on your requirement as Document360 facilitates content discoverability using tags, all-in-one search, related articles, internal linking, cloning articles, replicating or sharing one article in multiple categories, and the starred categories/articles feature.

> TIP
>
> Use up to three subcategory levels for optimal navigation. Two subcategory levels are ideal.

---

## Changing category icon

When you create a category or subcategory, a default folder icon is assigned. You can change this icon to an emoji to better convey the category’s purpose to your end-users.

1. Navigate to the **Documentation** () in the Knowledge base portal.
2. In the left navigation panel, click the folder icon or emoji adjacent to the desired category.

   An emoji pop-up window will appear. You can find an emoji by using the search bar, looking through the categories along the top, or using the color-tone icons next to the search bar.
3. Select your desired emoji to apply it.

> **NOTE**
>
> * To revert to the folder icon, click the 🚫 icon in the emoji pop-up window.
> * Emoji styles may vary depending on the browser.
> * You cannot update the category icon for **Page** type categories. Category icon can only be updated for **Folder** or **Index** type categories.

![Document360 interface showing how to change the category icon in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Changing_the_Category_icons.gif)

---

## Deleting a category

There are four ways to delete a category in the Knowledge base portal:

1. Method 1: Using the **More**() icon in the **Categories & Articles**section.
2. Method 2: Using the **More** () icon in the **Folder**/**Index** category.
3. Method 3: Deleting multiple articles/categories in the **Folder**/**Index** category.
4. Method 4: Deleting a specific article/sub category in the **Folder**/**Index** category.

![User interface showing options for managing delete options in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Deleting_Categories.png)

Method 1

Method 2

Method 3

Method 4

To delete a specific category from the **Categories & Articles**section:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category in the **Categories & Articles** section.
3. Click the **More** () icon and select **Delete** ().
4. Click **Yes** in the **Delete** confirmation panel.

To delete a specific Folder/Index type category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired Folder/Index category.
3. Click the **More** () icon and select **Delete** ().
4. Click **Yes** in the **Delete** confirmation panel.

To delete a multiple articles and sub categories within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles and subcategories.
4. Click **Delete** ().
5. Click **Yes** in the **Delete** confirmation panel.

To delete a specific article/sub category within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article/sub category.
4. Click the **More** () icon and select **Delete** ().
5. Click **Yes** in the **Delete** confirmation panel.

> **NOTE**
>
> When you delete a root-level category, all the subcategories and articles under that level will also be deleted. Deleted items will be available in the recycle bin for 30 days.

---

## Hiding and unhiding a category

In Document360, you can hide a category or subcategory within the documentation editor to restrict access to team accounts only. Hidden categories are indicated by a strikethrough in the categories list of the Documentation window.

> Suppose your documentation team is drafting a new feature guide that isn't ready for public release. You can temporarily hide the category while it's under review, ensuring that only internal team members can access it. Once finalized, you can unhide the category to make it publicly available.

There are four ways to hide a category in the Knowledge base portal:

1. Method 1: Using the **More** () icon in the **Categories & Articles**section.
2. Method 2: Using the **More**() icon in the **Folder**/**Index** category.
3. Method 3: Hiding/Unhiding multiple articles/categories in the **Folder**/**Index** category.
4. Method 4: Hiding/Unhiding a specific article/category in the **Folder**/**Index** category.

![User interface showing options for managing Hide options in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Hiding_Categories.png)

Method 1

Method 2

Method 3

Method 4

To hide/unhide a specific category from the **Categories & Articles**section:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category in the **Categories & Articles** section
3. Click the **More**() icon and select **Hide** ().

   To Unhide, click the **Unhide** () icon.

To hide/unhide a specific Folder/Index type category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired Folder/Index category.
3. Click the **More**() icon and select **Hide** ().

   To Unhide, click the **Unhide** () icon.

To hide/unhide multiple articles and sub categories within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles and subcategories.
4. Click **Hide** ().

   To Unhide, click the **Unhide** () icon.

To hide/unhide a specific article/sub category within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article/sub category.
4. Click the **More**() icon and select **Hide** ().

   To Unhide, click the **Unhide** () icon.

> **NOTE**
>
> When you hide a category or subcategory, all its subcategories and articles will also be hidden.

---

## Renaming a category

In Document360, you can rename categories and subcategories as many times as needed.

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired category or subcategory.
3. On the category page, click the **category name** to edit.

   Alternatively, hover over the desired category in the **Categories & Articles** section, click the **More** () icon, and select **Rename** to edit the category name.
4. Enter the new category name and click **Update**.

> **NOTE**
>
> Renaming the category or subcategory does not impact the category slug.

![Renaming a category in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_ScreenGIF-Renaming_a_category.gif)

---

## Moving a category

You can move a category or subcategory across workspaces. All subcategories and articles within the category will also be moved when you perform the **Move** operation.

There are five ways to move a category in the Knowledge base portal:

1. Method 1: Using the **drag and drop** () icon in the **Categories & Articles**section.
2. Method 2: Using the **More**() icon in the **Categories & Articles**section.
3. Method 3: Using the **More**() icon in the **Folder**/**Index** category.
4. Method 4: Moving multiple articles/categories in the **Folder**/**Index** category.
5. Method 5: Moving a specific article/category in the **Folder**/**Index** category.

![User interface showing options for managing Move options in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Moving_a_category.png)

Method 1

Method 2

Method 3

Method 4

Method 5

To move a category using the drag and drop () icon in the **Categories & Articles** section:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category.

   The drag and drop () icon will appear.
3. Hold and drag the category to the appropriate location.

> **NOTE**
>
> * You cannot move a root-level category into its subcategory.
> * Drag and drop () icon allows moving categories only within the same workspace.

From the **Categories & Articles**, you can move a category within or across workspaces:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category or subcategory in the left navigation pane.

   The **More** **(****)** icon will appear.
3. Click the **More** **(****)** icon and select the **Move** () icon.
4. In the **Move category** panel, perform the following:

   * **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   * **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   * **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

You can move a **Folder**/**Index** category using the **More** () option in it:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Click the **More**() icon and select the **Move** () icon.
4. In the **Move category** panel, perform the following:

   * **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   * **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   * **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

To move multiple articles/sub categories within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles and subcategories.
4. Click the **Move** () icon.

   In the **Move category** panel, perform the following:

   1. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   2. **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   3. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

To move a specific article/sub category within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article/sub category.

   The **More**() icon will appear.
4. Click the **More**() icon and Click the **Move** () icon.

   In the **Move category** panel, perform the following:

   1. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   2. **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   3. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

![Screenshot of Moving category in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Moving_a_category_panel.png)

---

## Cloning a category

Clone categories are exact copies of the content created as new articles. You can clone the categories within or across workspaces.

There are three ways to clone a category in the Knowledge base portal:

1. Method 1: Using the **More**() icon in the **Categories & Articles**section.
2. Method 2: Using the **More**() icon in the **Folder**/**Index** category.
3. Method 3: Cloning a specific article/sub category within a **Folder/Index** category.

![Document360 interface showing options to manage clone options in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Cloning_categories.png)

Method 1

Method 2

Method 3

From the **Categories & Articles**section, you can clone a category within or across workspaces:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category or subcategory in the left navigation pane.

   The **More** () icon will appear.
3. Click the **More** () icon and select the **Clone** () icon.
4. In the **Clone category** panel, perform the following:

   1. **Name**: Enter the name for the cloning category.
   2. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   3. **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   4. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Clone**.

You can clone a **Folder**/**Index** category using the **More** () option in it:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Click the **More** () icon and select the **Clone** () icon.
4. In the **Clone category** panel, perform the following:

   1. **Name**: Enter the name for the cloning category.
   2. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   3. **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   4. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

To move a specific article/sub category within a specific **Folder**/**Index** category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article/subcategory.

   The **More** () icon will appear.
4. Click the **More** () icon and select the **Clone** () icon.

   In the **Clone category** panel, perform the following:

   1. **Name**: Enter the name for the cloning category.
   2. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   3. **Category:** Select an existing category from the selected workspace. Click **Reset** to assign it under the root category.
   4. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Clone**.

![Cloning a category in Document360 with workspace and category options displayed.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Cloning_a_category_panel.png)

> NOTE
>
> Security restrictions will be applied based on the destination workspaces/categories.

---

## Starring a category

If you frequently use certain categories in your documentation, you can move them to **Starred** for quick and easy access. This feature functions like a favorites section and is available only in the **Knowledge base portal**.

> **NOTE**
>
> You can star categories, subcategories, and articles.

To add a category to **Starred**, follow these steps:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Select the desired category.
3. Click the **Starred** () icon next to the category title.

   Alternatively, hover over a subcategory in the **Folder/Index** overview and click the **Starred** () icon.
4. For a page category type, click the **Starred** () icon near the category title.

![Document360 interface showing how to add a star a category in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Starring_a_category.png)

You can remove a Starred categories in two ways:

Method 1: Direct removal

Method 2: Removing from the **Starred** () section

Method 1

Method 2

To remove a starred category directly from the categories, follow the steps below:

1. Navigate to the desired category or subcategory in the **Folder/Index** overview page.
2. Click the **Starred** () icon next to the category or subcategory title to unstar it.

To remove a Starred categories in the **Starred** () section:

1. Navigate to **Documentation** () > **Starred** () in the Knowledge base portal.

   The **Starred** () page will appear, displaying a list of starred categories.
2. Select the checkboxes next to the categories you want to remove.
3. Click the **Remove from starred** option.

![Document360 interface showing how to remove a star a category in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_ScreenGIF-removing_starred_categories.gif)

> **NOTE**
>
> When the category filter is applied to the starred items, you cannot view the article status for starred folders or index categories. This is because the starred articles are treated as independent items and are not associated with the category filter. However, only page categories will display the article status.

---

### FAQs

#### What types of categories can I create?

You can create categories of type Folder, Index, Page, or GitHub.

#### Is there a limit to the number of categories I can create?

Yes, you can create up to 1,000 categories per workspace.

#### Can I create subcategories under a main category?

Yes, you can create up to seven levels of categories, including one root category and six subcategory levels.

#### What is the character limit for the article or category title?

The character limit for article or category titles is 150, including spaces.

#### Can I change the category icon to an emoji?

Yes, you can change the icon for Folder or Index type categories or subcategories to an emoji.

#### Is there a way to remove the emoji and revert to the folder icon?

Yes, you can click the 🚫 icon in the emoji popup window to remove the emoji and revert to the folder icon.

#### Do emoji styles vary by browser?

Yes, some emoji styles may vary by browser.

#### What is the purpose of hiding a category in Document360?

Hiding a category restricts access to certain information, making it visible only to team accounts while keeping it hidden from the Knowledge base site.

#### How can I identify hidden categories in Document360?

Hidden categories are indicated by a strikethrough in the categories list in the **Documentation**() section.

#### Can I hide multiple subcategories at once?

Yes, in **Folder/Index** type categories, you can hide multiple subcategories under the same parent category simultaneously by selecting the desired subcategories and clicking **Hide** ().

#### Is it possible to hide a category after it has been published?

Yes, you can hide a category even after it has been published by navigating to the **Categories & Articles**section and selecting the **Hide** () option.

> **NOTE**
>
> When you hide a category or subcategory, all its subcategories and articles will also be hidden.

#### Can I move a category across workspaces?

Yes, you can move a category between workspaces.

#### Does moving a category also move its subcategories and articles?

Yes, moving a category will also move its subcategories and articles to the desired location.

#### Can I move a root-level category into its subcategory?

No, you cannot move the root-level category into its subcategory.

#### Are there any security restrictions when moving categories?

Yes, security restrictions will be applied based on the destination workspaces/categories.

#### What are cloned categories?

Cloned categories are exact copies of the content created as new articles.

#### Can I clone categories across different workspaces?

Yes, you can clone categories within or across workspaces.

#### Is it possible to create new categories or articles within a cloned category?

Yes, you can create new categories or articles within a cloned category.

#### Can I change the type of a cloned category after it has been created?

Can I change the type of a cloned category after it has been created?

#### What is the purpose of starring categories in the Knowledge base portal?

Starring categories allows you to easily access frequently used categories, similar to a favorites section.

#### Is it possible to remove multiple categories from 'Starred' at once?

Yes, you can remove multiple categories from 'Starred' at once from the Starred () page.

#### How long are deleted categories available in the recycle bin?

Deleted categories will be available in the recycle bin for 30 days.

#### Does renaming a category update its slug?

No, renaming a category or article does not automatically update its slug. You must manually update the slug if required.

#### What are some best practices for naming categories?

Best practices include clarity and simplicity, consistent formatting, reader-centric language, avoiding repetition, logical hierarchy, keyword optimization, avoiding abbreviations, considering scalability, and ensuring contextual relevance.

<a id="category-types"></a>

## Category types

**Plans supporting category types**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, **categories** and **subcategories** help organize and display groups of similar topic articles, acting as folders containing related content.

## Types of categories

here are three types of categories you can add to your knowledge base:

**1.** **Folder**  
**2.** **Index**  
**3.** **Page**

> NOTE
>
> You can choose the category type when creating a category and switch the category type at any time, as often as needed.

---

**Choosing a category type during category creation**

1. Navigate to the desired category, click the **More** (•••) icon and select **Add sub category**.

   The **Create new category** panel will appear.
2. Select the desired category type.
3. Click **Create.**

![ScreenGIF-Choosing a category type during category creation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScrenGIF-New_Choosing_a_category_type_during_category_creation.gif)

---

### 1. Folder

The **Folder** is the primary category type, acting as a simple container for articles and subcategories. The default folder icon can be customized with a wide range of icons. This category type does not have a seperate view point of link/URL to the category in the Knowledge base site.

The folder category page also allows you to perform bulk operations like Hide (), Unhide (), Delete (), Move (), and Add to starred () for articles within the category.

**Knowledge base portal view**  
![Screenshot of New Knowledge base portal view for folder category type](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-New_Knowledge_base_portal_view_%20for_folder_category_type.png)

### **2. Index**

The **Index** category type serves as an index to all articles within the folder.

**Knowledge base portal view**  
A URL is generated for this category type, which can be accessed and shared. The page lists articles with details such as title, contributors, last update date, status, and tags.

1. **Index category slug**: Each Index category has a unique slug. Like articles, you can share Index category links with end-users and apply redirection rules.
2. **Bulk operations**: The Index category page supports bulk operations like Hide (), Unhide (), Delete (), Move (), and Add to starred () for the articles.

![Screenshot of a Knowledge base portal view for index category type](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-New_Knowledge_base_portal_view_%20for_index_category_type.png)

**Knowledge base site view**  
When readers click on the Index category type, they get an overview of the articles within the category. The page includes:

1. Category title
2. Number of articles/categories in the category

![Screenshot of Knowledge base site for indx category type](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-New_Knowledge_base_site_view_%20for_index_category_type.png)

### 3. Page

The **Page** category type is similar to the articles you create under other categories in your project. You can create content, publish it, and perform all the same actions as you perform with a regular article.

You can write the page content using the editor (Markdown, WYSIWYG, or Advanced WYSIWYG), change the page title and slug, and perform all other actions available for a typical article in Document360.

**Knowledge base portal view**  
![Screenshot of Knowledge base portal for page category typ](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-New_Knowledge_base_portal_view_%20for_page_category_type.png)

**Knowledge base site view**  
![Screenshot of Knowledge base site for page category type](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-New_Knowledge_base_site_view_%20for_page_category_type.png)

---

### FAQ (s)

**What are the different category types available in Document360?**

There are three category types you can add to your knowledge base: Folder, Index, and Page.

**How do I change the category type?**

1. Navigate to the desired category in the Knowledge base portal.
2. Click on the **More (•••)** icon and select **Change type**.
3. Select the intended category type and click **Update**.

**Can I change the category type after it has been created?**

Yes, you can change the category type at any time as often as needed.

**What is the purpose of the Index category type?**

The Index category type serves as an index to all articles within the folder and generates a URL that can be accessed and shared.

**What happens if I change a page category to an index category? Will my content be erased?**

No, your content will not be erased. The category type will change to an index category, and if you switch it back to a page category, your content will be restored.

**Is there a URL associated with the Folder category type?**

No, the Folder category type does not have a separate viewpoint or link/URL to the category in the Knowledge base site.

**What operations can I perform on articles within a Folder category?**

You can perform bulk operations like Hide, Unhide, Delete, Move, and Add to starred for articles within the Folder category.

**What is the main difference between an article and a page category?**

The main difference is that within a Page category, you can create additional categories and articles, whereas in an article, you cannot.

<a id="assigning-drive-folder-for-a-category"></a>

## Mapping a category with a folder in Drive

**Plan support for mapping a category to a folder in Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is a 'Drive folder mapping'?

When a Contributor upload images in the article on the Editor from their local storage or URL, the image would automatically be placed in the designated Drive folder for the article's category/subcategory.

---

## Associating a Drive folder to a category

1. Navigate to Documentation () in the Knowledge base portal.
2. Hover over the desired category and click **More** (•••) icon.
3. Click the **Set drive folder** option.

   The **Set drive folder - Getting started** panel will appear.
4. Select the intended folder/subfolder from the project's Drive where the images need to be saved.
5. Click the **Update** button.

The Drive folder is now mapped to the category/subcategory.

![Screenshot-Updated_mapping_category_with_drive_folder](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Updated_mapping_category_with_drive_folder.gif)

---

#### FAQ(s)

**Can I map the drive folder for subcategories?**

Yes, the **Set Drive Folder** option is available for all categories and subcategories.

**How is setting a drive folder different from the Editor folder?**

If a category is mapped to a drive folder, that mapped folder takes precedence over the Editor folder. All images added to any article in that category will be uploaded to the mapped drive folder. If the category is not mapped to a drive folder, images will be saved in the Editor folder.

**Can I map drive folders at an article level?**

Currently, drive folder mapping is only available for categories and subcategories.

**Can I change or remove a category's drive folder mapping?**

Yes, you can change or remove a category's mapped drive folder as many times as needed. However, changing the mapping to a different drive folder will not move images previously added to the article. Only images added after updating the mapping will be saved in the newly selected drive folder.

**I have a subcategory mapped to a different drive folder and the parent category mapped to another drive folder. Which mapping will be used for articles inside the subcategory?**

The immediate mapping will take precedence, overriding all other settings. In this case, the subcategory mapping will be applied.

> NOTE
>
> **Preference settings:**
>
> 1. Subcategory drive folder mapping
> 2. Parent Category drive folder mapping
> 3. Editor folder

A team account in Document360 that has contributed to a project by creating, editing, saving, or publishing articles. Document360 automatically tracks these activities and includes contributors in the public contributor list.

A tool in Document360 used by writers to draft and format content. Document360 offers three types of editors: Markdown, WYSIWYG, and Advanced WYSIWYG.

A secondary category in Document360 used to organize and display groups of related articles. Subcategories act as folders within a primary category, helping structure similar topics for better organization and navigation.

Organizes related articles under a common theme in the knowledge base.

The default folder in the Document360 Drive where all image files uploaded directly from the editor using the 'Insert Image' option are saved.

<a id="downloading-category-and-article-in-kb-site"></a>

## Downloading category and article in KB site

**Plans supporting the Downloading category and article in the KB site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Downloading articles individually can be time-consuming and cumbersome. This feature allows you to generate and export entire categories and articles into PDFs, choosing appropriate templates for customization. Users can access these tailored PDF templates directly from the Knowledge Base site, making the process more efficient and user-friendly.

> For your information (FYI)
>
> This feature is available exclusively in private projects and private workspaces within mixed projects in KB site 2.0.

---

#### Enabling PDF download and template selection

Follow these steps to enable PDF downloads and choose a template in the Knowledge base portal:

1. Navigate to **Settings**() > **Knowledge base site**> **A****rticle settings & SEO**>**Article settings** in the Knowledge base portal.
2. Go to **Show download as PDF button** toggle and turn it on.

   By default, this option is enabled.
3. Selecting the **Allow you to choose PDF template while exporting** checkbox enables you to choose your PDF template during the export process.

> **NOTE**
>
> To create or manage the PDF templates, go to **Documentation**() > **Content tools** > **Export to PDF** and select the **PDF template** section.

![Enabling the Show download as PDF button for Downloading categories and articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Settingup_Knowledge_base_portal_new.png)

---

#### Downloading categories and articles

1. Navigate to the desired category and click the **More**() icon in the category manager.
2. Click **Export PDF**.
3. The **Export Articles** panel, select the desired subcategories and articles, and choose the appropriate template from the PDF templates dropdown.

   If no template is selected, the default template will be used.
4. Click **Export PDF**.

> NOTE
>
> * Customization added to the knowledge base site will not be reflected in the PDF downloaded.
> * In a Mixed project, if some categories are set to private but the overall workspace is public, the **Export PDF** option will not be available. The workspace visibility (public) takes precedence over individual category settings.

![2_Screenshot-Downloading_PDf_on_KB_site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Downloading_PDf_on_KB_site.gif)

---

#### Generate PDF download link

* Based on the selected categories, articles, and chosen templates, the PDF will be downloaded.
* If only one article is chosen, it will be downloaded instantly. If more than one article is selected, a downloadable link will be sent via email.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image(150).png "image(150).png")

> **NOTE**
>
> The download link expires after 48 hours.

---

### FAQs

#### What happens if my download exceeds the 500 MB limit?

By default, all plans have a daily download limit of 500 MB. If a download exceeds this threshold, the process will complete, but further downloads will be restricted until the next day. For example, if a Reader generates a PDF on April 9, 2024, at 9:20 PM and exceeds the limit, further downloads will be blocked for 24 hours. **KB PDF download quota** add-ons can be purchased to increase the download capacity for all plans.

#### How can I increase my download capacity?

If you need additional download capacity beyond your daily limit, you can purchase **KB PDF download quota** add-ons from the billing section.

<a id="managing-articles"></a>

## Managing articles

**Plans supporting for Managing articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Articles are the foundation of a knowledge base. Managing them effectively ensures that your documentation remains organized, user-friendly, and up to date. Document360 offers a range of options for creating, editing, and organizing articles to suit diverse needs.

Imagine you're managing a large knowledge base with multiple contributors and a wide audience. You need tools to create, edit, and organize articles efficiently while maintaining consistency and accuracy. Document360 simplifies this process with intuitive methods for article management.

---

## Creating an article

The most important building block of any knowledge base is the information it contains. As a Document360 user, you can add this information in the form of articles. Articles are usually grouped into user-defined categories, based on the information they contain.

While you can create articles from a template, or import an article from another source, creating an article from scratch is the most common article creation process.

> **NOTE**
>
> Article limits by plan:
>
> * Professional: **5,000** articles/workspace
> * Business: **5,000** articles/workspace
> * Enterprise: **10,000** articles/workspace
>
> For the best experience, we recommend maintaining articles within these soft limits. If you need a higher limit, contact [support@document360.com](mailto:support@document360.com).

There are four methods to create an article in the Knowledge base portal:

1. Method 1: Using the **Create** button on the top bar
2. Method 2: Using the **Flywheel** () icon
3. Method 3: Using the **More** () icon in the **Categories & Articles** section
4. Method 4: Using the **Create** button in **Folder/Index** type category

![Instructions for creating articles in Document360 interface.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Creating_a_new_article.png)

Method 1

Method 2

Method 3

Method 4

To create an article using the **Create** button on the top bar:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Click the **Create** dropdown and select **Article**.

   The **Create new article**panel will appear.
3. Enter a **Name** for the new article.
4. In the **Category** dropdown, choose the category’s position.
5. Click **Create** to add the article.

To create an article using the **Flywheel** () icon:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Hover over just below the desired article, and click the **Flywheel** () icon.
3. Click **Article**.

   The **Create new article** panel will appear.
4. Enter a **Name** for the new article.
5. In the **Category** dropdown, choose the category’s position.
6. Click **Create** to add the article.

To create an article using the **More (****)** icon in the **Categories & Articles** section:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Hover over the desired category in the **Categories & Articles** section, and click the **More** () icon.
3. Click **Create article** and select **Blank**.

   The **Create new article** panel will appear.
4. Enter a **Name** for the new article.
5. In the **Category** dropdown, choose the category’s position.
6. Click **Create** to add the article.

To create an article using the **Create** button in a **Folder/Index** type category:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Click the desired **Folder/Index** type category.
3. Click **Create** dropdown (on the right side of the category page) and select **Article**.

   The **Create new article** panel will appear.
4. Enter a **Name** for the new article.
5. In the **Category** dropdown, choose the category’s position.
6. Click **Create** to add the article.

![Creating a new article in the Markdown editor with title and category fields.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Creating_a_new_article_panel.png)

---

## Creating article templates

In Document360, you can create, save, and reuse any article as a template for future articles. When you create a new article using a template, it automatically imports all predefined properties and formatting, saving you time and ensuring consistency across your knowledge base.

Imagine you're managing a knowledge base for a software product with a standard troubleshooting format. Instead of recreating the same structure every time, you can use a saved template to maintain consistency and reduce effort, allowing you to focus on customizing the content.

You can create an article from the template using three methods:

1. Method 1: Using the **Flywheel** () icon
2. Method 2: Using the **More** () option
3. Method 3: Using the **Create** button on the top bar

![Instructions for creating articles in the Document360 workspace interface.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Article_from_template_methods.png)

Method 1

Method 2

Method 3

Use the **Flywheel** () icon in the **Categories & Articles** section to quickly create an article from a template:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over just below the desired article in the **Categories & Articles** section and click the **Flywheel** () icon.
3. Select **Article from template**.

   The **Article from template**panel will appear.
4. Choose a template from the list, and you can preview the template content in the right-side pane.
5. Enter the intended article name and select the category for the article.
6. Click **Create** to add the article.

Use the **More** () icon in a specific category to create an article from a template:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. In the **Categories & Articles** section, go the desired category.
3. Click **More**() > **Create article** > **From template**.

   The **Article from template**panel will appear.
4. Choose a template from the list, and you can preview the template content in the right-side pane.
5. Enter the intended article name and select the category for the article.
6. Click **Create** to add the article.
7. The article's name and slug will automatically populate using the template's title.

To create an article from template using the **Create** button on the top bar:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Click the **Create** dropdown and select **Article from template**.

   The **Article from template**panel will appear.
3. Choose a template from the list, and you can preview the template content in the right-side pane.
4. Enter the intended article name and select the category for the article.
5. Click **Create** to add the article.
6. The article's name and slug will automatically populate using the template's title.

![Creating a troubleshooting guide template with fields for version, date, and author.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Article_from_template_panel.png)

> **NOTE**
>
> If you want to add, manage, or change any existing template, you can navigate to the **Templates overview** page by clicking on the **Go to manage templates** above the list of templates in the **Article from template** panel.
>
> For more information, read the article on [Templates](/help/docs/article-templates).

---

## Editing an article

Editing a published article is essential for maintaining up-to-date and accurate content in your Knowledge base. When an article is published, the following changes occur:

1. Your article will appear on your Knowledge base site for readers.
2. The article's status changes from **Draft** to **Published** in the Knowledge base portal

When you select a published article, you'll notice the editor displays only the live version, not the editing pane.

To edit the published article:

1. Navigate to the desired editor and click the **Edit** button at the top-right corner.

   The **Article status** at the top of the editor changes to **Draft**.
2. Make the necessary changes to the article content.
3. Once the changes are complete, click **Publish** to republish the updated article to your Knowledge base site.

When you publish an edited article, the updated version automatically replaces the previously published version in your Knowledge base.

![Overview of Document360 platform with highlighted knowledge management features and navigation options.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Editing_an_Article.png)

### Markdown view of a published article

If you've published an article using the Markdown editor, you can view the Markdown formatting without creating a new version of the article.

1. Navigate to any published article in the Markdown editor.
2. Click **More**() on the top right and select **View markdown**.
3. Once done, click **Close markdown**.

![Accessing the Markdown view of the published article in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Markdown_view_of_a_published_article.gif)

---

## Locking an article

When you or another team member actively edits an article, it is automatically locked to prevent other contributors from making simultaneous changes that could lead to conflicts or content overwrites.

This feature is useful when multiple team members collaborate on a single article. Once you finish editing, you can unlock the article to allow others to make changes.

An article is unlocked when:

* There is **no activity** for **15 minutes**.
* You click the **Lock** () icon and select **Unlock**.
* You navigate to another article or page within the Knowledge base portal.

![Locking and unlocking an article in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_ScreenGIF-Locking_an_Article.gif)

---

## Deleting an article

There are five ways to delete an article in the Knowledge base portal:

1. Method 1: Using the **More**() icon in the **Categories & Articles**section.
2. Method 2: Using the **More** () icon in the desired article.
3. Method 3: Deleting multiple articles in the **Folder**/**Index** category.
4. Method 4: Deleting a specific article in the **Folder**/**Index** category.
5. Method 5: Deleting multiple articles in the **All articles** () section.

![Various methods are used to delete the articles in the knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGIF-Deleting_an_article_methods.gif)

Method 1

Method 2

Method 3

Method 4

Method 5

To delete a specific article from the **Categories & Articles**section:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Hover over the desired article in the **Categories & Articles** section.
3. Click the **More** () icon and select **Delete**().
4. Click **Yes**in the **Delete confirmation** panel.

To delete an article while editing it:

1. In the desired article, click the **More** () icon and select **Delete** ().
2. Click **Yes**in the **Delete confirmation** panel.

To delete multiple articles within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles.
4. Click **Delete** ().
5. Click **Yes**in the **Delete confirmation** panel.

To delete a specific article within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article, click the **More** () icon and select **Delete** ().
4. Click **Yes**in the **Delete confirmation** panel.

To delete multiple articles in the **All articles** () section:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.

   The **All articles** page will appear. If required, use the [**filter**](/help/docs/filter-bulk-operations) options to narrow down the articles.
2. Select the desired articles and select **Delete** ().
3. Click **Yes**in the **Delete confirmation** panel.

> NOTE
>
> For more information, read the article on [**All articles**](/help/docs/all-articles-overview-page).

---

## Hiding and Unhiding an article

In Document360, you can hide an article within the documentation editor to restrict access to team accounts only. Hidden articles are indicated by a strikethrough in the Documentation window.

For instance, if you want your sales team to access an article containing pricing details but don't want that article visible to customers, you can hide it so that it won't appear in your public documentation.

There are four ways to hide or unhide an article in the Knowledge base portal:

1. Method 1: Using the **More** () icon in the **Categories & Articles**section.
2. Method 2: Hiding/Unhiding multiple articles in the **Folder**/**Index** category.
3. Method 3: Hiding/Unhiding a specific article in the **Folder**/**Index** category.
4. Method 4: Hiding/Unhiding multiple articles in the **All articles** () section.

![Hiding and unhiding articles in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenGIF-Hiding_Unhiding_the_articles.gif)

Method 1

Method 2

Method 3

Method 4

To hide/unhide a specific article from the **Categories & Articles**section:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Hover over the desired article in the **Categories & Articles** section
3. Click the **More** () icon and select **Hide** ().

   To Unhide, click the **Unhide**() icon.

To hide/unhide multiple articles within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles.
4. Click **Hide** ().

   To Unhide, click the **Unhide**() icon.

To hide/unhide a specific article within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article.
4. Click the **More** () icon and select **Hide** ().

   To Unhide, click the **Unhide**() icon.

To hide multiple articles in the **All articles** () section:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.

   The **All articles** page will appear. If required, use the [**filter**](/help/docs/filter-bulk-operations) options to narrow down the articles.
2. Select the desired articles and click **Hide** ().

   To Unhide, click the **Show** () icon.

> NOTE
>
> For more information, read the article on [**All articles**](/help/docs/all-articles-overview-page).

---

## Renaming an article

To rename an article, follow the steps below:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Go to the desired article and click the article name to edit it.

   Alternatively, hover over the desired article in the **Categories & Articles** section, click the **More** () icon, and select **Rename**.
3. Enter the new article name and click **Update**.

   1. If the article is in the **Published** state, a **Article details confirmation** panel will appear.
   2. Click **Yes**.

![Renaming an article in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_ScreenGIF-Renaming_an_Article_update.gif)

---

## Moving an article

You can move an article across workspaces. There are five ways to move an article in the Knowledge base portal:

1. Method 1: Using the **drag and drop** () icon in the **Categories & Articles**section.
2. Method 2: Using the **More** () icon in the **Categories & Articles**section**.**
3. Method 3: Moving multiple articles in the **Folder**/**Index** category.
4. Method 4: Moving a specific article in the **Folder**/**Index** category.
5. Method 5: Moving multiple articles in the **All articles** () section.

![Moving and reordering the articles in the knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_ScreenGIF-Moving_an_Article.gif)

Method 1

Method 2

Method 3

Method 4

Method 5

To move an article using the **drag and drop** () icon in the **Categories & Articles**section:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired category.

   The **drag and drop** () icon will appear.
3. Hold and drag the category to the appropriate location.

From the **Categories & Articles** section, you can move an article within or across workspaces:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired article in the left navigation pane.

   The **More** **(****)** icon will appear.
3. Click the **More** **(****)** icon and select the **Move** () icon.
4. In the **Move article** panel, perform the following:

   * **Workspace:** Select the desired workspace from the dropdown.
   * **Category:** Select an existing category from the selected workspace.
   * **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

To move multiple articles within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Select the checkboxes for the appropriate articles.
4. Click the **Move**() icon.

   In the **Move article** panel, perform the following:

   1. **Workspace:** Select the desired workspace from the dropdown.
   2. **Category:** Select an existing category from the selected workspace.
   3. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Move**.

To move a specific article within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category and hover over the desired article.

   The **More** () icon will appear.
3. Click the **More** () icon and Click the **Move**() icon.

   In the **Move article** panel, perform the following:

   1. **Workspace:** Select the desired workspace from the dropdown.
   2. **Category:** Select an existing category from the selected workspace.
   3. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
4. Click **Move**.

To move multiple articles in the **All articles**() section:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.

   The **All articles** page will appear. If required, use the [**filter**](/help/docs/filter-bulk-operations) options to narrow down the articles.
2. Select the desired articles and click the **Move** **to**() icon.

   In the **Move article** panel, perform the following:

   1. **Workspace:** Select the desired workspace from the dropdown.
   2. **Category:** Select an existing category from the selected workspace.
   3. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
3. Click **Move**.

> **NOTE**
>
> When moving articles, security restrictions will be applied based on the destination workspaces and categories.

---

## Replicating an article

The **Replicate** article feature allows you to display a single article across multiple categories. Replicating articles streamlines content organization and accessibility, enhancing the user experience and improving knowledge base management.

To replicate an article, follow the steps below:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. In the **Categories & Articles** section, hover over the desired article and click the **More** () icon.

   Alternatively, if the article is in a **Folder/Index** type category, navigate to the category, hover over the desired article and click the **More** () icon.
3. Select **Replicate** ().

   The **Replicate** panel will appear.
4. Choose the appropriate category and click **Replicate**.

   The article is now available in the selected location on the Knowledge base portal and as a regular article on the Knowledge base site.

> NOTE
>
> * Security restrictions will be applied based on the destination category.
> * You can only edit the source article and not the replicated article. Certain article settings are turned off in the replicated articles.

![Various methods of replicating articles in the KNowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-Replicating_an_article.png)

---

## Cloning an article

Clone articles are exact copies of the content created as new articles. You can clone articles within or across workspaces.

There are two methods to clone an article in the Knowledge base portal:

1. Method 1: Using the **More** () icon in the **Categories & Articles**section.
2. Method 2: Cloning a specific article within a **Folder/Index** category.

![Various methods of cloning articles in the KNowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Cloning_an_Article.png)

Method 1

Method 2

From the **Categories & Articles**section, you can clone an article within or across workspaces:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Hover over the desired article in the left navigation pane.

   The **More** () icon will appear.
3. Click the **More** () icon and select the **Clone**() icon.
4. In the **Clone article** panel, perform the following:

   1. **Name**: Enter the name for the cloning article.
   2. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   3. **Category:** Select an existing category from the selected workspace.
   4. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
5. Click **Clone**.

To move a specific article within a specific **Folder**/**Index** category:

1. Navigate to **Documentation**() in the Knowledge base portal.
2. Go to the desired **Folder**/**Index** category.
3. Hover over the desired article.
4. Click the **More** () icon and select the **Clone** () icon.
5. In the **Clone article** panel, perform the following:

   1. **Name**: Enter the name for the cloning article.
   2. **Workspace:** Select the desired workspace from the dropdown. Click **Reset** to assign it under the main workspace.
   3. **Category:** Select an existing category from the selected workspace.
   4. **Auto update referenced links:** Select this checkbox to ensure links in the article content are updated based on the destination workspace/category.
6. Click **Clone**.

> **NOTE**
>
> When moving articles, the **Security restrictions** will be applied based on the destination workspaces and categories.

---

## Troubleshooting

### **Article limit reached**

**Error:** `documentation.categoriesAndArticles.maxArticlesCountReached` and `documentation.categoriesAndArticles.articleLimitExceedsPerCategory`

These errors occurs when the article limit for a **category** or **project** has been exceeded. It commonly happens in the following scenarios:

* Creating a **large number of articles** within a category or project that exceeds the allowed limit.
* **Bulk importing** a significant number of articles into a category.
* Adding a **page type subcategory** within another category.

**Steps to resolve**

1. Check if the error occurs across **all categories** in your workspace.
2. In Document360, the maximum number of articles per category and per project depends on your plan:

   **Category limits**

   * Professional, Business, and Enterprise plans: Up to **100 articles per category**.

   **Project Limits**

   * Professional & Business plans: Up to **5,000 articles per workspace**.
   * Enterprise plan: Up to **10,000 articles per workspace**.
3. If your workspace has exceeded these limits, reduce the number of articles in a category or upgrade your plan if needed.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

![Overview of document categories and articles with highlighted error message that indicates the article creation limit is reached.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1739518144665.png)

---

### FAQs

#### What is the character limit for article titles?

The character limit for article titles is 150 characters, including spaces. Special characters like $, %, \*, {, }, ", <, and > are not allowed.

#### What are the best practices for creating an article title and URL slug?

When creating an article title, remember that the URL slug is derived from the title. Document360 automatically separates words with hyphens and removes special characters/punctuation in the slug. Further updates to the URL slug can be made later.

#### How can I identify the published status of an article?

The published status of an article is indicated by a colored dot next to the article name:

* Light blue dot: A new article which is not yet published.
* Light green dot: The article is published.

#### Do I need to save my content frequently?

No, Document360 automatically saves your content every 5 seconds. You can also save manually using **Ctrl+S** (Windows) or **Cmd+S** (Mac).

#### What should I do if I cannot access an article or see recent updates?

If you’re having trouble accessing an article or viewing recent updates, try the following steps:

* Refresh the page.
* Ensure the article title or link is correct.
* Clear your browser cache and cookies, then try again.
* If the article was recently published or updated, allow a few moments for the changes to reflect.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

#### What happens after I create a new article from a template?

Your article will be added to the respective category/subcategory with a New article status indicator (light-blue dot).

#### What happens after an article is published?

After an article is published, it will appear in your Knowledge base site for readers, and its status will be updated from Draft to Published in the Knowledge base portal.

#### How can I edit a published article?

To edit a published article, click the **Edit** button at the top-right of the editor. This will change the article status back to Draft, allowing you to make changes.

#### What happens when I publish an edited article?

When you publish an edited article, the edited version replaces the previously published version in your Knowledge base.

#### Is the 'Edit article' option available for all readers in the Knowledge base site?

No, the 'Edit article' option is only available for logged-in team accounts on the Knowledge base site.

#### What happens when an article is locked because a user is editing it, and how can it be released?

In Document360, when a user begins editing an article, the article is locked, preventing others from making changes. This lock is automatically released 15 minutes after the user stops editing, at which point the article becomes available for other users to edit.

If you need to unlock it before that time, the user editing the article can manually click **Unlock** () icon at the top of the article, near the preview.

#### Can I move articles from one project to another?

The inbuilt move functionality to move articles from one project to another is currently unavailable.  As a workaround, when transferring multiple articles, use the export feature to save the articles along with all media files from the original project, then import them into the new project. Alternatively, you can manually copy and paste content from articles in one project to another. As a best practice, upload images from the original article to the drive of the new project and then insert them into the new article.

#### What happens to the links and references within an article when it is moved to a new category or workspace?

When you move an article to a new category or workspace, all internal links and references within the article will be updated automatically to reflect the new location. This ensures that all links and references remain functional.

#### Are there any security restrictions when moving articles across workspaces?

Yes, security restrictions will apply based on the destination workspace and category. Ensure that you have the appropriate permissions to move articles to the target workspace and category.

#### What is a hidden article?

A hidden article will not be listed in the Knowledge base site and cannot be accessed through the direct link, but will appear in the Knowledge base portal for internal use.

#### How can I hide a single article?

To hide a single article, navigate to  **Documentation** () in the Knowledge base portal, hover over the desired article, click on the **More** () icon, and select **Hide**.

#### Can I hide multiple articles at once?

Yes, you can hide multiple articles at once by navigating to the **All articles** () section in **Documentation** (), selecting the desired articles, and clicking the **Hide** option at the top of the pane.

#### Will hidden articles appear in search results?

No, hidden articles are excluded from search results.

#### How can I hide an article from the Knowledge base site while still allowing access via its URL?

To hide an article while maintaining access through its URL, follow these steps:

1. Navigate to Settings () > **Knowledge base site** > **Customize site**.
2. Click on **Custom CSS & JavaScript**.
3. Paste the following code in the JavaScript tab:

```
$(document).ready(function() {
    $('a[href="SLUG NAME"]').parent().css({"display": "none"});
    $('a[href="SLUG NAME"]').parent().css({"display": "none"});
});
```

JavaScript

Copy

4. Click **Save**.

#### How do I restore my deleted articles?

You can restore your deleted articles from the **Recycle bin**. The deleted articles will remain in the Recycle bin for 30 days. For more information, read the article on [Recycle bin](/help/docs/recycle-bin-recent-and-starred-files).

#### Why doesn't the article name change reflect on the Knowledge base site?

* If the article is in **Draft** status, the change in the article name doesn't reflect immediately on the site. The article name change will only be reflected after publishing it.
* If the article is in **Published** status, the change in the article name will reflect immediately on the Knowledge base site.

#### Can I clone and replicate articles across different workspaces?

You can clone articles within or across workspaces. However, replication is limited to the same workspace.

#### What happens if I delete the source article of a replicated article?

If the source article is deleted, the replicated articles will also be removed from their respective categories.

#### Is there a limit to the number of times an article can be replicated or cloned?

Document360 does not limit the number of times you can replicate or clone articles, allowing flexibility in content management.

#### Why am I getting 404 errors when trying to access articles other than the homepage or the first article? How do I resolve it?

This issue typically occurs due to incorrect slug configuration or folder name changes in the subfolder hosting page. Follow these steps to resolve the issue:

1. Verify article slugs: Ensure the slugs for your articles are correctly configured. For example, the first article might load using the slug /docs, but other articles may require a different slug, such as /help. In such cases, make sure all the slugs are consistent.
2. Check subfolder settings: Navigate to the subfolder hosting page and confirm if the `/docs` folder has been renamed or altered. If it has been renamed, update it back to `docs` to maintain consistency.
3. Test access: After correcting the folder name, try accessing the articles again to confirm the issue is resolved.
4. Clear cache and perform hard refresh:

   a. Right-click anywhere on the page and select Inspect to open the developer tools menu.

   b. Right-click the browser's reload button and choose Hard reload or Empty cache and Hard reload.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

 Provide the following details:

* Screenshots or video recordings of the subfolder hosting page.
* Information about any recent changes to your website or system settings.
* An exported CSV file from the article redirect rule feature.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="article-import-from-word-files"></a>

## Word .docx files

**Plans supporting the import of articles from Word**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Importing article content directly from Word files can significantly streamline the process of building your knowledge base. Document360 supports importing .docx files, allowing you to effortlessly transfer your pre-written content into your knowledge base.

> NOTE
>
> Document360 supports only Word files with the **.docx** extension. Ensure your file size is **under 15MB**. Other file formats are not supported.

---

## Importing Word files

### Import as a single article

To import a .docx Word file as a Document360 article,

1. Log in to the **Knowledge base portal** and select your desired project.
2. Select the **Documentation** tab from the left navigation sidebar.
3. Navigate to the desired category in the **Categories & Articles** pane.
4. Click the **More ()** icon next to the category name.
5. Select **Add article** > **Import ().** The **Import** window will appear.
6. **Drag and drop** the .docx source document or click **Upload a file** to import it from your local storage. By default, the **Single article** tab will be selected in the **Import** window.
7. Click **Replace** if you want to select a different .docx source document.

Document360 automatically populates the **Article name** and **Category** fields based on the filename of the source document and the category you selected in step 3. You can edit both fields if needed.

> NOTE
>
> If the article name is manually updated during the Word import process, the change will not be captured in the Team auditing.

7. Select the location where your media files should be saved from the **Drive location** dropdown menu.
8. Click **Import**. A success message will appear once the article has been imported.
9. Click **Done** to close the Import window and view the imported article in the editor.

> NOTE
>
> * Images in the Word document will be uploaded as individual files in the selected Drive folder.
> * Document360 retains all external hyperlinks in the imported article.

![Importing the word document as a single article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Importing_a_single_article.gif)

---

### Importing a Word file as multiple articles

To import a .docx Word file as a Document360 article,

1. Log in to the **Knowledge base portal** and select your desired project.
2. Select the **Documentation** tab from the left navigation sidebar.
3. Navigate to the desired category in the **Categories & Articles** pane.
4. Click the **More ()** icon next to the category name.
5. Select **Add article** > **Import ().** The **Import** window will appear.
6. **Drag and drop** the .docx source document or click **Upload a file** to import it from your local storage.
7. Click **Replace** if you want to select a different .docx source document.
8. Select the **Multiple articles** tab in the Import window.
9. Select the location where your media files should be saved from the **Drive location** dropdown menu.
10. Select the desired heading levels (e.g., H1, H2) in the field labeled **"Which heading levels create a new article?"** for splitting the document into articles. By default, **H1** is selected and cannot be removed. For example:

    * If only H1 is selected, a new article is created at the start of each H1.
    * If both H1 and H2 are selected, a new article is created at each H1, and H2 headings within an H1 section will also create separate articles. This is helpful when your document has multiple subsections that you want to organize as individual articles for better clarity and navigation.
11. Click **Proceed** to process the document based on the selected heading levels.

After processing, a list of articles will appear, with the heading text from the .docx file serving as the article name for each generated article. The **Category** fields are also auto populated based on the category you selected in step 3. You can select a different category from the dropdown menu.

When you hover over an article in the article list, the **Merge**, **Preview**, and **Delete** options are displayed.

* Click the **Merge** option to merge a sub-heading article with its parent article. This will combine the sub-heading article (e.g., created from H2) into the parent article (e.g., created from H1).
* Click the **Preview** option to view the content of the article.
* Click the **Delete** option to delete the article.

11. Once you are done reviewing the articles, click **Import** to finish importing the articles to your knowledge base. A success message will confirm that the articles have been imported.
12. Click Done to close the Import window. The imported articles will now appear in the selected category.

> NOTE
>
> * Images in the Word document will be uploaded as individual files in the selected Drive folder.
> * Document360 retains all external hyperlinks in the imported article.

![Importing a document as multiple articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Importing_multiple_article.gif)

---

## Determining editors while importing .docx files

When importing articles from Word files, the editor used will be based on your selection in the Knowledge base portal settings. Follow these steps to check or change your editor selection:

1. Navigate to **Settings** > **Knowledge base portal** > **General** > **Editor**.
2. Select the editor to determine how articles are imported:

   1. Choose Markdown or WYSIWYG editors to import Word files using the WYSIWYG editor.
   2. Choose the Advanced WYSIWYG editor to import Word files using the Advanced WYSIWYG editor.

---

### FAQs

**What is the best practice for managing large documents in the Advanced WYSIWYG editor?**

As a best practice, split large documents into multiple articles for better performance and easier management. For instance, if you are importing content from a Word file, you can use the [**Import Word File into Multiple Articles**](/help/docs/article-import-from-word-files) feature for a more efficient workflow.

**What is the maximum file size for .docx files that can be imported?**

The .docx file size should be less than 15MB. If your Word file exceeds this limit, you will get an error saying, ‘*File size can’t be larger than 15 MB*’ and you will need to split the file into smaller parts before attempting to import the file again.

**Can I import multiple .docx files at once?**

You can import only one .docx at a time. However, during the upload, you can choose to import it as either a single article or multiple articles.

**Is it possible to import Word files using the Markdown editor?**

No, importing Word files (.docx) is not supported in the Markdown editor.

**Why am I facing an error while importing a Word document into Document360?**

There are several reasons for errors when importing Word documents into Document360:

1. **Missing or empty headers in the Table of Contents (TOC)**

If your document contains missing or empty headers in the TOC section, this can cause an error saying “*An item with the same key has already been added*” during the import process. To resolve this, remove any empty or missing headers from the TOC and then try importing the file again. Once corrected, the import should work as expected.

2. **Firewall blocking the upload**

Another potential issue could be related to your network firewall. If your firewall is blocking the upload, you might receive an object error. In such cases, ensuring that the Word document upload is allowed in your firewall settings should resolve the issue.

3. **Password-protected or restricted files**

Word files that are password-protected or restricted to specific users cannot be imported. Ensure the file is accessible to everyone.

4. **Conflicting styles between Microsoft Word and Google Docs**

If a Word file was created in Microsoft Word and later modified in Google Docs, changes to the heading styles in Google Docs can result in duplicate or conflicting styles. This occurs because Microsoft Word and Google Docs handle styles differently, leading to mismatched style tags. To resolve this:

a. After uploading the Word document to Google Docs, apply the default Google Docs styles to the document.  
b. This will reset all styles to Google Docs' default settings, removing any duplicated or conflicting styles.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

**Why do I see the error “You have reached the maximum number of articles you can have in a project”?**

This error occurs when the number of articles in your project exceeds the allowed limit. If you are importing a Word file, Document360 uses heading tags to divide the file into multiple articles. For example, if the Word file generates 10 articles, but the target category has a soft limit that allows fewer than 10 articles, this error may occur. As a solution,

1. Review the heading tags in your Word file to understand how the content is structured and split into articles.
2. Adjust the heading structure in the Word file to reduce the number of articles generated during the import.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

<a id="publishing-an-article"></a>

## Publishing an article

**Plans supporting for publishing an articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Once you have drafted and reviewed an article, the final step in the content creation process is publishing the article. Publishing an article is crucial as it makes the information available to your end-users.

## Publishing from the editor

The following steps outline the process of publishing an article directly from the editor within Document360:

1. Click **Publish** at the top right of the editor.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1717940422587.png)

2. You can add an optional comment for internal purposes in the **Publish confirmation** dialog box.
3. Click the **Configure article settings** dropdown to expand the Publish confirmation dialog box.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Configure_article_settings.png)
4. Once you configure the article settings, click **Yes** to publish the article.

### Configure article settings

#### Tags

Add **tags** to enhance the discoverability of your article.

* Ask **Eddy AI** to generate tags based on your article content.
* Select existing tags from the dropdown menu.
* Manually input a tag.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_article_settings_tags.png)

#### SEO description

You can add an SEO description to boost your content’s visibility on search engines.

* Ask **Eddy AI** to generate an SEO description based on your article content.
* Manually add an SEO description.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_article_settings_seo_description.png)

#### Related articles

Add Related articles to keep your readers engaged with related content, encouraging them to spend more time on your site.

* Ask **Eddy AI** to suggest related articles based on your article content, and the existing articles in your knowledge base.
* Manually search for specific articles and add them as related articles.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Configure_article_settings_related_articles.png)

#### Status indicator

Add a Status indicator to your article to help users quickly identify new or updated content.

* **New Article**: A green circle displayed next to the article name in the left navigation pane indicates that the entire article is newly added.
* **Updated Article**: A yellow circle displayed next to the article name in the left navigation pane indicates that an existing article has been recently modified or updated with new or revised information.
* **Custom:** You can be set by the Team account manually.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Configure_article_settings_status_indicator.png)

> NOTE
>
> * You can automatically update status indicators for new and updated articles by toggling on **Automatically set article status** from **Settings** () > **Knowledge base site** > **Article settings & SEO.**

## Publishing articles in bulk

You can publish more than one article at the same time in Document360. Follow the below steps to publish articles in bulk:

1. Navigate to **Documentation** () > **All articles** () in the knowledge base portal.
2. Select the checkbox next to the articles you want to publish.
3. Click  **Publish** from the available bulk actions.

   ![Document360 interface showing article management with options to publish and edit articles.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/screenshot-Bulk_publish_in_all_Articles.png)

> TIP
>
> To ensure you only select unpublished articles, you can use the  **Filter** option from the top right corner.

> NOTE
>
> You can bulk publish articles within specific categories as well.

---

### FAQs

#### **Why is the Ask Eddy AI button disabled when I try to add tags?**

The **Ask Eddy AI** functionality for tag suggestions requires a minimum article length of **50 words**. This threshold ensures sufficient content for accurate tag generation based on the article's subject matter.

#### **Why is the Ask Eddy AI button disabled when I try to add an SEO description?**

For SEO description generation, the **Ask Eddy AI** feature requires a minimum article length of **200 words.** This requirement allows for a comprehensive analysis of the content to produce an effective SEO description.

#### **Why is the Ask Eddy AI button disabled when I try to add related articles?**

The **Ask Eddy AI** function for suggesting related articles requires a minimum of **200 words** in the article. This word count threshold facilitates a thorough content analysis for identifying relevant related articles.

#### **Why can't I see the “ Publish” option when attempting to publish multiple articles at once?**

When you are selecting the articles you wish to publish, ensure that you are not selecting any already published articles.

#### **If an article is hidden, will it be ignored by Google search?**

Yes, if an article is hidden, it will be ignored by Google Search. Hidden articles are not indexed and therefore not visible in search results.

#### **If an article is published, you have Knowledge base access, but it is restricted for you for a particular article, will it be ignored?**

Yes, if an article is published and you have KB access but are restricted from viewing a particular article, it will be ignored.

#### **I published an article, but I can't see it on the Knowledge base site. What should I do?**

If your published article is not visible on the Knowledge base site, check the following:

1. Ensure the article is not set to [hidden](/help/docs/hiding-article) in the Knowledge base portal.
2. Verify if any [restrictions](/help/docs/article-access-control-knowledge-base-site) have been applied to the article.
3. Check for any [redirection rule](/help/docs/article-redirect-rules) associated with the article and clear them if needed.
4. Confirm that the selected [workspace](/help/docs/workspaces) is set to Public.

<a id="reviewing-an-article-inline-comments"></a>

## Reviewing an article using Inline comments

**Plans supporting discussion/inline comments**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Efficient collaboration and feedback are crucial for maintaining high-quality documentation. With Document360’s inline comment feature, reviewing and refining articles becomes a seamless process.

> NOTE
>
> You can use the **Inline comments** feature only in the Advanced WYSIWYG editor.

---

## Adding inline comments to an article

1. Navigate to the desired article within the Knowledge base portal.
2. Ensure that the article is in **Advanced WYSIWYG editor**.
3. Select the desired text by clicking and dragging the cursor over it.   
   A bubble menu appears.
4. Click the **Comment** (  ) icon, to open the comment box.

![1. Adding inline comments to an article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1.%20Adding%20inline%20comments%20to%20an%20article.png)

5. Inside the comment box,

   1. You can enter the desired comments.
   2. Using **@** symbol you can mention another Team account in your project.
   3. Basic text formatting options such as bold and lists are available.   
      Comments are visually indicated by a yellow highlight.

6. Once done, click **send** (  ) or press **Ctrl + Enter** to create an inline comment.
7. If you wish to cancel, click on any other area of the article, or press **ESC.**

> **NOTE**
>
> Once the article is published, all unresolved comments will be automatically deleted.

![2.Managing-comments](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2.Managing-comments.png)

---

### Enabling comment notification

1. Navigate to Settings () > **Knowledge base portal** > **Notifications** in the Knowledge base portal.
2. Select the **Notification mapping** tab and scroll to the bottom to find the **All comments notification** toggle.
3. Turn on the **All comments notification** toggle.

All contributors to the article will receive email notifications when inline comments are added once the comment notification toggle is turned on.

![Portal-Screenshot-Enhanced_Comment_notification_system](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-All_comments_notification_toggle.png)

---

## Managing comments

* **View comment**: Click the yellow highlighted area or the comment icon next to the article settings to view the comment.
* **Resolve comment**: If a comment has been addressed, a Team account can mark it as resolved by clicking the (  ) icon.

  > NOTE
  >
  > Inline comments can only be resolved by the team account that created them. Other team accounts do not have the ability to resolve these comments.
* **Edit or Delete comment**: You can edit or delete your comments by selecting the **More** (•••) icon at the top of the comment box. Note that these actions are only available for comments that you have added.
* **Reply to comment**: Team accounts can respond to the comments from other Team accounts in the **Write a reply** field.

![Inline comments](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/_Screenshot-Managing_contents_in_inline_comments.png)

In the discussion section, you can filter comments by:

* **All comments:** Displays all comments, including mentioned and resolved, except deleted ones.
* **Mentioned me:** Shows only comments where you are mentioned.
* **Open**: Displays all comments that are not resolved.
* **Resolved:** Shows only resolved comments.

![Inline comments](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/_Screenshot-Managing_contents_in_inline_commentsfrom_discussion.png)

---

### FAQ (s)

**How many replies can I add to an inline comment?**

You can reply up to 20 times to an inline comment.

**What is the maximum number of inline comments I can add to an article version?**

You can add up to 500 inline comments per article version.

**Is there a character limit for the inline comment text box?**

Yes, the inline comment text box has a character limit of 500 characters.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="adding-images-to-articles"></a>

## Adding images to articles

**Plans supporting the addition of images to articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Adding images to your articles enhances comprehension and engagement. Visual aids clarify complex procedures and illustrate desired outcomes more effectively than text alone. Images simplify instructions, making them easier to follow and understand. They enhance the user experience and contribute to the overall effectiveness of the documentation.

There are several methods for inserting images into your articles using the Markdown editor or the Advanced WYSIWYG editor. Each method offers its own set of advantages and allows for customization to suit your preferences.

---

## Inserting an image in the Markdown editor

You can insert images in your documentation with the Markdown editor in four methods:

Method 1: Insert image from Upload/URL

Method 2: Insert image from file picker

Method 3: Insert image using Insert file ()

Method 4: Insert image by drag and drop

Method 1

Method 2

Method 3

Method 4

#### Using upload

To insert an image:

1. Navigate to the desired article in the Markdown editor.
2. Click the Insert image () icon and select **From Upload/URL**.
3. In the **File** tab, click the **Choose File** button.
4. Select the image file you want from your local storage and click **Open**.
5. In the **Description** field, type in a description for the image.
6. Click **OK**.

   The image will be inserted into the article where the cursor is placed.

> NOTE
>
> The **height** and **width** of the imagewill not be set by default `{height="" width=""}`.

7. If required, you can specify the pixel (px) dimensions for displaying your image in the documentation.

> **For example**, {height="720" width="1280"}.

You can see the size of the image in the documentation in the Preview window.

![Adding images in the Markdown and Advanced WYSIWYG editors](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_New_Screenshot-Insert_image_from_Upload_URL.gif)

#### From URL

To insert an image using an URL:

1. Navigate to the desired article in the Markdown editor.
2. Click the Insert image () icon and select **From Upload/URL**.
3. In the **URL** tab, enter the desired **Image URL**.
4. In the **Description** field, type in a description for the image.
5. Click **OK**.   
   The image will be inserted into the article where the cursor is placed.

> NOTE
>
> The **height** and **width** of the imagewill not be set by default `{height="" width=""}`.

5. If required, you can specify the pixel (px) dimensions for displaying your image in the documentation.

> **For example**, {height="720" width="1280"}.

You can see the size of the image in the documentation in the Preview window.

![Adding images in the Markdown and Advanced WYSIWYG editors](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_New_Screenshot-Insert_image_from_URL.gif)

> NOTE
>
> We recommend adding images to the Document360 Drive and then inserting them into articles. When you upload using the image URL, If the image is removed or renamed in the future, it will appear broken in the Knowledge base sites.

To insert an image from the file picker:

1. Navigate to the desired article in the Markdown editor.
2. Click the Insert image () icon and select **From file picker**.

   The [Drive](/help/docs/drive-getting-started) window will appear with only image format files.

> NOTE
>
> You can insert any number of images in one go. The multiple image selection is available only on Markdown and Advanced WYSIWYG editors.

4. Navigate to the desired folder where the image you wish to upload is available.
5. Select the desired image(s) and click **Insert**.  
   The image will be inserted into the article where the cursor is placed.
6. If required, you can specify the pixel (px) dimensions for displaying your image in the documentation.

> **For example**, {height="720" width="1280"}.

You can see the size of the image in the documentation in the Preview window.

![Adding images in the Markdown and Advanced WYSIWYG editors](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_New_Screenshot-Insert_the_image_from_the_file_picker.gif)

To insert an image using the Insert file ():

1. Navigate to the desired article in the Markdown editor.
2. Click the Insert file ().

   The [Drive](/help/docs/drive-getting-started) panel will appear.
3. Navigate to the desired folder where the image you wish to upload is available.
4. Select the image and click **Insert**.  
   The image will be inserted into the article where the cursor is placed.

> NOTE
>
> The **height** and **width** of the imagewill not be set by default `{height="" width=""}`.

5. If required, you can specify the pixel (px) dimensions for displaying your image in the documentation.

> **For example**, {height="720" width="1280"}.

You can see the size of the image in the documentation in the Preview window.

![Adding images in the Markdown and Advanced WYSIWYG editors](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_New_Screenshot-Insert_an_image_using_the_Insert_file.gif)

You can add an image to the editor by dragging it from your local system to your editor.

The images you insert in an article through drag and drop will be saved automatically in the Document360 Drive. Any changes made to your local file will not affect the inserted image.

---

## Inserting an image in the Advanced WYSIWYG editor

You can insert images in your documentation with the Advanced WYSIWYG editor in the following methods.

1. Using the **Slash** command or **Insert** menu
2. Using copy and paste or drag and drop

Method 1

Method 2

To insert an image using the **Slash** command or **Insert** menu:

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. You can use the **slash menu** `/image` to insert the **Image**

   Alternatively, click the **Insert menu** () and select **Image**.
3. Select **Image**,and a panel will appear with following options:

   * **Upload from my device**: Click to upload or drag and drop the image file from your device's local storage.
   * **Choose from Drive**: Opens the file picker, and you can choose any image format available in your Document360 Drive.
   * **External URL**: Paste the URL of the image in the field.
4. Click **Insert**, and the image is added to the article.

You can perform a copy/paste operation for the image or click, drag, and drop an image from your device's local storage inside the article.

The images you insert in an article through drag and drop will be saved automatically in the Document360 Drive. Any changes made to your local file will not affect the inserted image.

> NOTE
>
> You can format images in the Advanced WYSIWYG editor. For more information, read the article on [Image formatting in the advanced WYSIWYG editor](/help/docs/image-formatting-in-the-advanced-wysiwyg-editor).

---

## **Troubleshooting**

### Broken image in the Knowledge base site

A broken image is an image that fails to load on a webpage, displaying a missing image icon and its alt text instead. This typically happens when the image file is deleted, moved, renamed, or the URL pointing to the image is incorrect or inaccessible.

**Steps to resolve:**

1. Retrieve the image URL from the article’s **code view** in the Knowledge base portal or by inspecting the element in the Knowledge base site.
2. Open the image URL in a browser.
3. If it results in a **404 error**, the image may have been deleted, moved, or renamed.
4. Ensure the image file still exists at the same path and with the same name.
5. As a best practice:

   1. Upload images directly to the Document360 Drive instead of using external URLs.
   2. Adding images from Document360 Drive helps organize assets efficiently and prevents broken images in the future.

![Document360 Knowledge base site appearing with a broken image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-broken_image_troubleshooting.png)

---

### FAQs

#### Can I change the alignment of an image in Markdown?

Yes, you can change the image alignment in Markdown.

> NOTE
>
> For more information, read the article on [How to align the image in Markdown?](/help/docs/how-to-align-the-image-in-markdown)

#### What is the recommended method for inserting images into articles?

The recommended method is to upload images to the Document360 Drive and insert them directly into articles. This ensures image stability and prevents broken image links if the image is removed or renamed in the future.

#### Can I customize the appearance of the inserted images?

Yes, you can customize the alignment, size, and style of inserted images to suit your preferences and optimize the visual presentation within your articles.

#### How can I ensure accessibility for visually impaired users when adding images?

You can provide alternative text (alt text) for each image, which helps screen-reading tools describe images to visually impaired users and improves search engine optimization (SEO) for your Knowledge base.

#### How can I add icons in line with text?

To add icons in the markdown editor, simply paste the HTML code snippet of the icon wherever you want it to appear in your text. For example, use `<nor class="fa-light fa-comment"></nor>` for a comment icon.

If you are using the advanced WYSIWYG editor, place the cursor where you want the icon, switch to code view, and paste the same HTML code snippet. After pasting, save the file and switch back to the regular view. You should now see the icon in line with your text. You can find these icon snippets on websites like FontAwesome.

#### Will images copied from any external source that are pasted into Document360 be permanently stored? If yes, what happens when the external source is deleted?

If images from any external source are copied and pasted into Document360, they will be stored in the Document360 Drive. However, it is recommended to upload images directly from the Drive rather than pasting them to ensure they are not linked to any external sources.

If the images point to any external source as their original location is deleted, the images will be broken in Document360.

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

<a id="adding-videos-in-articles"></a>

## Adding videos in articles

**Plans supporting the addition of videos in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Videos can explain complex concepts better than text alone. They make it easier for users to understand instructions, tutorials, and detailed processes. Videos capture attention and keep users engaged longer than plain text. In Document360, by using **Insert video** and **Insert file** options in the toolbar you can add videos to the article and category pages.

---

## Insert a video in the Markdown editor

Two methods exist to insert a video in your article or category page.

1. **Insert video**: To insert a video by URL.
2. **Insert file**: To insert a video available in the Drive.

#### Insert video

1. Navigate to the desired article in the Markdown editor.
2. Click the **Insert video** () icon.

   The **Insert video** panel appears.
3. Paste the video URL (YouTube, Wistia, and Vimeo) in the first text field.
4. Give an alternative text for the video in the **Alt Text** field.
5. Click **OK**.

![Adding videos in the markdown via video option](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Inserting_video_in_Markdown_.gif)

---

#### Insert file

Navigate to the desired article in the Markdown editor.

1. Click the **Insert file** () icon.
2. Select the desired video from the Drive and click **Insert**.
3. Update the desired pixel height and width.

> NOTE
>
> Similarly, you can add videos to the WYSIWYG editor.

![Inserting videos via file option](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Inserting_the_file_in_markdown_.gif)

---

## Insert a video in Advanced WYSIWYG editor

1. From the Advanced WYSIWYG editor, navigate to **Insert** () > **Video**.
2. The **Insert Video** panel has three options or methods to insert a video:

   1. **Embed URL**:

      * Enter video URL: Self-hosted video URL from platforms such as Wistia, YouTube, Vimeo, and more. Update the desired pixel height and width in the editor.
      * Enter embed URL: The URL available on Video hosting platforms.
   2. **Embed code**: The embed code snippet is available with the video on specific platforms such as Wistia, YouTube, Vimeo, and more.
   3. **Drive**: Choose the desired video from the drive.
3. Click "**Insert video**".

> NOTE
>
> You can also use Slash commands `/video` to insert videos in the Advanced WYSIWYG editor.

![Inserting videos in Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-adding_videos_in_advanced_WYSWYG_Editor.gif)

---

### FAQ(s)

**Can the search function in Document360 search captions within videos?**

No, video captions will not be fetched in the search results.

**Can Document360 detect broken videos in the articles?**

Document360's link analytics feature can identify broken links. This feature validates your project's links, including media files, videos, and images.

> For more information, please refer to the article on [Link Status](/help/docs/links-status).

A centralized, cloud-based storage repository in Document360 for storing and managing all files.

<a id="adding-files-to-articles"></a>

## Adding files to article

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Supporting files can clarify and expand on the article’s content, making complex topics easier to understand. In Document360, there are two ways to add files in the articles and category pages:

1. Adding files
2. Attaching files

## Adding files to articles

Adding a file to an article means embedding it directly into the body of the article, rather than as an attachment for download. To do this, the file must first be uploaded to the [Drive](/help/docs/drive-getting-started).

### Adding files in Markdown editor

1. Navigate to the desired article in the Markdown editor.
2. Select the **Insert file** () icon.
3. Choose the file from the Drive that you wish to add.
4. Click **Insert**.

> NOTE
>
> In the **Drive**, you can filter () files by:
>
> * **Uploaded:** Filter by All, 7 days, 30 days, 3 months,  1 year, or even a custom date.
> * **Uploaded by:** Select the desired contributors from the list.
> * **Type:** Choose the file type, such as PDF, JPEG, etc.
> * **Tags:** Sort files based on the tags.

![1_ScreenGIF-Update_Adding_files_in_article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Update_Adding_files_in_article.gif)

### Adding files in the Advanced WYSIWYG editor

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. To insert file, use slash command `/Insert file` or go to **Insert > Insert file**.

   The Insert file panel will appear in the editor.
3. You can insert the file in three ways:

   1. Drag and drop the file into the panel.
   2. Click on the **Click here to upload** text and select the desired file from your local storage.
   3. Click **Open file picker** and choose a file from the drive.
4. Click on the **Delete** () icon to remove the insert file panel if needed.

> NOTE
>
> After adding file in the article, click **Download** () to download the file in the Knowledge base site.

![Adding files to an article in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Adding_files_in_Adv_WYSIWYG_editor.png)

---

## Attaching files to articles

Attaching a file to an article allows it to appear as a downloadable link rather than embedding it directly into the article body. In the Knowledge base site, attached files are aligned above the tags and Table of Contents on the right side of the page.

1. From the desired article, click on **More** (•••) icon on the top right side.
2. Click on the **More article options**.
3. In the **Attachments** section, attach your file in one of two ways:

   * **URL**: Enter the URL and click **Insert**.
   * **Upload an attachment:** Choose your desired file and click **Upload**.
4. Once done, click **Save**.

> NOTE
>
> If you attach more than one file to an article, you can arrange the display order by dragging and dropping the file names in the menu.

![Adding files to an article in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_attachments_in_the_article.gif)

**Knowledge base site view**

![Adding files to an article in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-attached_file_in_an_article.png)

---

### FAQ (s)

**What is the difference between adding and attaching files?**

Adding files embeds them directly into the article body, while attached files are aligned above the tags and Table of Contents on the right side of the page.

**Can I filter files in the Drive when adding them to an article?**

Yes, you can filter files by upload date, contributor, file type, and tags.

**What should I do if my attached file is not visible in the Knowledge base site?**

If the attached file is not visible in the desired article, follow these steps to enable article files on the Knowledge base site:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO**.
2. In the **Article settings** tab, expand the **Article right** accordion.
3. Turn on the **Show article files** toggle if it is turned off.

<a id="linking-to-other-articles"></a>

## Adding hyperlinks

**Plans supporting the use of hyperlinks**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can add hyperlinks to text, images, or files within your articles or category pages. Hyperlinks help users navigate seamlessly between related content, external resources, or specific sections within the same article, enhancing the overall reading experience.

Imagine you're writing a installation guide for software installation. You can add a hyperlink to the download page, so users can quickly access the required software without searching for it.

> NOTE
>
> Replicated articles cannot be added as internal links within other articles.

## Adding hyperlinks to an article

Markdown editor

Advanced WYSIWYG editor

To add a hyperlink in the Markdown editor, follow these steps:

1. Select the desired text and click the **Insert link** () icon at the top of the editor.

   The **Link** panel will appear.
2. In the **Link text** field, enter the text to be hyperlinked.
3. Choose one of the following linking options:

   * **Link to an existing article**: Start typing the article name in the **Search & link to existing article** field. A list of matching articles will appear.
   * **Link to a specific heading in the current article**: Use the **Link to the current article heading** dropdown to select an H2, H3, or H4 heading. The appropriate URL slug will be generated automatically.
   * **Link to an external URL**: Enter the desired URL in the **Link** field.
4. (Optional) To open the hyperlink in a new tab, select the **Open in a new tab** checkbox.
5. Click **Ok** to add the hyperlink to your content.

![Adding hyperlink in markdown editor in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_hyperlink_to_an_markdown_article.gif)

To add a hyperlink in the Advanced WYSIWYG editor, follow these steps:

1. You can access the hyperlink option in three ways:

   * Select the desired text, go to **Insert** () and click **Link**.
   * Select the desired text and press `Ctrl + K`.
   * Use the **Slash** `/`command and type `/link`.

   The **Link** panel will appear.
2. In the **Link text** field, enter the text to be hyperlinked.
3. Choose one of the following linking options:

   * **Link to an existing article**: Start typing the article name in the **Search & link to existing article** field. A list of matching articles will appear.
   * **Link to a specific heading in the current article**: Use the **Link to the current article heading** dropdown to select an H2, H3, or H4 heading. The appropriate URL slug will be generated automatically.
   * **Link to an external URL**: Enter the desired URL in the **Link** field.
4. (Optional) To open the hyperlink in a new tab, select the **Open in a new tab** checkbox.
5. Click **Insert** to add the hyperlink to your content.

![Adding hyperlink in Advanced WYSIWYG editor in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_hyperlinks_to_an_Advanced_WYSIWYG_editor.gif)

---

## Editing or unlinking a hyperlink

In the **Advanced WYSIWYG editor**, follow these steps to edit or remove a hyperlink:

1. Click the hyperlinked text. A floating menu will appear.
2. To manage the hyperlink:

   * **Open the link:** Click on the link to visit the URL.
   * **Edit the link:** Click on the **Edit** () icon to modify the hyperlink.
   * **Unlink the text:** Click on the **Unlink** () icon to remove the hyperlink.
   * **Copy the link:** Click on the **Copy** () icon to copy the hyperlink.

> NOTE
>
> In Markdown editor, you need to manually edit the hyperlink.

![Editing or unlinking a hyperlink in the Advanced WYSIWYG editor.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Editing_or_unlinking_an_article.gif)

---

## Bookmark links inside articles/page categories

When dealing with long articles or category pages, Bookmark links allow you to link directly to specific headings (H2, H3, H4) within the same article.

**For example:** If an article contains multiple sections, such as "Installation," "Configuration," and "Troubleshooting," you can create bookmark links for each heading. This allows readers to jump directly to the relevant section without scrolling.

In the **Advanced WYSIWYG editor**, follow these steps to bookmark links inside articles or page categories:

1. Select the desired text and click the **Insert** () and select **Link** ().

   Alternatively, select the desired text, and press `Ctrl+K`.

   The **Link** panel will appear.
2. In the **Link to the current article heading** field, choose a heading from the dropdown list. This creates a URL slug linking directly to that section.
3. If needed, select **Open in a new tab**.
4. Click **Insert**.

> NOTE
>
> * The **H3** and **H4** headings will only be available in the dropdown if enabled in settings. To enable them, navigate to Settings () > **Knowledge base site** > **Article settings & SEO** > **Article settings** > **Article right** and ensure **H3** and **H4** are selected.
> * If you're using the **Advanced WYSIWYG editor**, you can also press `Ctrl+K` to quickly add hyperlink to the text.

![Bookmark links inside articles or page categories in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Bookmark_links_inside_articles_page_categories.gif)

---

## Adding an Email link to an article

Markdown editor

Advanced WYSIWYG editor

To add an email link to an article in Markdown editor, follow the steps below:

1. Select the text you want to link and click the **Link** () icon.
2. In the Link field, use the following Markdown format to create an email link:

   `[link_text](mailto:email_id)`

> For example, if you want to add an email hyperlink to `test@gmail.com` with the link text "Email support", type:
>
> `[Email support](mailto:test@gmail.com)`.
>
> Outcome: [Email support](mailto:test@gmail.com)

![Adding an email link to an article in the markdown editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF-Adding_an_email_link_to_an_Article_in_markdown.gif)

To add an email link to an article in the Advanced WYSIWYG editor, follow the steps below:

1. Select the desired text and press `Ctrl + K` or use the **slash** command `/link`.

   The **Link panel** will appear.
2. In the **Link** field, type the desired email in this format: `(mailto:email_id)`.
3. Click **Insert**.

![Adding an email link to an article in the Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Adding_an_Email_link_to_an_Article_in_Advanced_WYSIWYG_editor.gif)

---

## Effect of changing an article heading on Hyperlinks

If you change the heading, the existing hyperlink will break.

**For example:** If you add a hyperlink to an H3 heading titled "Markdown editor" and later change the heading to "The Markdown editor," the hyperlink will break and no longer work.

**How to overcome this scenario?**

This method is applicable only in the **WYSIWYG editor**. When you directly update a heading, both the heading link and name are updated. However, to change the heading without affecting the heading link, you need to update the HTML tag for the heading ID.

Typically, an H2 heading is formatted as `<h2>Heading name</h2>`. To separate the heading link from the name, you can modify the tag as `<h2><a name="heading-link"></a>Heading name</h2>`.

> For example, you want to update the H2 heading name 'How Risk Analytics Works' to 'Risk Analytics'
>
> * Your current heading tag would be `<h2>How Risk Analytics Works</h2>`
> * Replace it with `<h2><a name="How-Risk-Analytics-Works"></a>How Risk Analytics Works</h2>`  
>    Heading link - `How-Risk-Analytics-Works`  
>    Heading name - `How Risk Analytics Works`
> * Now change the heading name to Risking analytics, and don't change the heading link  
>   `<h2><a name="How-Risk-Analytics-Works"></a>Risk Analytics</h2>`
> * If you have added a hyperlink for this heading, it will work fine even after changing the heading name. This is because the heading link is kept the same.

---

## **Effect of Machine translation on Hyperlinks**

When an article is translated, all internal hyperlinks in the original language are updated to link to the corresponding translated articles in the new/draft state.

**For example:** An article in English contains internal links to other articles. When translated to French, those links will redirect to the French versions of the linked articles.

> NOTE
>
> To avoid broken links in translated articles, ensure that article slugs are consistent across languages.

> For example, if the English article has the slug `/getting-started`, use the same slug for the translated version (e.g., `/getting-started` for German). This will help maintain link consistency. This is because when you add a redirect rule, the hyperlink URL text for English language is `docs/en/article_slug` and for German language is `docs/de/article_slug`.

---

### Types of URLs

#### Absolute path/URL

An Absolute path/URL includes the entire web address, from the protocol (HTTP/HTTPS) to the domain name and the path within the site. It is the complete address required to access a specific webpage, regardless of the site you are currently on. An absolute URL is used when linking to external websites or when you want to specify the full address of a page.

**For example**: `https://docs.document360.com/docs/v3/overview/interface`

#### Relative path/URL

A Relative path/URL is a shortened version of the URL that only specifies the location after the domain. It assumes that the link is within the same site and shares the same root domain. The relative path always starts with a forward slash (`/`). It is commonly used for internal links within the same site.

In Document360, relative paths are used in several places, such as the linking feature in the editor, article redirect rules, tag redirect rules, and the ticket deflector.

**For example**: `https://docs.document360.com/docs/v3/overview/interface`

Relative path: `/v3/overview/interface`

---

### FAQs

#### How do I link to an existing article in my Knowledge base?

Highlight the text you want to link, click on the **Link** () icon in the editor toolbar, type the article name in the search field, select the article, and click **Insert**.

#### Can I link to headings within the same article?

Yes, you can link to headings (H2, H3, H4) within the same article using the hyperlink () tool in the editor.

#### Do hyperlinks get auto-updated when I translate an article?

Yes, when you translate an article, all hyperlinks in the default language will direct to the respective translated language in the new article.

#### How can I link a new article to another article before it gets published?

You can link new unpublished articles to other articles before publishing them by following these steps:

1. Hover over the desired text in the editor and click the **Insert link** () icon.
2. In the **Search & link to existing article** dropdown, enter the name of the new article and select it.
3. If needed, check the **Open in a new tab**option to have the link open in a new tab.
4. Once finished, click **Insert**.

> NOTE
>
> Until you publish the linked new article, the link will be in a broken state.

#### Does an article heading hyperlink still work when I change the heading name?

No, hyperlinks would not work when you change the heading name. For example, if you have added a hyperlink for the H3 heading as “Markdown editor”, and later you change the H3 heading to "The Markdown editor", then the hyperlink would not work.

Visit this [link](https://docs.document360.com/docs/linking-to-other-articles#does-an-article-heading-hyperlink-still-work-when-i-change-the-heading-name) to find a workaround.

**Bookmark links**, also known as internal hyperlinks or cross-references, allow readers to navigate to specific sections within the same document or webpage. These links improve accessibility and help users quickly find relevant content.

<a id="code-blocks"></a>

## Code blocks

**Plans supporting Code blocks**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 uses [Prism.js](https://prismjs.com/) for syntax highlighting and supports various programming languages in code blocks, including:

* HTML
* C#
* Java
* JavaScript
* XML
* JSON
* CSS
* SQL
* Python
* Markdown
* PHP
* PowerShell
* Text

For an exhaustive list of languages that are supported, please refer to the documentation for [Prism's Supported languages](https://prismjs.com/#supported-languages).

---

## Creating code blocks in the Markdown editor

In the Markdown editor, there are two methods to create fenced code blocks:

1. Use **triple backticks** ````` before and after the code snippet.

For example:

```csharp  
 [your code snippet]   
 ```

2. Use the shortcut `Ctrl+Shift+P` or click the **Insert codeblock** () icon from the formatting toolbar.

![1_ScreenGIF-Creating_code_blocks_in_the_Markdown_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_code_blocks_in_the_Markdown_editor.gif)

---

## Creating code blocks in the WYSIWYG (HTML) editor

1. Navigate to the desired article in the WYSIWYG editor.
2. Click the **Code block** () icon, and a panel will appear.
3. Select your desired language from the drop down menu.
4. Enter your code into the **Insert your code** field.
5. Click **Insert** to add the code block to your article.
6. To edit a code block, click the **Edit** () icon on the right side of the code block.
7. To delete a code block, click the **Delete** () icon on the right side of the code block.

![2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_code_blocks_in_WYSIWYG_HTML.gif)

---

## Creating code blocks in the Advanced WYSIWYG editor

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. You can create code blocks in three ways:

   1. In the **Insert** section, click **Code block** ().
   2. Enter three backticks ````` and press **Enter**.
   3. Use the slash command `/code block` and press **Enter**.
3. Click on the created code block, a floating menu will appear.
4. Select the desired heading .
5. Click the Copy () icon to copy the code.
6. Click the Delete () icon to delete the code block.
7. Enter the indented code inside the code block.

![3_ScreenGIF-Creating_code_blocks_in_Advanced_WYSIWYG_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Creating_code_blocks_in_Advanced_WYSIWYG_editor.gif)

---

#### Language shortcodes

* C: c
* C++: CPP, c++
* C#: csharp
* CSS: css
* CoffeeScript: coffeescript
* HTML: html
* JSON: json
* Java: java
* JavaScript: javascript, js
* Objective-C: objective-c, obj-c, objc
* Objective-C++: objc++
* PHP: php
* Perl: perl, pl
* Python 3: python3, py3
* Python: python, py
* Ruby: ruby, rb
* Snobol: snobol
* XML: xml

#### Custom language

If the desired language is unavailable, you can create a **Custom Language** code block.

1. **In the Markdown editor**: After inserting the code block, add a title by entering the desired text after the initial backticks:

```
```HTML
Hello world
```
```

Markdown

Copy

2. **In the WYSIWYG editor**: Select **Custom** from the **Select Language** dropdown and enter your desired title in the **Enter your title** field.
3. **In the Advanced WYSIWYG editor**: Use the search bar in the dropdown to select **Custom**, then click the **Edit** () icon to enter your title and click **Update**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ScreenGIF-Custom_Language_in_code_block.gif)

---

### Indentation and code blocks

Any text indented by at least four spaces will be treated as a code block. This method is useful for longer code snippets, but it will not include syntax highlighting.

The following code block is created using indents instead of backticks.

```
def test():
    logging.error('Test failed')
```

Python

Copy

---

### Code block examples

The following code blocks are created in various programming languages, including C#, JavaScript, XML, JSON, PowerShell, and Ruby, to dynamically showcase syntax and functionality.

**C# block**

```
using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}
```

C#

Copy

**Javascript block**

```
function $initHighlight(block, cls) {
try {
if (cls.search(/\bno\-highlight\b/) != -1)
return process(block, true, 0x0F) +
` class="${cls}"`;
} catch (e) {
/* handle exception */
} 
export $initHighlight;
```

JavaScript

Copy

**XML block**

```
<book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
```

XML

Copy

**JSON block**

```
{
    "one": 2,
    "three": {
        "point_1": "point_2",
        "point_3": 3.4
    },
    "list": [
        "one",
        "two",
        "three"
    ]
}

```

JSON

Copy

**PowerShell block**

```
$user = Read-Host "Enter Username"
$pass = Read-Host "Enter Password" -AsSecureString
```

PowerShell

Copy

**Ruby block**

```
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```

Ruby

Copy

---

### FAQs

**What programming languages are supported for syntax highlighting in code blocks?**

Document360 supports syntax highlighting for languages such as HTML, C#, Java, JavaScript, XML, JSON, CSS, SQL, Python, Markdown, PHP, PowerShell, and Text.

**How do I indent the contents in a code block having multiple lines?**

To indent, manually add spaces at the start of each line where you want indentation. If you're pasting code, use the shortcut `Ctrl + Shift + V` to preserve the formatting.

**How can I create a code block in the Markdown editor?**

You can create a code block in the Markdown editor by using triple backticks ````` before and after your code snippet or by using the shortcut `Ctrl+Shift+P`.

**Is it possible to create a custom language code block?**

Yes, select **Custom** from the language dropdown, then enter your desired title.

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

<a id="private-notes"></a>

## Adding private notes

**Plans support private notes**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Private notes** are a useful feature in Document360 that allow project team members and specific reader groups to see content that remains hidden from the general public. These notes can be added to articles in both the [**Markdown**](/help/docs/the-markdown-editor)and [**Advanced WYSIWYG**](/help/docs/advanced-wysiwyg-editor-overview) editors, giving you more control over what content is visible to different audiences.

## Using private notes

Private notes are ideal for leaving reminders or editorial comments within your article. They are especially useful for:

* Asking a team member to double-check information.
* Keeping notes for future updates or improvements.
* Providing extra context or instructions for other project team members working on the documentation.

> NOTE
>
> When readers download an article containing a private note via the **Download as PDF** option in the Knowledge base site, the private note is **not** included. However, if the team accounts use their browser's **Print/Save as PDF** function, the private note will be included in the exported file.

---

## Private notes in the Markdown editor

To add a private note in the Markdown editor:

Click the **Private notes** icon from the toolbar.

Alternatively, use the following syntax to create a private note:

```
:::(Internal) (Private notes)
Only visible to team accounts
:::
```

Markdown

Copy

![4-Screenshot-Markdown_editor_private_notes](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4-Screenshot-Markdown_editor_private_notes.png)

You can edit both the title (Private notes) and content (Only visible to team accounts) of the private note. You can remove a private note by deleting the corresponding syntax. This will remove the note from both the article and the preview pane. Private notes added in this format will not be visible on the public version of your article but can be accessed by team members.

### Delete private note

To remove a Private notes from the article or category page, delete the corresponding syntax from the editor.

---

## Private note in the WYSIWYG editor

1. Navigate to the desired article in the WYSIWYG editor.
2. Click the **Private note** icon from the toolbar.
3. Click on the private note, and a floating menu will appear with the following options:

   1. [Visibility settings](/help/docs/private-notes#visibility-settings) ()
   2. **Copy** () - Click to copy the private note.
   3. **Delete** () - Click to delete the private note.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Private_note_in_Advanced_WYSIWYG_editor.png)

---

## Private note in the Advanced WYSIWYG editor

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. Use the slash comment `/Private note` or go to **Insert** () > **Private notes.**
3. Click on the private note, and a floating menu will appear with the following options:

   1. [Visibility settings](/help/docs/private-notes#visibility-settings) ()
   2. Copy () icon - Click on the Copy () icon to copy the private note.
   3. Delete () icon - Click on the delete () icon to delete the private note.

> NOTE
>
> Private notes cannot be deleted from a **published** article or category page. You must first **Edit** the article first to remove the note.

#### Visibility settings

Click on the **Visibility Settings** () icon. A popup window will appear with three options:

* **All team account:** This is the default setting when adding a private note. By default, the toggle is turned on, and the private note appears to all team members added to the project.
* **Security groups**: Click the dropdown arrow to view and select the intended team account groups available in the project. Only these groups can view the private note.
* **Reader groups**: This option applies only in **Private** and **Mixed** mode Knowledge Bases. Click the dropdown arrow to view and select the intended reader groups available in the project.

> NOTE
>
> Selective visibility settings for private notes are only available in the WYSIWYG and Advanced WYSIWYG editors.

![_ScreenGIF-Updated_Private_note_in_Advanced_WYSIWYG](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/_ScreenGIF-Updated_Private_note_in_Advanced_WYSIWYG.gif)

---

### FAQs

**What are private notes in Document360?**

Private notes are a feature that allows project team members and specific reader groups to see content that remains hidden from the general public.

**Can I add private notes in both Markdown and WYSIWYG editors?**

Yes, private notes can be added to articles in both the Markdown and Advanced WYSIWYG editors.

**How can I delete a private note?**

To delete a private note, you need to remove the corresponding syntax in the Markdown editor or use the delete option in the WYSIWYG or Advanced WYSIWYG editors.

**Can private notes be visible to all team members?**

Yes, by default, private notes are visible to all team members added to the project, but you can adjust visibility settings.

**What visibility settings are available for private notes?**

In WYSIWYG and Advanced WYSIWYG editors, the visibility settings include options for all team accounts, specific security groups, and reader groups in Private and Mixed mode Knowledge Bases.

**Is it possible to edit private notes after they are created?**

Yes, you can edit both the title and content of the private note after it has been created.

**Do private notes appear in the public version of the article?**

No, private notes are not visible in the public version of the article.

**Can I use private notes for reminders or editorial comments?**

Yes, private notes are ideal for leaving reminders or editorial comments within your article.

Text elements within an article that are visible only to project team accounts and specific reader groups. These notes do not appear in public articles and can be added using either editor in Document360.

<a id="embedding-microsoft-streams-video-in-articles"></a>

## Embedding Stream videos in articles

**Plan supporting embedding stream videos in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can insert both Microsoft sharePoint stream and the latest stream videos into a Document360 article. These videos can be embedded in both the Markdown and Advanced WYSIWYG editors.

---

## Embedding SharePoint Stream videos

1. Navigate to the [Streams](https://www.office.com/launch/stream) platform.
2. Select the video you wish to embed in your article.
3. Click on **Share** at the top-right of the video page, then select **Embed code**.
4. An embed panel will appear with additional parameters:

   * Choose the **Start from** timestamp (e.g., 01:23).
   * Choose the **Player size** (e.g., 640x360, 1280x720, etc.).
   * Optionally, select the following settings:

     + **Autoplay**
     + **Responsive**
     + **Show title**
5. Click **Copy embed code**.

> NOTE
>
> Ensure you manage the access permissions for the Stream video you embed in the article. Without proper permissions, the readers won't be able to view it. For more information, refer to the Microsoft Stream [support article](https://support.microsoft.com/en-us/topic/permissions-in-microsoft-stream-0b646420-0868-494f-8921-d7f3e5f9cced#) on permissions.

![Embedding stream videos in the article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Embedding_sharepoint_stream_videos.gif)

---

## Embedding Microsoft Stream videos in article

#### Markdown editor

1. Navigate to the desired article in the Knowledge base portal.
2. Paste the embedded video code in the indented location within the article.

![Embedding stream videos in the article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Embedding_videos_in_Markdown.png)

---

#### Advanced WYSIWYG editor

You can embed videos in two ways using the Advanced WYSIWYG editor:

**Method 1:**

1. While editing the article, click on the **Code View** () icon.
2. Paste the embed code in the desired location.
3. Press **Ctrl + S** to save the changes.

**Method 2:**

1. Using the slash menu `/Video` or go to **Insert** () > **Video**.

   The **Insert video** panel will appear.
2. In the **Embed code** tab, paste the copied embed code.
3. Click **Save**.

![Embedding stream videos in the article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Microsoft_stream_videos_in_Advanced_WYSIWYG_editor.gif)

---

#### Knowledge base site view

![4_Screenshot of Knowledge base site view Embedding videos](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Knowledge_base_site_view_Embedding_videos.png)

---

### FAQs

**Can I embed Stream videos on external pages?**

Yes, you can use the **Embed Code** option on the video page. This option uses the `iframe` tag to add an inline video.

**How does embed code snippet look like?**

```
<iframe src="<Stream video URL>" width="640" height="360" frameborder="0" scrolling="no" allowfullscreen title="<Video_file_name>"></iframe>
```

Plain text

Copy

<a id="embedding-google-forms-in-article"></a>

## Embedding Google forms in articles

**Plans supporting Embedding google forms in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can embed **Google forms** inside your Knowledge base article using the Embed HTML code block.

## Embedding Google forms

1. Go to the [**Google forms**](https://docs.google.com/forms/u/0/) page and login with your Google account.
2. You can create a new form or choose from any existing one.
3. Select the form you want to embed in your article.
4. Click the **Send** button at the top.

   The **Send form** panel will appear.
5. Select the **<>** tab to get the **Embed HTML** code.
6. Click **Copy** to copy the **iframe src** link.
7. Head back to your desired article in the Knowledge base portal.
8. In the **Markdown** editor, paste the iframe src link directly into the article.
9. In the **Advanced WYSIWYG** editor, click the **Code view** () icon and paste the iframe src link.
10. The form will appear in your article.

After publishing, readers can interact with the form for data entry, surveys, feedback, or any other purpose.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Embedded_form_in_Advanced_WYSIWYG_editor.gif)

**Knowledge base site view**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Embedded_form_Knowledge_base_site.png)

---

### FAQs

**How can I embed a Google form in my Knowledge base article?**

You can embed a Google form by using the Embed HTML code block in your article.

**What steps are involved in embedding a Google form?**

The steps include creating or selecting a form, copying the Embed HTML code, and pasting it into your article.

**Can readers interact with the embedded Google form after publishing?**

Yes, readers can interact with the form for data entry, surveys, feedback, or other purposes.

<a id="embedding-a-drawio-diagram"></a>

## Embedding a Draw.io diagram

**Plans supporting Embedding a Draw.io diagram**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Diagrams.net** (commonly referred to as Draw.io) is a web-based open-source tool for creating diagrams that enables users to design flowcharts, UML diagrams, entity relationships, network diagrams, mock-ups, and more.

> NOTE
>
> All mentions of Diagrams.net or Draw.io in this support article refer to the same tool.

Diagrams.net uses Google Drive to store finished diagrams. You can embed Diagrams.net images into Document360 by using HTML and an autogenerated link, which you can find in the Diagrams.net app.

> NOTE
>
> Diagrams stored on Google Drive, Dropbox, etc., are private by default. When embedding a diagram in an article, ensure that the privacy settings for that diagram are set to public.

---

## Embedding a Draw.io diagram

There are two methods to embed Draw.io (Diagrams.net) diagrams into your Document360 editors:

1. Using the embed option
2. Exporting as an image

#### Method 1: Using the embed option

1. Navigate to [Diagrams.net](https://www.drawio.com/).
2. Click **File** > **Embed** and choose **Image.**
3. Click **Embed.**
4. Click **Copy** to copy the generated image tag.
5. Head back to the Knowledge base portal.
6. In the **Markdown** editor, directly paste the copied code.
7. In the **Advanced WYSIWYG editor**, click the Code view () icon and paste the code in the desired location.

> NOTE
>
> You can adjust the height and width of the diagram as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Using_the_embed_option_Draw_io.gif)

---

#### Method 2: Exporting as an image

1. Navigate to [Diagrams.net](https://www.drawio.com/).
2. Click **File** > **Export as** and choose your desired image format**.**
3. Click **Export.**
4. Enter the **File name** and save it to your desired location (**Google Drive**, **OneDrive**, **Dropbox**, **GitHub**, **GitLab**, or your **Device**).
5. Click **Download**.
6. Head back to the article in the Document360 editor.
7. Click **Insert image** () and select **From Upload/URL**.
8. Select the intended image and click **Insert**.

> NOTE
>
> For more information, read the article on [adding images to articles](/help/docs/adding-images-to-articles).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Embedding_Draw_io_via_image_Export.png)

---

### FAQs

**Can I embed a Draw.io diagram in Document360?**

Yes, you can embed Draw.io diagrams into Document360 articles using HTML and an autogenerated link from the Diagrams.net app.

<a id="all-articles-overview-page"></a>

## All articles - Overview page

**Plans supporting bulk operations on all articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **All articles** feature in Document360 simplifies article management by enabling users to perform bulk actions on multiple articles at once. Now, in addition to individual articles, this feature also displays page categories, allowing for a more comprehensive view and streamlined management. Available actions include publishing, previewing, copying links, hiding, moving, deleting, setting review reminders, checking live article status, creating tags, machine translation, downloading as PDF, and deprecating articles.

The **All articles** feature provides a solution to this challenge, enabling users to efficiently execute actions across multiple articles in one go.

For instance, imagine you're publishing ten articles and two page categories from various categories for a product launch. With the All articles feature, you can publish them simultaneously as part of your release documentation. In such a scenario, select the desired articles and page categories on the **All articles** page and execute a bulk publishing action.

> NOTE
>
> The **All articles** feature displays all articles, including page categories.

---

## Managing multiple articles with the All articles feature

To manage multiple articles and page categories with the **All articles** feature, follow the steps below:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.  
    The **All articles** page will appear.
2. Navigate to your project's different workspaces and languages using the drop-down at the top.
3. Click the **All articles** dropdown to filter articles by status.
4. Click **Export** to export the article list as a CSV file.
5. Click the **Filter** button, and from the dropdown menu, select options like Status, Date, or Tags to narrow your results. For more information, read the article on [Using filter in All articles page](/help/docs/filter-bulk-operations).
6. Select the desired articles you wish to perform the following bulk operation actions:

1. **Publish**: Publish multiple selected articles in one go. This option will appear only if you have selected new or draft articles.
2. **Publish later:** Schedule the selected articles to be published at a specified time. This option is enabled only if you have selected new or draft articles.
3. **View preview/View in KB**: **View preview** option will appear to preview the article for new and draft articles in the Knowledge base site. For published articles, by selecting **View in KB**, you can open them in the Knowledge base site.
4. **Copy link:** Copy the link for the selected articles.
5. **Hide**: Hide the selected articles so they are no longer available on the Knowledge base site.
6. **Move** to: Move the selected articles to different categories or workspaces.
7. **Delete**: Delete the selected articles. They will be sent to the recycle bin for 30 days, during which time they can be restored if needed.
8. **Review reminder**: Set a review reminder for the selected articles.
9. **Live article status**: Define the status for the selected articles.
10. **Add tags**: Create and assign new or existing tags to the selected articles.
11. **Add labels:** Create and assign new or existing labels to the selected articles.
12. **Machine translate**: Automatically translate selected articles into other languages with the Machine Translate feature.
13. **Download as PDF**: Download the selected articles as a PDF. If multiple articles are selected, they will be combined into one PDF in the chosen order.
14. **Deprecate**: Mark the selected articles as deprecated. These articles will display a Deprecated status tag in the Knowledge base site.

> NOTE
>
> In the **All articles** feature, if a page category contains both articles and subcategories, you cannot perform actions such as Hide, Move, or Delete on that page category. However, if the page category has no sub-articles, the Hide, Delete, and Move options will be applicable.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-All_articles_Overview_page(1).png)

---

### FAQs

**Can I publish multiple articles at once?**

Yes, to publish multiple articles simultaneously using the All articles feature, navigate to the **All articles** page, select the desired articles and page categories, and then select **Publish**. This feature eliminates the need to publish each article individually.

**Can I hide multiple articles at once?**

With the All articles feature, you can easily hide several articles at once. Select the articles you want to hide and use the **Hide** option to make them inaccessible to readers. The hidden articles are visible to team accounts in the portal and can be unhidden anytime.

**How does the All articles feature enhance article management efficiency?**

The All articles feature enhances efficiency by allowing bulk actions such as deletion, status change, and more on multiple articles simultaneously. This streamlines tasks, saving time and effort compared to performing these actions individually.

**Can I reuse custom filters to narrow down results?**

Yes, the All articles feature in Document360 is designed to adapt to your needs. It offers a versatile approach, allowing you to set up custom filters and reuse them in the future.

**How do I change the status of all published articles to draft in a bulk operation?**

No, you cannot change the status of published articles to draft as a bulk operation on the **All articles** page. However, you can manually navigate to each article and change its status to draft individually.

<a id="filter-bulk-operations"></a>

## Using filters in All articles page

**Plans supporting bulk operations on all articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Accessing 'All articles' filters

To manage filters in the **All articles** feature, follow the steps below:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.  
    The **All articles** page will appear.
2. Navigate to your project's different workspaces and languages using the drop-down at the top.
3. Click the **All articles** dropdown to filter articles by status.
4. Use the basic filters or custom filters to narrow down the results.
5. The filters applied can be viewed at the top of the window, and they include the following:

   1. Status
   2. Review reminder
   3. Starred
   4. Visibility
   5. Read receipt
   6. Contributor
   7. Category
   8. Date
   9. Tags
   10. Labels

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-FIlters_in_All_Articles.png)

#### **a. Status**

* **All**: All articles, irrespective of the status.
* **Published**: Articles with **Published status**.
* **Scheduled**: Articles that are scheduled for publishing.
* **Draft**: Articles with **Draft status**.
* **New article**: Articles with **New article** status.
* **Broken links**: Articles that have broken links based on the recent [Link validation](/help/docs/links-status).
* **Deprecated**: Articles marked as **Deprecated** in the Knowledge base site.

#### b. Review reminder

* **All**: All articles, irrespective of the review status.
* **Fresh**: Articles without the **Needs review** status.
* **Stale**: Articles with the **Needs review** status.

#### c. Starred

* **All**: All articles, irrespective of the starred status.
* **Starred**: Articles with **Starred status**.
* **Not starred**: Articles without **Starred status**.

#### d. Visibility

* **All** - All the articles, irrespective of visibility status.
* **Visible** - All articles in the selected workspace/language except for hidden articles.
* **Hidden** - Hidden articles are marked with a strikethrough, meaning they are not visible on the Knowledge base site but still exist in your project.

#### **e. Read receipt**

* **All**: All articles, irrespective of read receipt status.
* **Enabled**: Articles with **Read receipt** enabled.
* **Disabled**: Articles with **Read receipt** disabled.

> NOTE
>
> Read receipt feature is available only for **Private** and **Mixed** projects in **KB site 2.0**. For more information, read the article on [Read receipt](/help/docs/read-receipt).

#### f. Contributor

You can search for individual contributors using the search bar and select one or more contributors from the list. The contributors are all Team accounts in the project. The default selection is **All**.

#### g. Category

You can filter articles based on their category or subcategory (visible when you expand the root-level category). You can choose one or more categories using this filter.

> NOTE
>
> Selecting a category will show only articles under that category. To select articles under a subcategory, pick them manually.

#### h. Date

You can filter articles based on their last **Updated date**. All articles in **Published**, **New**, **Draft**, and **Deprecated** status will appear.  
You can select from the preset time intervals or add custom dates. Once you choose the date, the specified time period (For example, `Jun 28, 2022` to `Jun 28, 2023`) will appear next to the selection.

* **All**
* **7 days**
* **30 days**
* **3 months**
* **1 year**
* **Custom date**

#### i. Tags

You can search for individual tags using the search bar and select one or more tags from the list. The default selection is **All tags** and **None** (articles with no tag association).

#### j. Labels

You can search for individual labels using the search bar and select one or more labels from the list. The default selection is **All labels** and **None** (articles with no label association).

---

### Custom filter

You can save a custom filter in **All articles** that you can reuse.

> **For example,** you can create a custom filter for your documentation team members with a specific date range and status indicator.

Saved custom filters can be accessed using the expand arrow to the right of the **Filter** button.

#### Saving a custom filter

1. Navigate to the Documentation () section in the Knowledge base portal.
2. Click **All articles** at the top-left of the page.  
   The **All articles** page will appear.
3. Click the **filters** dropdown, choose the desired filter, and click **Apply**.

   The applied filters are visible at the top of the list.
4. Click **Save filter**.
5. The **Save filter** panel will appear.
6. Type the intended **Filter name** (up to 30 characters).
7. Turn on the **Share filter with team members** toggle if you want the filter to be available to other team accounts. (If the toggle is not enabled, the custom filter can only be used by you).
8. Once done, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Saving_a_Custom_filter.png)

#### Deleting a custom filter

1. Click the expand arrow () icon near the **Filter** button.
2. Hover over the desired custom filter and click **Delete** () icon.
3. Click **Yes** in the confirmation prompt.

> NOTE
>
> Once a custom filter is saved, you cannot edit it. After deleting a custom filter, you cannot revert back.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Deleting_a_custom_filter(1).png)

---

## Clear filters

You can clear the applied filter in three ways:

1. Click **Clear all** on the top of the window.
2. Navigate to the **Filter** dropdown and click **Clear**.
3. To remove an individual filter, click the **X** next to the applied filter visible above the articles list section.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Clear_filters_in_All_articles_page.png)

---

### FAQs

#### What filters can I apply to narrow down the articles?

In All articles section, you can apply filters such as Status, Review reminder, Starred, Visibility, Read receipt, Contributor, Category, Date, and Tags.

#### Can I save a custom filter for future use?

Yes, you can save a custom filter in **All articles** that you can reuse later.

#### What should I do if I want to clear all applied filters?

You can clear all applied filters by clicking **Clear all** at the top of the window or using the Filter dropdown.

#### Why is the Read receipt feature not available in my project?

The Read receipt feature is available only for **Private** and **Mixed** projects in KB site 2.0.

<a id="export-bulk-operations"></a>

## Export All articles list

**Plans supporting bulk operations on all articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can export the list of articles and their status as a .csv (comma-separated values) file. You can filter the desired fields from the extracted CSV file and export the report.

> For example, you might want to export the published articles of a specific contributor from the last month.

---

## Exporting All articles

To export a complete list of all articles in your knowledge base,

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.  
    The **All articles** page will appear.
2. Navigate to your project's different workspaces and languages using the drop-down at the top.
3. Click the **All articles** dropdown to filter articles by status.
4. Choose the desired filters from the **Filter** () button.

   The following filter options are available:

   * **Status**
   * **Review reminder**
   * **Starred**
   * **Visibility**
   * **Contributor**
   * **Category**
   * **Date**
   * **Tags**
   * **Labels**
5. Once done, click **Apply**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-FIlters_in_All_Articles.png)

3. Click the **Export** ()button next to the filter.

   This action downloads the generated file to your device’s local storage in .csv format.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Export_All_articles_list.png)

The exported file consists of the following details:

* **Article title**
* **Category title**
* **Article status**
* **Date**
* **Portal URLs**
* **Site URLs**

> NOTE
>
> The downloaded file can be viewed with Microsoft Excel, Open Office, Google Sheets, Notepad, or any CSV-compatible application.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Export_articles.png)

---

### FAQ

#### **How do I retrieve both articles and their URLs from my project?**

You can use our [API endpoint to get all article lists](https://apidocs.document360.com/apidocs/project-version-articles) article to get the article title and their corresponding URLs.

To retrieve this information:

1. Enter the required details in the API request.
2. Execute the query.

The Project Version ID needed for the query can be found using the [Get Project Versions endpoint](https://apidocs.document360.com/apidocs/get-project-versions) article.

#### How can I export draft articles?

You cannot export draft articles individually. However, you can export the category containing the draft articles. To do this, follow these steps:

1. Navigate to **Documentation** () > **All articles** () on top of the **Categories & Articles** section.  
    The **All articles** page will appear.
2. Click the **All articles** dropdown to filter articles by status. Select **Draft** status.
3. Choose the **Category** filter from the **Filter** () button.
4. Select the category that includes the draft articles you want to export.
5. Click **Export** to export the entire category to access the draft articles in it.

<a id="review-reminders"></a>

## Article review reminder

**Plans supporting article review reminder**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Review reminders** help team accounts deliver the most accurate information to customers and internal teams by alerting project members when an article is ready for review. This helps keep your articles up to date.

---

## Review reminder

Create and apply review reminders to flag an article for review immediately or set the review reminder to trigger on a specified date. You can also apply a review reminder individually or to a group of articles. When an article needs review, a red badge (article status indicator) will appear on the left of each article title in the documentation editor.

### Creating a review reminder for an article from the Documentation editor

1. Navigate to the desired article in the Knowledge base portal.
2. Click on the More (•••) icon in the top right corner and select **More article options**.

   The **Article settings** pane will appear.
3. The **Review reminder** tab will be selected by default.
4. Select a date for the reminder to trigger. Options include, Now, 30 days, 3 months, and Custom date.
5. Enter a reason for the review. Ensure it is descriptive enough to provide context for the team member reviewing the article. This field is **optional**.

   > NOTE
   >
   > In the **Reason for review** field, you can enter up to 100 characters.
6. Click **Save**.

A **Needs review** tag will appear next to the article slug in the Documentation editor. When team members hover over the **Needs review** tag, they can view the reason for the review.

![ Creating a review reminder for an article from the Documentation editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Review_reminder_in_more_options.png)

### Clearing a review reminder

Once an article in need of review has been edited and updated, follow these steps to clear the review reminder state:

1. Navigate to the desired article and click the **Needs review** tag at the top of the article editor.
2. Click **Mark as reviewed**.

The **Needs review** tag will be removed, and the article status indicator will revert to the updated/draft/new status.

![Clearing a review reminder in documentation editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-clearing_review_reminder.gif)

---

## Marking multiple articles as Reviewed or Needs review

You can mark multiple articles as Reviewed or Needs review using two methods:

### **All articles**

1. Navigate to the Documentation () and click on **All articles** tab.
2. In the **Filter** () option, expand the **Review reminder** dropdown and select **Stale**.
3. Select the articles you want to mark as reviewed.
4. Click the **Mark as Reviewed** option at the top
5. Similarly, to mark multiple articles as **Needs review**, select the desired articles, click **Review reminder**, and choose the intended reminder days.

![Article review reminders in all articles section](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Marking_multiple_articles_in_all_articles.gif)

---

### **Article review reminders in content tools**

1. Navigate to Documentation () > **Content tools** > **Documentation** > **Article review reminders**.

   The **Article review reminders** page will appear with a list of reminders you have already created.
2. Click **Create review reminder.**

   The **Create reminder** pane will appear.
3. Enter the Reminder name, set the reminder frequency, and add the desired reviewers.
4. Once done, click **Next**.
5. Select the desired **Workspace** and **Language**.
6. Select the desired articles and click **Set reminder**.

> NOTE
>
> You can apply **Filter ()** options to retrieve articles based on category, contributor, tags and date.

![Article review reminders in content tools](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Articles_review_reminder_in_content_tools.gif)

---

## FAQ(s)

**How do I set a review reminder for all articles in my project?**

To set a review reminder for specific articles or all articles in your project, navigate to Documentation () > **Content tools** > **Documentation** > **Article review reminders**.

<a id="article-seo"></a>

## Article SEO

**Plans supporting the use of article and SEO settings in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Search Engine Optimization (SEO) is crucial for ensuring your articles gain visibility and reach their target audience effectively. Add SEO title and descriptions to your article to make improve their visibility on the web and get the article indexed in web Search engines.

---

## Adding SEO title and description

1. Navigate to the desired article in the Knowledge base portal.
2. Click on the **More** (•••) icon and click **SEO.**

   The **Article settings** window will appear.
3. Go to the **SEO** tab.
4. If needed, you can select the **Exclude from external search engine results** checkbox to prevent the articles from appearing in external search engines like Google, Yahoo, Bing, and more.
5. Enter the desired [**Meta title**](/help/docs/article-seo#editing-the-meta-title).

   > NOTE
   >
   > A meta title is a concise, impactful title displayed on search engine results pages (SERPs) that summarizes a webpage’s content. For optimal visibility, it’s typically recommended that it be between 5 and 60 characters.
6. The slug is auto-generated when the article is created. If needed, you can edit the slug.
7. Enter the desired **Description**.

   A meta description is a brief summary beneath the meta title, providing a snippet of the webpage's content. It's advisable to keep it compelling, informative, and within 150-160 characters to enhance click-through rates on search results.
8. You can use the **Ask Eddy AI**, an AI SEO description generator to help you create the description.

![Excluding articles from the external search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Excluding_articles_from_External_search_engines.png)

> NOTE
>
> To generate SEO description for multiple articles, navigate to Documentation **()** > **Content tools** > **Documentation** > **SEO description**.

---

### Editing the Meta title

The Meta title is a key HTML element that defines the title of a webpage. It plays an important role in **SEO**, helps with **search engine rankings**, and appears as the clickable title in search results and browser tabs.

To edit the Meta title, follow the below instructions:

1. Navigate to the desired article in the **Knowledge Base portal**.
2. Click on the **More (•••)** icon and select **SEO**.
3. Click on the **Meta title** field in the Article Settings panel.
4. Click **Save**.

   The updated Meta title will appear as the article title on the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Editing_Meta_title.gif)

---

### FAQs

#### If I update an SEO description for a document in English, will it automatically translate to French or any other language in which the document is available?

No, updating the SEO description for a document in one language will not automatically translate it into other languages. You will need to update the SEO descriptions in each specific language manually the document is available in to ensure accuracy and relevance.

#### Why is my AI SEO description generator disabled even though I have Eddy credits?

To use the Eddy AI for generating an SEO description, your article must have a word count of at least 200 words.

#### The article name on the Knowledge base site does not update even after renaming it in the portal. How can I change this?

To update the article name on the Knowledge base site, you will have to change the SEO’s meta title of the article.

1. Click on the More () icon and go to **SEO**.
2. Update the meta title and save the changes.

<a id="excluding-articles-from-searches"></a>

## Excluding articles from search engines

**Plans supporting the exclusion of articles from search engines**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To manage the visibility and confidentiality of your content, you can easily exclude certain articles or category pages from search engine results using Document360. This helps in ensuring the sensitive or internal content remains private and not publicly searchable.

---

## Excluding articles from external search engines

1. Navigate to the desired article or page category you want to exclude from search results.
2. Click the **More** (•••) icon in the top right corner.
3. From the dropdown menu, choose the **SEO** option.

   The **Article settings** panel appears.
4. In the **SEO settings**, select the **Exclude from external search engine results** checkbox.
5. Click **Save** to apply the changes.

By following these steps, you can include/exclude articles from the external search results.

![Excluding articles from the external search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Excluding_articles_from_External_search_engines.png)

---

## Excluding articles from Search results and Eddy AI assistive search

> NOTE
>
> For users on the new pricing plan, AI search suite is available for Business and Enterprise plans. For legacy (old plan) users, only customers who have purchased Eddy AI assistive search as an add-on will have **Exclude from Eddy AI assistive search** toggle.

1. Navigate to the desired article or category page in the Knowledge base portal.
2. Click the **More** (•••) icon in the top right corner of the article or category page.
3. From the dropdown menu, choose **More article options.**

   The **Article settings** panel will appear.
4. In the **Article settings** panel, go to **Search Visibility** section.
5. In the **Search visibility**, select the desired options:

   1. Click **Exclude from the knowledge base search** checkbox to excludes articles from search results within the knowledge base site.
   2. Click **Exclude from Eddy AI assistive search** checkbox to excludes articles from Eddy AI assistive search results within the knowledge base site.

> NOTE
>
> You can exclude articles from Eddy AI Assistive Search only if you have purchased the Eddy AI Suite.

6. Click **Save** to save the changes.

![Excluding articles from AI assistive search and knowledge base search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Excluding_articles_from_Eddy_AI_assistive_and_Search_engines.png)

> NOTE
>
> The article will still be accessible via the URL or navigation menu even after configuring it to be excluded from Knowledge Base searches and Eddy AI searches.

---

### FAQs

**What happens if the article is cloned?  Will the Search visibility settings remain the same?**

If the article is cloned, the Search visibility settings will also apply to the cloned article.

**What happens to hidden articles if we select to exclude articles from search engines?**

By default, if your article is hidden, its information will not be fetched in the knowledge base search or the AI assistive search.

<a id="changing-the-url-of-an-article"></a>

## Change the URL of an article

**Plans supporting changing the URL for an article**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

By default, when you create an article, articles will convert the article title into a slug and add it to your knowledge base URL.

For example, if an article title is “*This is a really good content*,” the resulting URL would be: `docs.yourcompany.com/[project version]/docs/this-is-really-good-content`.

You can easily change the slug of the article URL inherited from the title, `.../this-is-really-good-content`.

> NOTE
>
> Changing an article’s title does not automatically change the article slug.

---

## Changing the slug of an article

You can change the slug of an article in two ways.

**Method 1**

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **More**() icon in the top right corner and then choose **More article options**.
3. In the **Article settings** panel that appears, go to the **SEO** tab.
4. Update the slug in the Slug field.
5. Click **Save**.

> NOTE
>
> While changing the slug of an article, ensure that you apply the redirection rule to the new slug. For more information, read the article on [Article redirect rule](/help/docs/article-redirect-rules).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Changing_theURL_for_an_Article.png)

**Method 2**

You can also change an article URL in the editor.

1. Navigate to the desired article.
2. Click the slug field provided next to the article status badge.

![article slug 2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/article%20slug%202.png)

3. Update the necessary changes in the field provided under **URL Slug**.
4. Click **Update** to save the changes.

![3_slugupdate_articleredirect.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_slugupdate_articleredirect.png)

5. Click **Yes** in the **Article details confirmation** prompt to redirect the article to the updated URL slug.
6. Deselect the checkbox to avoid applying the redirecting rule.

> **NOTE**
>
> **Redirect Rule:** If you change the article slug after publishing, Document360 will prompt you to set up a redirect rule to ensure that any links to the old slug remain functional. While setting up a redirect rule is optional, it is recommended.

---

### FAQs

#### What is the default URL format for an article?

The default URL format for an article is based on the article title, converted into a slug. For example, if the article title is '`This is a really good content`', the resulting URL would be: `docs.yourcompany.com/[project version]/docs/this-is-really-good-content`.

#### Does changing the article title automatically change the slug?

No, changing an article’s title does not automatically change the article slug.

#### Is it necessary to apply a redirect rule when changing the slug?

While applying a redirect rule is optional, it is recommended to ensure that any links to the old slug remain functional, avoiding broken links.

#### Why use special characters like ä, ö, ü in URLs?

Special characters like **ä**, **ö**, and **ü** are often part of words in languages such as German. When creating URLs for knowledge base articles or other web content, using these characters can make the URL:

1. **More intuitive:** The URL reflects the exact title or content of the article, making it easier for users to understand.
2. **Language-specific:** It preserves the linguistic integrity of terms or phrases specific to a language.
3. **SEO-friendly:** Search engines can associate the URL more accurately with the content, improving visibility for users searching in that language.

However, due to technical encoding requirements, these characters must be properly percent-encoded to function correctly in web links. Always copy URLs from the portal to ensure they work as expected when shared.

#### Why do URLs with special characters (e.g., ä, ö, ü) break when shared?

When URLs contain special characters like **ä**, **ö**, or **ü**, they need to be percent-encoded for proper handling in web links. If these characters are not encoded, the URLs may break when shared or accessed, resulting in errors. This behavior is consistent across all browsers and messaging tools.

1. **Copy the URL from the Document360 portal:**  
   Always copy the URL directly from the **portal** instead of from the browser's address bar. This ensures that the encoded URL remains intact when shared.
2. **Browser behavior:**

   * When you paste the URL in a browser, the percent-encoded characters may be decoded automatically.
   * This is normal behavior and does not impact the functionality if the link is used directly from the portal.

   By copying the link from the portal, the encoded characters remain intact, allowing the link to work as expected when shared with others.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

#### Is it possible to change the URL of articles to numbers instead of the title?

Yes, in Document360, you can change an article’s URL to use numbers instead of the title:

1. Navigate to the desired article.
2. Click the slug field provided next to the article status badge.
3. Update the necessary changes in the field provided under **URL Slug**.
4. Click **Update** to save the changes.

<a id="article-tags"></a>

## Article tags

**Plans supporting tags**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Article tags are keywords that users, readers, or team accounts might use to search for content related to the articles in the Knowledge base site. Team accounts can use these tags to search, filter, sort, and perform bulk operations on articles or category pages within the project.

> NOTE
>
> * The **Tags** page allows you to manage all tags across your project. The same tag can be applied to articles, category pages, and drive files. For more information, read the articles on [Tags](/help/docs/tags).
> * The tags added to the files in Drive can only be viewed in the Knowledge Base portal.

---

## Adding tags to an article or category page

To add tags to an article or category page, follow the steps below:

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **More** () icon in the top right corner and select **Tags**.
3. Create a new tag or choose an existing one from the dropdown of relevant matches.
4. Click Ask Eddy AI to generate AI-suggested tags and select the appropriate ones.

   > NOTE
   >
   > To use the AI tag generator, your article must have a word count of at least 200 words.
5. After adding the tags, click **Save**.
6. Click **Publish** and expand the **Configure article settings** dropdown.
7. Add or delete tags as needed from the list in the **Tags** section.
8. Click **Yes** to publish the article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_tags_in_the_articles.gif)

---

### Guidelines for tags

Follow these guidelines when creating and adding tags to the **Tag** Library:

1. The tag character limit with spaces is **30**.
2. Tags names can include:

   * Upper and lowercase letters (multi-language support)
   * Numbers
   * Spaces
   * Certain special characters: **\_ + - @ # % ^ & ! ()**
3. Tags cannot contain: **\ / : \* ? “ < > |**

> NOTE
>
> For more information, read the article on [Tags](/help/docs/tags)**.**

---

### Tags in Knowledge base site

Once you add tags to an article or category page and publish it, readers will see those tags on the Knowledge base site.

![Tags readers POV.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Tags%20readers%20POV.png)

Readers can click on a tag to see a list of all articles and category pages associated with that tag.

![tags readers pov 2.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/tags%20readers%20pov%202.png)

<a id="adding-article-labels"></a>

## Add article labels

**Plans supporting the use of labels in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Labels help streamline content management and organization within the Knowledge base portal. Using article labels, you can efficiently sort, filter, and categorize articles efficiently, saving time.

For instance, if you need to filter release notes specifically to perform updates or review them, use the label filter in the **All articles** () section to locate these articles quickly.

> NOTE
>
> Article labels are only available in the Knowledge base portal and are supported across all plans.

---

## Adding labels to articles

You have multiple options for adding labels to articles. The steps below outline each method available in the Knowledge base portal.

**Method 1:** Adding Labels from the article editor

**Method 2:** Adding Labels from the All articles section

**Method 3:** Adding Labels from the Workflow assignments section

**Method 4:** Adding Labels from the Starred section

**Method 5:** Adding Labels from the Folder or Index category

Method 1

Method 2

Method 3

Method 4

Method 5

To add labels to an article in the editor, follow these steps:

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **More** () icon and select **Labels**.

   Alternatively, click **More** () > **More article options** and go to **Labels** tab in the **Article settings**panel.
3. In the **Add labels**panel, enter the desired label name and press **Enter**.

   Alternatively, to add an existing label, type the label name and select it from the dropdown list.
4. Click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_labels_in_the_article_editor.gif)

###

To add labels in the **All articles** section, follow the steps below:

1. Navigate to **Documentation** () > **All articles** () icon on top of the **Categories & Articles** section.
2. Select the desired articles and at the top, click the **More** () icon > **Add labels**.

   The **Add labels** panel will appear.
3. Enter the desired label name and press **Enter**.

   Alternatively, to add an existing label, type the label name and select it from the dropdown list.
4. Click **Add**.
5. Use the Filter dropdown to sort articles by label:

   1. Click **Filter** and expand **Labels** section.
   2. Choose your labels or search for specific ones.
   3. Click **Show more** to view additional labels and click **Apply** to filter.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_labels_in_the_All_articles_section.gif)

To add labels in the **Workflow assignments** section, follow the steps below:

1. Navigate to **Documentation** () > **Workflow assignments** () on top of the **Categories & Articles** section.
2. Select the desired articles and click **Add labels** at the top.
3. Enter the desired label name and press **Enter**.
4. Use the **Labels** filterto narrow articles based on labels.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_labels_in_workflow_assignment.gif)

To add labels in the **Starred** section, follow the below steps:

1. Navigate to **Documentation** () > **Starred** () on top of the **Categories & Articles** section.
2. Select the desired articles and click **Add labels** at the top.
3. Enter the desired label name and press **Enter**.
4. To label a specific article, hover over it, click **More** (), and select **Add labels**.
5. Click **Add**.
6. Use the **Labels** filterto narrow articles based on labels.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Adding_labels_in_Starred_articles.gif)

To add labels from a Folder or Index type category, follow these steps:

1. Navigate to the desired category in the Knowledge base portal.
2. To label a specific article, hover over it, click the **More**() icon, and select **Add labels**.

   Alternatively, select multiple articles and click **Add labels** at the top.
3. Enter the desired label name and press **Enter**.
4. Click **Add**.

![Adding labels from the category in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF_Adding_labels_from_category.gif)

---

### FAQs

#### How many labels can I add to a project?

You can add up to 10,000 labels per project.

#### Is there a limit on the number of labels per article?

Yes, you can add up to 10 labels per article.

#### Can I use the same label across different articles?

Yes, you can reuse labels across multiple articles within the same project.

#### What is the difference between tags and labels?

**Tags** are keywords visible on both the Knowledge base site and portal, helping users categorize articles, enhance navigation, and optimize search results.

Whereas **labels** are exclusively available in the Knowledge base portal. They are used for internal content organization and management and are not visible to end users on the site.

#### Can I search for a specific article using labels in the Knowledge base portal?

No, labels cannot be used directly in search. However, you can filter articles by labels in the **All articles** section.

#### Can I add labels to images and videos?

No, currently, labels can only be added to articles.

#### Will labels appear in the Knowledge base site?

No, labels are only for internal use within the Knowledge base portal and do not appear on the Knowledge base site.

<a id="related-articles"></a>

## Related articles

**Plans supporting addition of related articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Related articles help readers navigate between articles the author selects that relate to the article. The added articles appear at the bottom of the article on the Knowledge base site.

> NOTE
>
> * Only published articles can be used as related articles.
> * The related articles appear only in the Knowledge base site.
> * The related articles will not appear in the Knowledge base widget.

---

## Adding Related articles

To add related articles, from the Knowledge base portal:

1. Navigate to **Documentation** () in the Knowledge base portal.
2. Select any published or unpublished article.
3. Click the **More** () icon on the top right and click **Related articles**.
4. In the search bar enter the keyword you wish to search and the results will be displayed.
5. Click on the cross **(x)** icon to the right of the search bar to remove the search keyword.
6. Click on the add **(+)** icon to the right of the article you wish to add to the related article list.
7. All the added articles will be listed under the title **Added articles**.
8. Click the cross **(x)** icon to remove the article from the added list.
9. Once done, click **Save**.

   You can also add related articles in the Publish checklist popup.
10. Click **Publish** on any article.

    The **Publish confirmation** prompt will appear.
11. Expand the **Configure article settings** section.
12. Scroll down to view the Related articles.
13. Click **Yes** to save and publish the changes.

---

### Eddy AI recommender

1. Click **Ask Eddy** to get recommendations from the Eddy AI on adding related articles

   > NOTE
   >
   > To use the AI related article recommender, your article must have a word count of at least 50 words.
2. The suggested articles will be displayed under the title **Suggested articles from Eddy AI**.
3. Click on the add **(+)** icon to the right of the article you wish to add to the related article list.
4. The article will be added to the list of **Added articles**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Related_articles.gif)

> NOTE
>
> **AI related article recommender**
>
> After purchasing the Eddy AI add-on, click the **Ask Eddy AI** button below the search bar in the Related Articles tab to use the [AI-powered related article recommender](/help/docs/ai-related-articles-recommender).

---

### Auto relate

Turn on the **Auto relate this article to all related articles** toggle on the **Article settings** window to automatically link the active article to other related articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Related_articles.png)

---

### FAQ

#### If a reader doesn't have access to an article, will it appear under the Related articles section in the Knowledge base site?

No, if a reader lacks access to a specific article, the link to that article will not appear in the **Related articles** section of any other articles in the Knowledge base site. Only articles accessible to the reader will be displayed in this section.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="featured-image"></a>

## Featured image

**Plans supporting for adding feature image**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A featured image is a representative thumbnail commonly found at the top of content in most CMS (Content Management System) platforms. In Document360, the featured image serves a different purpose. Instead of being displayed at the top of an article, it is used mainly for SEO purposes, helping search engines and enhancing link previews when the article is shared on external platforms.

---

## Adding a featured image to an article

To add a featured image to an article:

1. Open any article (published or unpublished) in the Knowledge base portal.
2. Click the **More (•••)** icon in the top-right corner and select **More article options**.
3. In the **Article settings** panel, click the **Featured image** tab.
4. Click **Upload an image**.

   The Drive's file picker panel will appear.
5. Select the desired image and click **Save**.

> NOTE
>
> Follow these recommendations when uploading featured images:
>
> * **Image size**: Optimal dimensions range from 1200x800 pixels to 2000x1200 pixels for clarity and responsiveness across devices.
> * **Image type**: Use high-quality JPEG or PNG formats to maintain image integrity and enhance visual appeal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_Feature_Image_in_Articles.gif)

<a id="attachments"></a>

## Attachments

**Plans supporting for adding attachments**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Adding attachments to an article

1. Navigate to any article (Published or Unpublished) in the Knowledge base portal.
2. Click on the **More** (•••) option and select **More article options**.
3. Click on the **Attachments** tab in the **Article settings** panel.
4. Add the file URL if hosted externally, or click **Upload an attachment** if the file is available in **Drive**.
5. Select the indented file and click **Insert**.
6. Rearrange the attachments using the reorder () icon.
7. Click the () icon to remove any attachment.

   The attachment will appear near the Table of Contents and Tags on the Knowledge base site.

![Adding attachments in the Knowledge base](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_attachment_in_the_Knowledge_base_portal.gif)

**Knowledge base site view**

![Adding attachments in the Knowledge base](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Added_attachment_in_the_Knowledge_base_side.png)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="status-indicator"></a>

## Status indicator

**Plans supporting status indicator**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Status indicator** is visible in the Knowledge base site near the article title. There are three possible indicators: **New**, **Updated**, and **Custom**.

---

## Automatic "Status indicator" update

If the **Automatically set article status** toggle is enabled, the status indicator automatically updates every time an article or category is published.

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.

   By default, **Article settings** tab will be selected.
2. In the **Category manager** accordion, turn on the **Automatically set article status** toggle.
3. In the **Show article status for field**, enter the number of days the status should appear.

> NOTE
>
> For more information, read the article on [**Category manager**](/help/docs/knowledge-base-category-manager).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Automatic_Status_Indicator_update.png)

---

## Manually updating the "Status indicator" for an article

To manually update the status indicator for an article:

1. Navigate to your desired article (published or unpublished) in the Knowledge base portal.
2. Click the **More** (•••) icon and select **More article options**.
3. In the **Article settings** panel, select the **Status indicator** tab.
4. Choose the desired status from the drop-down.
5. In the **Show status for** field,enter the number of days the status should persist in the Knowledge base site.
6. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Manually_updating_status_indicator_in_an_Article.png)

### Setting a Custom status indicator

To customize the status indicator text:

1. Navigate to **Settings** () > **Knowledge base portal** > **Localization & Workspaces** > **Localization variables** in the Knowledge base portal[.](http://Variables.Select)
2. Expand the **Category manager** accordion and edit the **Custom** field to modify the status indicator text.
3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Customizing_the_status_indicator_text.png)

To set the custom status indicator color:

1. Navigate to **Settings** () > **Article settings & SEO** in the Knowledge base portal.
2. By default, the **Article settings** tab will be selected.
3. In the **Category manager** accordion, choose the desired color for the **Custom status indicator.**
4. Click the  icon to save the changes.
5. Hover over the **Background color** () icon to preview the custom status indicator.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Custom_Status_Indicator_color.png)

> NOTE
>
> For more information on custom status indicator, read the article on [**Category manager**](/help/docs/knowledge-base-category-manager).

---

## Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Status_Indicator_KB_site_View.png)

* **New** (green dot): Appears when an article is published for the first time.
* **Updated** (orange dot): Appears when an article is edited and republished.
* **Custom**: Can be set manually by the team.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="article-status"></a>

## Article status

**Plans supporting Article status**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Article status helps you easily identify the current status of articles in the Knowledge base portal, eliminating the need to check each article individually.

For instance, a content manager can quickly identify **Draft** articles that need editing before publishing or spot **Needs review** articles flagged for review by contributors. This helps streamline the process of updating and maintaining the knowledge base efficiently without manually checking each article's progress.

> NOTE
>
> An article or category page will display article statuses (New/Updated/Custom) on the Knowledge base site, helping readers to know when content has been added or updated. For more information, read the article on [**Status indicator**](/help/docs/status-indicator).

---

## Article status in the Knowledge base portal

Within the Knowledge base portal, articles can have one of four statuses, each indicated by a unique color-coded icon next to the article in the left navigation pane.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-All_four_article_status.png)

> NOTE
>
> The article status also applies to category pages.

### New article (article status blue.png)

The article has been created and is in draft mode but yet to be published. It can be only accessible by team members within the portal.

> NOTE
>
> For category pages, the status appears as **New category page**.

### **Draft status (article status yellow)**

A published article is being forked to update the content in a draft form, while the original version remains live in the Knowledge base site.

### Published (article status-green)

The article is public and available for readers to view on your Knowledge base site.

### Needs review (article status pink)

The article has been flagged for review, either by a contributor or through an automated review reminder. For more information, read the article on [Article review reminder](/help/docs/review-reminders).

---

## Article status of hidden articles

Hidden articles are shown with a strikethrough and will not be available on the Knowledge base site. These articles are only accessible through the Knowledge base portal. You can hide articles in any status. For more information, read the article on [Hiding an article](/help/docs/hiding-article).

> NOTE
>
> Articles in a hidden category are also hidden on the Knowledge base site

---

### FAQs

**What is the purpose of article status in the Knowledge base portal?**

Article status helps you easily identify the current status of articles, streamlining the process of updating and maintaining the knowledge base.

**What are the different article statuses available?**

The article statuses are New, Draft, Published, and Needs review.

**What happens to articles flagged as Needs review?**

Articles flagged as Needs review have been marked for review by a contributor or through an automated reminder.

**Do category pages also display article statuses?**

Yes, the article status also applies to category pages.

<a id="preferences"></a>

## Preferences

**Plans supporting for preferences**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Updating the preferences for an article

To update the preferences in an article from the Knowledge base portal, follow the steps given below.

1. Navigate to any article (Published or Unpublished).
2. Click the **More** (•••) icon at the top right.
3. Click on the **Preferences** tab in the **Article settings**.
4. Select or clear the checkbox next to each option to enable or disable respective preferences.

   * **Allow comments**: Allow readers to comment via Disqus.
   * **Show table of contents**: Display the table of content in your article.
   * **Enable feedback**: Allow end-users to comment on articles within a knowledge base.
5. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Preference%20tab%20overview%20page(1).png)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="showhide-table-of-contents-for-an-article"></a>

## Show/hide table of contents for an article

**Plans supporting show/hide of content for an article**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can choose to show or hide the table of contents at two levels. One can show or hide the table of contents for the entire knowledge base or an individual article.

#### Show or Hide the table of contents at Knowledge base site level

1. Navigate to **Settings** () > **Knowledge base site** and select **Article Settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, you can toggle on or toggle off the **Show table of contents** under the **Article right** section.

   The changes will be saved. A confirmation pop-up will be displayed at the top right corner.

![1_TOC_artcilesettings.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_TOC_artcilesettings.gif)

#### Show or Hide the table of contents for an individual article

1. Navigate to the desired article.
2. Click the **More** (•••) icon in the top right corner and then choose **More article options**.

   The **Article settings** panel will appear.
3. Click on the **Preferences** tab and select the **Show table of contents** checkbox to show the table of contents.
4. Uncheck the checkbox to hide the table of contents.
5. Click **Save**.

By following the above-mentioned steps, you can show or hide the table of contents at the Knowledge base site level or for an individual article.

![2_Article_TOC.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Article_TOC.gif)

---

### FAQs

**Can I show or hide the table of contents for the entire knowledge base?**

Yes, you can toggle the table of contents visibility at the knowledge base site level.

**How do I show or hide the table of contents at the knowledge base site level?**

Navigate to **Settings** () > **Knowledge base site,** select **Article Settings & SEO**, and toggle the **Show table of contents** option.

**Is it possible to hide the table of contents for an individual article?**

Yes, you can hide the table of contents for an individual article.

**What steps do I need to follow to hide the table of contents for a specific article?**

1. Navigate to the article, click the **More** (•••) icon, select **More article options.**

   The **Article settings** panel will appear.
2. Go to the **Preferences** tab, and deselect the **Show table of contents** checkbox.
3. Click **Save**.

**Does bold text used as headings appear in the table of contents?**

No, bold texts will not appear in the table of contents. Only headings formatted as H2, H3, and H4 will appear in the table of contents.

<a id="marking-articles-as-deprecated"></a>

## Mark as deprecated

**Plans supporting mark as deprecated**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is a deprecated article?

In the context of a knowledge base, a deprecated article is flagged as obsolete and may no longer be relevant or valuable for the reader. It is usually replaced by more up-to-date information. Articles may be marked as deprecated for various reasons, such as the core subject being removed, no longer in use, modified, or replaced with a different concept.

For instance, if a product feature is removed or significantly changed, you can mark the related article as deprecated. This helps readers avoid outdated information and redirects them to updated resources or newer articles.

### Mark as deprecated

Previously, the **Mark as deprecated** option was available at the workspace level. Now, this feature is available at the article or page category level, where the article will display a **Deprecated** status tag. Additionally, you can provide a custom deprecation message explaining the reason for deprecation and include hyperlinks to any alternate or updated versions of the article/page if applicable.

---

## Marking an article as deprecated

1. Navigate to the article (published or unpublished) in the Knowledge base portal.
2. Click the **More** (•••) icon and select **More article options**.
3. In the **Article settings** panel, select the **Mark as deprecated** tab.
4. Turn on the **Deprecated** toggle.
5. Enter the reason for deprecating the article in the text field. This message is optional and will be displayed on the Knowledge base site.
6. Use basic text formatting options like Bold (), Italics (), and Underline (), or add Hyperlinks ()if needed.
7. Once done, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Article_settings_deprecating_An_article.png)

---

## Marking multiple articles as deprecated

To mark multiple articles as deprecated in one instance, follow the steps below:

1. Navigate to the **Documentation** () and select **All articles** in the Knowledge base portal.

   A list of all articles will appear in the **All articles** page.
2. Select the articles you want to mark as deprecated.
3. Click the **More** (•••) icon and select **Deprecate**.

   By default, the **Deprecate** toggle will be enabled.
4. Enter the **Deprecation message** in the text field.
5. Once done, click **Apply**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Deprecating_multiple_article_at_one_go.png)

---

### Knowledge base site view

In the Knowledge base site, a deprecated article will display a **Deprecated** tag and a message at the top in a highlighted format with this icon - .

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-KB_Site_view_of_Deprecated_article.png)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="updating-article-contributors"></a>

## Update article contributors

**Plans supporting for updating article contributors**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 automatically tracks the project members who have created, updated, or published an article and includes them in the public contributor list.

Readers in knowledge base site can click the avatars within the contributor list to view any other articles that the corresponding project member has contributed.

By default, team members who have taken any action on an article will be added as a contributor. However, project members can be manually added or deleted to the contributor list as well.

---

## Adding or deleting contributors

To update the contributor list:

1. In the desired editor, click the **Article information** () icon next to the article status on the top left to view the contributors list.

> NOTE
>
> If a project member hasn’t uploaded a profile photo, Document360 will display their default avatar.

2. Click **Manage** to open the Manage popup window. You can add and remove contributors from this window.
3. You can delete a contributor by clicking the **Remove contributor** icon provided near the contributor banner.
4. You can add a contributor by searching for a user’s name or email address in the **Add contributors** field from the popup banner.
5. Click the **Add as contributor** () icon to add a project member to the article.

![add contributor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Add_delete_contributors.gif)

By following the above-mentioned steps, you can modify the contributors for an article.

> PRO TIP
>
> * If multiple team members collaborate on an article, manually adding contributors ensures that each person’s contribution is acknowledged.
> * If a contributor is no longer part of your team or organization, they will still appear as a contributor as long as their team account remains in the Document360 project. To completely remove them, you’ll need to delete their team account. For more information, refer to our article on [**Managing team accounts**](/help/docs/managing-team-account).

---

### Why does the ‘**This article has no listed contributor. Please assign one**.’ error occur?

This warning message appears in the article editor when no contributors are assigned to an article. During article creation, the creator is automatically assigned as a contributor. If their account is deleted, the association with the article is removed, resulting in the article appearing without any contributors.

To resolve this issue, follow these steps:

1. Open the desired article in the Knowledge base portal.
2. Click the **Article information** () icon next to the article status badge.
3. In the **Contributors** section, verify if any contributors are listed. If none are listed, this confirms the article lacks a valid contributor.
4. Click **Manage** to open the contributor management interface.
5. Search for and select the appropriate contributors. Click the **Add as contributor** () icon next to their names.

   Save the changes. Confirm the contributor's name now appears in the article's **Contributors** section, and the warning message no longer displays.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-No_contributor_error_resolving.gif)

<a id="schedule-publishing"></a>

## Schedule publishing

**Plans supporting schedule publish**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 offers enhanced content management capabilities, including scheduling your drafted articles for publication at specific dates and times. By scheduling publications, you can plan your content calendar effectively, maintain consistency, and avoid last-minute publishing stress.

---

## Setting up schedule publishing

1. Navigate to the article in the Knowledge base portal.
2. Select the dropdown next to the **Publish** button and click the **Publish later** ().

   The **Publish later** panel will appear.
3. Choose the **Date**, **Time** and **Time zone**.
4. Optionally, add comments in the **Comment field** (up to 160 characters).
5. Click **Schedule**.

> NOTE
>
> The **Schedule publishing** feature is applicable for both articles & page categories.

![1_ScreenGIF-Setting_up_schedule_publishing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Setting_up_schedule_publishing.gif)

---

## Editing a schedule publication

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **Scheduled** dropdown in the top right corner.
3. Click the **Edit** **schedule** () to perform the necessary changes in the publishing schedule.

   The **Edit schedule** panel will appear.
4. Modify the **Date**, **Time** and **Time zone**, and add comments if needed.
5. Click **Schedule** to save the changes.

![2_ScreenGIF-editing_schedule_publishing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-editing_schedule_publishing.gif)

> NOTE
>
> To immediately publish a scheduled article, click the dropdown next to **Scheduled** and select **Publish now** ().

---

## Cancel schedule publishing

1. Navigate to the article in the Knowledge base portal.
2. Click on the **Scheduled** drop down.
3. Click on **Cancel** () to cancel the schedule publishing.
4. Click **Yes** in the confirmation prompt.

![3_Screenshot-Cancel_schedule_publishing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Cancel_schedule_publishing.png)

---

## Schedule publishing on multiple article

To schedule multiple articles at once, follow the steps below:

1. Navigate to **Documentation** () > **All articles** in the Knowledge base portal.

   Alternatively, go to any index type category to publish its articles alone.
2. Select the desired articles and click the **Publish later** () or **Publish** () as needed.
3. Choose the **Date**, **Time** and **Time zone** in the **Publish later** panel.
4. Click **Schedule**.

Once scheduled, a **Publish later** () icon will appear next to each article. Hovering over this  icon will display the scheduled publishing date and time.

> NOTE
>
> The publishing process will be initiated at the designated time. However, there might be a delay of a few seconds in publishing the selected articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Schedule_publish_on_multiple_articles.gif)

---

### FAQ(s)

**How to instantly publish an article that is already scheduled for publishing?**

Go to the **Scheduled** dropdown in the top right corner of your Knowledge base portal and click **Publish** now.

**Can I edit an article once it is scheduled for publishing?**

No, an article cannot be edited after scheduling. However, you can cancel the scheduled publishing to make edits. This is similar to forking a draft, except the forked draft has not been published yet.

**Can I publish a scheduled article via the customer API?**

No, scheduled articles in the Knowledge base portal cannot be published via the customer API.

**What happens if I move a scheduled article to a different workspace? Will it remain scheduled?**

No, the scheduled publishing time will be cleared once the article is moved to another workspace.

<a id="article-discussion-feed"></a>

## Discussion feed

**Plans supporting the discussion feed**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Every Article and Category page has a Discussion feed, where you can converse, tag(mention), and collaborate with Team accounts regardless of the roles on your project. Peer reviews, approvals, and conversations can be discussed within the portal using the Discussion feed.

---

## Accessing the discussion feed

1. Navigate to the desired article in the Knowledge base portal, and click on **Discussion feed**(  ) at the top right.

> **NOTE**
>
> In Markdown and WYSIWYG editor, this section is termed as **Discussion**, and in Advanced WYSIWYG editor, it is termed as **Comments**.

1. The Discussion blade appears with the history of conversations (if any).
2. You can type your comments/messages in the text box at the bottom right and hit the **Send** icon.
3. It would be posted as a bubble in the feed with a time stamp and profile name.

> **NOTE**
>
> There is no character limit cap for the comments field.

#### Tag/mention team members in the discussion

5. By using @, you can tag any team account from your project.

6. Choose the intended team account by clicking on their profile.

![Discussion feed](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Overview_page_of_discussion_feedback.png)

> **NOTE**
>
> When you tag or mention a team account, an email notification is sent to their address. The email includes:
>
> * The name of the team account
> * The article name and link to the article
> * The language and version
> * The comment or message
> * A login button to your Knowledge base portal

---

## Delete from feed

You can delete the comment/message you've posted previously in the feed.   
Hover your mouse pointer over the message bubble, and a **Delete** () icon appears. Click on it, and the message is removed.

![Discussion feed](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Deleting_the_feedback_in_feedback_discussion.png)

> **NOTE**
>
> * Only you can delete your comment or message.
> * If you accidentally delete or need to restore a removed message, click the **Undo** option in the deleted bubble. The discussion bubble is restored in the feed.
> * Once the article is published, Discussion feed will disabled.

---

## FAQ (s)

**How can I add comments in the discussion feed, and how does it work in the Advanced WYSIWYG editor?**

You can add comments in the discussion feed using Markdown or the WYSIWYG editor. You can add inline comments in the Advanced WYSIWYG editor, which will be displayed here. For more information, read the article on [Reviewing an article using Inline comments](/help/docs/reviewing-an-article-inline-comments).

**Why is the discussion feed/comment section disabled?**

Once the article is published, you can't add comments directly (the **Discussion feed/comment** section will be disabled). However, you can click **Edit** and add comments to the discussion feed.

A written document on a specific topic in your knowledge base, serving as a unit of organized information.

An end-user with login credentials to access the Knowledge Base portal in Document360. Team accounts manage articles, categories, versions, and languages within the portal.

<a id="revision-history"></a>

## Revision history

**Plans supporting for revision history**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Article revision

Versioning in a knowledge base ensures accurate, up-to-date content by tracking changes, supporting different product versions, and maintaining a history of edits. It helps teams collaborate, revert to previous versions if needed, and comply with audit requirements. Users can access the right information for their needs while minimizing errors and improving transparency.

In Document360, when a Team account clicks the **Edit** button on a Published article, a new unpublished version of that article is created. The old version is added to the article’s version history but remains available on the Knowledge base site until the new version is published.

![revision history](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734605317771.png)

This article versioning option allows project admins, reviewers, and contributors to compare differences between versions and revert to a previous version at any time.

> **NOTE**
>
> Creating a new article version does not delete existing content. Only a team account can manually delete older article versions.

---

## Creating an article version

There are two ways to create a new version of an article:

#### Method 1: From the Editor

To create a new article revision, follow the steps below:

1. Open a published article in the Knowledge base portal.
2. Click **Edit** on the top right of the editor.

   A new version of the article is created and opened as a draft in the text editor.
3. Update the article content.
4. Click **Publish** and click **Yes** in the confirmation prompt.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Revision_history.gif)

#### Method 2: Fork an older revision to create a new article version

To **restore** an old version of the article:

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **More** () icon and select the **Revision history** ().
3. Click **Fork** on the desired version listed in the history.
4. Click **Yes** in the pop-up.

   This action will create a new version of the article with the content of the selected article version.
5. To edit the new version, click **Open** on the latest version listed in the history.
6. If required, update the article content.
7. Click **Publish** and click **Yes** in the confirmation prompt.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Revision_history.gif)

---

## Article revision actions

The below options are available in **Article revision**:

1. **Fork**: To create a new article version from an existing article version. Here, the article is opened in the Editor mode, where you can make changes to the article content.
2. **Delete****:** To delete the article version. This action cannot be reversed.

> NOTE
>
> You cannot delete a published article version. Only unpublished versions can be deleted.

3. **Open****:** To open the article version in the Editor. This helps you restore any of the previous versions to their published state.
4. **Workflow history****:** View the article version's workflow history. This includes all the Workflow stages, Workflow assignees, comments, and dates.
5. To make any previous version of an article public by opening that version in the editor and clicking **Publish**.

You can also see detailed information about each version, including the version number, contributor, created date, and version visibility.

![revision history](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Workflow_history.png)

---

## Comparing article versions

You can open two versions of an article at any point in **Article revision** and compare them.

To compare two versions of an article:

1. Go to the desired article in the Documentation editor.
2. Click the **More** () icon and select the **Revision history** ().
3. Select the checkbox for the desired versions you want to compare.
4. Click the **Compare** button.

![revision history](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Article_Version_comparision.png)

### Content highlighting criteria:

The compared view of the two versions shows the below details:

**Added content:**

* New content in the compared versions is highlighted in green for easy identification.
* For images, videos, code blocks, PDFs,  and self-closing tags (<br>, <hr>), added content is highlighted with a green badge labeled 'Added.'
* For changes made to tables, the content is highlighted in green.
* Highlights remain visible while scrolling, ensuring added content is easy to spot throughout the article.

**Removed content:**

* Deleted content is highlighted in red with a strikethrough.
* For images, videos, code blocks, PDFs, and self-closing tags (<br>, <hr>), removed content is highlighted with a red badge labeled 'Removed.'
* For changes made to tables, the removed content is highlighted in red.
* Removed content remains visible in the comparison view for clarity and to ensure removed content is easy to spot across the entire article.

**Formatting changes:**

* Changes in formatting (e.g., bold, italic, underline, font size, lists) are highlighted in blue.
* Non-text formatting changes, like table styles or image resizing, are also highlighted in blue with a blue badge labeled ‘Modified.’

> NOTE
>
> Content block movements and multiple formatting changes will not be highlighted when comparing article versions. Multi-formatting changes refer to applying italic, bold, and underline formatting to the same content block.

**Swap versions:**

* The **Swap** button is placed near the version dropdowns at the top for easy access.
* This allows you to reverse the comparison order of two versions, instantly switching the comparisons of the old and new versions.
* This helps you understand changes from both perspectives, such as seeing what was previously added and removed or vice versa.
* The comparison view updates in real time without requiring a page reload, ensuring a seamless experience.
* All existing highlights, filters, and settings are preserved when switching.
* After swapping, the version labels will update to reflect the new order, ensuring clarity on which version is being compared as the new and old.

> NOTE
>
> All highlights for added, removed, and formatting changes will be maintained after the swap. The system will update the highlights to reflect the new comparison.
>
> For example, content previously marked as "added" will appear as "removed" after swap.

**Exit version compare:**

* The **Exit compare** button is located at the top right which you can use to exit from the comparison window.
* Clicking the button will take you back to the main document view without reloading the page.
* You will return to the exact location of the article you were viewing before comparison mode to ensure workflow continuity.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGif-Revision_history.gif)

---

### FAQs

#### **Why are the updated timeframes of the forked article not in order?**

If the older versions are opened and updated, the recently modified version will be shown with the updated timeframe accordingly.

#### **Can I restore a previous revision of the article?**

If you need to revert an article to a previous state before your recent edits, follow these steps:

* **For published articles:** Delete the forked version that contains your recent edits. This restores the last published version of the article.
* **For draft or new articles:** Create a new version by forking an earlier revision or delete the forked version that includes recent edits.

Forking before making changes preserves the original version, so you can restore it anytime.

#### **How do I discard the current changes and revert to the previous version of the article?**

**Method 1:**

* If the changes have not been published, follow these steps to revert to the previous version:

  + Click on the **Revision history** of the article.
  + **Open** the previous version to view and restore the old content.

**Note:** This option works if the article has been published at least once.

**Method 2:**

* If the article was never published, try the Backup & Restore option in the **Settings** page. This allows you to restore the content of a specific article.

#### Can I change or modify the article's published or last updated date to a past date?

No, the article's published date or last updated date cannot be changed. The last updated date will always reflect the most recent modification date, even if the article version is old.

An end-user with login credentials to access the Knowledge Base portal in Document360. Team accounts manage articles, categories, versions, and languages within the portal.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="article-analytics"></a>

## Article analytics

**Plans supporting article analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Article Analytics in Document360 provides detailed, article-specific insights, unlike standard Analytics that offer a broader overview of your entire knowledge base. With Article Analytics, you can assess individual article performance across metrics like reads, views, likes, dislikes, and link status. Use these insights to optimize your content strategy and enhance user experience.

---

## Accessing article analytics

1. In the editor, navigate to the top-right and click the **More (•••)** icon.
2. Select **Analytics** from the dropdown menu.

   Here, you’ll find detailed metrics on the article's **Reads**, **Views**, **Likes**, **Dislikes**, and **Link Status**.

---

### Understanding article analytics metrics

Each metric gives you actionable insights into article engagement:

* **Reads**: Measures reader engagement based on scrolling, clicking, and time spent on the article. The read count updates daily and is counted once per day per user.

> NOTE
>
> Time spent varies based on user activity. Multiple clicks on the same article are counted as a single read, while time spent can differ for each session.

* **Views**: Represents the number of unique clicks per browser, counted once per browser per user.
* **Likes**: Shows the total number of likes received by the article, providing feedback on content relevance.
* **Dislikes**: Tracks the number of dislikes to help identify areas for improvement.

> NOTE
>
> All metrics start tracking from the time the article is created.

---

### Navigating to project-wide analytics

Click **Go to Analytics** to access the broader project-level analytics for deeper insights into the entire knowledge base’s performance.

![Update-Screenshot-Article_Analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Update-Screenshot-Article_Analytics.png)

---

### Validating links in article analytics

The **Link status** displays the **Total** links within an article, including a breakdown of links that are:

* **Working**: Active and accessible
* **Broken**: Unreachable or incorrect URLs
* **Unknown**: Status could not be determined
* **Ignored**: Links intentionally excluded from validation

The link validation tool helps you maintain active, reliable links within each article. Here’s how to use it:

1. From the Article Analytics page, locate the **Link Status** metric.
2. Click **Validate Now** to automatically check the link status.
3. If any links are broken, identify and copy the link URL.
4. Update the link or set a redirection rule to guide users to the correct destination.

**Example**: If an article link to external documentation is broken, copy the URL, navigate to **Settings > Knowledge base site > Article redirect rules**, and add a new rule.

---

### FAQs

#### How often is the analytics data updated?

Data refreshes in real-time, with reads updating daily based on unique user sessions.

#### Why might my read count differ from views?

Reads factor in user engagement activities like scrolling and clicking, while views simply count unique browser clicks.

#### Can I use article analytics to improve content engagement?

Yes, metrics like Reads, Likes, and Dislikes help you gauge engagement, showing which articles resonate most with your audience.

<a id="article-access-control-knowledge-base-site"></a>

## Security - Article access control

**Plans supporting access to security settings in the knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Add or deny access to the article content for team accounts, team account groups, reader accounts, and reader groups on the Knowledge base portal or Knowledge base site.

---

## Accessing the Article access control

1. Navigate to the desired article in the documentation editor.
2. Click on the **More** () options on the top right of the editor, and select **Security**.
3. There are two options to choose from

   * [Knowledge base portal](/help/docs/article-access-control-knowledge-base-site#knowledge-base-portal)
   * [Knowledge base site](/help/docs/article-access-control-knowledge-base-site#knowledge-base-site)

   An **Assign content access** blade will appear.
4. You can manage access to the article for Team accounts or readers.

![1_Screenshot-Accessing_the_Article_access_control](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_the_Article_access_control.png)

### Knowledge base portal

To change the article access on the portal, select the **Knowledge base portal access control**.

> **For team accounts & team account groups**   
> Portal access refers to the access through which the article content and article settings are updated or deleted.

The **Assign content access: Knowledge base portal** panel appears with the list of existing team accounts.

1. If no accounts are listed, click **Assign article access** to assign team members.
2. Select the desired team account and click **Apply**.
3. In the **Team account** section, you can perform operations such as **Edit**, **Deny**, and **Remove**.
4. Once done, click **Site access**.

![2_Screenshot-Knowledge_base_portal_access_control](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Knowledge_base_portal_access_control.png)

### Knowledge base site

To change the article access on the site, select the **Knowledge base site access control.**

> **For readers & reader groups**  
> Site access refers to the view access of the published article on the private or mixed knowledge base site.

> **Why is this option Inactive?**  
> This option would be inactive (grayed out) if the knowledge base site access is set as **Public**.

The **Assign content access: Knowledge base site** panel appears with the list of existing readers.

1. If no readers are listed, click **Assign article access** to assign reader accounts.
2. Select the desired reader account and click **Apply**.
3. In the **Readers** section, you can perform operations such as Deny and Remove.
4. Once done, click **Site access**.

![3_Screenshot-Knowledge_base_site_access_control](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Knowledge_base_site_access_control.png)

---

### FAQs

#### **Once Knowledge base portal access is denied for a Team account or group, how can it be restored?**

If access is denied for a team account, the team account will not be listed. To restore access, click **Assign article access** and add the same team account again.

#### **Once Knowledge base site access is denied for a reader or group, how can it be restored?**

If access is denied for a reader account, the read account will not be listed. To restore access, click **Assign article access** and add the same reader account again.

#### **Can I give access to an entire category to a team account and still restrict access to specific articles within that category?**

Yes, in Document360, you can grant access to an entire category to a team account and still restrict access to specific articles within that category.

#### **How do I deny access to a specific article for a team account?**

To deny access to a specific article for a team account, follow these steps:

1. Go to the specific article and click on the **More**() icon in the Knowledge base portal.
2. Navigate to **Security** > **Knowledge base portal**.

   The Team accounts list will appear.
3. Hover over the desired Team account and click the **Deny** () icon.

#### **How do I grant access to a category for a team account?**

To grant access to a category for a team account,

1. Navigate to the category you want to give access to in the Knowledge base portal.
2. Click **More** () icon > **Security** > **Knowledge base portal** > **Assign category access**.
3. Select the desired Team account and click **Apply**.

#### **Can I manage article-level access independently within a category?**

Yes, Document360 allows you to manage article-level access independently within a category. You can grant or deny access to specific articles even if the user has access to the entire category.

#### **What happens if I deny access to an article that is part of a category the user has access to?**

If you deny access to a specific article, the user will not be able to view or interact with that article, even if they have access to the rest of the category. The restrictions applied at the article level will override the category-level permissions for that specific article.

#### **Why can't I see the category and article structure on the Knowledge base site as it appears in the portal?**

If you are unable to see the category and article structure on the knowledge base site, it may be due to JWT access settings. If the reader group doesn’t have access to specific categories, those categories won't be visible to them.

To resolve this, ensure the correct content access is granted to the reader group. If the issue persists, please contact our support team for assistance.

#### How can I configure one article public while keeping all others private in the Knowledge base site?

You can configure a single article as public while keeping all other articles private in a **Mixed project** by following these steps:

**Set the workspace site access to public:**

1. Navigate to **Settings** () > **Users & security** > Site access in the Knowledge base portal.
2. Locate the workspace where the desired article is created.
3. Set the Site access for that workspace to **Public**.

**Configure all other articles as private:**

4. Go to the **Documentation** () section.
5. For each article or category you want to keep private.
6. Hover over the article or category, and click the **More** () icon.
7. Select **Security** > **Knowledge base site**.
8. In the **Assign content access** panel, choose **Private** and click **Close**.

   Ensure that the article you want to make public remains in **Public** access mode.

By doing this, only the specified article will be publicly accessible, while all others remain private.![Configuring one article as public while keeping all others private in the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-FAQ_Configuring_one_article_public_other_Articles_As_private.gif)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="health-check-metrics"></a>

## Health check metrics

**Plans supporting health check metrics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Health check metrics** help you optimize your article's content and readability. These metrics provide valuable insights into current problems, suggestions for improvement, and aspects where the content is performing well. This feature is only available for articles and category pages in English.

For example, if an article has long sentences or lacks internal links, the tool will flag these issues, allowing you to make improvements and enhance readability and SEO performance.

---

## Accessing health check metrics

To access the Health Check Metrics for an article:

1. Navigate to the desired article in the Knowledge base portal.
2. Click **More** (•••) and select **Health check metrics**.

   The **Health check metrics** panel will appear with two major sections:

   * [SEO metrics](/help/docs/health-check-metrics#seo-metrics)
   * [Readability metrics](/help/docs/health-check-metrics#readability-metrics)

> NOTE
>
> If you update any parameter while the **Health check metrics** panel is open, click **Check now** to view insights on the latest changes.

### Metrics classification

The metrics are classified into three sections,

* **Problems:** Parameters that need immediate action.
* **Suggestions:** Parameters that require improvement.
* **Good Work:** Parameters that are currently optimal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Health_check_metrics_in_the_Knowledge_base_portal.gif)

---

## SEO metrics

This section displays the SEO metrics for your article, covering the following parameters:

### 1. SEO title length

**SEO title** is the article title text appearing in the search engine results and the browser tabs. This parameter indicates the length of your article's SEO title. If adjustments are needed, the recommended length and an option to update it appear. The ideal SEO title length is between 50-70 characters (including spaces).

* If the SEO title's character length (including spaces) is less than 30 or more than 90, it will appear under **Problems** with a link to update it. Click **Update now** to navigate to the respective section.
* If the length is between 30-49 or 71-90, it will appear under **Suggestions** with a link to update it. Click **Update now** to navigate to the respective section.
* If the length is between 50-70, it will appear under **Good Work**.

### 2. SEO description length

**SEO description** is the summary of an article. It appears in the search engine results as a short article description. This parameter shows the length of your article's SEO description. If adjustments are needed, the recommended length and an option to update it appear. The ideal SEO description length is between 120-160 characters (including spaces).

* If the description length is less than 80 or more than 160 characters, it appears under **Problems**, with a link to update it.
* If the description length is between 80-119 characters, it will appear under **Suggestions**, with a link to update it.
* If the description length is between 120-160 characters, it appears under **Good Work**.

### 3. External links

**External links** are the links used that point to a web location outside your Document360 project. This parameter shows the presence of external links in your article.

* Articles with no external links or more than three will appear under **Suggestions**.
* Articles with one to three external links will appear under **Good Work**.

### 4. Internal links

**Internal links** include article links, category page links, and other relevant links within your Document360 project. Media file links are not considered internal links. This parameter shows the presence of internal links in your article.

* If there are no internal links or more than three, it appears under **Suggestions**.
* If there are one to three internal links, it appears under **Good Work**.

### 5. Featured image

**Featured image** will appear alongside the SEO title and description when the article is shared on social media or other websites. This parameter shows the availability of the featured image in the article.

* If there is no featured image, it appears under **Suggestions**.
* If a featured image is added, it appears under **Good Work**.

---

## Readability metrics

This section displays readability metrics for your article, providing insights into the following parameters:

### 1. Readability score

The readability score indicates how easy your article is to read, on a scale from 0 to 100. A higher score means the content is more readable.

* If the score is below 30, it appears under **Problems**.
* If the score is between 30-59, it appears under **Suggestions**.
* If the score is above 59, it appears under **Good Work**.

> NOTE
>
> For more information, visit the [Readability score](/docs/readability-score) article.

---

### 2. Paragraph length

This parameter shows the length of paragraphs in your article. Long paragraphs can make content harder to follow, so shorter paragraphs are recommended. The optimal length is 150 words or less per paragraph.

* If any paragraph exceeds 150 words, it appears under **Suggestions**.
* If all paragraphs are 150 words or less, it appears under **Good Work**.

> NOTE
>
> Two or more sentences without a break are considered as a paragraph.

---

### 3. Sentence length

This parameter shows the length of sentences in your article. Shorter sentences are easier to read. The recommended sentence length is 20 words or less.

* If any sentence exceeds 20 words, it appears under **Suggestions**.
* If all sentences are 20 words or less, it appears under **Good Work**.

> NOTE
>
> **What is considered a sentence?**
>
> * A sentence is defined as a group of words ending with a period (.).
> * If the ordered and unordered list contains no full stop at the end, it will be considered as a single sentence.

---

### 4. Sub-heading distribution

This parameter shows the use of sub-headings in your article. Sub-headings improve readability and help readers identify different sections.

* If no sub-heading is present, it appears under **Suggestions**.
* If sub-headings are used, it appears under **Good Work**.

In Document360, use Heading tags (H2, H3, H4) to add sub-headings. These are available in the toolbar. If the table of contents is enabled, sub-headings will appear there as well.

> NOTE
>
> Readability metrics do not account for LaTeX expressions or code blocks.

<a id="readability-score"></a>

## Readability score

**Plans supporting Readability score**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Readability score, found in the Readability metrics section of the [**Health Check Metrics**](/help/docs/health-check-metrics), measures how easy it is to read and understand an article. It is presented as a score out of 100, where a higher score indicates greater readability.

For example, a score between 80 and 100 indicates that the article is very easy to read. If the score is between 60-80, the article is relatively easy to understand. If the score is below 60, the article is more complex, and readers may find it difficult to comprehend.

This score helps you quickly assess an article's readability. It helps you identify areas where readers might struggle without requiring feedback from them.

---

## Checking the readability score

1. Open the desired article in the Knowledge base portal.
2. Click the **More** (•••) icon and select **Health check metrics**.
3. The **Health check metrics** panel will appear with two major sections:

   * SEO metrics
   * Readability metrics
4. Expand **Readability metrics** and find the **Readability score.**

   * If the score is below 30, it appears under **Problems**.
   * If the score is between 30-59, it appears under **Suggestions**.
   * If the score is above 59, it appears under **Good Work**.

> NOTE
>
> If you update any parameter while the **Health check metrics** panel is open, click **Check now** to view insights on the latest changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-readability_metrics_in_the_Health_check_metrics.png)

---

### Score classification

The table below outlines the readability score ranges and their corresponding messages. These messages appear next to the score.

| Readability score | Message |
| --- | --- |
| 90-100 | Very easy to read |
| 80-89 | Easy to read |
| 70-79 | Fairly easy to read |
| 60-69 | Easily understood |
| 30-59 | Fairly difficult to read |
| 0-29 | Hard |

For example:

* If the readability score is 84, the message **Easy to read** will appear.
* If the readability score is 35, the message **Fairly difficult to read** will appear.

<a id="sitemap-generator"></a>

## Sitemap

**Plans supporting for sitemap generation**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A Sitemap is a file that shares detailed information about a website, primarily containing page URLs. Search engines like Google, Bing, and Yahoo use this file to crawl your site more effectively. It communicates the most important pages and files to search engine crawlers. Document360 uses an XML-type sitemap generator.

> NOTE
>
> Sitemap URLs are available only for public projects.

---

## Accessing the Sitemap in Document360

1. Navigate to **Settings** () >**Knowledge base site** > **A****rticle settings & SEO**> **SEO** tab in the Knowledge base portal.
2. Locate the **Sitemap URL**.
3. In the **Select change frequency** field, choose how often your sitemaps should be generated.

> NOTE
>
> Sitemaps are not updated instantly when you add a new article or change an article slug. They are generated based on the selected frequency. It's recommended to choose a frequency that aligns with your article publishing rate. For example, if you publish one or more new articles daily, set the frequency to **Daily**.

4. Click the sitemap URL to view your sitemap.

![Settings page showing SEO options for article management and sitemap configuration.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-New-Accessing_sitemap_in_Document360.png)

---

### FAQs

#### Do I need a sitemap?

A sitemap.xml file is an essential for communicating with search engines. It’s also useful for verifying your website structure for other internal audits.

#### What should I do with the sitemap?

You should submit your sitemap to Google Search Console once it's generated from the Document360 sitemap generator. [Click here](https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap) to learn more about submitting your sitemap to Google Search Console.

#### How does a sitemap look?

```
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/foo.html</loc>
    <lastmod>2018-06-04</lastmod>
  </url>
</urlset>

```

Plain text

Copy

> Above is a basic sitemap example that includes one URL. It is a misconception that sitemaps have only URLs in them. It can also have metadata added to them.

#### What are the types of sitemaps?

There are three main types of sitemaps

1. **Visual sitemaps**- Used by web project developers.
2. **HTML sitemaps**- Used for sites with large content, with lower impacts on SEO.
3. **XML sitemaps**- Most used commonly used type, performing well in SEO as they are crawler friendly.

<a id="public-comments"></a>

## Public article comments

**Plans supporting discussion/inline comments**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 uses [Disqus](https://disqus.com/), a commenting plug-in, to allow end-users to comment on articles on the Knowledge base site. To enable Disqus, you must first set up and configure the Disqus integration. After configuration, commenting will be automatically enabled on all articles.

> NOTE
>
> For more information, read the article on [Disqus integration in Document360](/help/docs/disqus).

---

## Enabling comments on a public article

> NOTE
>
> If you don’t have the Disqus integration enabled, end-users can’t comment on a public article.

1. Navigate to the desired article in the Knowledge base portal.
2. Click on the **More** (**•••**) icon at the top right and select **More article options**.
3. Go to the **Preferences** tab in the **Article settings** panel.
4. Select the **Enable feedback** checkbox.
5. To disable comments on a public article, deselect the **Enable feedback** checkbox.
6. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enable_feedback_in_public_articles.png)

> NOTE
>
> Removing the Disqus integration will disable commenting entirely. If you decide to re-enable Disqus later, you'll need to reconfigure the integration by following the steps in the [Disqus](/help/docs/disqus) topic.

### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Enabling_Feedback_Knowledge_base_site_view.png)

---

### FAQ(s)

#### How do I enable comments on a public article?

To enable comments, navigate to the desired article, click on the **More (•••)** icon, go to the **Preferences** tab in the **Article settings** panel, select the **Enable feedback** checkbox, and click **Save**.

#### Can I disable comments on a public article?

Yes, you can disable comments by deselecting the **Enable feedback** checkbox in the **Article settings** panel.

#### Will deleting the Disqus integration disable public comments?

Yes, removing the Disqus integration will disable public comments on all articles.

#### What steps do I need to take to delete the Disqus integration?

To delete the Disqus integration, navigate to Settings () > **Knowledge base site** > **Integrations**, and click **Delete** on the Disqus list item.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="robotstxt"></a>

## Robots.txt

**Plans supporting for Robot.txt**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is a Robots.txt file?

A Robots.txt file is a text file used to communicate with web crawlers and other automated agents about which pages of your knowledge base should not be indexed. It contains rules specifying which pages may be accessed by which crawlers.

> For more information, read this [help article](https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt) from Google.

---

## Accessing Robots.txt in Document360

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** > **SEO** tab in the Knowledge base portal.
2. Locate **Robots.txt** and click **Edit**.

   The **Robots.txt settings** panel will appear.
3. Type in your desired rules.
4. Click **Update**.

![Screenshot of robot txt page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_robot_txt_page.png)

---

### Use cases of Robots.txt

A Robots.txt file can block a folder, file (such as a PDF), or specific file extensions from being crawled.

You can also delay the crawl speed of bots by adding crawl-delay in your Robots.txt file. This is useful when your site is experiencing high traffic.

```
User-agent: *
Crawl-delay: 10
```

Plain text

Copy

---

### Restricting the crawler through admin data

```
User-agent: *
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml

```

Plain text

Copy

`User-agent: *` - Specifies that any bot can crawl through the site.  
`Disallow: /admin/:` - Restricts the crawler from accessing admin data.  
`Sitemap: https://example.com/sitemap.xml` - Provides access to bots to crawl the sitemap. This makes the crawl easier as the sitemap contains all the URLs of the site.

---

### Restricting a specific search engine from crawling

```
User-agent: Bingbot 
Disallow: /

```

Plain text

Copy

> The above Robots.txt file is defined to disallow the Bingbot.

`User-agent: Bingbot` - Specifies the crawler from the Bing search engine.  
`Disallow: /` - Restricts Bingbot from crawling the site.

---

#### Best Practices

* **Include links** to the most important pages.
* **Block links** to pages that do not provide any value.
* Add the sitemap location in the **Robots.txt** file.
* A Robots.txt file cannot be added twice. Please check the basic guidelines from [Google Search Central](https://developers.google.com/search/docs/advanced/robots/create-robots-txt#format_location) documentation for more information.

> NOTE
>
> A web crawler, also known as a Spider or Spiderbot, is a program or script that automatically navigates the web and collects information about various websites. Search engines like Google, Bing, and Yandex use crawlers to replicate a site's information on their servers.
>
> Crawlers open new tabs and scroll through website content, just like a user viewing a webpage. Additionally, crawlers collect data or metadata from the website and other entities (such as links on a page, broken links, sitemaps, and HTML code) and send it to the servers of their respective search engine. Search engines use this recorded information to index search results effectively.

---

### FAQs

**How do I remove my Document360 project from the Google search index?**

To exclude the entire project from the Google search index:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. Go to the **SEO** tab and click **Edit** in the `Robots.txt`.
3. Paste the following code:

```
User-Agent: Googlebot 
Disallow: 
```

Plain text

Copy

4. Click **Update.**

**How do I prevent tag pages from being indexed by search engines?**

To exclude the tag pages from the search engines:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. Go to the **SEO** tab and click **Edit** in the `Robots.txt`.
3. Paste the following code:

```
User-agent: *
Disallow: /docs/en/tags/
```

Plain text

Copy

4. Click **Update**.

<a id="read-receipt"></a>

## Read receipt

**Plans supporting read receipt**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Read receipt** feature helps you see who has read and acknowledged an article. This helps ensure important updates are noticed. For example, if your company updates its security policy, employees can be required to acknowledge the article, confirming they have read it. This keeps communication clear and trackable.

> For your information (FYI)
>
> * The Read receipt feature is available exclusively for private and mixed projects in **KB site 2.0**.
> * The Read receipt feature is not available for JWT configured projects.

---

## Managing Read receipts in the Knowledge base portal

You can manage the read receipt feature for articles and category pages in three ways:

Method 1: Bulk management in All articles

Method 2: Individual article settings

Method 3: Accessing read receipt in the Settings

Method 1

Method 2

Method 3

You can enable or disable read receipts for multiple articles at once through the **All articles** () section.

1. Navigate to **Documentation** () > **All articles** () in the Knowledge base portal.

   The **All articles** page will appear with all articles within your workspace.
2. Select the intended articles.
3. To enable the read receipt, click **Enable read receipt**.
4. To disable the read receipt, click **Disable read receipt**.
5. Hover over the **Read receipt** () icon to see the number of readers who have acknowledged the articles.

> NOTE
>
> If the read receipt is configured in the **Settings**, it cannot be changed in the **All Articles** section.

![Enabling the read receipt for selected articles in the All articles section in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-New_Enabling_read_receipt_from_All_articles.png)

To enable read receipts for a specific article:

1. Navigate to the desired article in the Knowledge base portal.
2. Click the **More**() icon and select **More article options**.
3. In the **Article settings** panel, go to the **Read receipt** tab.
4. Turn on the **Enable read receipt for this article** toggle and click **Save**.

![Enabling the read receipt for selected articles in the Articles section in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-New_Enabling_read_receipt_from_Article_settings.png)

You can apply read receipt rules to entire knowledge base categories:

1. Navigate to the **Settings**() > **Knowledge base settings** > **Read receipt** in the Knowledge base portal.

   The **Read receipt** page will display any previously created rules.
2. Click **Create rule**.
3. In the **Create read receipt rule** panel, enter the rule name (up to 50 characters).
4. Choose the visibility option: **Show** or **Hide**.

> NOTE
>
> When creating rules, the order in which they appear determines which rule takes effect. You can create up to 20 rules per project and rearrange them as needed.
>
> For example, if you have two rules for the same category:
>
> * **Rule 1**: Enable the reader acknowledgment feature in Category A.
> * **Rule 2**: Disable the reader acknowledgment feature in Category A.
>
> If Rule 1 is in the second position and Rule 2 is in the third, Rule 1 will take effect first, provided both rules are set to "Show." However, if Rule 1 is set to "Hide," then Rule 2 will take effect, even though Rule 1 has a higher priority.

5. Select the desired categories to apply the read receipt.
6. If needed, assign the rule to specific reader groups.
7. Once done, click **Create**.

![Enabling All articles in the Project settings in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-New_Enabling_Read_receipt_in_the_Settings_page.gif)

> NOTE
>
> * If you have configured in Settings, read receipts cannot be altered at the **Article-level settings**.
> * Read receipts can be added to both draft and published articles.
> * When forking and republishing an article with acknowledgment enabled, readers will need to acknowledge the republished article again.
>
> ![2_Screenshot-publish_confirmation_prompt](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-publish_confirmation_prompt.png)

For articles with reader acknowledgment enabled, the acknowledgment information will be displayed at the top. ![3_Screenshot-acknowledgement_information_at_the_top](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-acknowledgement_information_at_the_top.png)

---

## **Read receipt page**

![Interface showing rules for read receipt settings with highlighted elements for visibility and rules.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-New_Overview_page_of_Read_receipt_in-Settings.png)

The **Read receipt** page provides a detailed view of your configured rules:

1. **Create Rule:** Click to create a new read receipt rule for Knowledge base categories.
2. **Rearrange Rules:** You can rearrange the order of created rules. Rules are prioritized based on their sequence, with the first rule taking precedence.
3. **Name:** Displays the name of each read receipt rule.
4. **Visibility:** Indicates whether the rule is set to Show or Hide.
5. **Rules:** Displays the categories to which the rules are applied.
6. **Dependency viewer:** View and edit the categories where the rule is applied.
7. **Edit:** Hover over the desired rule to edit it.
8. **Delete:** To delete a rule, hover over it, click **Delete**, and confirm the action.

---

## Reader acknowledgement in the Knowledge base site

1. Once the Read receipt configured, navigate to the desired article in the Knowledge base site.

   A small banner will appear at the top, stating **"Your acknowledgement is required upon reading.”**
2. Scroll down to the end of the article, select the checkbox to acknowledge, and then click **Submit**.

   Upon successful acknowledgement, a confirmation message will appear at the top of the article.

![4_ScreenGIF-Reader_acknowledgement_in the KB_site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Reader_acknowledgement_in%20the%20KB_site.gif)

---

## Acknowledgement required in the Knowledge base site

![Acknowledgement required in the Knowledge base site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Acknowledgement_required_in_the_Knowledge_base_site.png)

On the top-right side of the home page, you'll see an Announcement () icon indicating the number of acknowledgements that need to be addressed. Click this to access the **Acknowledgement required** page.

On the left side of the **Acknowledgement required** page, you'll find filter options for workspace and acknowledgement status:

**Workspace**:

* Current Workspace: Filters articles only within the current workspace.
* All Workspace: Filters articles across all workspaces.
* Specific: Allows selection of specific workspaces for filtering.

**Acknowledgement status**:

* Required: Displays a list of articles that have not been acknowledged.
* Acknowledged: Displays a list of articles that have been acknowledged.

---

## Monitoring Read receipt in Analytics

In the **Analytics** () section, you can monitor the read receipt analytics:

1. Navigate to **Analytics** () > **Articles** in the Knowledge base portal.
2. In the **Top articles** section, click **View all**.

The **All Articles** page will appear, showing a field named **Read Receipt**, where you can see the acknowledgment details for each article.

![6_ScreenGIF-Analytics_section_Reader_Acknowledgement](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Analytics_section_Reader_Acknowledgement.gif)

NOTE

Any changes made to the respective articles will reflect in the analytics within 15 minutes.

---

### FAQs

#### What is the maximum number of read receipt rules I can create?

You can create up to 20 read receipt rules.

#### What happens to reader acknowledgment rules when cloning articles or categories across workspaces?

When you clone articles or categories within or across workspaces, reader acknowledgment rules will not be carried over to the new workspace. The rules must be configured separately for the new workspace.

#### Do readers need to acknowledge every time an article is updated?

When forking and republishing an article with acknowledgment enabled, readers will need to acknowledge the republished article again.

<a id="share-articles-via-private-link"></a>

## Share articles via private link

**Plans supporting the sharing of private link**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Share articles with external readers using a private link even before publishing the content. This feature allows you to generate a unique link for any article. With this link, you can grant access to the content to users who do not have access to your knowledge base portal or site. You can share these private links with external users outside your Document360 project (team accounts or reader groups) and disable or regenerate the links at any time to manage access as per your preferences.

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th.

---

### Creating a private link

1. Navigate to the desired article in the Knowledge base portal.
2. Click on more options (•••) in the category tree next to the article.

   Alternatively, select more options (•••) near the Publish button.
3. Click the **Share link** (  ) icon.
4. In the **Share link** pop-up window,

   a. Click on **Get sharable link (  )** once you have deleted the pre-existing link to generate a new link.

   b. Click on **Copy** (  ) to copy the link to share.

   c. You can choose to click **Delete link** (  ) to delete the existing link.

> NOTE
>
> * When the user has deleted the article, the link will not display the information of the article in the KB site.
> * But once it’s recovered from the recycle bin (or) back up and restored, the same link should allow the user to view the content.

![1_ScreenGIF-Creating_deleting_the_private_link](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_deleting_the_private_link.gif)

---

### FAQs

**What happens if the user deletes the generated link?**

The shared private link will be invalid if the user deletes the generated link in the KB portal.

**How do I regenerate my shareable link?**

After deleting the existing link, navigate to the **More** (•••) option > **Share (  )** icon > click **Get sharable link** to regenerate it.

**How do I share an unpublished article with someone who is not part of the team account?**

In Document360, you can use the Get shareable link feature to share an unpublished article with individuals who are not part of your project’s team account.

<a id="ai-customization"></a>

## Eddy AI customization

**Plans supporting the Eddy AI customization**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

> NOTE
>
> **Current Plan:**
>
> * **Business Plan:** You can customize the response tone and length for AI assistive search.
> * **Enterprise Plan:** In addition to customizing the response tone and length for AI assistive search, you can also customize the AI assistant's name.
>
> **Legacy Plan:**
>
> * If you have purchased AI assistive search, you can customize the response tone and length.
> * **Enterprise Plan:** In addition to customizing the response tone and length, you can also customize the AI assistant's name.

As a Document360 user, you have the flexibility to rename Eddy to fit seamlessly with your company’s identity. Whether your organization has its own advanced AI capabilities or simply wants Eddy to reflect its unique culture and values, customization options are available. This depicts that Eddy not only supports your content needs but also represents your brand in the best possible way.

> NOTE
>
> The users with the access to **View access permissions** > **Portal role** > **Project settings** > **Update (enabled),** can customize the Eddy AI term.

---

## Customizing the Eddy AI

To personalize your Eddy AI,

1. Navigate to Settings ()> **AI features** > **Customization** in the Knowledge base portal.

   The **Customize Eddy AI** page will appear.
2. In the **AI assistant name** text box, enter your desired name for the AI assistant.

   By default, **Eddy AI** will be assigned as the AI assistant name.
3. You can customize the AI Assistive response tone to fit various contexts and situations:

* Default (Select this option for search responses that match the tone of your question or context, offering adaptability for different situations.)
* Professional
* Friendly
* Casual
* Straightforward
* Confident

4. You can customize the response length of AI Assistive search based on how detailed you want the responses to be:

* Default (Select this option for search responses that adjust to your question and the context, varying in length as required)
* Long and detailed
* Short and concise

5. Once done, click **Save.**

> NOTE
>
> **Moderation APIs** verify and filter out inappropriate words in the **AI assistant name** field. If the name doesn’t meet our community standards while saving, a prompt will be displayed. Click **Yes** to proceed, and the moderation API will be overridden.

![Customizing the Eddy AI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Customizing_the_Eddy_AI.png)

---

### FAQ

#### Is there a character limit for the AI assistant name?

Yes, the AI assistant name should not exceed 15 characters.

<a id="ai-machine-translation"></a>

## AI machine translation

**Plans supporting access to machine translation settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360’s AI machine translation feature enables seamless translation of text within your article. This capability ensures that all aspects of your content can be localized to the languages added to your project, allowing you to easily maintain a multilingual knowledge base.

Key benefits:

* Time-efficient: Easily translates article text, saving you time on manual translations.
* Consistency: Keeps terminology and phrasing uniform across languages, ensuring a cohesive user experience.
* Scalability: Easily handle translations across numerous articles and languages as your knowledge base grows.

> **NOTE**
>
> * When you perform machine translation for a Markdown article, it will be automatically converted to the WYSIWYG editor.
> * If an article is deleted in the main language, it will also be deleted in all other languages. However, if an article is hidden in the main language, it will still be visible on the Knowledge base site in other languages.

## Prerequisites for using machine translation

To perform AI machine translation,

* Ensure you have sufficient machine translation character credits. You can check your available character credits from **Settings**() > **Knowledge base portal** > **Localization & Workspaces** > **Machine translation**. You can also purchase additional credits by clicking the Buy more button on the same page.

> NOTE
>
> Machine translation credits are consumed at a rate of one credit per translated character in the article. Each character translated reduces the available machine translation credits accordingly.

## Using machine translation

You can translate articles using two methods:

1. Machine translation using the **All articles**() section
2. Translating articles from the editor

### Method 1: Machine translation using the **All articles** () section

To translate multiple articles using the **All articles** () section, follow the steps below:

1. Navigate to **Documentation** () >**All articles** () in the Knowledge base portal.
2. From the article list, select the checkbox(s) next to the article(s) you wish to translate.
3. Click **Machine translation**.

   The **Translate to other languages** panel will appear.
4. Select the desired languages (e.g., German and Spanish).
5. Type `Yes` in the confirmation field and click **Yes**.

   > NOTE
   >
   > * The Machine translation feature is only available for WYSIWYG and Advanced WYSIWYG editors. The selected articles will be switched over to the WYSIWYG editor and cannot be reverted.
   > * If you update the content in your main language later, you must repeat these steps to ensure the translated versions reflect the updates.

![Steps to perform bulk machine translation for articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-AI_machine_translation.gif)

#### Updating translation status for articles

On the **All articles** () page, after you select one or more articles, you can perform the following translation actions from the toolbar:

1. **Machine translate**: This option is available before an article has been translated for the first time.
2. **Needs translation**: After an article has been translated, you can manually change its status to indicate it requires further translation.
3. **Mark as translated**: When an article is in the translated status, you can manually change it to **Mark as translated** once it's complete.

> **NOTE**  
> The **Need translation** status is only available for secondary languages in your workspace. When a new language is added to a workspace, all articles will appear with the **Need translation** status by default.

### Method 2: Translating articles from the editor

To translate an article from the editor, follow these steps:

1. Navigate to the Knowledge base portal, and from the **Workspace & Language** dropdown, select the desired language.
2. Navigate to the desired article in the editor.
3. Ensure the appropriate content is present in the editor.
4. Click the **Needs translation** dropdown in the top-right corner of the editor to access translation options.
5. Click **Translate** to start the process.

   A progress indicator will appear, and other operations will be restricted until the translation is complete.

![To perform machine translation for individual articles in different language](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-AI_machine_translation.gif)

> **NOTE**  
> If a translated article has been updated, and you wish to apply machine translation to the article again, click **✓ Translated** and select **Mark as ‘Needs translation’**. This will change the translation status back to **Needs translation**.

## Understanding machine translation with real-time examples

You can choose between the two methods based on your use case.

1. Scenario 1: Translating articles to existing languages
2. Scenario 2: Adding a new language to the project

Scenario 1

Scenario 2

Assume your main language is English, and your project includes two other languages, such as German and Spanish.

When you create a new article (e.g., **Troubleshooting**) in English, corresponding articles are automatically created in German and Spanish, but they appear without content.

In this scenario, you can use **All articles**() to translate the English content into other languages:

1. Navigate to **Documentation** () > **All articles** () in the Knowledge base portal.
2. Select the **Troubleshooting** article in English.
3. Click **Machine translation**.

   The **Translate to other languages** panel will appear.
4. Select the desired languages (e.g., German and Spanish).
5. Type **Yes** in the confirmation field and click **Yes**.

The content will now be translated from English to German and Spanish.![Translating content from the All articles section in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF-Translating_content_from_all_articles_realtime_example.gif)

If you add a new language (e.g., French) to your project after creating content in English, then the English content will be automatically replicated in the newly added language.

Navigate to the French articles and click **Needs translation** to translate the content.

However, if languages (e.g., German and Spanish) were already added before drafting the English article, the content will not be automatically replicated. In this case, you must manually translate it from the **All articles** () section.

![Translating content from the article editor in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Translating_content_from_editor_real_time_eg.gif)

---

## Managing machine translation credits

To view the available machine translation credits for your project, navigate to **Settings**() > **Knowledge base portal** > **Localization & Workspaces** > **Machine translation**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Machine translate screenshot 1.png)

On this page, you will find the details regarding your used and available machine translation credits.

| Name | Description |
| --- | --- |
| Limit | The total machine translation credits allotted for your project. |
| Usage | The number of credits consumed for machine translation in your project. |
| Remaining | The number of characters remaining from your total machine translation limit. |
| Usage meter | Shows the percentage of translated characters using machine translation from your total limit of 100%. |

> **NOTE**
>
> * An individual article should have fewer than 50,000 characters for machine translation to work. The character count includes all formatting, such as tables, accordions, and other complex elements. Articles with extensive formatting are more likely to exceed this limit. If the character count is too high, consider splitting the article into smaller, manageable sections as a workaround.
> * Machine translation credits are allocated at the project level and apply collectively across all workspaces and languages within that project.

### Machine translation credit limits based on subscription plan

| Plan | Machine translation character limit |
| --- | --- |
| Professional | 1 million characters |
| Business | 2 million characters |
| Enterprise | 5 million characters |

Click **Buy more** to purchase an additional 1 million characters for $50, supporting all three plans: Professional, Business, and Enterprise.

---

## Article translation status indicators

Keep track of the translation status and update it easily as needed. Translation statuses help you identify which articles need updates and which are fully translated, ensuring you’re always informed of your multilingual content's status. The article's translation status indicator is located above the text formatting toolbar in a project workspace that contains multiple languages in both Markdown, WYSIWYG, and Advanced WYSIWYG.

| Status | Indication |
| --- | --- |
| Need translation | The article has not yet been translated or requires additional translation. Initially, the **Need translation** status appears as the default status in all other language articles. The article can either be an existing article created from the base version or a new one.  The options that appear when you click on this status are:   * Translate * Mark as translated   Articles that require translation (with **Needs translation** status) are indicated using the globe (🌐) icon on the left navigation pane. |
| Translated | The article has either been machine or manually translated to the destination language or marked as translated by the team account. |

> **NOTE**  
> The translation status indicator is unavailable on the main language article.

### Filtering articles based on translation status

1. Navigate to **Documentation**() >**All articles** () in the Knowledge base portal.

   The list of articles will appear.
2. Click **Filter** on the right and select the intended filter (**Needs translation** or **Translated**).

From here, you can perform actions such as:

* Changing the translation status
* Machine translate

---

## Troubleshooting

### Encountering error while translating an article

**Error:** Unable to connect the Translate API  
The error message "Error occurred: Unable to Connect the Translate API" appears when attempting to apply machine translation to an article in the editor or from the All articles section. This occurs because the HTML content of the article exceeds the character limit of 50,000 set by the Azure Translation service. Articles with a large number of tables or complex HTML elements are more prone to exceeding this limit, as these elements contribute significantly to the overall character count.

**Steps to resolve:**

1. Open the code view of the article you are trying to translate.
2. Copy the entire HTML content of the article.
3. Use a character counting tool to determine the total number of characters in the HTML content.
4. If the character count exceeds 50,000, split the article content into smaller sections and create multiple articles.
5. Apply machine translation to the smaller articles separately to proceed with the translation.

![Encountering “Error occurred: Unable to connect the Translate API" message while translating an article.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ScreenGIF-Troubleshooting_Unable_to_connect_the_Translate_API.gif)

### Latest content in the main language not reflected in secondary languages

Updates made to the main language will not automatically reflect in other languages. You must manually initiate the translation process using the Machine translation feature.

When an article is created in the main language, its structure is automatically replicated in secondary languages, but the content itself is not transferred.

**Steps to resolve:** To update the content in secondary languages, follow these steps:

1. Navigate to the **All articles** () section in the main language.
2. Select the article you want to translate into secondary languages.
3. Click **Machine translation**.

   The **Translate to other languages** panel will appear.
4. Select the desired languages.

> **NOTE**
>
> * The translating article(s) will switch to the Advanced WYSIWYG editor and cannot be reverted.
> * Articles in New or Draft status in secondary languages will be overwritten by the latest version from the main language.

5. Type **Yes** in the confirmation field and click **Yes** to proceed.

![Translating content from the All articles section in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF-Translating_content_from_all_articles_realtime_example.gif)

---

### FAQs

#### What languages are supported for machine translation?

Machine translation supports the following languages:

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
| Afrikaans | Dutch | French (Canada) | Korean | Slovenian |
| Arabic | Dutch (Belgium) | Georgian | Latvian | Spanish |
| Arabic - Egypt | English | German | Lithuanian | Spanish (Mexican) |
| Bulgarian | English (Australia) | Greek | Mongolian | Swedish |
| Chinese | English (UK) | he - עִבְרִית | Norwegian | Thai |
| Chinese (Simplified, People's Republic of China) | English (US) | Hungarian | Polish | Türkçe |
| Chinese (Traditional, Taiwan) | Estonian | Icelandic | Portuguese | Ukrainian |
| Chinese (Traditional) | Filipino | Indonesian | Portuguese (Brazil) | Vietnamese |
| Czech | Finnish | Italian | Romanian | Русский |
| Danish | French | Ja - 日本語 | Slovakian |  |

#### Can I manually translate articles instead of using machine translation?

Yes, you can manually translate articles using external translation services. Once you have finished translating, you can mark them as translated.

#### Is there a limit on how many articles I can translate at once?

No, you can translate multiple articles simultaneously as long as you have sufficient machine translation credits.

#### What happens if my article exceeds the character limit for machine translation?

If an article exceeds the 50,000-character limit, machine translation cannot proceed. To enable translation, reduce the character count. Note that the character count is based on the HTML content, ensuring formatting is preserved across all languages during translation.

#### Can I revert back to the original state after machine translation?

Once an article is machine translated, you can change its status back to "Needs translation," but the original content is not retained. Be sure to keep a backup of the original content if needed.

#### Are there additional costs for using machine translation?

Machine translation is included in your subscription plan. However, exceeding your character limit will incur additional charges.

#### What happens to articles in other languages when I create a new article in the main language?

When you create a new article in the main language, corresponding articles are created in other languages (e.g., German, Spanish) but without content. You will need to translate the content using the Machine translation feature in the Knowledge base portal.

#### What happens when I add a new language to the project?

When a new language is added after content has been drafted in the main language, the content from the main language is automatically replicated in the newly added language's articles. To translate these articles, navigate to them and click **Needs translation** to complete the translation.

#### Why are some articles empty in other languages?

If the desired languages were already added to the project before drafting the article in the main language, the content will not be automatically replicated. You must translate the content manually via **All articles**().

#### How do I delete an article in a specific language without affecting other languages?

When you delete an article in any specific language, it will also be deleted in the main language and other languages, as articles are linked across languages.

To avoid this, you can **hide** the article in that specific language:

1. Navigate to the desired article in that language.
2. Use the **Hide** () option to ensure it does not appear in the Knowledge base for users in that language.

   This way, the article will remain available in other languages within your project.

#### How do I delete all articles in one specific language without deleting other languages?

If you want to delete all articles in a specific language but retain the articles in other languages:

1. Navigate to **Settings**() > **Knowledge base portal** > **Localization & Workspaces** >**Localization & Workspaces**in the Knowledge base portal.
2. Hover over the desired workspace and click the **Edit**() icon.

   The **Edit workspace** panel will appear.
3. Navigate to the desired language and click the **More** () icon.
4. Click **Remove**.

> **NOTE**
>
> This action will permanently delete all articles in that desired language across the project. Other languages will remain unaffected.

<a id="eddy-ai-trust-page"></a>

## Eddy AI trust page

**Plans supporting the use of AI tools**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

At Document360, we are committed to transparency with our customers regarding our products and how we use AI to enhance your experience. Below is an overview of Eddy AI's functionality, along with our related security and privacy practices.

---

## Compliance

Eddy AI, our advanced AI-powered tool, adheres to strict compliance standards such as:

* **GDPR**: We follow the General Data Protection Regulation, ensuring robust data protection and privacy for all individuals in the European Union.
* **SOC 2 Type 2**: Our procedures align with the requirements of SOC 2 Type 2, demonstrating our commitment to security, availability, and confidentiality.

---

## Subprocessors

To deliver a high-quality service, Eddy AI leverages a network of trusted subprocessors. These include:

* **MongoDB**: Used as our vector database.
* **OpenAI**: Provides AI capabilities, utilizing their advanced models.
* **Azure**: Our cloud provider ensures a scalable and reliable infrastructure.
* **Stripe**: Facilitates secure payment processing.
* **Segment**: Used for product analytics to enhance the user experience.

---

## Data Security and Privacy

We take facts, safety, and privacy seriously. All facts associated with Eddy AI are securely stored and encrypted. Here’s how we ensure the integrity and confidentiality of your information:

* **Data at rest**: All the information is encrypted using industry-standard encryption protocols.
* **Data in transit**: Data transmitted between your tool and our servers is encrypted to save you from interception and tampering.

Eddy AI is designed to supply steady and dependable overall performance, even under high utilization.

---

## Resources

**1. Cryptography policy**

**Purpose**: The policy aims to ensure the proper and effective use of cryptography to protect the confidentiality, authenticity, and integrity of information.

**Scope**: The policy applies to all information systems developed and/or controlled by Document360 that store or transmit confidential data.

**Policy Owner**: The CEO is responsible for the policy.

**Effective Date**: The policy becomes effective on March 1, 2024.

**Risk Evaluation**: Document360 evaluates risks and implements cryptographic controls to mitigate them where appropriate.

**Encryption Standards**: Strong cryptography with associated key management processes and procedures must be implemented and documented in accordance with industry standards, including NIST SP 800-57.

**Key Management**: Access to keys and secrets is tightly controlled, and there are specific recommendations for the usage of cryptographic keys, including key types, algorithms, and key lengths for various domains such as web certificates, web ciphers, and endpoint storage.

**Exceptions**: Requests for exceptions to the policy must be submitted to the CEO for approval and must be documented.

**Violations & Enforcement**: Known violations should be reported to the CEO and may result in disciplinary action, including termination of employment.

**Version History**: The policy is in its first version, approved by Yasser Elsaid on February 3, 2024.

**Data at Rest**: Confidential data at rest must be encrypted using symmetric encryption with AES-256 bit for a maximum period of 1 year.

**Passwords**: Passwords must be hashed using one-way hash functions like Bcrypt, PBKDF2, scrypt, or Argon2, with a 256-bit key and a 10K stretch, including a unique cryptographic salt and pepper.

**2. Incident Response Plan**

**Purpose and Scope**: The document aims to provide a plan for managing information security incidents and events, covering all such occurrences within the company.

**Definitions**: It clarifies the difference between a security event (an observable occurrence relevant to data security) and a security incident (an event that results in loss or damage to data security).

**Reporting and Documentation**: Employees are instructed to report any suspected incidents immediately using specific communication channels, and all incidents must be documented.

**Severity Levels**: Incidents are categorized into S1 (Critical), S2 (High), and S3/S4 (Medium/Low) severity levels, with clear guidelines for escalation and response.

**Incident Response Team**: The IT Manager or VP of Support leads the incident response effort, with a designated "War Room" for centralized response. Regular meetings are held to update the incident ticket, document indicators of compromise, and perform other response activities.

**Root Cause Analysis**: For critical incidents, a root cause analysis is performed, documented, and reviewed by the CEO, who decides on the need for a post-mortem meeting.

**Response Process**: The response process includes triage, investigation, containment, eradication, recovery, and hardening, with a focus on lessons learned and long-term improvements.

**Physical Security**: The document addresses the physical security of affected systems, including isolation and backup procedures.

**Breach Determination and Reporting**: Only the CEO can determine if an incident constitutes a breach. The company shall promptly notify all relevant parties in accordance with policies and regulatory requirements.

**External Communications**: The company cooperates with customers, data controllers, and authorities as needed, with legal and executive staff determining the approach.

**Roles and Responsibilities**: The document outlines the specific responsibilities of incident responder roles.

**Special Considerations**: It includes handling internal issues, compromised communications, and root account compromises.

**Incident Status and Summary**: A detailed template is provided for documenting incident details, including date, time, location, personnel involved, type of information involved, indicators of compromise, root cause, and actions taken.

**AWS Root Account Compromise Playbook**: Specific guidance is provided for managing Root AWS account usage in the event of a compromise.

**Policy Owner and Effective Date**: The CEO is the policy owner, and the plan becomes effective on March 1, 2024.

**3. Information Security Roles and Responsibilities Policy**

**Objective**: To establish clear roles and responsibilities for protecting electronic information systems and related equipment.

**Policy Owner and Effective Date**: The CEO is the policy owner, and the plan becomes effective on March 1, 2024.

**Applicability**

* Applies to all Document360 infrastructure, network segments, systems, employees, and contractors involved in security and IT functions.

**Audience**

* All employees and contractors involved in the Information Security Program.
* Includes partners, affiliates, temporary employees, trainees, guests, and volunteers.

**Roles and Responsibilities**

1. **Executive Leadership**:

* Approves capital expenditures for security programs.
* Oversees execution and communication of information security and privacy risk management.
* Ensures compliance with laws and standards (e.g., GDPR, CCPA, SOC 2, ISO 27001).
* Reviews vendor service contracts and oversees third-party risk management.

2. **VP of Engineering:**

* Oversees information security in software development.
* Implements and monitors security controls for development and IT processes.
* Conducts IT risk assessments and communicates risks to leadership.

3. **VP of Customer Support:**

* Manages information security tools and processes in customer environments.
* Ensures compliance with data retention and deletion policies.

4. **System Owners:**

* Maintain confidentiality, integrity, and availability of information systems.
* Approve access and change requests for their systems.

5. **Employees, Contractors, Temporary Workers:**

* Act responsibly to protect health, safety, and information resources.
* Identify areas for improved risk management practices.
* Report incidents and adhere to company policies.

6. **Chief Human Resources Officer:**

* Ensures employees and contractors are qualified and competent.
* Oversees background checks, policy presentation, and Code of Conduct adherence.
* Evaluates employee performance and provides security training.

**Policy Compliance**

* Compliance measured through reports, audits, and feedback.
* Exceptions must be pre-approved by the CEO.
* Non-compliance can lead to disciplinary actions, including termination.

**Document Control**

* **Version**: 1.0
* **Date**: February 3, 2024
* **Author**: Yasser Elsaid
* **Approved by**: Yasser Elsaid

**4. Secure Development Policy**

**Policy Owner and Effective Date**: The CEO is the policy owner, and the plan becomes effective on March 1, 2024.

**Purpose:** To ensure that information security is designed and implemented within the development lifecycle for applications and information systems.

**Scope:** Applies to all Document360 applications and information systems that are business critical and/or process, store, or transmit Confidential data.

**Secure-by-Design Principles:**

* Minimize attack surface area.
* Establish secure defaults.
* Apply the principle of Least Privilege.
* Implement defense in depth.
* Fail securely.
* Avoid security by obscurity.
* Keep security simple.

**Privacy-by-Design Principles:**

* Proactive, preventative approach.
* Privacy as the default setting.
* Privacy embedded into design.
* Full functionality without compromising privacy.
* End-to-End Security.
* Full lifecycle protection.

**Development Environment:** Logical or physical segregation of environments: Production, Test/Staging, Development.

**System Acceptance Testing:** Establish acceptance testing programs and criteria for new information systems, upgrades, and new versions. Complete a Release Checklist before deploying code.

**Protection of Test Data:** Test data must be selected carefully, protected, and controlled. Confidential customer data must be protected and not used for testing without explicit permission.

**Change Control Procedures:** Ensure development, testing, and deployment of changes are not performed by a single individual without approval and oversight.

**Software Version Control:** All software is version controlled, with access restricted based on role.

**Policy Compliance:** Measured through reports, audits, and feedback. Non-compliance may result in disciplinary action, up to and including termination.

**5. Code of Conduct Policy**

**Policy Owner**: The CEO is responsible for the policy.

**Effective Date**: The policy becomes effective on March 1, 2024.

**Purpose**: The policy aims to establish and maintain a safe and inclusive environment for all staff members.

**Scope**: This policy applies to all staff members across all professional settings within the organization.

**Culture**: The organizational culture promoted by this policy emphasizes respect, collaboration, and consideration among all employees.

**Expected Behavior**: Staff members are expected to actively participate in creating a respectful and collaborative workplace environment.

**Unacceptable Behavior**: Any form of harassment, violence, discrimination, or inappropriate conduct is strictly prohibited.

**Weapons Policy**: The policy prohibits the possession of weapons on company premises, with strict consequences for violations.

**Consequences**: Non-compliance with this policy will result in immediate corrective actions, including disciplinary measures and the requirement to report violations.

**Responsibility**: The CEO holds the responsibility for ensuring that all staff members adhere to and uphold the principles outlined in this policy.

**6. Access Control Policy**

**Policy Owner**: The CEO is responsible for the policy.

**Effective Date**: The policy becomes effective on March 1, 2024.

**Purpose:** The purpose of this policy is to restrict access to information and systems to authorized individuals in accordance with business objectives.

**Scope:** This policy applies to all systems operated by Document360 that handle confidential data for employees and external parties with network access.

**Access Control and User Management Summary:**

**Identifying Users:** Access privileges are allocated based on specific job roles and competencies required to perform tasks.

**Maintaining Authorization:** All allocations of privileged access are documented and maintained to ensure accountability.

**Enforcing Security Measures:** Multi-factor authentication (MFA) is mandatory for privileged access to enhance security. Generic administrative IDs are prohibited to prevent unauthorized usage.

**Adopting Protocols:** Time-bound access permissions are granted to limit exposure and reduce security risks.

**Logging and Auditing:** All privileged logins and activities are logged and audited to monitor for unauthorized access or misuse.

**User Access Reviews:** Regular reviews ensure that distinct and appropriate identities are maintained for those with privileged access.

**Access Control Policy:** Access is restricted to authorized parties only, ensuring that information remains protected.

**Password Management**: Secure log-on procedures and password policies are implemented to safeguard against unauthorized access.

**User Access Provisioning:** Access permissions are granted based on documented business requirements and validated needs.

**Violations & Enforcement:** Violations of this policy are reported and subject to enforcement measures to maintain compliance and security.

**7. Data Management Policy**

**Policy Owner**: The CEO is responsible for the policy.

**Effective Date**: The policy becomes effective on March 1, 2024.

**Purpose:** To ensure information is classified, protected, retained, and securely disposed of based on its importance to the organization.

**Scope:** Applies to all data, information, and information systems of Document360.

**Data Classification:** Confidential: Highly sensitive data needing the highest protection levels. Examples include customer data, PII, company financials, strategic plans, and technical reports.

**Restricted:** Proprietary information requiring thorough protection. Default classification for all company information unless otherwise stated. Examples include internal policies, legal documents, contracts, and emails.

**Public:** Information intended for public consumption and can be freely distributed. Examples include marketing materials and product descriptions.

**Data Handling:**

**Confidential Data:**

* Restricted access to specific employees or departments.
* Must be encrypted at rest and in transit.
* Should not be stored on personal devices or removable media.
* Requires secure storage and disposal.

**Restricted Data:**

* Access restricted to users with a need-to-know basis.
* Requires management approval for external transfer.
* Secure storage and disposal are mandatory.

**Public Data:** No special protection or handling controls required.

**Data Retention and Disposal:**

* Data retained as long as needed for business, regulatory, or contractual requirements.
* Confidential and restricted data securely deleted when no longer needed.
* PII deleted or de-identified when no longer needed for business purposes.

**Annual Data Review:** Management reviews data retention requirements annually to ensure compliance with the policy.

**Legal Requirements:** Data associated with legal holds or lawsuits is exempt from standard policy requirements and retained per legal counsel’s stipulations.

**Policy Compliance:** Compliance measured through business tool reports and audits.

**Exceptions:** Any exceptions to the policy require CEO approval.

**Violations & Enforcement:** Known policy violations should be reported to the CEO and can result in disciplinary actions, including termination of employment.

**8. Operations security policy**

**Policy Owner**: The CEO is responsible for the policy.

**Effective Date**: The policy becomes effective on March 1, 2024.

**Purpose and Scope:**

* Ensure the secure operation of information processing systems and facilities.
* Applies to all critical Document360 information systems and third-party entities with network access.

**Documented Operating Procedures:**

Technical and administrative procedures must be documented and accessible to relevant users.

**Change Management:**

* Significant changes must be documented, tested, reviewed, and approved before deployment.
* Emergency changes require retrospective review and authorization.

**Capacity Management:**

* Monitor and adjust processing resources and system storage to meet performance requirements.
* Include human resource capacity in planning and annual risk assessments.

**Data Leakage Prevention:**

* Identify and classify information per the Data Management Policy.
* Train users on proper handling of sensitive information.
* Use Data Loss Prevention (DLP) tools based on risk assessment.

**Web Filtering:**

* Implement DNS and IP blocking to restrict access to risky websites.
* Block websites with malicious content or command and control servers unless necessary for business.

**Separation of Environments:**

* Strictly segregate development, staging, and production environments.
* Do not use confidential production customer data in development or test environments without approval.

**Systems and Network Configuration:**

* Follow configuration and hardening standards to maintain system and network security.
* Review production network access configuration rules annually.

**Protection from Malware:**

* Implement detection, prevention, and recovery controls for malware.
* Utilize anti-malware and threat detection software on all company endpoints and emails.

**Information Backup:** Design and implement backup processes for systems and data, ensuring customer data recovery per SLAs.

**Logging and Monitoring:** Implement logging and monitoring to detect and respond to security incidents.

**Control of Operational Software:** Manage the installation and use of operational software according to established rules.

**Threat Intelligence:** Collect and analyze information security threats to produce actionable intelligence.

**Technical Vulnerability Management:** Identify, assess, and address technical vulnerabilities in a timely manner.

**Restrictions on Software Installation:** Establish rules for software installation to ensure security and compliance.

**Information Systems Audit Considerations:** Plan and agree on audit requirements to minimize disruptions to business processes.

**Systems Security Assessment and Requirements:** Include security requirements in the acquisition or significant changes to systems.

**Data Masking:** Implement data masking techniques to protect PII and sensitive data based on risk assessment.

---

## Data Privacy

We prioritize your privateness and cling to strict information dealing with practices:

* Data Privacy Compliance: We have signed a Data Processing Agreement (DPA) with OpenAI, outlining our commitment to data privacy and protection. For more details, refer to [DPA with OpenAI](https://ironcladapp.com/public-launch/63ffefa2bed6885f4536d0fe).
* We utilize OpenAI's ChatGPT 3.5 and GPT-4 models to power Eddy AI, ensuring cutting-edge performance and capabilities.
* This feature adheres to OpenAI's privacy policies by using a form of OpenAI integration.
* We send data to OpenAI via their APIs. An extract from the policy states, "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings." Any data sent through the API to OpenAI will be retained for analytical purposes for a maximum of 30 days, after which it will be deleted.

> **NOTE**
>
> Read the complete [**OpenAI API data usage policies**](https://openai.com/enterprise-privacy/).
>
> If you have any queries regarding Document360's data policy, please read our [**Privacy policy**](https://document360.com/privacy/).

<a id="ai-writer-suite"></a>

## AI writer suite

**Plans supporting the use of AI writer suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The AI writer suite in Document360 is a powerful collection of AI-driven tools designed to streamline your content creation process, enhance the quality of your articles, and ensure your documentation remains engaging and relevant. Available directly within the knowledge base portal, this suite offers features that assist with everything from writing assistance and SEO optimization to generating FAQs and recommending related content, all aimed at boosting productivity and improving the reader experience.

---

## Features in the AI writer suite

1. [**AI writer**](/help/docs/ai-writer)

   1. **Outline creation**  
      Automatically generate a structured outline for your articles, helping you to get started with an article more quickly.
   2. **Make longer/Make shorter**  
      Adjust the length of your content with ease, either by expanding or condensing content based on your needs.
   3. **Change tone/Change voice**  
      Modify the tone or voice of your content to match your audience or brand guidelines.
   4. **Split sentences**  
      Break up long, complex sentences into shorter ones to improve readability.
   5. **Convert speech**  
      Switch between active and passive voice based on your documentation needs.
   6. **Improve it**  
      Enhance your writing by making it clearer, more concise, or more impactful.
   7. **Convert into table**  
      Automatically convert a list or paragraph into a neatly formatted table for easier data presentation.
2. [**AI FAQ generator**](/help/docs/ai-faq-generator)  
   Automatically create frequently asked questions (FAQs) based on the content of your article.
3. [**AI title recommender**](/help/docs/ai-title-recommender)  
   Receive AI-driven title suggestions to make your articles more engaging and easier to find.
4. [**AI SEO description generator**](/help/docs/seo-description-generator)  
   Automatically generate search engine-friendly descriptions to boost the visibility of your articles in the search engine results.
5. [**AI tag recommender**](/help/docs/ai-tag-recommender)  
   Get relevant tag suggestions to help categorize and improve the discoverability of your content within the knowledge base.
6. [**AI related articles recommender**](/help/docs/ai-related-articles-recommender)  
   Suggest relevant articles to users based on the current content, helping them find additional information quickly.
7. [**AI Chart generator**](/help/docs/ai-chart-generator)

   Generate pie charts, flow charts, and tables using Eddy AI based on the selected content.
8. [**AI alt text generator**](/help/docs/ai-alt-text-generator)

   Generate alt text for images and videos while uploading using Eddy AI to enhance user experience, improve accessibility, and boost search rankings.

---

## Multilingual support for Eddy AI writer suite

The Eddy AI writer suite seamlessly integrates with the Knowledge base site, offering support for a wider array of languages.

In addition to English (en, en-US, en-GB, en-AU), Eddy AI writer suite supports 15 other languages, including French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br).

If a workspace is configured with a language not supported by Eddy AI, such as Chinese, the search suite features will not be available for that workspace.

---

## Plan availability and usage limits

The availability of these features varies depending on your subscription plan. Users on the Professional, Business, and Enterprise plans have full access to all the features listed above, while the Freemium plan does not include the AI Writer Suite.

For most features, there is a soft limit of 5,000 credits per month. Specific features like the **SEO description generator** and **title recommender** have a limit of 1,000 credits per month. If you're approaching your limit, you will be notified within the platform.

Here’s a quick overview of the key credit limits per month:

* **Make longer/Make shorter/Outline creation/Change tone**: 5,000 credits
* **AI SEO description generator/AI Title recommender**: 1,000 credits
* **Other features**: Unlimited usage within Professional, Business, and Enterprise plans

These credit limits apply across the AI writer suite, ensuring you have ample room to use these powerful tools throughout the month.

<a id="ai-writer"></a>

## AI writer

**Plans supporting the use of AI writer suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 offers a wide range of AI-powered tools, powered by **Eddy AI**, to help contributors enhance their articles efficiently. Here's a detailed overview of available actions, how to use them, and best practices.

You can quickly launch **Eddy AI** using the keyboard shortcut **Ctrl + Spacebar**.

> NOTE
>
> By default, all the **Eddy AI** features will be enabled for a trial account in the Document360 project.

---

## Prerequisite

Ensure your project subscription supports the AI writer feature, which is turned off by default.

1. Navigate to **Settings**() > **AI features** > **Eddy AI** in the Knowledge base portal.
2. Turn on the **AI writer** toggle.

> NOTE
>
> * To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).
> * Third-party web browser extensions can affect the smooth working of the Document360 AI writer. If you face any issues, try disabling browser extensions such as ad blockers, password managers, or pop-up blockers before continuing.

---

## Accessing the AI writer actions

The AI writer enables you to perform the following actions on your content:

* Outline creation
* Improve it
* Change tone
* Convert speech
* Change voice
* Make longer
* Make shorter
* Convert into table
* Split sentence
* [AI chart generator](/help/docs/ai-chart-generator)

> NOTE
>
> The AI writer is available only in the Advanced WYSIWYG editor.

To access the AI writer features:

1. Select a piece of text content while writing in the Advanced WYSIWYG editor. The selected text must have at least ten words for Eddy AI to generate a response.

   The bubble menu appears with the available tools.
2. Click the **Eddy AI** option and choose the desired actions.

   **Outline creation**

   This feature generates a structured outline based on your article's content or a prompt.

   **How to use**:

   1. Create a new article with a relevant title.
   2. Click on the **Start writing with Eddy AI** feature.
   3. Ask Eddy AI to write an outline for you with the necessary information.

      Eddy AI will analyze your content and suggest an organized outline.
   4. Review and modify the outline as needed.

   **Benefits**:

   * Ideal for creating clear, logical structures in lengthy articles.
   * Saves time by providing an initial outline that you can refine.

   **Best practices**:

   * Always review the AI-generated outline to ensure it aligns with your goals.
   * Use this when writing complex articles or guides.

   **Improve it**

   This feature refines your text by improving grammar, semantics, clarity, and phrasing.

   **Example**:

   Original:  
   *"The system is highly effective because it works well in most cases."*

   Using **Improve it**:  
   *"The system is very efficient as it performs effectively in the majority of situations."*

   **Best practices**:

   * Use this option for drafts that need polishing before publication.
   * Check the enhanced version to ensure it aligns with your intent.

   **Change tone**

   Allows you to modify the tone of your text to suit different audiences or purposes. The available tone options are Professional, Friendly, Casual, Straightforward, and Confident.

   **Example**:

   Original:  
   *"The team will proceed with the update as soon as possible."*

   Change to **Friendly**:  
   *"The team is excited to get started on the update and will do so as soon as possible!"*

   Change to **Professional**:  
   *"The team will initiate the update at the earliest opportunity."*

   **Best practices**:

   * Use tone changes when targeting different audiences (e.g., casual for blogs, professional for reports).
   * Adjust based on the context and intended reader.

   **Convert speech**

   Document360's AI Eddy AI can change the selected text from direct speech to indirect speech or vice versa.

   **Example**:

   Original (Direct):  
   *"He said, 'I will definitely complete the task by tomorrow.'"*

   Convert to Indirect:  
   *"He said that he would definitely complete the task by the following day."*

   **Best practice**:

   Helpful when rewriting quotes or conversations for formal reports or documentation.

   **Change voice**

   Allows you to switch between active and passive voice.

   **Example**:

   Original (Active):  
   *"The team successfully completed the project within the specified date."*

   Using **Change voice** (Passive):  
   *"The project was successfully completed by the team within the specified date.*

   **Best practices**:

   Use this for stylistic choices or when passive voice is more appropriate (e.g., formal writing).

   **Make longer**

   This option allows you to expand the selected text by elaborating on ideas or providing additional details.

   **Example**:

   If you have a brief introduction like:  
   *"Document360 is a knowledge base platform with several advanced features."*

   Using **Make longer**, you can generate:  
   *"Document360 is a comprehensive knowledge base platform equipped with a wide array of advanced features that cater to the diverse needs of users. It offers a user-friendly interface, robust search functionality, seamless integration capabilities, and customizable branding options. The platform enables teams to create, manage, and share knowledge effectively, facilitating streamlined collaboration and information dissemination. With Document360, organizations can enhance productivity, foster innovation, and drive growth by harnessing the power of knowledge management."*

   **Best practices**:

   * Use this feature to elaborate on key points or when your content feels too brief or lacking depth.
   * Review the expanded text for relevance to avoid unnecessary verbiage.

   **Make shorter**

   This feature condenses text, making it more concise without losing its essence.

   **Example**:

   Original:  
   *"The Document360 platform provides a robust set of features, including version control, multi-language support, analytics, and a powerful AI-assisted search, which helps streamline the knowledge management process."*

   Using **Make shorter**:  
   *"The Document360 platform offers version control, multi-language support, analytics, and a powerful AI-assisted search to streamline knowledge management."*

   **Best practices**:

   * Use this when trying to reduce word count or simplify explanations.
   * Great for summarizing long passages or complex ideas.

   **Convert into table**

   This AI option converts selected content into a well-formatted table. It’s especially useful when dealing with data or lists that would be better presented in a table format.

   **Example:**

   A documentation team has 3 technical writers, whereas a customer support team has 2 technical writers. The documentation team has access to software such as SnagIT while the customer support team has access to software such as Freshdesk and Freshchat.

   Using **Convert into table**, the output becomes:

   | Team | Number of Technical Writers | Software Access |
   | --- | --- | --- |
   | Documentation Team | 3 | SnagIT |
   | Customer Support Team | 2 | Freshdesk, Freshchat |

   **Best practices**:

   * Use this for content that involves comparisons, data, or organized lists.
   * Tables can improve readability, especially for technical or detailed content.

   **Split sentence**

   Splits complex sentences into simpler ones to improve readability.

   **Example**:

   Original:  
   *"Document360 is an advanced platform, and it offers numerous features, including analytics, version control, and AI assistance, making it ideal for managing knowledge bases efficiently."*

   Using **Split sentence**:  
   *"Document360 is an advanced platform. It offers numerous features, including analytics, version control, and AI assistance. These features make it ideal for managing knowledge bases efficiently."*

   **Best practices**:

   * Useful when writing for broader audiences or when clarity is paramount.

   An AI response popup window will appear.
3. You can perform either one or more AI operations in a single window.

   > NOTE
   >
   > A single AI response window can be used to regenerate responses for up to 10 instances.

6. When you click **Regenerate**, the preset action is repeated.
7. Click **Insert** to replace the selected text.
8. Click **More** to view the **Eddy AI** features.

   Team accounts can rate the AI response once below the generated content.

![1_ScreenGIF-Overall_AI_Writer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Overall_AI_writer.gif)

> NOTE
>
> The outline creation, make longer, make shorter, improve it, convert to table, convert speech, change voice and change tone features have a soft limit of 5000 uses per month. The SEO description generator, title recommender, and article summarizer features have a limit of 1000 uses per month.

---

### FAQs

#### What subscription plans support the use of the AI writer suite?

The AI writer suite is supported by the Professional, Business, and Enterprise subscription plans.

#### How can I activate the Eddy AI feature?

To activate Eddy AI, navigate to Settings > AI features > Eddy AI and turn on the AI writer toggle.

#### What actions can I perform using the AI writer?

You can perform actions such as making text longer or shorter, creating outlines, changing tone, converting speech, improving text, converting content into tables, changing voice, and splitting sentences.

#### Is the AI writer available in all editors?

No, the AI writer is only available in the Advanced WYSIWYG editor.

#### Will my data be secure when using Eddy AI?

* As this feature uses a form of OpenAI integration, we adhere to the privacy policies of OpenAI. We send data to OpenAI via their APIs.
* An extract from the policy states, "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings."
* Any data sent through the API to OpenAI will be retained for analytical purposes for a maximum of 30 days, after which it will be deleted.

> Read the complete [**OpenAI API data usage policies**](https://openai.com/policies/api-data-usage-policies).  
> If you have any queries regarding Document360's data policy, please read our [**Privacy policy**](https://document360.com/privacy/).

#### Can I use the AI writer features multiple times in a month?

Yes, the content creation, make it longer, make it shorter, and change tone features have a soft limit of 5000 uses per month.

#### What should I do if I encounter issues with the AI writer?

If you face issues, try turning off any third-party web browser extensions that may affect the AI writer's performance.

#### Are there any best practices for using the AI writer features?

Yes, best practices include reviewing generated content for relevance, using features to elaborate or simplify text, and ensuring the tone matches your audience.

#### How many AI credits do my plan support?

5000 AI credits are allocated each month in the Professional, Business, and Enterprise plans. You can contact our customer support if you need to increase this limit.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="ai-faq-generator"></a>

## AI FAQ generator

**Plans supporting the use of AI writer suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **AI FAQ Generator** in Document360 is a powerful tool that automatically creates a list of frequently asked questions (FAQs) along with their answers based on the content of your article in the Advanced WYSIWYG editor. This feature is designed to save you time while ensuring that all essential questions are covered.

---

### Prerequisites

To utilize the AI FAQ Generator, ensure you have met the following requirements:

* You must have purchased the **Eddy AI content suite**.
* The **AI writer suite** must be enabled in your Document360 account. This feature is enabled by default upon purchase.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## AI FAQ generator in Advanced WYSIWYG editor

1. Navigate to the article you wish to enhance in the **Advanced WYSIWYG editor**.
2. Locate and click the **Eddy** icon in the toolbar at the right of the editor.
3. From the dropdown menu, choose **Generate FAQs**.

> NOTE
>
> * The article must contain a minimum of **150 words** for the FAQ generator to function properly.
> * The generated FAQs will automatically be placed at the end of your article, allowing you to add additional content below this section if necessary.

### Customizing generated FAQs

Once the FAQs are generated, you have several options to customize them:

1. You can customize the title of the FAQ section to better fit your article.
2. Click on the **FAQ** section. You will have four options to customize the generated FAQs:

   1. **Settings** (): Click the **Settings** icon to adjust the FAQ template settings for this specific article. Changes made here will apply only to this article.
   2. **Regenerate** (): If you want to create new FAQs based on the current article content, click the **Regenerate** option.
   3. **Expand/Collapse** (): Use the **Expand/Collapse** icon to show or hide the answers to the FAQs.
   4. **Delete** (): If you wish to remove the entire generated FAQ section, click the **Delete** icon.

### Adding custom FAQs

1. Hover between any two FAQs where you want to add a new one.
2. Click the **Add question** ()icon that appears.
3. Fill in your custom question and answer.

To delete a specific FAQ:

4. Click on the FAQ you want to remove.
5. Select the **Delete** () icon that appears above it.

![Adding AI fAQ and FAQ builder in the Advanced WYISYWG editor.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreeenGIF-AI_FAQ_generator_in_the_advanced_WYSIWYG_Editor.gif)

### Locking FAQs

To prevent certain FAQs from being altered during regeneration:

1. Click the Lock () icon next to the FAQ you want to protect.
2. Locked FAQs will be marked with a badge, indicating they are safeguarded from changes.
3. You can still edit these locked FAQs manually if necessary.

If you want to generate additional FAQs while keeping the current ones locked, follow these steps:

1. Lock all existing questions.
2. Click **Regenerate** to create more relevant FAQs based on your article’s content depth.

> NOTE
>
> **FAQ templates** are different from the AI FAQ generator. For detailed information about FAQ templates, refer to the article on the [Advanced WYSIWYG editor](/help/docs/advanced-wysiwyg-editor-basics).

---

## Setting up the FAQ generator

You can customize the FAQ generator settings at the project level by following these steps:

1. Navigate to the Settings ()> **Knowledge base site** > **Article settings & SEO** tab in the Knowledge base portal.
2. In the **Article settings** tab, expand the **FAQ** accordion.

### Customization options

You can customize the FAQ templates as needed from the following options:

1. In the **Expand/Collapse** section, choose your option

   a. **Expand first**: Only the first FAQ will be expanded by default.

   b. **Expand all**: All generated FAQs will be expanded.

   c. **Collapse all**: All generated FAQs will be collapsed.
2. **Style:** For styling the FAQs, choose your desired option:

   a. **With border**: A border will appear around all sides of each FAQ accordion (default option).

   b. **Without border:** Only the bottom border will be displayed on each accordion, except for the last one.
3. **Expand arrow position:** You can select the position of the arrow for expanding FAQs, either right or left. By default, the arrow position is set to right.
4. **Expand/Collapse:** Customize the icons used for expanding and collapsing FAQs. Choose between arrow up/down or plus/minus options.

![Adding AI fAQ and FAQ builder in the Advanced WYISYWG editor.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Setting_page_in_the_Knowledge_base_portal.png)

---

### FAQs

#### What languages does the AI FAQ generator support?

The AI FAQ generator currently supports **English** language only.

#### How do I add a custom FAQ between the generated FAQs?

To add a custom FAQ between the generated FAQs, hover between any two FAQs, click the () icon, and select FAQs from the dropdown.

#### What is the minimum number of questions generated by the AI FAQ generator?

The AI FAQ generator typically produces between **5 and 10 questions**, depending on the content depth of your article.

#### Can I edit the AI-generated FAQs?

Yes, you can edit the AI-generated FAQs by selecting the desired FAQ and making the necessary changes.

#### Is there a usage limit for the AI FAQ generator?

You can use the AI FAQ generator up to 5000 times per month. You can contact our customer support if you need to increase this limit.

<a id="ai-title-recommender"></a>

## AI title recommender

**Plans supporting the use of AI writer suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Article Title Recommender** is one of the many AI-powered features available in Document360. This tool helps generate optimized article titles using Natural Language Processing (NLP) to analyze your content and suggest titles that capture the key information while maintaining the original context.

---

### Prerequisites

Before using the Article Title Recommender, ensure that the following prerequisites are met:

* **Preprocessed article content** should contain more than **50 words**.
* **Sufficient Document360 credits**: One title recommendation (three title options) consumes **1 credit**.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Using the article title recommender

The **Suggest Title** option is available in the article title section for new articles.

For published or draft articles, follow these steps:

1. Click the article title in the editor to display the **suggest title** feature.
2. Click the **Ask Eddy AI** button.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Title recommender 1.png)

   Three AI-generated title suggestions will appear.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Title recommender 2.png)
3. You can click **Generate more suggestions** for additional options.
4. Choose your preferred title and click **Choose**.
5. If none of the titles meet your needs, click **Cancel** to close the module.

#### Key options:

* **Suggested titles**: Each click on 'Suggest title' generates three title options. Select your preferred title by clicking the radio button beside it.
* **Share feedback**: You can upvote or downvote the suggested titles to provide feedback. This helps improve the feature's performance.
* **Save/Cancel**: After selecting a title, click **Save** or click **Cancel** to exit. **One credit** is consumed each time you click **Suggest title**, regardless of whether you save or cancel.

---

### Credit usage and limits

* Every time you click the **Suggest title**, **one credit** is used, even if you don’t save the suggestion.
* Your subscription plan determines your monthly credit limit.

  > NOTE
  >
  > The soft limit of **1000 credits per month** applies to the **title recommender** feature across the Professional, Business and Enterprise plans. Additional credits can be obtained by contacting customer support.
* **Credits do not automatically renew** each month. For additional credits, contact customer support.

---

### What are preprocessed words in Document360?

**Preprocessing** filters out certain elements from the article content for the purpose of title recommendation. The following elements are **excluded** from the word count:

* HTML tags
* Images
* URLs/links
* Code blocks

For example, if the article word count shown at the bottom of the editor is **220 words**, this includes all elements. After preprocessing, the word count might drop. Ensure your content has more than **50 preprocessed words** for the Title recommender to work.

---

### Data privacy

We prioritize the privacy of your Knowledge base data. The Title Recommender uses OpenAI integration, and we strictly adhere to the **OpenAI privacy policies**. An extract from the policy states: "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings."

* [Read the full OpenAI API data usage policy here](https://openai.com/privacy).
* For Document360's data policy, refer to our Privacy Policy.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="seo-description-generator"></a>

## AI SEO description generator

**Plans supporting the use of AI writer suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The SEO description generator helps streamline the process of creating meta descriptions for your articles and category pages. Automatically generating concise and relevant descriptions ensures that your content is better optimized for search engines, enhancing visibility and click-through rates. This tool saves time while maintaining alignment with your content's focus and SEO best practices.

---

## Prerequisites

Before generating an SEO description for your article or category page, ensure that the following prerequisites are met:

1. **Sufficient credits**: You must have enough credits to generate an SEO description. Credits are consumed per description generated.
2. **Preprocessed content**: The article’s preprocessed word count (excluding HTML tags, images, URLs, and code blocks) must exceed 200 words. Keep in mind that the word count displayed at the bottom of the Document360 editor includes all elements, including those that do not count toward the meta description generation. Make sure the content exceeds 200 words after preprocessing.

   Example: If an article shows 250 words, but contains images, HTML, and links, the preprocessed count may drop below 200, making it ineligible for SEO description generation.
3. **Access permissions**: The **Ask Eddy AI** button will only be available to team members with the relevant permissions. If disabled, contact your administrator to gain access.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Using the SEO description generator

For individual articles or category pages,

1. In the Knowledge base portal, go to the desired article/category page.
2. Click on the More () icon at the top-right corner and select **SEO.**

   The **Article settings** panel will appear.
3. Expand the **SEO** section and click the **Ask Eddy AI** button.

   The meta description is generated by Eddy AI based on the article/category page content.
4. Review the generated description and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/SEO.png)

> PRO TIP
>
> Always double-check the generated meta description to ensure it aligns with the intent of your article. Although AI-generated descriptions are efficient, manual review ensures the content is accurate and relevant to your audience.

---

## How to generate SEO descriptions for multiple articles/category pages?

You can generate meta descriptions for multiple articles/category pages in the same version and language.

1. Navigate to the Documentation () > **Content tools** > **Documentation** > **SEO description**.
2. Select the desired workspace from the project workspace dropdown.
3. Ensure that the selected language is **English.**
4. All the articles and category pages in the selected workspace and language appear.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/SEO Description.png)

> NOTE
>
> The preprocessed word count appears next to the article/category page name. You can generate meta descriptions only for the articles and category pages with a preprocessed word count of more than 200.

5. Use filter options to narrow down articles by SEO description availability, category, contributor, tags, or last updated date.

   **Example:** If you want to generate descriptions for articles that haven’t been updated recently, filter by "Date" to prioritize older articles.
6. Select the checkbox next to each eligible article (those with a preprocessed word count of over 200). Click **Ask Eddy AI** to generate meta descriptions for multiple articles at once.
7. Review the descriptions and click **Yes** in the confirmation prompt to save.

> PRO TIP
>
> Prioritize generating meta descriptions for high-traffic or cornerstone content first, as improving SEO for these pages can have the biggest impact on your overall search engine visibility.

---

### Best practices for writing SEO meta descriptions & titles

Creating effective meta descriptions and titles is crucial for improving your search engine rankings. Here are some best practices to help you craft strong meta descriptions and titles:

#### Best practices for SEO meta descriptions

1. **Keep it concise (around 155-160 characters):** Meta descriptions should be brief yet informative. They are snippets that appear in search engine results, so ensure they’re clear and concise.
2. **Include relevant keywords:** Incorporate primary and secondary keywords naturally, reflecting the core topic of the article to improve discoverability.
3. **Align with user intent:** Ensure the meta description answers what your target audience might be looking for. This helps increase click-through rates by attracting the right audience.
4. **Make it actionable:** Use calls to action like “Learn more,” “Discover,” or “Get started” to encourage users to click on your link.
5. **Unique for every page:** Ensure every page on your website has a unique meta description to avoid duplicate content issues.
6. **Avoid keyword stuffing:** Overloading the meta description with too many keywords can make it seem unnatural and may negatively impact SEO.

> **PRO TIP**
>
> Focus on clarity and relevance. Even though meta descriptions don’t directly impact rankings, they play a significant role in improving click-through rates.

#### Best practices for SEO titles

1. **Optimal length (50-60 characters):** Keep your title under 60 characters to ensure it doesn’t get cut off in search results.
2. **Include primary keywords:** The title should include your primary keywords, preferably at the beginning, to improve relevance for search engines.
3. **Reflect the article’s content:** The title should accurately represent the article’s subject matter to avoid misleading users or increasing bounce rates.
4. **Make it engaging:** Write compelling titles that spark interest. Use power words or questions to attract user attention.
5. **Avoid redundancy:** Ensure your title is clear, straightforward, and free from unnecessary repetition of words.
6. **Brand inclusion (optional):** You can add your brand’s name at the end of the title to improve brand visibility, but only if space allows without truncating essential keywords.

---

### FAQs

#### Why is an SEO description generator essential?

Use the SEO description generator to generate the meta descriptions for your articles and category pages effortlessly. This AI (Artificial Intelligence) powered feature will generate the best meta description for your articles and category pages based on the content.

#### What is a meta/SEO description?

A meta description or SEO description summarizes an article/category page. The meta description appears as snippets in the search engine results. Adding meta descriptions will improve your SEO, discoverability, and increase organic traffic.

#### How are credits associated with the SEO description generator?

Credits are required to generate SEO descriptions with the SEO description generator. One credit is consumed when you generate a meta description for an article/category page. For example, if you want to generate the meta description for 50 articles, you need 50 credits.

#### Does Document360 offer free credits for generating meta descriptions?

Yes, we offer ten free credits for all paid projects. You cannot avail free credits in the Trial plan.

#### Why the article word count shown in the editor varies from preprocessed word count?

The preprocessed word count excludes content elements such as HTML tags, Images, URLs/links, and Code blocks. The article word count includes all the elements in the content.

#### What happens when I generate an SEO description for an article which already has an SEO description?

* One credit would be consumed to generate the meta description.
* The generated meta description will replace the current meta description.

#### Can I generate different meta descriptions with the same article content?

No, the meta description changes only if the content is modified. Suppose you generate the meta description for the same content. In that case, the same meta description will be generated again, and one credit will be consumed.

#### Can I manually update the SEO title and SEO description?

You can manually update the SEO title and SEO description on the SEO description overview page or in the individual article settings.

#### Can I generate SEO descriptions for articles in languages other than English?

Currently, we support the SEO description generator only for the English language. However, you can manually add SEO descriptions for articles in other languages.

#### Do search engines crawl SEO descriptions of private articles?

No, search engines cannot crawl private articles.

#### What is the validity of the credits?

The credits are valid for the lifetime of the project.

#### Do the credits get affected by a change in the subscription plan?

No, the credits are not affected by a subscription plan change.

#### Does Document360 provide a refund for unused credits?

No, we don't provide a refund for unused credits.

#### Can I generate an SEO title with the SEO description generator?

You can only generate meta descriptions with the SEO description generator. As the article's title is considered an SEO title for an article without an SEO title, you can use Document360's AI title recommender feature.

#### Can I switch between languages in the SEO description module?

Yes, you can switch between languages in the SEO description module. This option lets you update the meta description for multiple articles in one place. However, the SEO description generator can be used only in English.

#### How many SEO descriptions can I generate?

Here’s a breakdown of the soft limits for the SEO description generator based on the pricing plans:

* **Professional**: 1000 descriptions/month
* **Business**: 1000 descriptions/month
* **Enterprise**: 1000 descriptions/month

#### Is my data security maintained?

We understand that your Knowledge base data is sensitive. As this feature uses a form of OpenAI integration, we adhere to the privacy policies on OpenAI. An extract from the policy states, "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings."  
Read the complete [**OpenAI API data usage policies**](https://openai.com/policies/api-data-usage-policies)  
If you any queries regarding Document360's data policy, please read our [**Privacy policy**](https://document360.com/privacy/)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="ai-tag-recommender"></a>

## AI tag recommender

**Plans supporting the use of AI tag recommender**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The AI tag recommender is a powerful tool that leverages Artificial Intelligence (AI) to suggest relevant tags for your article or category page content. By analyzing the content and identifying common keywords and topics, the AI recommends a set of tags. These tags help categorize and organize your content, making it easier for both team members and readers to find the right information within your Knowledge base.

---

### Prerequisites

* **Preprocessed article content** must be more than 50 words.
* You must have the relevant access permissions to generate tags.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Accessing the recommended tags for an article

1. Go to the desired article in the {{glossary.Knowledge base portal}}.
2. Click **More** (•••) at the top right of your editor next to the Publish button.
3. Select **Tags** to open the **Article settings** page.
4. Click the **Ask Eddy AI** button.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/AI tag recommender 1(1).png)

   You will find a set of AI-suggested tags based on the article content in the **Eddy AI recommends** section.

   > NOTE
   >
   > To use the AI tag generator, your article must have a word count of at least 200 words.
5. Click to choose the suitable tags to add them to the article and click **Save**.
6. Reopen the article settings to regenerate tags.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/AI tag recommender 2.png)

> NOTE
>
> The recommended tags also appear in the confirmation prompt when publishing an article. In the **Publish confirmation** prompt. Expand the **Configure article settings** section and click **Ask Eddy AI** in the **Tags** section for tag recommendations. Select the suitable tags to add it before publishing the article.

---

### What does preprocessing mean?

Preprocessing refers to the filtering of specific elements in the article or category page content. The following elements are excluded when generating tags:

* HTML tags
* Images
* URL/links
* Code blocks

For example, if your article shows 80 words at the bottom of the Document360 editor, this number includes HTML tags, links, and code blocks. After preprocessing, the word count might be reduced. Ensure the preprocessed article contains more than 50 words to generate tags.

---

**Why is tagging important?**  
Adding tags to your articles is essential for effective content management, especially when dealing with a large volume of information. Tags categorize articles based on themes or topics, making them easier to locate through searches. Proper tagging improves search precision, enhances content discoverability, and ensures that related articles are grouped together, benefiting both your internal team and external users.

---

## Best practices for content management

To make the most out of tagging, follow these best practices to ensure your knowledge base is well-organized and easy to navigate:

1. **Create a consistent tagging structure**: Establish clear guidelines for how tags should be used across all articles. Consistency is key to making sure similar content is grouped appropriately. For instance, decide in advance whether to tag articles based on topics, products, or user roles and follow this approach throughout.
2. **Use specific and relevant tags**: Avoid broad or vague tags that don't provide enough context. Focus on tags that directly relate to the article's core content. For example, instead of using a general tag like "Update," specify "Security Update" or "Feature Update."
3. **Limit the number of tags**: While tags are important, applying too many can be counterproductive. Aim to use 3-5 key tags per article that best describe the content. This keeps searches focused and avoids cluttering the tagging system.
4. **Review and update tags regularly**: As your content evolves, review and update your tags to ensure they remain relevant. Retire or modify tags that are outdated or no longer applicable to ensure efficient content retrieval.
5. **Group content using tags**: Tags allow you to group related content, improving navigation. For example, you could tag all articles related to "Onboarding," "Troubleshooting," or "Product Features" to create clusters of related content, helping users easily find what they need.
6. **Leverage the AI tag recommender**: Use the AI Tag Recommender feature to ensure consistent and relevant tagging across your articles. The AI's suggestions will help maintain uniformity, which is especially useful when different team members are managing content.

---

### FAQs

#### Who can generate the Tags?

Team accounts with the following permission combinations can generate the tags:

* Update article settings + Manage Tags
* Publish article + Manage Tags
* Update article settings + Publish article + Manage Tags

#### Can I generate the tags for multiple articles in one go?

Currently, you can generate the tags for one article at a time.

#### Does using the AI tag recommender feature spend credits?

No, the AI tag recommender feature does not consume any Eddy AI credits. This feature currently offers unlimited usage without any credit limitations.

#### Can I still add the Tags manually?

Yes, you can add the Tags manually.

#### Can I turn off the Tag recommendations?

No, you cannot turn off the Tag recommendations.

<a id="ai-related-articles-recommender"></a>

## AI related articles recommender

**Plans supporting the use of AI related articles recommender**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360's AI-powered related articles recommender enables team accounts to automatically associate relevant related articles based on the content of your current article. This feature enhances the user experience by ensuring that readers have quick access to additional information related to their queries.

---

### Prerequisites

* Preprocessed article content must be more than 200 words.
* You must have the relevant access permissions and credits to generate related articles.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Accessing the AI related article recommender

You can add related articles using Eddy AI by following the below steps:

1. Navigate to the **Documentation** in the Knowledge base portal.
2. Select any published or unpublished article.
3. Click on the **More** (•••) option and select **Related articles**.

   If related articles have already been added, you can view the list below the search bar.
4. Click **Ask Eddy AI**, and Eddy AI will recommend the related articles.

   > NOTE
   >
   > To use the AI related article recommender, your article must have a word count of at least 50 words.
5. Click the **Add** () icon to include the desired articles in the related articles list.
6. Turn on the **Auto relate this article to all related articles** toggle, if needed.

   > NOTE
   >
   > When **Auto relate this article to all related articles** is enabled, if Article-A is added as a related article in Article-B, then Article-B will appear as a related article in Article-A. Save time by using this toggle for adding related articles.
7. Once you have made changes, click **Save**.

   > NOTE
   >
   > To add related articles to your entire Knowledge base in one instance, read the article on [**Dynamic related article recommendation**](/help/docs/ai-dynamic-related-articles-recommendation) article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_related_articles_manually_KBsite_1_0.gif)

---

### Accessing the AI related article recommender in the publish checklist

You can also use the Related articles recommender when publishing an article by following these steps:

1. Click **Publish** on any desired article.

   The **Publish confirmation** prompt will appear.
2. Expand the **Configure article settings** section.
3. Scroll down to view the **Related articles** section.
4. Click **Ask Eddy AI**, and Eddy AI will recommend the related articles.
5. Click the **Add** () icon to include the desired articles in the related articles list.
6. Once done, click **Yes.**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screengif-Adding_related_articles_in_publish_checklist.gif)

---

### Viewing related articles in the knowledge base site

In the knowledge base portal, related articles are generated by Eddy AI and can be found in the **Related articles** section at the bottom of each article. Readers can click on a related article to navigate directly to it, making it easy to explore additional resources and information relevant to the current reading.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Related articles in KB site.png)

---

### FAQs

#### How many related articles can Eddy AI generate at one time?

Eddy AI can generate a maximum of 3 related articles at one time.

#### Can I manually add related articles in addition to those recommended by Eddy AI?

Yes, you can manually add articles, and Eddy AI’s recommendations will complement your selection.

#### Will previously added related articles be overwritten when I use Eddy AI?

No, Eddy AI will suggest additional articles. You can choose to add them without affecting your existing related articles.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="ai-chart-generator"></a>

## AI Chart generator

**Plans supporting the use of AI chart generator**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **AI Chart generator** in Document360 allows you to automatically convert text into various visual formats, such as pie charts and flow charts. This feature streamlines the process of creating charts, eliminating the need for third-party tools and saving time in generating visual aids directly within your articles.

## Prerequisites

To use the AI Chart generator, you must meet the following requirements:

* You must have an active subscription to the Eddy AI content suite.
* The AI writer suite must be enabled in your Document360 account.
* Ensure that the text or table you want to convert is within the main body of your article. Text within comments or image captions cannot be used for chart generation.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Creating charts from text

1. In the Advanced WYSIWYG editor, highlight the content you want to turn into a chart.
2. Click the Eddy AI option in the floating bubble menu and select the **Generate** option from the dropdown menu.
3. Choose the type of chart you want to generate. Available options include **Pie chart**, **Flow chart**, and **Table**.
4. The system will create a chart of the highlighted text based on your selection. If the generated chart is not satisfactory, you can regenerate it up to 10 times. Regenerations are tracked and displayed in tabs, allowing you to review previous versions and select the best one.
5. Once you are satisfied with the generated chart, you can either replace the selected text or insert the chart below the selected text as an image within your article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Create_flow_chart_from_text.gif)

> NOTE
>
> If the system fails to generate the chart, an error message will be displayed: "No results found. Please revise the content or add more context and try again." You can dismiss the error message by clicking elsewhere on the screen or the close button.

## Creating charts from tables

1. Highlight the table you want to convert into a chart.
2. Click the Eddy AI option in the floating bubble menu and select the **Generate** option from the dropdown menu.
3. Choose the type of chart you want to generate. Available options include **Pie chart**, **Flow chart**, **Table**.
4. The system will create a chart of the highlighted text based on your selection. If the generated chart is not satisfactory, you can regenerate it up to 10 times. Regenerations are tracked and displayed in tabs, allowing you to review previous versions and select the best one.
5. After generating the chart, you can either replace the table or insert the chart below the table as an image.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Create_piechart_from_table.gif)

> NOTE
>
> The final generated chart which you use in your article is saved in the Document360 Drive, allowing you to reuse it in other articles if needed.

## Customizing charts

After generating a chart, you can customize its appearance using the editing options available for images in Document360:

* **Alignment and positioning**: Use the bubble menu to adjust the alignment or inline positioning of the chart.
* **Edit chart**: You can edit the chart using the image editing options in the editor, such as cropping, resizing, or adding annotations.

> NOTE
>
> Although the chart cannot be edited directly once inserted into the article, you can undo the action, update the content, and generate a different result, or regenerate the chart using the same text but with a different chart type.

* **Undo option**: If you accidentally replace content with a generated chart and want to revert, use the Undo (Ctrl+Z) option to restore the original content.

## Supported chart types

Document360 currently supports the following chart types:

* **Pie charts**

  + **Use case**: Show the distribution of parts within a whole. Useful for visualizing proportions, such as categories, percentages, or data segments.
  + **Example**: Display the percentage of tasks completed by different team members.
* **Flow charts**

  + **Use case**: Map out processes, workflows, or decision sequences. Ideal for illustrating step-by-step procedures or decision trees.
  + **Example**: Outline the steps involved in a document approval process or a user onboarding workflow.
* **Tables**

  + **Use case**: Present structured data for easy comparison. Ideal for displaying data sets, such as comparisons or performance metrics.
  + **Example**: Compare product features, service levels, or user feedback across different categories.

## File naming convention

All generated charts will follow a standardized naming convention. The file name will be AI generated based on context, or the selected content. The file name will be appended with the chart type. For example - **sales\_data\_pie\_chart.png**.

---

### FAQs

#### Can I edit a generated chart?

No, once a chart is generated, it cannot be edited directly. However, you can regenerate the chart with updated content or switch to a different chart type.

#### What are the possible reasons for chart generation to fail, and how can I fix it?

Chart generation may fail due to:

1. Insufficient or incomplete data.
2. Unsupported content (e.g., comments, captions).
3. Formatting issues or exceeding data limits.

To resolve this, provide more context by using structured lists, numeric data, or grouping information logically (e.g., by region, product type). These text types are ideal for generating accurate charts. If generation fails, revise the content and try again.

#### Where are the generated charts saved?

The final generated charts used in the article are saved in the Document360 Drive, allowing you to reuse them in multiple articles. The generated charts will be saved to **Images** > **Documentation** in the Document360 Drive.

#### How many times can I regenerate a chart?

You can regenerate charts type up to 10 times. This includes switching between chart types.

#### Are all versions of generated charts saved?

No, only the final chart that you choose to insert or replace in the document will be saved in the Document360 drive. Charts generated during the regeneration process are not saved unless they are inserted into the article.

#### Is there an undo option after replacing content with a chart?

Yes, you can use the Undo (Ctrl+Z) option to restore the original content if you are not satisfied after replacing content with a generated chart.

#### Does the AI Chart generator consume Eddy AI credits?

Yes, each chart generated using the AI Chart generator consumes credits from your monthly Eddy AI credit limit. This includes generating charts from text or tables, as well as regenerating charts to try different types or updated visuals. Each generation or regeneration counts as one credit deduction from your monthly credit allowance under the Eddy AI content suite.

<a id="ai-alt-text-generator"></a>

## AI alt text generator

**Plans supporting the use of AI alt text generator**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

> NOTE
>
> For users on the Legacy plans, AI alt text generation will be available if you have purchased Eddy AI content suite add-on.

Writing alt text for images can be time-consuming but is vital for accessibility and discoverability. Alt text, also known as alt tags, appears when an image fails to load and comes to the help of visually impaired users when they choose the read out loud option in the KB site. With 20% of Google searches being image-based, optimized alt text enhances user experience, improves accessibility, and boosts search rankings.

To address this challenge, Document360 offers the Eddy AI alt text generation feature. This tool automatically suggests alt text for your images, helping you adhere to best practices like keeping descriptions concise while ensuring accessibility compliance. You can easily edit or use these suggestions as they are, saving time and effort.

Document360’s Eddy AI alt text generation feature streamlines this process by providing concise, accessible suggestions. For instance, it might describe a software interface as **Document360’s settings dashboard with configuration options**. This ensures compliance, saves time, and enhances discoverability.

By combining accessibility and search optimization, the Eddy AI alt text generation feature empowers businesses to make their visual content more impactful while delivering a seamless user experience.

> NOTE
>
> * This feature is enabled by default if the AI writer is enabled.
> * You can generate up to 5000 alt texts per month. Each API call deducts one soft limit, so one project can use it across various articles.
> * Eddy AI can only generate alt text for images smaller than 20 MB in JPEG, JPG, PNG, and WEBP formats.
> * Eddy AI Alt text generator feature supports only in **English** language.
> * Eddy AI Alt text generator may have accuracy limitations with panorama images, fisheye view images, and icons with monochrome colors.
> * To know more about the languages supported by Eddy AI,  [click here](/help/docs/ai-writer-suite#multilingual-support-for-eddy-ai-writer-suite).

---

## Generating AI alt Text in the Advanced WYSIWYG Editor

To generate alt text while uploading an image in the Advanced WYSIWYG editor, follow these steps:

1. Navigate to the article in the Advanced WYSIWYG editor.
2. Use the slash command `/image` or go to **Insert > Image**.

   The **Insert Image** panel will appear.
3. Insert images using one of the following methods:

   * **Upload from my device**:  
     Select an image from your local device. Eddy AI will automatically generate alt text in the **Alt Text** field.
   * **Choose from Drive**:  
     Select an image from the Drive.

     + If the image already has alt text from the Drive, it will persist.
     + To update or regenerate the alt text, click the inserted image, then click the **Alt text** () icon in the floating menu.
   * **Drag and drop**:  
     Drag and drop the desired image in the panel. Eddy AI will automatically generate alt text in the **Alt Text** field.
   * **External URL**:  
     Enter the image’s URL. Eddy AI will automatically generate alt text in the **Alt Text** field.
4. To regenerate alt text, remove the existing text and click  **Generate**.
5. **For multiple images**, Eddy AI will generate alt text for all images. To regenerate, remove the existing alt text and click  **Generate** for each image individually.
6. Review and edit the generated alt text as needed.
7. Once done, click **Insert** to add the image to your article.

> NOTE
>
> For more information on adding images, read the article on [Inserting images in the Advanced WYSIWYG editor](https://docs.document360.com/docs/adding-images-to-articles#inserting-an-image-advanced-wysiwyg-editor).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Adding_Alt_Text_for_pasted_images.gif)

---

### Generating AI alt text while copy-pasting images in the Advanced WYSIWYG editor

To generate AI alt text while copy-pasting images in the Advanced WYSIWYG editor:

1. Drag and drop or paste the desired image into the Advanced WYSIWYG editor.
2. Click on the pasted image, and the floating menu will appear.
3. Select the **Alt text** () icon.
4. In the **Image alt text** field, either:

   * Enter the alt text manually.

     Alternatively, click  **Generate** to create alt text using Eddy AI.
5. Click the  icon to save the alt text.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Adding_Alt_Text_for_pasted_images.gif)

---

## Generating AI alt text while uploading an image in Drive

To generate an alt text while uploading an image to the Drive:

1. During the image upload process, either:

   * Manually enter the alt text.

     Alternatively, click  **Generate** to create Eddy AI-generated alt text.
2. For multiple images:

   * Click  **Generate** next to each image to create alt text individually.

     Alternatively, click  **Generate for all images** to generate alt text for all uploaded images in one go.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_alt_text_for_multiple_images_in_drive.gif)

### Generating AI alt text for an uploaded image in Drive

To generate alt text for an image already uploaded in the Drive:

1. Navigate to the **Drive** () in the Knowledge base portal.
2. Click the desired image, and the **File details** panel will appear.
3. In the **Alt text** section:

   * Click  **Generate** to create alt text using Eddy AI.
   * To regenerate, remove the existing alt text and click  **Generate** again.
4. Once done, click **Update** to save the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Generating_AI_alt_text_for_an_uploaded_image_in_Drive.gif)

## Try this feature

Explore this feature with an interactive demo below and see how it works in real time.

---

### FAQs

#### How many AI alt texts can I generate per month?

You can generate up to 5000 alt texts per month per project.

#### Is the AI alt text generation feature enabled by default?

Yes, this feature is enabled by default if the AI writer is enabled.

#### Can I review and edit the generated AI alt text?

Yes, you can review and edit the generated alt text before accepting it.

#### How do I generate AI alt text when uploading an image to Drive?

When uploading an image to Drive, simply click the  **Generate** button next to the alt text field to create AI-generated alt text.

#### How do I regenerate AI alt text for an image?

To regenerate the alt text, delete the existing alt text, the  **Generate** button will appear to help you regenerate using Eddy AI.

#### What happens if the Generate button is disabled?

If the  **Generate** button is disabled, it means your monthly AI credit balance has been exhausted. You can contact your admin/Document360 support.

#### What happens if I try to upload multiple images but don't have enough credits?

If your available credit balance is insufficient for all images in a single upload, the **Generate all** button will be disabled.

For example, if you upload 10 images but only have 5 credits, the  **Generate all** option will not be available. However, you can manually select up to 5 images (or as many as your credits allow) and click  **Generate** to create alt text for the selected images.

#### Can AI generate alt text for all image formats?

AI can only generate alt text for images smaller than 20 MB in JPEG, JPG, PNG, and WEBP formats.

#### What if I copy-paste an image in an article? How can I add alt text?

If the article is in Advanced WYSIWYG editor, you can generate the AI alt text for the image. Click the pasted image in the article and a floating menu will appear. Click on the **Alt Text** () icon and then **Generate** to create the alt text. Click the  icon to save.

#### Are KB customization images included in the alt text generation count in Drive?

No, only images from published articles with dependencies, as well as those from templates, snippets, and glossary, are counted.

<a id="ai-search-suite"></a>

## AI search suite

**Plans supporting the use of AI search suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The AI search suite enhances the user experience by integrating AI-powered tools that streamline search and content discovery. The suite includes three key features: Ask Eddy AI assistive search, Ask Eddy AI API, and an AI article summarizer, all designed to improve knowledge base navigation and content summarization.

---

## Features in the AI search suite

1. [**Ask Eddy AI assistive search**](/help/docs/ai-assistive-search-ask-eddy)

   This feature provides an intelligent search experience, allowing users to ask questions directly and receive relevant, AI-curated answers. By leveraging machine learning, it enhances the accuracy and speed of content retrieval, making knowledge base navigation more efficient.
2. [**Ask Eddy AI API**](/help/docs/ask-eddy-ai-api)

   This API gives you a flexible, customizable solution, allowing you to seamlessly integrate GenAI search directly into your product's UI. With this integration, your users can access the Ask Eddy feature without needing to navigate through product documentation, providing a more streamlined and efficient experience.
3. [**AI article summarizer**](/help/docs/ai-article-summarizer)

   The AI article summarizer is integrated into the Knowledge base site to help users quickly get the gist of lengthy documents. This tool scans articles and condenses them into shorter summaries, providing users with key takeaways without having to read through the entire content.
4. [**Text to voice functionality**](/help/docs/text-to-voice-functionality)

   The text-to-voice feature on your Knowledge base site allows users to listen to articles instead of reading them, saving time. This functionality is beneficial for multitasking, allowing users to absorb information while performing other activities.

---

## Multilingual support for Eddy AI search suite

The Eddy AI search suite seamlessly integrates with the Knowledge base site, offering support for a wider array of languages.

In addition to English (en, en-US, en-GB, en-AU), Eddy AI search suite supports 15 other languages, including French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), and Brazilian Portuguese (pt-br).

If a workspace is configured with a language not supported by Eddy AI, such as Chinese, the search suite features will not be available for that workspace.

---

## Plan availability and usage limits

1. **Ask Eddy search**: This feature is included with 2,000 credits per month for the **Business** plan and 5,000 credits per month for the **Enterprise** plan, with each search query consuming 1 credit. It is tailored to support businesses with high AI-driven search needs. To purchase additional credits, please contact support.
2. **Ask Eddy AI API**: This feature is included with 2,000 credits per month for the **Business** plan and 5,000 credits per month for the **Enterprise** plan, with each call consuming 1 credit. This enables enterprises to scale AI-powered search functionality seamlessly.
3. **AI article summarizer**: This feature is included with 1,000 credits per month for the **Business** and **Enterprise** plans, with each summarization task consuming 1 credit. It enhances content summarization efficiency for improved workflow management.

The AI search suite's flexible credit system ensures businesses can tailor their usage to their specific needs, providing scalable solutions to meet growing demands for AI-enhanced search and content management tools. For more information on pricing, click [here](https://document360.com/pricing/).

<a id="ai-assistive-search-ask-eddy"></a>

## AI assistive search (Ask Eddy AI)

**Plans supporting the use of AI assistive search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Ask Eddy AI feature is available on your home page and the Knowledge base site's search bar. This AI assistant provides more contextual answers to reader queries and prompts. This helps the user avoid having to search and read through multiple articles. Instead, it provides answers from your existing Knowledge base.

> NOTE
>
> * By default, Eddy AI assistive search retrieves answers from the main workspace. To access information from a different workspace or across all workspaces, switch to the desired workspace using the filter on your knowledge base site.
> * After updating content in the published article, Eddy AI assistive search will take approximately 15 minutes to fetch the updated information in the knowledge base site.
> * To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

The Ask Eddy AI will extract all information in your knowledge base, including the textual content, code blocks, tables, content reuse elements, and LaTeX.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Eddy_fetching_Code_block_information.png)

---

## Enable Ask Eddy AI for your Knowledge base site

1. Navigate to **Settings** () > **AI features** > **Eddy AI** in the Knowledge base portal.
2. Turn on the **AI assistive search** toggle.

   The AI assistant **Eddy AI**now starts indexing your Knowledge base content and this process takes a while. Once done, the Ask Eddy AI button will be available on your Knowledge base site search bar and the Home page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-AI_assisstive_search.png)

* The **KB site** checkbox will be the default selection which enables Eddy AI for searches on the Knowledge base site.
* The **KB widgets & extensions** checkbox enables Eddy AI for widgets and third-party tool integrations with Document360.
* The **Public API** checkbox activates Eddy AI for all API endpoints using a single API token.

---

## Accessing Ask Eddy AI

> For your information
>
> The Conversational Eddy AI enhancement is available exclusively in **KB site 2.0.** To explore KB site 2.0 without impacting your existing Knowledge base, go to **Settings** () **> Customize site**. For more details, read the article on [KB site 2.0 migration](/help/docs/kb-site-20-migration).

1. Click on the **Search bar** or press `Ctrl + K` on the Knowledge base site.
2. Start typing the keyword, and the general search results will appear.

> NOTE
>
> If Ask Eddy AI is not enabled in the Knowledge base portal, only the search bar will be available in the Knowledge base site.

3. Hit Enter and Ask Eddy AI will generate results along with the source articles.
4. Click the **Copy** () icon to copy the generated content if needed.
5. Provide feedback by clicking the **Like** () or **Dislike** () icon for the generated result.
6. Click **Source articles** to refer to the articles based on which the **Eddy AI** fetches information.

   The source URLs will be listed and numbered in the **Source articles** section. The same numbers will be used in the AI response to help you identify which parts of the response are fetched from each source article.
7. Hover over the number to find additional information, such as, if it’s an external source, you can find the title of the web page and a short description of the source article. Click on the number or the **Open in a new tab** () icon to open the source article in a new tab.
8. Click on the desired source article, to open the article in a new tab.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-External_sources.gif)

   **Eddy AI** will provide answers in the language the question is asked.
9. Choose the desired workspace or all workspaces from the filter dropdown to fetch results from **Eddy AI**.

> NOTE
>
> * If you filter workspaces during an Ask Eddy AI conversation, the generated results will be reset.
> * Eddy’s response will be contextual and will be based on the last five queries.

9. After the first query and answer, click the **Continue conversation with** **Eddy AI** text field to enter your next query and press Enter or click the **Send** icon.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Conversational_Eddy_AI.gif)

---

### Customize the Eddy AI Localization variables

1. Navigate to **Settings** () > **Localization & Workspaces**in the Knowledge base portal.

   By default, the **Localization & Workspaces** tab will appear.
2. Navigate to the **Localization variables** tab.
3. In the **Eddy AI** accordion, update the variable values according to your desired language.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-AI_assisstive_search.png)

---

## Integrating Eddy AI in KB Widget with multi-lingual support

You can access Eddy AI within your knowledge base as a widget, in various languages including English (en-US, en-GB), French (fr), Spanish (es), German (de), Norwegian (no), Dutch (nl), Portuguese (pt), Swedish (sv), Italian (it), Korean (ko), Finnish (fi), Polish (pl), Arabic (ar), Hebrew (he), Danish (da), ensuring a seamless user experience.

> For more information, read the article on [Integrating Eddy AI in KB widget](/help/docs/knowledge-base-widget-getting-started).

---

## Enabling Eddy AI credits notification

You can configure notifications for Ask Eddy AI credit balance. To enable Credit usage alert toggle,

1. Navigate to **Settings** () > **Knowledge base portal**> **Notifications**.

   By default, the **Notification channels** tab will appear.
2. Go to the **Notification mapping**tab.
3. In **Eddy AI notifications**accordion, turn on the **Credit usage alert**toggle.

Once enabled, Document360 will send reminders to the configured notification channels when the credit balance drops to 20%, 10% of the total allotted balance, and when the balance expires.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenShot-AI_assisstive_search.png)

---

NOTE

Document360's "Ask Eddy AI" utilizes OpenAI APIs in its backend operations. Data is transmitted to OpenAI through their APIs. OpenAI adheres to a privacy policy that prohibits the use of customer-submitted data via our API for training OpenAI models or enhancing OpenAI's service offerings. Both Document360 and OpenAI comply with GDPR regulations. Additionally, Document360 is SOC 2 compliant.  
An extract from the policy states, "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings."

> Read the complete [**OpenAI API data usage policies**](https://openai.com/policies/api-data-usage-policies)**.**  
> If you any queries regarding Document360's data policy, please read our [**Privacy policy**](https://document360.com/privacy/)**.**

---

### FAQs

#### What data or information does Ask Eddy AI collects?

Ask Eddy AI does not collect any Personal Identifiable Information (PII). We collect prompts (questions), **Eddy AI**'s response, citation articles, and feedback; This collected data is available as part of Eddy AI Search Analytics.

#### What technology does Ask Eddy AI use?

Ask Eddy AI utilizes OpenAI APIs under the hood for its functionality. We send data to OpenAI via their APIs. According to OpenAI's privacy policies, data sent via their APIs will not be used to train their GPT models.

#### Does Ask Eddy AI use any external source other than our knowledge base?

No, Ask Eddy AI does not use any other sources. It solely relies on your knowledge base content to generate responses. If there is insufficient information or context available in your knowledge base to answer a specific question, Ask Eddy AI will respond with "I do not know."

#### How do my readers use the AI-powered assistive search feature?

Your Knowledge base site users click the Ask Eddy AI button, and a prompt input popup opens. They can type in any prompt or query to get tailor-made answers.

#### How does Ask Eddy AI protect your data?

We know that privacy and security is critical for many organizations. We are committed to protecting your organization’s and user’s data and privacy. We use industry-standard security practices, reputable sub processors with SOC 2 compliance, and provide the controls needed for organizations to meet their own data protection requirements.

#### What does credit mean for Ask Eddy AI?

One credit equals one question (prompt) asked. As part of our standard offering, Ask Eddy AI can be used to ask 1000 questions per month. Please contact our support team or your customer success manager if you wish to purchase additional credits.

#### How does Ask Eddy AI work on private knowledge base?

Ask Eddy AI utilizes the access controls you have set to generate an appropriate response based on the user's access control and permissions. If a logged-in user lacks access to a specific article but asks a question where the restricted article holds the answer, Ask Eddy AI will respond with "I do not know."

#### How quickly does Eddy AI's response reflect new content?

After updating an article, it generally takes around 15 minutes for **Eddy AI**'s response to align with the changes if a question is posed regarding the updated content. Similarly, when deleting an article, **Eddy AI** typically takes about 15 minutes to stop referencing the content from the deleted article.

#### Does Ask Eddy AI search within attachments?

Currently, Ask Eddy AI does not search within attachments. This means any content within your PDF and Word document which you have attached or embedded within your knowledge base article, is not indexed by Ask Eddy AI. However, we will support this functionality in future release updates.

#### Does Eddy AI read Excel file data to provide answers if I upload a file?

No, Eddy AI does not fetch or read information from files uploaded in articles.

#### What happens if I select French as the workspace language but ask questions in English?

If you set French as your workspace's preferred language but ask questions in English, Eddy AI will respond in English.

> NOTE
>
> Eddy AI responds in the same language as the query, regardless of the workspace language.

#### How do I check my Eddy AI credit balance?

The admin/owner can view the remaining credits for using AI Assistive search feature from  **Settings** () > **AI features** > **Eddy AI** .

Document360 will send reminders to the configured notification channels when the credit balance drops to 20%, 10% of the total allotted balance, and when the balance expires.

#### How can I purchase additional credits for the Eddy AI assistive search?

You can purchase additional credits by navigating  **Settings** () > **AI features** > **Eddy AI**, and the Buy moreoption in the Document360 portal. If you are in trial version, you cannot purchase add-ons.

#### How do I configure email domain for Eddy AI credit notification?

To receive **Eddy AI** credit notifications via email, you need to configure your email domain. Go to **Settings** () > **Knowledge base portal**> **Notifications** > **Email domain**. By default, emails will be sent from [support@document360.com](mailto:support@document360.com) if the email domain is not configured.

#### What are the various notification channels for receiving Eddy AI credit notifications?

You can receive **Eddy AI** credits notifications in English from various notification channels such as webhook, Microsoft Teams, Slack, and email if you have set up the configuration. For more information of configuring notifications, read the article on [Notifications](/help/docs/notifications).

#### How do I configure the desired email address for receiving Eddy AI credit notifications?

After enabling the **Eddy AI** credits notification toggle, to receive **Eddy AI** credit notifications, configure your email address in  **Settings** () > **Knowledge base portal**> **Notifications**.

1. In the **Notification channels** tab, click on **New channel** and select SMTP.
2. Click **Next**.
3. Enter the channel name and the desired email address to receive notifications.
4. If required, you can add CC and **BCC**.

   For more information, read the article on [SMTP notification channel](/help/docs/smtp-email-notification-channel).

#### Why is Eddy AI not available in my API documentation?

**Eddy AI** is available only on the Knowledge base site and is not implemented for API documentation.

#### Can Eddy AI answer questions that require user login or involve restricted articles?

No, **Eddy AI** answers questions based on the user’s access control and permissions. If a logged-in user does not have access to a specific article, but they ask a question related to that article, **Eddy AI** will respond with *No results found.*.

#### Why is the Ask Eddy AI button greyed out?

The **Ask Eddy AI** button becomes greyed out or disabled when your Eddy AI credit limit has been reached. To continue using this feature, you will need to renew your credits.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="ai-dynamic-related-articles-recommendation"></a>

## AI dynamic related articles recommendation

**Plans supporting AI dynamic related articles recommendation**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The dynamic related articles recommendation feature allows you to effortlessly enhance your knowledge base site by automatically linking relevant articles across all content. This ensures that readers always find additional information related to their queries, improving navigation and overall user experience. In one instance, you can apply these related articles to your entire knowledge base.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

---

## Dynamic related articles recommendation

> For Your Information (FYI)
>
> The Dynamic related articles recommendation is available exclusively in **KB site 2.0**. To explore KB site 2.0 without impacting your existing Knowledge base, go to **Settings** () > **Customize site**. For more details, read the article on [KB site 2.0 migration](/help/docs/kb-site-20-migration).

You can dynamically add related articles to your Knowledge base site for all articles.

1. Navigate to **Settings** () > **AI features** > **Eddy AI**in the Knowledge base portal.
2. Turn on the **Dynamic related article recommendation** toggle.

   Now, **Eddy AI** will automatically add related articles to all the articles in your knowledge base site.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Dynamic_related_articles_recommendation.png)

Additionally, you can manually add more related articles by following these steps:

1. Navigate back to **Documentation** () and select the article to which you want to add related articles.
2. Click the **More** () option and select **Related articles**.
3. Click Ask Eddy AI, and **Eddy AI** will recommend the related articles.
4. Click the **Add**() icon to include the desired articles in the related articles list.
5. Turn on the **Auto relate this article to all related articles**  toggle, if needed.
6. Once you have made changes, click **Save**.

> NOTE
>
> When **Auto relate this article to all related articles** is enabled, if Article-A is added as a related article in Article-B, then Article-B will appear as a related article in Article-A. Save time by using this toggle for adding related articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_related_articles_manually_KBsite_2_0.gif)

> NOTE
>
> The following scenarios apply if you have not yet enabled the **Dynamic related article recommendation** toggle:
>
> * If you have permission to enable the toggle, a banner will appear with the option to **Enable recommendations**. Clicking this will redirect you to the **Eddy AI** settings page, where you can turn it on.
> * If you do not have permission, you'll see an **I'm Interested** button. Clicking this will send an email to your team account owner, notifying them of your interest in enabling the feature.

### Knowledge base site view

After enabling the Dynamic related article recommendation feature, all articles recommended by this feature in the Knowledge Base will display relevant related articles, marked with an  icon next to the article name.

> NOTE
>
> **Eddy AI** recommends up to three articles. If manually curated articles are the same as Eddy's recommendations, the number of recommended articles may vary.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Knowledge%20base%20view%20of%20dynamically%20added%20related%20articles.png)

---

### FAQs

#### What is the Dynamic related articles recommendation feature?

The Dynamic related articles recommendation feature automatically links relevant articles across all content in your knowledge base, enhancing navigation and user experience.

#### How can I enable the Dynamic related articles recommendation feature?

To enable it, navigate to **Settings** () > **AI features** > **Eddy AI** in the Knowledge base portal and turn on the Dynamic related article recommendation toggle.

#### Why are related articles not appearing for certain articles?

The dynamic related articles recommendation feature uses an algorithm to assess article relevance. Only articles that meet a specific relevance threshold will appear as related. If no similar articles are found, recommendations cannot be generated.

#### How do I identify articles recommended by the Dynamic related articles feature?

Articles recommended by the Dynamic related articles feature are marked with a  icon next to the article name in the Knowledge base site. However, if you manually add related articles or use the Ask Eddy AI feature to add them, the  icon will not appear.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="ai-chatbot"></a>

## AI Chatbot

**Plans supporting AI chatbot**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

> NOTE
>
> If you're on a **Legacy plan**, this feature is available only if you've purchased the AI assistive search add-on for your project.

In Document360, you can interact with the Eddy AI Chatbot to quickly get answers to your questions without having to search through Knowledge base articles. The Eddy AI Chatbot helps you find relevant information faster and more easily.

> NOTE
>
> * The Eddy AI Chatbot will be available exclusively for KB site 2.0 projects.
> * To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

---

## Configuring the Eddy AI Chatbot

To enable Eddy AI in the Knowledge base widget:

1. Navigate to **Settings** () > **AI features** > **Eddy AI** in the Knowledge base portal.
2. Turn on the **AI assistive search** toggle.
3. Select the **KB widgets & extensions** checkbox.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Turn_on_KbWidget_in_Settings.png)

To configure the Eddy AI Chatbot in the Knowledge base portal:

1. Navigate to **Widget**() in the Knowledge base portal.
2. Click **Add widget**.
3. Enter your desired name for the Eddy AI Chatbot in the **Widget name** field (up to 30 characters).
4. By default, the **Configure & connect**tab will be selected.

#### **Connection**

5. In the **Widget JavaScript** accordion, find the **Widget key** and its JavaScript code.
6. Click the **Regenerate** () icon to regenerate the **Widget key**.
7. In the **Connect domains** accordion, find the domains where the widget displays.
8. In the **JWT** accordion, implement an authentication configuration for the Eddy AI Chatbot using JWT, ensuring a secure environment for private and mixed projects.

> NOTE
>
> For more information, read the article on [Securing Chatbot authentication using JWT](/help/docs/securing-chatbot-authentication-using-jwt).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Connection_section_in_Chatbot_AI.png)

#### **Customize the experience**

9. Select **Chatbot** as the widget type.

> NOTE
>
> Once a widget type is selected and saved, it cannot be changed.

10. In the **Style widget**accordion, customize Eddy AI chatbot’s styles and themes.

> NOTE
>
> For more information, read the article on [Styling the Eddy AI Chatbot](/help/docs/styling-the-chatbot).

11. In the **Content access** accordion, select the content level access for your readers, such as **Project**, **Workspace**, or **Category**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Customize_the_experience_in_the_Chatbot.png)

#### **Set controls**

12. In the **Widget security**accordion, enter your desired domain to ensure the widget is displayed exclusively on that specific domain.

> NOTE
>
> * Once a domain is added to the **Widget security** list, any project member who wants to install the Eddy AI Chatbot on a different domain must add that domain in the Widget security section.
> * If no domains are added to the list, the Eddy AI Chatbot can be integrated into any SaaS application or public website.
> * Please note, the **www.** is not considered part of your domain. Only add what follows **www.** in your URL.
>
>   Example: [document360.com](http://document360.com)

13. Preview the Eddy AI Chatbot on the right side of the page.
14. Once configured, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Set_controls_in_Chatbot.png)

To display the created Eddy AI Chatbot on your Knowledge base site:

1. From the Knowledge base widget page, hover over the desired widget and click the **Copy script** () icon.
2. Go to **Settings** () > **Knowledge base site** > **Integrations**.
3. Scroll down to **Custom HTML** blade and click **Add**.

   The **Add new integration** panel will appear.
4. Enter the desired description.
5. Select the intended option in the **Insert code** field.
6. Paste the copied script and click **Add**.

Now, the Eddy AI Chatbot will appear on your Knowledge base site.

> NOTE
>
> To integrate the Eddy AI Chatbot into your custom site, paste the copied script into the appropriate HTML file.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Pasting_the_code_in_HTML_Integration.gif)

---

## Accessing the Eddy AI Chatbot in the site

To access and interact with the Eddy AI Chatbot on your site:

1. Click the Eddy AI Chatbot icon to open the chatbot.
2. Type your question and click the **Send**() icon or press **Enter**.

   Eddy AI will retrieve information from your Knowledge base to answer your query.
3. Hover over any generated answer to **Copy** (), **Like** (), or **Dislike** () the response.
4. Click the **Clear** () icon to clear the conversation.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Exploring_Chatbot_AI.gif)

---

### FAQs

#### How can I view the feedback (likes and dislikes) received from the Eddy AI Chatbot?

To view the Eddy AI Chatbot feedback,

1. Navigate to the **Analytics**() > **Eddy AI** in the Knowledge base portal.
2. Filter the desired Eddy AI Chatbot using the **Application** filter at the top of the page.

   In the **Feedback** section, you will see the number of likes and dislikes received.

#### What is the difference between a Widget and an Eddy AI Chatbot?

A **Widget** allows manual navigation through articles or search functions, while an **Eddy AI Chatbot** engages users in a conversation, offering immediate, direct answers without the need to manually navigate through content.

<a id="securing-chatbot-authentication-using-jwt"></a>

## Securing Chatbot authentication using JWT

**Plans supporting AI chatbot**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

JSON Web Token (JWT) is an open standard used to securely transmit information between parties as a JSON object. It allows for authentication and information exchange, ensuring that the data sent is verified and trusted. By implementing JWT for the Eddy AI Chatbot, you can create a secure environment for your private and mixed projects, protecting sensitive information from unauthorized access.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

You can implement an authentication configuration for the Eddy AI Chatbot using JWT, ensuring a secure environment for Private and Mixed projects.

1. Navigate to Knowledge base widget () in the Knowledge base portal.
2. Click **Add widget** to create a new widget.

   Alternatively, hover over the desired widget and click the **Edit** (✎) icon to modify an existing widget.
3. Select the widget type as **Chatbot** to configure JWT for Eddy AI Chatbot.
4. In the **Configure & connect** tab, go to the **JWT** accordion and **enable** the JWT toggle.

1. **Client ID:** The client ID will be your project’s ID.
2. **Widget ID:** Since multiple widgets may exist, a widget ID is provided for their unique purposes.
3. **Token endpoint:** This is the HTTP endpoint used to obtain an access token using an authorization code.
4. **Client secret:** Click **Regenerate** to generate the client secret. Ensure you save this for future use, as it will apply to all widgets created moving forward.

> NOTE
>
> The **Client Secret** is required for all future JWT-enabled widgets. It will not be stored within Document360, so keep it securely.

   e. **Authorize URL:** Paste the authorized URL from your knowledge base widget webpage.

5. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Securing_Knowledge_base_widget_authentication_using_JWT(1).png)

Embed the authorized URL within your code and paste it into the **Script section** of your webpage to implement a secure, authenticated Chatbot. This setup will prevent unauthorized third-party access. By following these steps, you can successfully implement JWT authentication for the Eddy AI Chatbot, ensuring a secure environment for your projects. After configuring your chatbot, test the setup thoroughly to ensure that everything functions correctly.

> NOTE
>
> For more information on implementing the auth endpoint, read the article on [Managing the Knowledge base widget](/help/docs/managing-the-knowledge-base-widget).

---

### FAQs

#### What should I check if I encounter issues during authentication?

If you experience authentication issues, ensure the following:

* The client secret and token endpoint are correctly configured.
* The user is authenticated before making a request to the endpoint.

#### What are common pitfalls to avoid when implementing JWT?

Here are a couple of common pitfalls to watch out for:

* **Failing to save the client secret** after regeneration can lead to authentication failures.
* **Misconfiguring the token endpoint** can prevent successful token retrieval.

#### What should I do if I lose my client secret?

You will need to regenerate a new client secret and update your configuration accordingly.

#### How can I verify that JWT authentication is working?

Test the authentication flow by attempting to access the Eddy AI Chatbot and checking for the correct access token response.

<a id="styling-the-chatbot"></a>

## Styling the Chatbot

**Plans supporting AI chatbot**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Styling the appearance and behavior of your Eddy AI chatbot can significantly enhance the user experience. Customizing your Eddy AI Chatbot’s colors and icons to match your brand can create a seamless experience, making it easier for users to engage with the Eddy AI chatbot and get timely information.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

---

## Styling the Eddy AI Chatbot

To style the Eddy AI chatbot, follow the steps below:

1. Navigate to Knowledge base widget () in the Knowledge base portal.
2. Hover over the desired widget and click the **Edit** (✎) icon.
3. In the **Configure & connect** tab, expand the **Style widget** accordion.

#### Widget color

4. Click **Change icon** to replace the icon with an image or select one from the available icons.

   a. Choose any icon from the **Icon set** tab.  
   **(or)**  
   b. Click the **Insert image** tab.

   1. To use an image URL, paste or type the URL and click **Insert**.
   2. Alternatively, to upload an image from Drive, click **Upload an image** and select the desired file.

> NOTE
>
> Click **Default** to revert to the default icon and color.

5. Click **Change color** to update the Eddy AI Chatbot’s background color.

   The color palette will appear.
6. Select a color using the color picker or enter a hex, RGB, or HSL code for specific color values.

#### Widget position

7. Select **Left** or **Right** to position the widget icon on either side of your site.
8. Enter the desired pixel values in the **Side spacing** and **Bottom spacing** fields to adjust the Eddy AI Chatbot's placement.

#### Hide widget

9. Turn on the **Hide widget** toggle if you want to hide the widget on your site.
10. After making your changes, click **Save**.

> NOTE
>
> The **autosave** feature is enabled when navigating between the Knowledge base widget tabs, ensuring your changes are automatically saved.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Styling_the_Knowledge_base_widget.gif)

<a id="eddy-ai-federated-search"></a>

## Adding external sources for AI Assistive search

**Plans supporting addition of external sources in AI assistive search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

> NOTE
>
> For **Legacy** plan users, this feature is available only if you have purchased the AI assistive search add-on for your project.

The Adding external sources for AI assistive search feature allows you to configure it to retrieve information from multiple external sources, simplifying the process and delivering more comprehensive answers to users.

Imagine a support agent for a software company using Document360 to resolve customer issues. Previously, they could only search for solutions within their internal Knowledge base articles. With this feature, the agent can now pull information from external resources like the company's public documentation site, blogs, and product release notes. This helps the agent deliver accurate and comprehensive answers quickly without leaving the platform, improving both response time and customer satisfaction.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

---

## Adding external sources

To access and manage external sources:

1. Navigate to **Settings** () >**AI features** >**Manage source****s** in the Knowledge base portal.

   The **Manage source** page will display a list of already configured external sources (if any).
2. Click **Add new** to add a new external source.

   The **Add source** panel will appear.
3. Choose the desired source type, either **Webpage** or **Sitemap**.

> NOTE
>
> You can add up to 50 **Webpage****s** and 1 **Sitemap**.

4. Enter the desired source name.
5. Enter a valid URL.

> NOTE
>
> The webpages must be in HTML5 format and should include `<article>` or `<main>` tags.

6. Once done, click **Add source**.

![Adding new external sources in AI Assistive search in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_External_sources.gif)

---

## Manage source overview page

The **Manage source** page will list all indexed external sources.

![Manage sources for AI search, including content access and external source options.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Manage_source_over_view_page.png)

Below is a breakdown of the available options:

1. **Content access:** Restrict Eddy AI’s access to specific workspace and language. Two options are available: **All** and **Allow** selected.
2. **Filter:** Filter sources based on type such as **All, Sitemap, Webpage, or Failed Sources**. Failed sources will display all sources that encountered errors.
3. **Sync:** By default, sources are synced every 24 hours, and to sync manually, you can click **Sync** up a source up to four times per day.
4. **Add new:** Click **Add new** to add a new source for indexing.
5. **Search:** Use the search bar to locate a source by its name.
6. **Type:** Displays the type of the source, either **Webpage** or **Sitemap**.
7. **Last sync:** Shows the last sync date. Hover to view the exact time.
8. **Status:** Toggle to enable or disable a source. If disabled, Eddy AI will stop fetching information from that source.
9. **Error:** To denote an external source where the URL has encountered some error.
10. **Delete:** Click the **Delete** () icon to remove a source.
11. **Edit:** Click **Edit** () to modify the source name or URL.

### Enabling Eddy AI for specific workspaces, languages, and categories

This feature allows you to configure Eddy AI to selectively enable or restrict support for specific workspaces, languages, and categories in your Knowledge base. On the **Manage sources for AI assistive search** overview page, you can manage the content access and restrict AI access to specific workspaces, languages, and categories for more focused assistance.

1. Click the **All** dropdown and you have two selections,

   * **All** - lists all the workspaces in your knowledge base.
   * **Allow selected** - allows you to select the workspace, languages, and categories.

   If you select **Allow selected** from the dropdown, a **Manage workspace & category popup** appears.
2. Select the workspace, languages, and categories you want to allow the assistive search to fetch data from.

   A Manage button appears with the Allow selected dropdown selection.
3. Click **Manage** to select and manage the sources and click **Save**. The Save button is enabled only when changes are made.

   Once any modifications are made, you will get a confirmation popup saying, ‘*AI search sources updated*.’
4. Click **Cancel** or hit Esc to close the popup.

![Manage workspaces and categories with language options of the external sources in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_Eddy_AI_for_specific_workspaces_languages_and_categories.png)

> NOTE
>
> If you switch from **Allow selected** to **All** dropdown selection, and then again switch to **Allow selected**, the selections made will be retained.

The **Enabling Eddy AI for specific workspaces, categories, and languages** feature is applicable across all areas where AI Assistive Search is enabled.

---

### Handling errors in external sources

If errors such as unsupported HTML formats, unsupported languages, or HTTPS issues occur on a webpage, Eddy AI will stop fetching information from that page until the error is resolved. However, if errors occur on one or more web pages within a sitemap, Eddy AI will continue fetching data from the remaining valid URLs in the sitemap.

1. Click the **Error** () icon next to the status toggle.

   The **Edit** panel will display the URLs and their errors.
2. Hover over a URL and click the **Open site** () icon to view the external source.
3. Click **Remove** to delete a specific URL from the list in the Sitemap.
4. Click **Remove all** to delete all URLs with errors.

> NOTE
>
> * If the webpage source link has bot detection or similar detection mechanisms enabled, Eddy AI search will be unable to crawl the content. As a result, the source will not be added, and a forbidden error will occur.
> * Eddy AI supports only Server-Side Rendered (SSR) webpages. Client-side rendered webpages may not be indexed properly, leading to empty search results. To ensure accurate embedding and search functionality, please use server-rendered content.

![Handling errors of the external sources in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Handling_GIF_in_External_sources.gif)

---

## Knowledge base site view

When Eddy AI fetches results from external sources:

1. The source URLs will be listed and numbered in the **Source articles** section. The same numbers will be used in the AI response to help you identify which parts of the response are fetched from each source article.
2. Hover over the number to find additional information, such as, if it’s an external source, you can find the title of the web page and a short description of the source article. Click on the number or the **Open in a new tab** () icon to open the source article in a new tab.
3. Click on the desired source article, to open the article in a new tab.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-External_sources.gif)

---

## Troubleshooting

This section provides step-by-step guidance to address common issues that you may encounter when adding external sources to your Eddy AI Assistive search. To configuration errors, each solution is tailored to help you quickly identify and resolve potential roadblocks.

### Unsupported format while adding sitemap

**Error:** Unsupported format

The error message **Unsupported format** occurs when attempting to add a sitemap to the **Manage sources** section if the sitemap contains nested sitemaps with the `<sitemapindex>` tag, exceeds the 1 MB file size limit, or is in an unsupported format.

**Steps to resolve:** To resolve this error, follow the steps below:

* Use only the direct sitemap URL without the `<sitemapindex>` tag, as nested sitemaps are not supported.
* Ensure the sitemap file size is less than 1 MB.
* Verify that the sitemap is in a supported format, such as XML.

### Forbidden error while adding webpage

**Error:** Forbidden

The error message **Forbidden** will appear when attempting to add a web page to the **Manage sources** section. This error arises if the web page source has bot detection or other security mechanisms enabled, preventing Eddy AI search from crawling the content.

**Steps to resolve:** To resolve this error, follow the steps below:

* Check if the source link has bot detection mechanisms enabled. If so, you may need to contact the website administrator to allow crawler access.
* Use a different source that does not restrict crawling.

### Only HTML5 documents with `<article>` or `<main>` tags are supported while adding webpage

**Error:** Only HTML5 documents with `<article>` or `<main>` tags

The error **Only HTML5 documents with** `<article>` **or** `<main>` **tags** will occur when adding a web page that does not meet the HTML5 format or lacks the required `<article>` or `<main>` tags.

**Steps to resolve this issue:** To resolve this, follow the steps below:

* **Verify the HTML5 format:** Check the doctype declaration of the web page. HTML5 pages should have `<!DOCTYPE html>` as the declaration.
* **Check for required tags:** View the page source (`Ctrl + U` / `Cmd + U`) and ensure it contains `<article>` or `<main>` tags.
* **Update the web page:** If the page is not in HTML5 format or lacks the required tags, update the page to meet these requirements.

By addressing these common errors and their solutions, you can ensure a smoother experience when adding external sources to your Eddy AI Assistive search.

---

### FAQs

#### **How do I perform a manual sync for external sources?**

To perform manual sync for external sources, follow steps below:

1. Navigate to **Settings** **(****)** > **AI features**>**Manage source****s** in the Knowledge base portal.
2. Click **Sync** at the top of the **Manage source** page.
3. You can manually sync external sources up to four times per day.

> NOTE
>
> The system automatically syncs every 24 hours.

#### **How do I delete an external source?**

To delete any external sources from the Manage source page:

1. Navigate to **Settings** **(****)>** **AI features** **>** **Manage source****s** in the Knowledge base portal.
2. Hover over the desired source and click the **Delete** () icon.
3. To delete multiple sources at once, select the checkboxes for the desired sources and click **Delete** at the top.

#### **How do I view analytics for external sources?**

To view the search metrics analytics for external sources:

1. Navigate to **Analytics**() > **Eddy AI** in the Knowledge base portal.
2. In the **Most referenced articles** section, external sources will be listed alongside Knowledge base articles.

#### **Can I disable external sources temporarily without deleting them?**

Yes, you can turn off the **Status** toggle next to any external source to temporarily disable it. Eddy AI will stop fetching information from that source until it’s re-enabled.

<a id="ai-article-summarizer"></a>

## AI article summarizer

**Plans supporting the use of AI article summarizer**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Article summarizer** is one of the many Artificial Intelligence (AI) powered features in Document360. This feature comes in handy when readers want to save time by not reading lengthy articles. Instead, they can read a piece of condensed article information as a **summary**.

Document360 uses natural language processing (NLP) to locate the vital information in the article content while maintaining the original context to generate an optimal summary.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

### Prerequisites

* **Preprocessed article content** should be more than **250 words.**
* The AI feature is supported in your subscription plan.

> NOTE
>
> The article summary is available (depending on your subscription plan) in new/existing articles published on or after May 27, 2023.

---

## Enabling article summarizer

To enable the article summarizer, follow the steps below:

1. Navigate to **Settings** ()> **AI Features** > **Eddy AI** in the Knowledge base portal.
2. Turn on the **Article summarizer** toggle.

When enabled, the **Summary** is available at the article top in the Knowledge base site. Click on 'Summary' to expand and read it.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enabling_Summarizer.png)

---

---

#### What is 'Preprocess' or 'Preprocessed words' in Document360 articles?

**Preprocess** refers to filtering specific article/category page elements. The below elements are not considered for meta description generation's word count:

* HTML tags
* Images
* URL/links
* Code blocks

  > If you have an article word count shown as 220 words at the bottom of the Document360 editor, this includes the HTML tags, links, code blocks, and more. When preprocessing content is considered, the word count would be less. Ensure the preprocessed article content is more than 250 words for the AI article summarizer to work.

---

#### Data privacy

We understand that our customer's Knowledge base data is sensitive. As this feature uses a form of OpenAI integration, we adhere to the privacy policies on OpenAI. An extract from the policy states, "OpenAI will not use data submitted by customers via our API to train OpenAI models or improve OpenAI's service offerings."

> Read the complete draft of [**OpenAI API data usage policies**](https://openai.com/policies/api-data-usage-policies)

> If you any queries regarding Document360's data policy, please read our [**Privacy policy**](https://document360.com/privacy/)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="ask-eddy-ai-api"></a>

## Ask Eddy AI API

**Plans supporting the use of Ask Eddy AI API**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Eddy AI Public API is an invaluable feature designed to enhance the functionality and flexibility of our Eddy AI search feature. The Eddy AI Public API is particularly useful for businesses looking to deeply integrate AI-driven search capabilities directly into their own platforms or services. By embedding Eddy AI into your product, you provide users with the ability to access powerful search functionality without needing to visit your documentation site.

This API offers greater flexibility in customizing the user interface, allowing you to tailor aspects like color, naming, and placement to align with your brand and user experience. With this seamless integration, Eddy AI becomes a natural extension of your product, enhancing user interactions and improving search efficiency. By exposing the API endpoints, you can incorporate them into your platforms, effortlessly extract answers from Eddy AI and build a customized search experience.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

---

## Using the Public API

1. Navigate to the Settings () > **AI Features** > **Eddy AI** in the Knowledge base portal.
2. In **AI assistive search**, select the **Public API** checkbox.

![1_Screenshot-ENabling_Ask_Eddy_API](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-ENabling_Ask_Eddy_API.png)

> NOTE
>
> 1. Ensure at least one of the checkboxes is selected. Otherwise, the AI assistive search toggle will be automatically disabled.
> 2. If the Public API is not enabled, you'll receive a ‘500 response code error’ or a ‘400 API access disabled error’ while using Ask Eddy AI API.
> 3. Each API call will reduce your total credit count by one.

3. Create authorization API token.

> NOTE
>
> 1. In the Knowledge Base portal, navigate to Settings () > **Knowledge Base Portal** > **API Tokens**.
> 2. Click **Create API Token**, enter the token name, and specify the POST method.
> 3. Click **Create** and **copy** the generated API token.

4. You can find the API structure at the [API hub](https://apihub.document360.io/index.html).

---

## Try the Eddy AI Public API in our API docs

1. Navigate to the Document360 [API documentation](https://apidocs.document360.com/apidocs/perform-ai-assistive-search-ask-eddy-within-project-version).
2. On the right side of the page, click the **Try it** section.
3. In the **Token** field, field, enter the API token generated from your Document360 project.
4. Enter the desired values in the **Body** section. The default request box will appear as follows:

   1. **Prompt**: Enter the question or query.
   2. **Version ID**: Obtain the current version ID.
   3. **Language Code**: Specify the desired language code for the input.
5. Click **Try it & see response** and the response will be generated.

![5_Screenshot-Ask_Eddy_in_API_Documentation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Ask_Eddy_in_API_Documentation.png)

---

## Try the Eddy AI Public API in Swagger

1. Navigate to the Swagger [API hub](https://apihub.document360.io/index.html). Under project versions, you can find the Ask Eddy AI API.
2. In the top right of the Swagger API hub and click **Authorize**.
3. The **Available authorizations** panel will appear, prompting you to enter the API token.
4. Paste the API token into the **Available Authorizations** window and click **Authorize**.
5. Once authorized, navigate to **Project versions** > `/v2/ProjectVersions/ask-Eddy AI` and click **Try it out**.
6. The default request box will appear as follows:

* **Prompt**: Enter the question or query.
* **Version ID**: Obtain the current version ID from the `/v2/ProjectVersions` endpoint.

  ![6_Screenshot-Updating_Getting_Project_version](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Updating_Getting_Project_version.png)
* **Language Code**: Specify the desired language code.

7. Click **Execute** to receive a successful response containing all required information.

> NOTE
>
> If you receive a service unavailable message, ensure the Public API is enabled in the settings.

![4_ScreenGIF-Using_Eddy_API_Token_in_Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Using_Eddy_API_Token_in_Swagger.gif)

---

### FAQ

#### **Why is there a discrepancy in the source articles between the Ask Eddy public API and Eddy AI search on the user site?**

The discrepancy in source articles may occur if you're retrieving details using the `articleID` for an article that is of type "Pagecategory." In such cases, fields like `article_id`, `article_title`, and `article_slug` will return null in the API response.

For "Pagecategory" articles, the details should be fetched using the `categoryID` instead of the `articleID`. Here's an example of what the API response would look like for a "Pagecategory" article:

```
{
  "category_id": "_categoryid",
  "category_title": "Title",
  "category_slug": "slug",
  "version_name": "v1",
  "version_slug": "v1",
  "article_id": null,
  "article_title": null,
  "article_slug": null,
  "version_display_name": null
}
```

JSON

Copy

To resolve this issue, ensure that you're using `categoryID` to retrieve information for "Pagecategory" articles when using the Eddy API.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="text-to-voice-functionality"></a>

## Enhancing accessibility with our read out loud feature

**Plans supporting read out loud feature on the Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The read out loud feature on your Knowledge base site allows users to listen to articles instead of reading them, saving time. This functionality is beneficial for multitasking, allowing users to absorb information while performing other activities. This feature is particularly useful for users who want to listen to content while performing other activities or for those who prefer auditory learning.

Available exclusively on the Knowledge Base site 2.0, this feature enhances engagement by offering a flexible alternative to reading.

> NOTE
>
> For customers on the old pricing plan, the read out loud functionality is available under Enterprise plan with the AI assistive search add-on.

## Using the read out loud feature

Here are some of the key highlights of the read out loud feature,

* The read out loud feature begins reading from the article heading and continues with the body content.
* It does not cover the article summary.
* The feature reads the alt text of images and videos. If the image or video does not contain alt text, the audio just indicates their presence in the respective language.
* The **Listen** button is located in the article header below the article heading. Once playback begins, the button label updates to **Listening**, and the Player window opens.

> **NOTE**  
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).

#### Player option

The player controls are located at the bottom right of the screen. Here’s how to use them:

* Play () icon - to start listening to the content.
* Pause () icon - to stop audio play.
* Forward () icon - to skip ahead by ten seconds.
* Backward () icon - to rewind by ten seconds.
* Close (**x**) icon - to close the player window.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Text_to_voice_kb_site.png "image(169).png")

#### Enable or disable player option

You can enable or disable the player option at the project level.

1. Navigate to Settings () > **Knowledge base site** > **Article settings**.
2. Under the **Accessibility** section, turn on the **Enable** **read out loud** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Read_out_loud_settings.png "image(169).png")

> NOTE
>
> The **Enable read out loud** feature will be disabled by default for customers on the trial plan.

---

## FAQs

**What all does the feature read from the article content? Is there any content it doesn’t cover?**

In addition to the textual content, the feature reads out the contents from the following content blocks of the article,  
Glossary, Snippets, Variables, Headings (H2, H3, H4), Numbered lists, Checklists, Bullet lists, Callouts, Private notes, Accordions, FAQ, Link text, emojis.

The Enable read out loud feature only indicates the presence of the following without actually reading its contents - Tables, Inline code, code blocks, images, videos, Latex, and files attached to the article using insert menu.

**Can I choose to read an article from in between?**

Yes, you can navigate the audio player using the seek option.

<a id="ai-premium-suite"></a>

## AI premium suite

**Plans supporting the use of AI premium suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **AI premium suite** elevates the user experience by automating key business processes and improving workflow efficiency through advanced AI-powered tools.

---

## Features in the AI premium suite

1. [**AI-automated business glossary generation**](/help/docs/ai-glossary-generator)

This feature helps companies streamline the creation and management of industry-specific glossaries. This feature allows businesses to maintain consistent terminology across teams, enhance communication, and ensure accuracy in documentation.

> **NOTE**
>
> The Eddy AI premium suite is available in English (en) only.

<a id="ai-glossary-generator"></a>

## AI glossary generator

**Plans supporting the use of AI premium suite**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Different departments within an organization may use similar business terms, but the underlying definitions and assumptions may differ. This knowledge is only known to those within each department. Therefore, defining business terms is crucial for a shared understanding, consistent data collection practices, and the right business logics applied to compute reliable business metrics.

Document360's AI Glossary generator helps organizations communicate and collaborate by clearing ambiguity in terminology. It helps you to create a complete collection of business terms used in an organization, providing clarity and a shared understanding of ambiguous terms. It aids in data collection, team collaboration, communication, and database design.

---

## Enabling the AI Glossary generator

![1_Screenshot-Enabling_Automated_business_glossary](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enabling_Automated_business_glossary.png)

1. Navigate to **Settings () > AI Features > Eddy AI** in the Knowledge base portal.
2. Scroll down to find the **AI Glossary generator** option.
3. Toggle the switch to enable this feature.

---

## Accessing AI Glossary generator

You can access the **AI Glossary generator** using the following steps:

1. Navigate to **Documentation** ()> **Content tools** > **Content reuse** and select **Glossary.**
2. Click **Take action** on the Eddy AI banner in the center of the page.

   By default, the **Open suggestion** section appears as the default view under the **Eddy AI glossary suggestions.**

> NOTE
>
> The AI Glossary Generator will show suggestions only if the articles are published. Otherwise it shows 0 suggestions.

1. On the left navigation bar:

   * You'll find a list of Eddy AI recommended glossary terms.
   * Use the **Search bar**, if you have multiple terms to search.
   * Use the **Sort** option to organize the terms.
2. At the top center, you can view the number of times that each term is repeated.

> For example, Backup is used 1 time(s) in 1 article(s).

6. In the **Definition** text box, Eddy AI will suggest the relevant definition of the term, and you can edit it using the formatting tools.

> NOTE
>
> Glossary definition can be up to 500 characters.

7. Under the **Add to** drop down menu, **English** will be selected as default.
8. Enable the **Update in articles (n)** check box to update the glossary in the articles.

> NOTE
>
> You can create a glossary without implementing it in the article by unchecking the **Update in articles** check box.

9. Click **Show Articles** to view the list of articles where the glossary terms will be used.

> NOTE
>
> Only articles that you have access are displayed here.

10. Once the changes are done, click **+ Add to glossary**.
11. After adding the term to the glossary, it will be moved to the glossary list.
12. If you need to ignore it, click **Ignore term**, and it will be added to the **Ignored suggestions** section.
13. Anytime, you can go to **Ignored suggestions** and click **Move to open list**.
14. Click **Continue later** to close the blade.

![2_ScreenGIF-Accessing_Automated_Business_Glossary](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Accessing_Automated_Business_Glossary.gif)

You can perform the AI Glossary generator Scan every 7 days.

![3_Screenshot-Scan_Again_of_that_specific_eddy_box](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Scan_Again_of_that_specific_eddy_box.png)

---

### Using AI Glossary generator in the advanced WYSIWYG editor

![4_ScreenGIF-Automated_Business_Glossary_in_the_Editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Automated_Business_Glossary_in_the_Editor.gif)

1. Navigate to the Advanced WYSIWYG editor and click **Insert**.
2. Select **Glossary**, and Eddy AI will provide glossary suggestions based on that specific article.

> NOTE
>
> In the Editor, **AI Glossary generator** scan will occur every time you open it. At one instance, it can scan up to the first 50 terms

3. Click **Take action** to open the **Eddy AI glossary suggestions** window, with the Open suggestions section as the default view.

### Shortcuts for AI Glossary generator

You can use the following shortcuts in the **Edit glossary suggestions** window.

* Use the ARROW keys to navigate suggestions.
* Press ENTER to add the current glossary term.
* Press BACKSPACE to ignore the current glossary term.

---

## FAQs

**Does the AI Glossary generator recognize singular and plural business terms as one?**

No, the Document360's AI Glossary generator considers two identical terms, one being singular and the other being plural, as two individual and specific terms.  
For example, the term **Team Accounts** and **Team Account** are evaluated as two distinguished terms.

**Does the AI Glossary generator recognize synonymous terms as one term?**

The synonymous terms will be considered as two individual and separate terms.  
For example, the words Routine and Daily are synonymous with each other. However, they are considered as two different terms or words.

**How often can you perform a rescan and why?**

The system recommends an interval of 7 days between each scan which will be notified in the user interface. Some quantifiable content in the documentation is necessary to scan the content and provide new suggestions.

**Is the rescan manual or automated?**

The Rescan is a manual process and not an automated action.

**What happens post a rescan?**

After the rescan, new suggestions are updated in the **open suggestions** list and the users will be notified with an email notification regarding the same.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

<a id="how-to-write-genai-friendly-content"></a>

## How to write GenAI friendly content

To write AI-friendly content for your articles, it's important to structure your information in a way that improves clarity, readability, and searchability. Here are some best practices to follow:

### 1. **Use clear and concise headings**

* **Headings (H1, H2, H3)**: Organize content using clear and descriptive headings. This helps AI understand the hierarchy and structure of your article.
* **Keyword-rich headings**: Ensure your headings reflect the content of the section. For example, instead of "Introduction," use "Introduction to Cloud Storage Solutions."

### 2. **Write short and focused paragraphs**

* **Keep sentences short**: Aim for sentences of 15-20 words. Avoid complex sentences as they can confuse AI processing.
* **One idea per paragraph**: Ensure each paragraph covers one idea to make it easy for AI to extract key information.

### 3. **Include tables for structured data**

* **Well-labeled tables**: Use tables to present structured data, making it easier for AI to scan and interpret. Clearly label rows and columns with descriptive headers.
* **Consistent formatting**: Ensure the table is formatted consistently for better AI recognition (e.g., avoid merged cells or irregular formatting).

### 4. **Incorporate code snippets carefully**

* **Use clean and well-commented code**: When including code snippets, use standard formatting and comment on key sections. AI can use comments to understand the context.
* **Use appropriate syntax highlighting**: This helps AI differentiate code from regular text.

### 5. **Use bullet points and numbered lists**

* **Break up information**: Bullet points and lists help organize content and make it easier for AI to break down and extract key points.
* **Limit list length**: Keep lists concise, ideally under 5-7 points, to avoid overwhelming the AI and readers.

### 6. **Include descriptive alt text for images**

**Alt text and captions**: Always include descriptive alt text and captions for images. This allows AI to understand and process the context of the image.

### 7. **Provide clear, contextual links**

* **Internal links**: Link to relevant internal articles using clear anchor text. Avoid generic phrases like “click here.”
* **Anchor text**: Use descriptive anchor text that informs AI of the linked content, such as “Read more about cloud storage security best practices.”

### 8. **Ensure SEO best practices**

* **Keyword optimization**: Use keywords naturally within headings, subheadings, and content. Avoid keyword stuffing.
* **Meta descriptions**: Write clear, relevant meta descriptions with keywords to help AI rank the content effectively.

### 9. Use business glossary terms consistently

* **Consistent terminology:** Make sure to use terms from your business glossary consistently throughout your articles. This helps AI identify and relate key terms across your content, improving searchability and comprehension.
* **Define key terms:** If a term might be unfamiliar to readers, include a brief definition or link to your business glossary. This ensures both AI and users understand the context of specialized terms.
* **Standardize abbreviations:** Always use standardized abbreviations or acronyms from your business glossary. This ensures AI correctly identifies and categorizes key terms.

### 10. **Write for humans first**

* **Conversational tone**: AI tends to perform better with content that is written in a human-friendly tone, as it improves engagement and contextual understanding.
* **Natural language**: Use natural, everyday language. Avoid jargon or overly complex terms unless absolutely necessary, and provide definitions for technical terms.

### 11. **Monitor AI-generated content**

**Review and revise**: If you're using AI tools like AI writers or content generators, always review the output to ensure it meets your quality standards and reads naturally.

---

#### Recommendations for optimizing your experience as a contributor with Eddy AI

Writing documentation that is easily understood by AI (Eddy AI) involves incorporating clear language, structured formatting, and adherence to specific guidelines.

1. **Use clear and focused language**

   Express ideas in a straightforward manner, avoiding unnecessary complexity.

   Break down complex concepts into simpler, digestible parts.

   Define technical terms or provide links to detailed explanations.
2. **Structured formatting**

   Use clear headings and subheadings to organize information.

   Employ bullet points and numbered lists to present step-by-step instructions.

   Highlight key points using bold or italics for better parsing by bots.
3. **Consistent terminology**

   Maintain consistency in the use of terminology to facilitate understanding.

   Use the Glossary feature in Document360 to achieve this.

   Avoid ambiguity by using specific and standardized terms.
4. **Avoid jargon overload**

   Minimize the use of industry-specific jargon unless essential.

   If technical terms are necessary, provide brief explanations or context.
5. **Elaborative text content**

   Elaborate the content and clearly specify the content's intent.

   If you use multimedia content, ensure that you provide a text explanation of what the media is trying to convey.

   Break down information into shorter paragraphs for better readability.

   Provide explicit answers to questions in the form of FAQs to minimize inaccurate answers by "Eddy AI." AI bots tend to hallucinate when the content is not elaborate or explicitly mentioned.
6. **Provide context and example**

   Offer real-world examples to illustrate technical concepts.

   Provide context to help the reader understand the purpose and application of the information.
7. **Use descriptive headings**

   Craft descriptive headings that accurately represent the content.

   Headings should act as a guide, summarizing the content beneath.

   Avoid repetitive heading text in the same article.
8. **Test with "Eddy AI"**

   Utilize "Eddy AI" to analyze your content for clarity and coherence.

   Make adjustments based on feedback from these tools.

By implementing these recommendations, you can create and manage documentation that is not only comprehensible to humans but also easily processed and understood by AI and NLP bots like "Eddy AI".

<a id="prompt-engineering-tips"></a>

## Prompt engineering tips

In Document360, Eddy AI provides various AI-driven functionalities that help streamline content creation and enhance the overall knowledge base experience. Leveraging prompt engineering with Eddy AI can improve accuracy, efficiency, and relevance in generating content tailored to your needs. This guide will help you make the most of Eddy AI’s capabilities when interacting with your knowledge base.

---

## Best practices for prompt engineering with Eddy AI

**1. Be clear and specific in your prompts**

When working with Eddy AI, the more precise your instructions, the better. For example, instead of asking for a “brief summary,” be specific about what you want, such as, “Generate a 100-word summary about the benefits of Document360’s knowledge base.”

If your content involves complex technical details, break it into smaller, more manageable requests. This helps Eddy AI deliver focused, relevant outputs.

**2. Ask for step-by-step instructions**

Eddy AI can be very effective in generating procedural content when you clearly specify the task. Instead of just saying, "Explain how to publish an article," a more refined prompt would be, "List the steps to publish an article in Document360, including where to click and how to configure settings."

**3. Structure your prompts for comparisons**

Structure your prompt accordingly if you need content that compares features or options. For example, “Compare the key differences between Document360’s private and public knowledge base setups” will guide Eddy AI to focus on generating a detailed comparison.

**4. Focus on article summaries**

When summarizing articles, especially longer ones, ask Eddy AI to create summaries based on specific sections or categories. For instance, “Summarize the benefits and limitations section of the article on Document360’s multi-language support.” This will help generate more concise and useful summaries.

**5. Include context for recommendations**

Context is critical when asking Eddy AI to generate recommendations or suggestions. For example, instead of saying, “Recommend improvements,” you could say, “Recommend improvements to the onboarding process in a knowledge base article for new users.”

---

#### **Recommendations for optimizing your experience as a reader with Eddy AI**

1. **Converse naturally**

   **Why**: Speak to "Eddy AI" as you would to a human.

   Example: Instead of "Search for articles on templates," try "Eddy AI, find me articles explaining Document360 templates."
2. **Provide detailed context**

   **Why**: Enhance understanding by setting the stage and providing context.

   **Example**: Instead of "Errors in the documentation," try "Eddy AI, help me identify and resolve errors in the Document360 user guide."
3. **Customize persona**

   **Why**: Instruct "Eddy AI" to adopt a specific identity for personalized responses.

   **Example**: Instead of "Search for software updates," try "Eddy AI, imagine you're our IT expert and update me on the latest software changes."
4. **Embrace creativity**

   **Why**: Encourage experimentation and creativity in your queries.

   **Example**: Instead of a standard search like "Knowledge base structure," try "Eddy AI, let's play! Imagine you're a content strategist and suggest an ideal knowledge base structure."

By following these recommendations, you harness the power of Eddy AI’s capabilities and make your interactions more engaging and tailored to your specific needs. Feel free to experiment, instruct Eddy AI creatively, and watch as your queries yield more insightful and personalized results.

---

## Tips for enhancing knowledge base articles with Eddy AI

**1. Use Eddy AI for content categorization**

When organizing content, ask Eddy AI to help categorize or label articles. For example, “Suggest categories for an article that discusses API integration and customization in Document360.” This will help streamline your knowledge base’s structure.

**2. Generate error message documentation**

If your knowledge base deals with troubleshooting or technical content, you can ask Eddy AI to document common error messages. For example, “Generate explanations for common error messages users may encounter when integrating third-party tools in Document360.”

**3. Request best practices**

Eddy AI can also assist in compiling best practices. For instance, you can ask, “List best practices for writing comprehensive how-to articles for a knowledge base aimed at developers.”

**4. Create troubleshooting guides**

Suppose your knowledge base includes a troubleshooting section. In that case, you can instruct Eddy AI to generate content like, “Create a troubleshooting guide for resolving common login issues in Document360,” which ensures the AI focuses on step-by-step solutions.

---

## Use cases

Eddy AI is a versatile tool that can streamline content creation across various industries, whether you’re building an LMS, maintaining a customer support knowledge base, or generating compliance documentation. By tailoring prompts to your specific needs, you can harness the full potential of Eddy AI to improve efficiency, accuracy, and engagement across your platform.

### 1. Building a Learning Management System (LMS) with Eddy AI

**Course creation and structuring**

* **Outline generation:** You can use Eddy AI to quickly generate course outlines by specifying your learning objectives. For example, ask Eddy AI, “Create an outline for a beginner’s course on cloud computing,” and it will draft a structured plan with topics and subtopics.
* **Content segmentation:** For educational materials, Eddy AI can divide long-form content into smaller, digestible modules. For instance, “Split this article on cybersecurity fundamentals into 5 lessons, each with a title and brief summary.”
* **Quiz and FAQ generation:** Request, “Generate quiz questions for each module in a cloud computing course,” or “Create FAQs for the module on cloud security,” and Eddy AI will produce interactive learning assessments and clarification points.

**Enhancing user engagement**

* **Adaptive learning paths:** Based on learner performance, you can ask Eddy AI to recommend follow-up content. For example, “Suggest advanced articles for learners who have completed the beginner’s cloud computing course.”
* **Knowledge retention aids:** Eddy AI can help create summaries and quick revision guides. You might ask, “Generate a revision guide summarizing the key points of the data privacy module.”

---

### 2. Streamlining content for customer support knowledge base

In customer support, having a well-structured knowledge base is essential for quick and effective problem resolution. Eddy AI can assist by creating and organizing relevant content for customer support teams and self-service portals.

**Creating troubleshooting guides**

* You can prompt Eddy AI with specific support cases like, “Generate a step-by-step troubleshooting guide for common login issues in an e-commerce platform.”
* For technical support, ask for explanations on error messages. For example, “Create documentation explaining the causes and fixes for error code 403 in web hosting.”

**Organizing FAQs for support agents**

* Use Eddy AI to generate frequently asked questions based on customer interactions. For example, “Create a list of FAQs for common billing issues faced by customers on our platform.”
* It can also assist in updating existing FAQs by analyzing new data or customer queries. Ask, “Update our current FAQ section with recent questions about product integration.”

---

### 3. Accelerating compliance documentation in regulated industries

For industries like healthcare, finance, or manufacturing, maintaining up-to-date compliance documentation is crucial. Eddy AI can simplify the creation and maintenance of this content.

**Generating compliance checklists**

* Ask Eddy AI to generate specific checklists based on industry standards. For instance, “Generate a checklist of mandatory compliance requirements for healthcare data privacy regulations (HIPAA).”
* Compliance content often requires updates. Eddy AI can help with prompts like, “Update the checklist with the latest changes to GDPR regulations.”

**Creating Standard Operating Procedures (SOPs)**

* In regulated environments, SOPs need to be clear and detailed. Eddy AI can assist in drafting these. You could ask, “Draft a Standard Operating Procedure for handling customer data in compliance with GDPR.”

---

### 4. Supporting product development documentation in tech companies

Maintaining up-to-date product documentation is key to smooth operations and customer satisfaction for software and tech companies. Eddy AI can help streamline the process.

**API documentation**

* Ask Eddy AI to generate API usage examples or explanations. For example, “Generate a step-by-step guide on how to integrate our API with third-party services.”
* It can also assist with documentation updates. You can request, “Update the API documentation to reflect the changes in the latest version.”

**Release notes and feature documentation**

* With new product updates, use Eddy AI to create concise release notes. For instance, “Generate release notes for version 4.2 of our software, highlighting the new features and bug fixes.”
* It can also help generate user guides for new features. For example, “Create a user guide for the new reporting dashboard feature in our SaaS platform.”

---

### 5. Automating knowledge base content for retail and E-commerce

In retail and e-commerce, a comprehensive knowledge base is critical for ensuring smooth customer support and product understanding. Eddy AI can help keep your content updated and relevant.

**Product documentation**

* Use Eddy AI to automatically generate product guides. For instance, “Create a product guide for a smart home security system, covering setup, troubleshooting, and usage tips.”
* It can also generate comparison content. Ask, “Compare the features of three smart home security systems available on our platform.”

**Order and return procedures**

* Create customer-facing content that simplifies processes. For example, ask, “Generate a step-by-step guide for returning a product purchased on our e-commerce site.”

---

### FAQs

**How can I ensure Eddy AI gives me specific content?**

Be as detailed as possible in your prompt. If you're asking for an explanation, specify the length, tone, and focus. For example, “Provide a formal, 200-word explanation of how to create custom categories in Document360.”

**What should I do if the output is too broad?**

Rephrase the prompt to narrow the focus. Break down the request into smaller steps, such as “Generate a summary of Document360’s version control feature,” followed by “List the key benefits of version control in a knowledge base system.”

**Can Eddy AI assist with writing FAQs based on my content?**

Yes, you can request FAQs based on specific sections or topics. For instance, ask, “Generate FAQs related to article categorization and tagging in Document360.”

**How can I use Eddy AI to create technical content?**

For technical content, make sure your prompts include relevant technical details. For example, “Generate a step-by-step guide for integrating Google Analytics with Document360’s knowledge base.”

<a id="drive"></a>

## File management

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 Drive is a centralized, cloud-based storage solution designed to help Document360 customers store, organize, and manage files efficiently.

> NOTE
>
> Plan storage limits are as follows:
>
> * **Free:** 1 GB
> * **Professional:** 50 GB
> * **Business:** 100 GB
> * **Enterprise:** 500 GB

## Document360 Drive

Document360 Drive is a centralized, cloud-based storage repository designed for Document360 customers. It allows you to store and manage all your files efficiently, ensuring easy access and seamless collaboration across your team.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Document360_drive_overview.png "image(134).png")

To access the Document360 drive, click the Drive () icon on the left navigation bar.

### Drive management features

1. [Adding folders and files](/help/docs/adding-folders-and-files)
2. [Folder actions in Drive](/help/docs/folder-actions-in-drive)
3. [File actions in Drive](/help/docs/file-actions-in-drive)
4. [All files overview](/help/docs/all-content-overview)
5. [Recent, Starred, and Recycle bin files](/help/docs/recycle-bin-recent-and-starred-files)

<a id="adding-folders-and-files"></a>

## Adding folders and files

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 Drive enables you to create and manage folders and subfolders, ensuring that your file structure aligns with your Knowledge base categories for better navigation and accessibility. This article will walk you through the steps to manage system folders, add new folders, subfolders, and files, making your document management more organized and intuitive.

---

## System folders

Every Document360 project includes **System folders**, which are built-in folders that come by default. These folders are essential for the core functionality of your project and cannot be deleted, moved, reordered, or renamed. However, users can perform certain actions within these folders, including adding files or setting a default folder.

When you navigate to the **Drive** page, you will see a category tree on the left navigation pane listing all your files and folders. System folders are easily identifiable by the **shield icon** next to their name.

> NOTE
>
> While files within system folders can be deleted (though not recommended), the folders themselves have several restrictions.

For example, **Images** is a system folder which contains subfolders such as Home page builder, Settings, Documentation, and Glossary.

![Drive interface displaying system folders like Settings, Documentation, and Home page builder.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-System_folders_in_Drive.png)

### Folder actions

#### Restricted actions

* **Delete**: System folders cannot be deleted.
* **Move/Reorder/Rename**: You cannot move, reorder, or rename system folders.

#### Allowed actions

* **Add Files/Folder**: You can freely add files or create new subfolders within system folders.
* **Change color**: Customize folder colors to help visually organize your Drive.
* **Set default folder**: You can set any system folder as the default for easy access.

![Document360 interface showing file management options and folder structure in the drive.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-More_options_in_system_folder.png)

---

## Adding a new folder

Here are the methods to create a new folder in your Drive.

**Method 1:** Using the ‘New folder’ option  
**Method 2:** Using the ‘+’ option

Method 1

Method 2

### Using the '+' option

Use the Folder Manager navigation pane on the left to add a root-level folder. This process is similar to adding a category using the "Category Manager" in the Documentation section.

1. Navigate to **Drive** () from the left menu in the knowledge base portal.

   Existing Folders and Subfolders will be displayed in a tree-view style on the left navigation pane.
2. In the left navigation bar, hover the mouse pointer over the space between the folders until the **Flywheel** (**+)** icon appears.
3. Click the **+** icon, and a **New folder** popup will appear.
4. Enter the desired folder name.
5. The default location is 'Root level.' You can add a new root-level folder from anywhere in the Drive using the folder location dropdown and clicking on the **Reset** option.
6. Click **Create**.

![Creating a new folder named 'Artifacts related to Release notes' in the drive.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Adding_a_new_folder_using_flywheel_icon.png)

### Using the 'New folder' option

1. Navigate to **Drive** () from the left menu in the knowledge base portal.

   Existing Folders and Subfolders will be displayed in a tree-view style on the left navigation pane.
2. Click the **New folder** option on the top left.

   A **New folder** popup will appear.
3. Enter the **Folder name**.
4. The folder location is 'Root level' by default.

   Using the **Folder location** dropdown, you can select the desired folder.
5. Click **Create**.

![Creating a new folder named 'Artifacts related to Release notes' in Document360.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Adding_a_new_folder_using_New_folder_option.png)

> PRO TIP
>
> When you create folders for your knowledge base s, it is easier to navigate and maintain if the folders are in-sync with the Category and Subcategory of your knowledge base.

---

## Adding subfolders

You can add subfolders once you have more than one root-level folder.

**Method 1:** Using the ‘More’ option  
**Method 2:** Using the ‘+’ option

Method 1

Method 2

### Using the 'More' option

1. Navigate to **Drive** () from the left menu in the knowledge base portal.

   Existing Folders and Subfolders will be displayed in a tree-view style on the left navigation pane.
2. Click the More () icon next to the folder, select **Add folder**.

   The **New folder** popup appears.
3. Enter the **Folder name**.
4. The folder location by default is the folder you click on the More () icon.

   You can add a subfolder anywhere in the Drive using the location dropdown.
5. Click **Create**.

![Creating a new folder named 'AI Writer artifacts' in the document management system.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Adding_a_subfolder_using_More_option.png)

### Using the '+' option

1. Navigate to **Drive** () from the left menu in the knowledge base portal.

   Existing Folders and Subfolders will be displayed in a tree-view style on the left navigation pane.
2. In the left navigation bar, hover the mouse pointer over the space between the folders until the '+' icon appears.
3. Click the '**+**' icon.

   A **New folder** popup will appear.
4. Enter the desired folder name.

   The default location is the folder where you clicked the '+' icon.

   Using the location dropdown, you can add a subfolder from anywhere in the Drive.
5. Click **Create**.

![Creating a new folder named 'Artifacts related to Release notes' in the drive.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Adding_a_new_folder_using_flywheel_icon.png)

> NOTE
>
> Ensure the root level folder is expanded (The arrow on the left side of the folder points downwards); if not, a new folder will be created at the same level.

> **CAUTION**
>
> Deleting a root-level folder in the Drive also deletes its subfolders and files. This can cause broken images and file links in articles referencing any deleted file.

---

## Adding files

You can add files to folders in drive using two methods:

**Method 1:** Using drag and drop in Empty folders  
**Method 2:** Using the 'More' option

Method 1

Method 2

### Using drag and drop in Empty folders

You can add individual or multiple files to folders or subfolders using the drag and drop feature. If your folder is empty, you can use the drag and drop area in the center or click the **Upload** button.

1. Drag one or more files from your device's local storage and drop them into the designated area.

   Alternatively, click the **Upload from my device** button and use the file explorer to select your files.
2. Specify the **Folder location** where you will store the files.

   The Folder that is selected in the Folder manager is set as the default location for file upload.
3. Upon completing the selection of images, in the **Tags** field, you can select pre-existing tags or choose to create tags, which will be saved to the available list of tags.
4. If a single image is being uploaded, define the **Alt-text**, and if multiple images are being uploaded, define the **Common alt-text** for the set of images selected for upload.
5. Click **Upload** to confirm.

![Adding files using the local file explorer option in the Drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Adding_files_drag_and_drop.gif)

### Using the 'More' option

To add files to a subfolder, use the left navigation pane:

1. Click the **More** () icon next to the folder.
2. Select the **Add file** option.
3. You can upload your files in two ways:

   1. Click **Upload from my device** and select your files from local file explorer.
   2. Drag and drop the desired file.
4. Add **Tags** and **Common alt text** if required.
5. Click **Upload**.

![Adding files using the More icon in the Drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGIF-Adding_files_using_more_option.gif)

> NOTE
>
> * File names should not contain the characters +, %, #, or =.
> * You can view the list of acceptable file formats in the bottom left. To know more about acceptable formats, read [How can I add file type restrictions](/help/docs/adding-folders-and-files#how-can-i-add-file-type-restrictions)?
> * When uploading multiple images, you can add both tags and alt text. However, if you upload a combination of images and other file formats, or if you upload only file formats other than images, you can only add tags. Both Tags and Alt text fields are optional fields.

---

## File limits and file type restrictions

The file limits and file type restrictions are as follows:

* Each folder can contain up to 5000 files.
* Subfolders are treated as separate folders.
* **Single file upload**: The maximum file size is 150MB per file.
* **Multiple files upload**: The maximum combined size of all selected files is 160MB.

### Adding file type restrictions

You can restrict the file types you and other team members can upload. For example, if you want to restrict uploads to only .png files, follow these steps:

1. Navigate to **Settings**() > **Knowledge base portal** > **General** > **Drive settings**.

   By default, the **Allow all media types** option is selected.
2. Click **Choose allowed media formats** and click **Add**.
3. Enter the **Media type** and **Extension** fields.

   > NOTE
   >
   > * **Media type** - Type in the media you want to restrict. You must enter the following format: `media type/extension`. Refer the [basic media format types](https://en.wikipedia.org/wiki/Media_type#Common_examples_%5B10%5D) for better understanding
   > * **Extension** - Type in the extension type. This is a case-sensitive field. Ensure that you enter the lowercase alphabet in this field. (For example, .png, .svg, .jpg)
4. Click **Add media type** to add the more allowed file formats.
5. Click **Save** to confirm.

![Adding file restrictions to the project](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenGIF-Adding_file_type_restrictions.gif)

## Troubleshooting

### **Folder file limit reached**

**Error:** This folder has reached its maximum file limit. Please upload your file(s) to another folder.

This error occurs when a folder exceeds the **5000-file limit** in Document360 Drive. This includes:

* Files uploaded directly into a folder.
* Images copied and pasted into the article editor, which are automatically saved in the default folder by **Set default folder**.
* Images from imported **Docx files**, which are stored in the **default folder** on the drive.

**Steps to resolve:**

* Upload new files to a **different folder** or change the default folder on the drive.
* Remove **unused files** from the current folder to free up space.
* If the issue persists, **clear the browser cache** and try again.

![Folder storage limit reached notification in Document360 interface with file list displayed.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Troubleshooting_Folder_files_limit_reached.png)

---

### FAQs

#### What is alt text in Document360 Drive and how is it used?

Alt text (alternative text) in Document360 Drive is a brief description of an image's content. It is used primarily for accessibility purposes, helping visually impaired users understand the context of images embedded in articles. Alt text should be descriptive yet concise, providing meaningful information about the image.

* Specify alt text for each image to ensure accessibility compliance and improve user experience.
* Alt text can be set during the upload process or edited later through image properties in Document360 Drive.
* Each alt text can be up to 140 characters long.

#### Why are certain files and images not uploading to Google Drive and showing a 'File type not supported' error?

This may be due to file type restrictions. To check and adjust the allowed file formats, follow these steps:

1. Navigate to **Settings** ()> **Knowledge base portal**> **General** > **Drive settings** in the Knowledge base portal.

   By default, the **Allow all media types option** is selected.
2. If this option is enabled, try re-uploading your files or images.
3. If specific file formats are selected to restrict, you must remove these restrictions to upload your desired files.

> NOTE
>
> Ensure that file names in uploaded files do not include the characters **+**, **%**, **#**, or **=**."

A centralized, cloud-based storage repository in Document360 for storing and managing all files.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

A secondary folder in the Document360 drive that is created within a primary folder to further organize files and content.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

A secondary folder in the Document360 drive that is created within a primary folder to further organize files and content.

Organizes related articles under a common theme in the knowledge base.

A secondary category in Document360 used to organize and display groups of related articles. Subcategories act as folders within a primary category, helping structure similar topics for better organization and navigation.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

A secondary folder in the Document360 drive that is created within a primary folder to further organize files and content.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

A secondary folder in the Document360 drive that is created within a primary folder to further organize files and content.

<a id="folder-actions-in-drive"></a>

## Folder actions in Drive

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can organize your files efficiently using folders and subfolders. You can manage individual folders or use bulk actions to handle multiple folders at once, making it easier to maintain and retrieve your knowledge base assets.

> NOTE
>
> For effective file management, it is recommended to organize your folders and subfolders similarly to your documentation categories and subcategories. This ensures that storing, maintaining, and retrieving files is straightforward and intuitive.

---

## Setting a folder as Default folder

To set a folder as a Default folder, follow the below steps:

1. Click the Drive () icon on the left navigation sidebar.
2. Click on any folder from the left navigation pane.
3. Click the More () icon next to the desired folder and then click the **Set default folder** option.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Default_folder.png)

* The selected folder will be set as the default folder on a project level.
* Once done, you will get a popup saying *Editor folder updated*.
* The **Default folder** on the Drive can be identified by the Edit () icon that appears next to the folder icon.

  > NOTE
  >
  > + If a category has already been mapped to a Drive folder, the mapped Drive folder setting is chosen over the Default folder. All the images added to any article in that category are uploaded to the mapped Drive folder.
  > + But if the category is not mapped to any Drive folder, the images added directly would be saved in the Default folder.

---

## Renaming a folder

You can change or update the existing name of a folder or a subfolder.

1. Click the Drive () icon on the left navigation sidebar.
2. You can view the existing Folders and Subfolders in tree-view style on the left navigation pane.
3. Click the More () icon next to the desired folder.
4. Click **Rename**.
5. Enter the new name and click the **Rename** button.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Rename_drive.png)

   > NOTE
   >
   > You cannot rename a **System folder**.

---

## Moving a folder

You can move your folders and subfolders within the Drive.

> NOTE
>
> You cannot move a **System folder** in the Drive.

There are two ways to execute the **Move** function.

### Using the More option

1. Click the Drive () icon on the left navigation sidebar.
2. Hover over the folder you want to move and click the **More (****)** icon.
3. Select **Move**.

   Alternatively:

   1. Select one or more folders by checking the boxes next to their names.
   2. Click the **Move** option that appears above the list.
4. In the **Move files** window, select the destination folder.
5. Use the search field to quickly find the destination folder by typing keywords.
6. Click **Move**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Moving_drive_folder.gif)

The category with its subfolder and files will be moved to the new location.

### Using drag and drop

You can also use the left navigation panel to move your folders into other main folders and subfolders.

1. Click and hold the folder you want to move.
2. Drag the folder to the desired location on the left navigation pane.
3. Drop the folder onto another folder to move it inside.

![54_Screenshot-Drive-Moving_drag_and_drop_moving](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729155724024.png)

---

## Starred folders

You can add your main folder or subfolder as a Starred entity. This means the folder marked as starred appears when you click on the **Starred** option on the left navigation pane, irrespective of the folder’s location in the Drive.

1. Click the Drive () icon on the left navigation sidebar.
2. Hover over the desired folder and click the star (☆) icon.

   The starred folders will be indicated with a star (★) icon next to the folder name.
3. Click on the "★" icon next to the folder name to remove the folder from the **Starred** list of folders.

   You can perform the same action from the "Starred" overview folder.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Starred_drive_folders.png)

---

## Change folder color

You can change the folder color to any given or custom color. This is handy when you want to differentiate one folder from another or color-code it. The default folder color is Gray.

1. Hover over the desired folder on the left navigation pane and click the More () icon.
2. Click **Change color**.

   You can choose from the color palette with all the most common colors. If you want to add any custom color, enter the required Hex code or use the color picker.

![32_Screenshot-Drive_Folder_actions-Change_folder_color](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/32_Screenshot-Drive_Folder_actions-Change_folder_color.png)

---

## Removing or deleting a folder

You can remove or delete folders and subfolders from the Drive using the Remove and Delete options.

1. Click the Drive () icon on the left navigation sidebar.
2. Click the More () icon next to the desired folder.
3. Click **Remove**.

   Alternatively:

   Select the checkbox of the desired folder and the **Remove** option will appear above the folder list.
4. Click **Remove**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Remove_drive_folder.png)
5. A **Delete** confirmation prompt will appear.
6. Click **Yes**.

> NOTE
>
> * Once deleted, all the corresponding reference links of the media files will be broken. Please note that clearing the CDN cache will take up to 1 minute.
> * You cannot remove or delete the System folders. You can identify these folders by the shield symbol on the folder icon.
> * If you have accidentally removed or deleted any folder from the Drive, you can always retrieve it from the **Recycle bin** (up to 30 days from deletion) of the Drive.

---

## Bulk folder actions

You can perform different actions on more than one folder at a time. This saves time when you want to perform these actions for a larger number of folders in your Drive.

1. Click the Drive () icon on the left navigation sidebar.
2. Select one or more folders (in list view and grid view) from the list of folders.

   At the top, you can view the bulk actions possible:

   * **Move**: Relocate the selected folders to another folder.
   * **Copy**: Create a copy of the folders.
   * **Add tags**: Organize folders with tags for better categorization.
   * **Download**: Download the selected folders to your local storage.
   * **Remove**: Delete the folders and move them to the Recycle bin.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Bulk_folder_action.png)

---

## Folder breadcrumb

The folder **Breadcrumb** at the top of the Drive window helps you navigate within the folder hierarchy. It shows the path from the root directory to the current folder you’re viewing.

Click on any level of the breadcrumb to navigate back to that folder.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729167349844.png)

---

### FAQ

#### What happens if I click on the Set default folder option for a folder that is already set as the default?

A drive folder can be set as the default multiple times. If you select the **Set default folder** option for a folder that is already the default, no changes will be made.

#### What happens when I change the name, copy, move, or reorder a folder?

Changing the name, copying, moving, or reordering a folder does not affect the file URLs of the files within it keeping the images linked to articles intact.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

<a id="file-actions-in-drive"></a>

## File actions in Drive

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Performing file actions in Drive

To manage files in Document360 Drive, follow these steps:

1. Navigate to **Drive** () from the left menu in the knowledge base portal.
2. Click the desired folder in which the required file is available.
3. Click the list view/grid view () icon on the top right of the **Drive** page.

   * **List view:** Click the **More** () icon next to the file name.

     By default, the list style appears. You can view the files along with information such as name, dependencies, updated on, updated by, file size, and tags. It is visible in columns only when the view is in List style. You can adjust the length of each of the columns containing file information.

     ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Drive page - List view(1).png "Drive page - List view(1).png")
   * **Grid View:** Hover over the file and click **More** and select the file action.

     Alternatively, hover over the file(s) and select the checkbox to view the file actions, such as actions **Move**, **Copy**, **Add tags**, **Download**, and **Remove** at the top menu.

     ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Drive page - Grid view(2).png "Drive page - Grid view(2).png")

---

### Move

You can **move** files between folders without changing its link structure. This is similar to performing cut and paste action.

1. Select the required file in your drive.
2. Click **Move** in the top menu bar.

   The **Move files** popup window appears.
3. Select the desired folder by searching the destination folder in the search bar or by navigating to the desired folder manually from the list.
4. Click **Move**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - Move.png "File actions in Drive - Move.png")

   > NOTE
   >
   > The image link does not change when it is moved from one folder to the other folder in Drive. This helps the images linked to the articles stay intact.
   >
   > `https://cdn.document360.io/project-id/Images/Documentation/image name.image_type`

---

### Copy

You can duplicate the file in another destination folder. This is similar to performing copy and paste action.

1. Select the required file in your drive.
2. Click **Copy** in the top menu bar.

   The **Copy files** popup window appears.
3. Select the desired folder by searching the destination folder in the search bar or by navigating to the desired folder manually from the list.
4. Click **Copy**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - Copy.png "File actions in Drive - Copy.png")

---

### Add tags and alt-text

You can add tags and alt-text to your file for easy discoverability and grouping. The article tags and file tags are from the same tag library. Adding tags makes it easier for you to identify or search and retrieve a particular set of files.

1. Select the required file in your drive.
2. Click **Add tags**, in the top menu bar.

   The **File details** blade appears.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - Add tags & alt-text(1).png "File actions in Drive - Add tags & alt-text(1).png")
3. Add the tags in the **Tags** field.
4. Add the alternative text in the **Alt text** field.
5. Click **Update**.

You can also add tags to multiple files simultaneously.

1. Selecting the required files from the drive.
2. Click **Add tags** in the top menu.

   The **Add tags** pop-up window appears.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - Add tags - multiple files(2).png "File actions in Drive - Add tags - multiple files(2).png")
3. In the **Tags** field, enter the relevant tags.

   You can either add existing tags or create new tags.
4. Click **Add**.

---

### View details

To view and manage file details, click the **More** () icon next to the file name and select **View details** from the dropdown menu. This will open the **File details** blade, where you can view a thumbnail of the file and access various actions such as move, copy, replace, download, and delete, which are available through icons located below the thumbnail.

Additionally, you can view important file information, including the file's location, size, type, uploaded date, and the name of the user who uploaded the file. You can also view and edit the tags associated with the file, as well as the alt text for image files.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - View details.png "File actions in Drive - View details.png")

---

### View file dependencies

**File dependency** indicates the number of instances a particular file has been added/attached to articles/category pages in the knowledge base.

1. Navigate to the Drive (  ) icon in the **Knowledge base portal**.
2. Browse through the folders to locate the intended file.
3. In the Dependencies column, click on the number (e.g., 6) displayed next to the file. This number represents the count of related areas with dependencies.

   * **Files with Dependencies**: If a file has dependencies, the Dependencies field will show the number of dependencies.
   * **Files without Dependencies**: If a file has no dependencies, the Dependencies field will be indicated by a '-'.

   Be cautious when handling folders, as they may contain files with dependencies. Always review individual file dependencies before making changes to a folder.
4. Upon clicking the number, the **File dependencies** panel will appear. This panel provides information about the file's associations in various areas, such as Articles, KB Customization, and Content Reuse.
5. In **Articles**, expand the listed articles to view details such as the article status, article version, Open site () icon, team account, and date.
6. In **KB Customization**, the homepage details associated with the file will be displayed.
7. In **Content reuse**, expand the desired content tool, and you can view the languages and the content reuse (variable, snippet, glossary) name.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/File actions in Drive - File dependencies(1).png "File actions in Drive - File dependencies(1).png")

To identify files with or without dependencies in your drive,

1. Click the **Filter** () in the top right corner.
2. Expand the **Dependencies** tab and choose the necessary option to filter the files based on filtering options.
3. Click **Apply** to view your desired results.   
   This will help to keep the drive free from outdated images or files with no dependencies.

   ![Image showing dependencies filter in drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1735730861622.png)

---

### Download

You can download single or multiple files from the drive to your local storage.

1. Select the file(s) you want to download.
2. Click the **Download** button on the top menu bar. The file(s) will be downloaded as a .zip file.

Alternatively, you can download a file from its details page:

1. Open the **File details** blade.
2. Click the **Download** () icon. The selected file will be downloaded as a .zip file.

Alternatively, click the **More** () icon next to the file name and select **Download** from the dropdown menu. The specific file will be downloaded as a .zip file.

---

### Remove

You can delete single or multiple files from the drive to your local storage.

1. Select the file(s) you want to delete.
2. Click the **Remove** button on the top menu bar. The file(s) will be moved to the Recycle bin folder.

Alternatively, you can delete a file from its details page:

1. Open the **File details** blade.
2. Click the **Remove** () icon. The selected file will be moved to the Recycle bin folder.

Alternatively, click the **More** () icon next to the file name and select **Remove** from the dropdown menu. The specific file will be moved to the Recycle bin folder.

> NOTE
>
> Once deleted, all corresponding media file reference links will be broken, and the CDN cache will be cleared shortly.
>
> You can choose to retrieve files from the recycle bin in case of accidental deletion.

---

### Replace

You can update a file by replacing it with another file of the same type. This allows you to update your files without changing the file name or URL. This helps in retaining the file path in any locations where the file is used without breaking the links. The file change will be updated in the article within 20 minutes.

![15_Screenshot-File_actions_in_Drive_File_replace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731493359282.png)

#### Method 1

1. Click the Drive () icon on the left navigation sidebar.
2. Navigate to the folder where the file you want to replace is located.
3. Hover over the desired file and click the More () icon.
4. Click **Replace**.

   Your local file manager will open.
5. Select the new file to replace the existing one and click **Open**.

   The new file will be updated in the Drive.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-File_replacement.png)

#### Method 2

1. Click the Drive () icon on the left navigation sidebar.
2. Navigate to the folder where the file you want to replace is located.
3. Hover over the desired file and click the More () icon.
4. Click **View details**.
5. A **File details** blade will open on the right side of the window.
6. Click the Replace () icon.
7. On the **Replace file** popup, click **Replace file**.

   Your local file manager will open.
8. Select the new file to replace the existing one and click **Open**.

   The new file will be updated in the Drive.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-File_replacement.gif)

> NOTE
>
> When a file is replaced on the Drive, the old file content is overwritten. The old file content cannot be restored in any way possible (unless there is an offline backup of the same file). Unlike the deleted files, the overwritten files are not available in the Recycle bin of the Drive to restore.

---

## Troubleshooting

### Resolving file replacement error

**Error**: You can’t replace files with a different style type.

This error occurs when you try to replace a file with another file of a different type, which is not allowed. For instance, if you are trying to replace a jpg file with a pdf file, you might encounter this error.

**Steps to resolve**:

1. **Verify file types:**

   1. Navigate to **Drive ()** in the **Knowledge base portal**.
   2. Click the **More** () icon to view the file details and click **Replace.**
   3. Ensure the selected and destination files are of the same type.

2. **Clear your browser cache:**

   1. After confirming the file types, clear your browser cache and try again.
   2. Use the steps below based on your browser:

      * Google Chrome: Click on **Menu** () > **Settings** > **Privacy and security** > **Clear browsing data**.
      * Mozilla Firefox: Click on **Menu** ()  > **Settings** > **Privacy & Security** > **Clear Data**.
      * Microsoft Edge: Click on **Menu** ()  > **Settings** > **Privacy, search, and services** > **Choose what to clear**.
      * Safari (Mac): Go to **Safari** > **Preferences** > **Privacy** > **Manage Website Data** > **Remove All**.
      * Safari (iPhone/iPad): **Settings** > **Safari** > **Clear History and Website Data**.
      * Opera: **Menu** > **Settings** > **Advanced** > **Privacy & Security** > **Clear browsing data**.

        > NOTE
        >
        > It may take some time for the updated settings to take effect.

3. **Test in different environments:**

   1. Open the file replacement workflow in an incognito window.
   2. Try the process in different browsers to confirm the issue is resolved.

4. If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

   Provide the following details:

   * Screenshots of the error message.
   * Details of the affected files.
   * A HAR file for further analysis.

---

### FAQs

#### Is there a way to see the file's history or previous versions before replacing it?

Currently, Document360 does not provide version history of files in the Drive. It's recommended to keep backups of important files before making replacements.

#### What happens to the old file after I replace it?

The old file's content is permanently overwritten and cannot be restored. Make sure to back up important files before replacing them.

A folder in the Document360 drive where deleted files and folders are temporarily stored. It allows users to recover accidentally deleted items if needed. Deleted items are stored for 30 days before they are deleted permanently.

A folder in the Document360 drive where deleted files and folders are temporarily stored. It allows users to recover accidentally deleted items if needed. Deleted items are stored for 30 days before they are deleted permanently.

A folder in the Document360 drive where deleted files and folders are temporarily stored. It allows users to recover accidentally deleted items if needed. Deleted items are stored for 30 days before they are deleted permanently.

A centralized, cloud-based storage repository in Document360 for storing and managing all files.

A folder in the Document360 drive where deleted files and folders are temporarily stored. It allows users to recover accidentally deleted items if needed. Deleted items are stored for 30 days before they are deleted permanently.

<a id="all-content-overview"></a>

## All files overview

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **All Files** overview page in Document360 Drive compiles all the files in your project in one place. This feature is particularly helpful for performing bulk operations, allowing you to manage files across all folders and subfolders from a single location. Whether you need to move, copy, or delete files in bulk, the All Files page saves you time and effort by centralizing your file management.

## All files overview page

Navigate to Drive () > **All files** on the Knowledge base portal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Drive_all_files_page_overview.png)

The **All files** overview page will display, listing the files in your project. By default, the page shows 20 files per page. To navigate through the list of files, use the pagination buttons at the bottom of the list to move between pages.

The following options are available on the **All files** page:

* **Storage used**: You can view both the used and total available storage in your Document360 Drive. If you need additional space, you can purchase more storage by selecting the **Buy more** option.
* **Grid view**: Files and folders in Drive are displayed in list view by default. You can switch to **Grid view** to display files and folders in a grid format.
* **Filter**: Use the **Filter** option to narrow down files based on specific criteria. The following filters are available in Drive:

  + **Dependencies**: Shows files without any dependencies, meaning these files haven't been used in articles, content reuse elements, or knowledge base customizations.
  + **Uploaded**: Filters files by their upload date.
  + **Uploaded by**: Filters files by the team account that uploaded them.
  + **Type**: Filters files by their format.
  + **Tags**: Filters files by user-added tags.

### Bulk operation on files

The **All files** page allows you to perform bulk operations, streamlining file management across the entire Drive. Here's how to select files and use these operations effectively:

* Click on the checkbox next to each file to select it individually.
* To select all files on the current page (up to 20), click the **Select all** checkbox at the top of the list.

> NOTE
>
> If you want to select all files in the Drive, click **Select all {N} items**, where **N** is the total number of files in your project. This will select all files, not just the 20 displayed on the current page.

Once you have selected the files you wish to manage, you can choose from the following bulk actions:

* #### **Move**

  + Relocate selected files to any folder or subfolder, including categories.
  + Use this feature when reorganizing your Drive to keep files well-structured.
* #### **Copy**

  + Duplicate files and paste them into a different folder or subfolder in the Drive.
  + Copy files when you need the same content in multiple locations without affecting the original file.
* #### **Download**

  + Download the selected files to your local storage.
  + Use this feature to back up important files or to work on them offline.
* #### **Remove**

  + Delete files from the folder and move them to the Recycle bin (includes categories).
  + Once in the Recycle bin, files can be restored or permanently deleted.

If your project contains more than 20 files, use the pagination buttons at the bottom of the All Files page to move between pages. Here’s how to navigate:

* **Next/Previous buttons**: Click these to move forward or backward through the list of files.
* **Page numbers**: Jump to a specific page by clicking the page numbers displayed at the bottom of the file list.

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Drive_all_files_bulk_actions.png)

---

### Best practices for file management

* **Regular cleanup**: Use the **All files** page to periodically review and clean up unnecessary files. This ensures your Drive stays organized and clutter-free.
* **Use categories**: When moving or copying files, categorize them appropriately to improve searchability and file management.
* **Check dependencies**: Before removing files, verify their dependencies to ensure they are not linked to other important content.

<a id="recycle-bin-recent-and-starred-files"></a>

## Recent, Starred, and Recycle bin files

**Plans supporting the use of Drive**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Managing a large number of files and folders can sometimes lead to intentional or accidental deletions. To help recover deleted content, Document360 provides a Recycle bin. When a file or folder is deleted, it is temporarily moved to the Recycle bin, allowing users to easily restore it if needed.

> NOTE
>
> Document360 also provides a dedicated **Recycle bin** for the categories and articles deleted from your Documentation.

## Recycle bin operations

1. Click the Drive () icon on the left navigation sidebar.

   You can view the existing Folders and Subfolders in tree-view style on the left navigation pane.
2. Click **Recycle bin**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Recycle_bin.png)

> NOTE
>
> Hover over the file and click the eye () icon to view its dependencies. A blade with the list of article(s) where the file is associated will appear.

### Restore from recycle bin

#### Bulk restore

In case of accidental file/folder deletions in the Drive, follow the below steps to restore all the files and folders.

1. On the Recycle bin window, select the checkbox of the files/folders you want to restore.
2. If you wish to select all the items in the Recycle bin, check the Select all checkbox at the top (only the first 20 items will be selected).
3. To select all the files in your Recycle bin, click **Select all {N} items**, where N is the total number of files in the Recycle bin.

   This option will appear only when at least one file is selected.
4. Click **Restore**.

   The selected files/folders will be restored to their original location in the Drive.

#### Restore individual files or folder

For individual files/folders,

1. Hover over the desired file/folder and click on the More (•••) icon.
2. Click **Restore**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Restore_drive.gif)

### Permanently deleting files from the Recycle bin

If you are confident that you do not need the files/folders in the recycle bin,

1. On the Recycle bin window, select the checkbox of the desired files/folders.
2. If you wish to select all the Recycle bin items, check the Select all checkbox at the top (only 20 items will be selected).
3. To select all files, click **Select all {N} items**.
4. Click **Delete forever** located above the list of files/folders.
5. Alternatively, for individual files/folders, hover over the desired file/folder and click on the More (•••) icon next to the file/folder.
6. Click **Delete forever**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Delete_forever_drive.gif)

#### Empty recycle bin

If you want to eliminate all the files/folders in the Recycle bin in one go, click the **Empty recycle bin** button at the top right. All the files/folders will be permanently deleted from the Recycle bin.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Empty_recycle_bin.png)

> NOTE
>
> The deletion of files/folders from the **Recycle bin** is an irreversible action. Once the file/folder is removed from the Recycle bin using the **Delete forever** or the **Empty recycle bin** option, it cannot be retrieved (unless you have an offline backup of the same file/folder).

---

## Recently uploaded files and folders

The **Recent** folder in the Drive window helps you to access the latest uploaded files/folders. This is a dynamic folder populated with files and folders based on the latest addition or upload. This comes in handy as you do not have to look for the latest files uploaded into any of the folders. To access this folder,

1. Click the Drive () icon on the left navigation sidebar.
2. From the left navigation pane, click on the **Recent** folder.

   You will see the list of files/folders that are uploaded latest based on the time of upload.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Recent_drive.png)

---

## Starred folder and files

You can add your main folder or subfolder as a Starred entity. This means the folder marked as starred appears when you click on the **Starred** option on the left navigation pane, irrespective of the folder’s location in the Drive. Starred files and folders help you quickly access important content by marking them for easy reference.

1. Click the Drive () icon on the left navigation sidebar.
2. On the left navigation pane, click the **Starred** folder.

   All the files/folders that you have starred will be listed here with a star (★) icon next to the folder name.
3. Click on the star (★) icon again to remove it from the **Starred** folder.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Starred_drive_folders.png)

---

### FAQs

#### What happens to a file/folder in the Recycle bin if I do not perform any action on it?

The file/folder would be automatically deleted permanently after 30 days.

#### Can I recover permanently deleted files or folders from the Recycle Bin?

No, once files or folders are permanently deleted using the "Delete forever" option, they cannot be recovered. It’s important to be certain before selecting this option. If you need additional backups, consider creating an offline backup before permanently deleting files.

A type of category in Document360 used to organize articles without creating a separate knowledge base page.

A centralized, cloud-based storage repository in Document360 for storing and managing all files.

<a id="workflow-designer"></a>

## Workflow designer

**Plans supporting workflow designer**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A workflow in Document360 is a crucial tool designed to streamline the management of knowledge base documentation. It enables you to establish an internal business process for creating, editing, reviewing, and publishing articles or category pages.

## Why use workflow?

Workflow management facilitates collaboration among team members, including writers, editors, illustrators, and subject matter experts. Organizations can ensure consistency, accountability, and efficiency throughout the documentation cycle by implementing a structured workflow.

### Using workflow in Document360

Workflow functionality in Document360 consists of two main modules:

**1. Workflow designer**  
**2. Workflow assignments**

Here's a quick guide to using the **Workflow designer** efficiently.

---

## Workflow designer

The **workflow designer** feature helps project team members to create and maintain a step-by-step stage for any new or existing documentation. This makes collaboration easier between the writers, editors, illustrators, subject matter experts, and other project team members.

The workflow feature allows the admins or project owners to design a workflow that best suits their business requirements.

### Accessing the Workflow designer

To access the workflow designer page, follow the below steps.

Navigate to **Documentation**() > **Content tools** > **Workflow designer** in the Knowledge base portal.

You can view the existing built-in workflow (Draft – In review – Published). You can create additional workflow statuses here. You can also edit the existing statuses (including system status) and reorder/delete the custom statuses anytime.

![1-Screenshot-Accessing_the_workflow_designer.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1-Screenshot-Accessing_the_workflow_designer.png)

---

## Workflow status

A **Workflow Status** represents a checkpoint or stage in the documentation cycle within Document360. There are two types of statuses:

* **System Status**: These are predefined start and end statuses (e.g., Draft and Published) that **cannot be deleted or reordered**.
* **Custom Status**: These are user-defined statuses that offer flexibility in creation, editing, reordering, and deletion at any time. You can also turn on the **read-only** toggle for the statuses you added. This restricts the other team members from editing the article(s) or category page(s). They can only view and comment on it.

---

## Adding a new status

1. Navigate to **Documentation**() > **Content tools** > **Workflow designer** in the Knowledge base portal.
2. Click the **Create workflow status** button at the top-right.  
    Alternatively, click the **(+)** button found between the statuses to create the workflow status.

![2-Screenshot-Create_workflow_status.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2-Screenshot-Create_workflow_status.png)

4. Type in a **Name** (required) and **Description** (optional) for your status.
5. Turn on/off the **Read-only** toggle to allow or restrict editing the article when it is set to the specified status.

   > NOTE
   >
   > If the Read-only toggle is enabled, team members will not be able to edit the article or category page content when the article is set to the specified workflow status. Additionally, team members will not be allowed to publish the article. However, they can still add comments on the articles or category pages.
6. Click on the **Add** button at the bottom.

   The workflow status will be added in the intended section of the workflow.

![3-Screenshot-Create_workflow_status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3-Screenshot-Create_workflow_status.png)

### Editing an existing status

1. Navigate to **Documentation**() > **Content tools** > **Workflow designer** in the Knowledge base portal.  
    The existing statuses in the workflow will be listed.
2. Click on the **Edit** () icon and an **Update status** panel will appear.

   ![4_Screenshot-Editing_a_new_workflow_status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Editing_a_new_workflow_status.png)
3. You can edit the **Name**, and **Description** and update the **Read-only** option (for statuses you have created (or) statuses for which the **Read only** is turned off).
4. Click the **Update** button at the bottom once you are done.

#### Reorder status

You can reorder the custom statuses dragging and dropping them within the workflow. The reorder icon is available on the left adjacent to each status.

![6_Screenshot-Reordering_a_new_workflow_status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Reordering_a_new_workflow_status.png)

> NOTE
>
> You cannot reorder system workflow statuses.

### Deleting an existing status

1. Navigate to **Documentation**() > **Content tools** > **Workflow designer** in the Knowledge base portal.  
    The existing statuses in the workflow would be listed.
2. Click on the **Delete** () icon.

![5_Screenshot-Deleting_a_new_workflow_status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Deleting_a_new_workflow_status.png)

4. Click **Yes** to confirm.

> NOTE
>
> * The workflow status cannot be recovered once deleted. All the due dates and assignee data would also be lost.
> * Users cannot delete the two system statuses (Start\* and end\*) provided.

---

## Troubleshooting

### Cannot edit article due to read-only workflow status

**Error:** You can't edit this article as the current workflow status is marked as read-only.

This warning appears because the article's workflow status is currently set to a custom read-only mode. When an article's workflow status is read-only, editing is restricted to maintain content integrity for specific workflow stages.

Your admin may have set this status for a specific purpose. If you have the appropriate permissions, you can modify the status. Otherwise, please contact your admin to make the necessary changes.

**Steps to resolve:**

Follow the steps below to enable editing for the article:

1. Navigate to **Documentation**() > **Content tools** > **Workflow designer** in the Knowledge base portal.
2. Locate the workflow status causing the warning message. You can identify it by the **lock** () icon, which indicates that the **Read-only** option is enabled.
3. Click the **Edit**() icon next to the workflow status.

   The **Update status** panel will appear.
4. Turn off the **Read-only** toggle.
5. Click **Update**to save the changes.

Once the read-only status is disabled, you can edit the article as needed.

![Encountering "You can't edit this article as the current workflow status is marked as read-only" message while editing an article.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ScreenGIF-Troubleshooting_You%20can't_edit_this_article.gif)

---

## eBook

### Guide to Setup Documentation Workflow

Our eBook will show you how to produce quality documentation!

#### You'll learn,

* *A step-by-step guide to creating documentation workflows*
* *Documentation best practices that improve content quality*
* *How to produce content that meets your customer expectations*

![ebook-documentation-workflow-mockup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ebook-documentation-workflow-mockup.png)

[![2022-02-02_08-23-42](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2022-02-02_08-23-42.png)](https://document360.com/ebook/guide-to-setup-documentation-workflow/#eBook-Form)

---

<a id="managing-workflow-status"></a>

## Managing workflow status

**Plans supporting for Managing workflow status**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can manage workflow statuses from the Documentation editor. Additionally, they can assign these statuses to team members directly within the editor.

---

## Workflow status actions

The **Workflow status** option is available at the top right of the Documentation editor, next to the **Publish**/**Edit** button.

![Image showing workflow status of a article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/18_ScreenShot-Workflow.png)

#### View the current status

The active workflow status of an article will be displayed as a tag below the **Workflow status** option above the editor.

For more information about the current or other status in the workflow, follow the below steps:

1. Click the **Workflow status** dropdown at the top right of the editor.
2. The list of available statuses and supporting information (due date, approved status, assignee) will be displayed.
3. If the article is in any status, the preceding statuses will be struck through.
4. If the article is *Published*, then all the statuses will be struck through.

#### Setting a due date

You can set due dates for both active/current and upcoming statuses in an article workflow.

1. Click the **Workflow status** dropdown at the top right of the editor.
2. Hover over the status for which the date has to be set.
3. Click the **Set due dates** () icon.
4. A calendar selection assistant will appear, and you can select the desired date.
5. To clear any existing due date, click the **Clear due date** option below the calendar.

#### Setting an assignee

1. Click the **Workflow status** dropdown at the top right of the editor.
2. Hover over the status for which the team member has to be assigned.
3. Click the **Assign owner** () icon.

   The list of project team members will be displayed.
4. You can also use the **Search by email** bar at the top to find the desired team member.
5. Click the **Assign** () icon.

   The team member will be assigned a particular status, and a notification will be sent to the team member’s Email.

   Removing an assignee can also be done by following the same steps. Hover over the team account and click the (**x**) icon next to it.

   > NOTE
   >
   > A single team member account can be assigned to multiple workflow statuses for an article. However, multiple team accounts cannot be assigned to a single workflow status.

#### Activate a workflow status

You can activate the next status if they have completed the assigned workflow status.

1. Click the **Workflow status** dropdown at the top right of the editor.
2. Hover over the next status and click on it.

   An expanded view of the status will appear along with the comment box.
3. If needed, use the comment box to provide any information to the next assignee by tagging them.
4. Click the **Set status** button and the next workflow status will be activated.

#### View workflow history

Users can view the entire workflow history with all the supporting information for an article.

1. Click the **Workflow status** dropdown at the top right of the editor.
2. Click the **View history** option above the workflow status list.
3. An expanded view with all the workflow status history will be displayed.

   This provides an overview of the entire workflow cycle that an article has gone through.

   Each version of the article revision can have its workflow history and comments.

![To set and manage workflow status of an article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/19_ScreenGif-Workflow.gif)

---

### FAQ

**What steps should I take to ensure that team accounts receive notifications when I assign a workflow?**

The email will be sent to the team account to whom the workflow status is assigned, provided they have enabled the workflow events in the notification mapping. To ensure that team accounts receive notifications when assigning a workflow, they need to enable the relevant events in the notification section. Follow these steps:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications**.
2. Go to the **Notification mapping** tab and expand the **Documentation editor** accordion.
3. Turn on the following toggles:

   * Article Workflow Status Updated
   * Article Workflow Due Date Updated
   * Article Workflow Assignee Updated
4. Additionally, to enable notifications for page category types, turn on the following toggles:

* Category Workflow Status Updated
* Category Workflow Due Date Updated
* Category Workflow Assignee Updated

---

## **eBook**

### **Guide to setup documentation workflow**

Our eBook will show you how to produce quality documentation!

**You’ll learn,**

* *A step-by-step guide to creating documentation workflows*
* *Documentation of best practices that improve content quality*
* *How to produce content that meets your customer expectations*

![ebook-documentation-workflow-mockup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ebook-documentation-workflow-mockup.png)

[![2022-02-02_08-23-42](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2022-02-02_08-23-42.png)](https://document360.com/ebook/guide-to-setup-documentation-workflow/#eBook-Form)

<a id="workflow-assignment"></a>

## Workflow assignment

**Plans supporting workflow assignment**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 enables you to manage and assign workflow statuses to team members directly from the editor. This feature streamlines the documentation process by providing clear visibility and control over each stage of an article's lifecycle.

---

## Assign an article to a team member

1. Navigate to the desired article from the Knowledge base portal.
2. Click the workflow status dropdown on the top right corner of your editor.
3. Hover over the desired status and click the **Assign owner** () icon.
4. Select the appropriate team member and click () to assign.

   Assigned team member will receive a notification email.

   > NOTE
   >
   > A single team member can be assigned to multiple workflow statuses in an article, but multiple members cannot be assigned to a single workflow status.
5. To remove an assignee, hover over the team member's name and click the (x) icon.
6. Click the **Set due dates** () icon to select the desired due date.
7. Click the status again to add any necessary comments (optional). Use the @ command to tag your team members and notify them regarding the updated workflow status.
8. Click **Set status** to complete the workflow assignment.

![4-Screenshot-Assign_workflow_to_team_member.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4-Screenshot-Assign_workflow_to_team_member.png)

---

## Workflow assignments overview

The Workflow assignments overview page gives a bird’s eye view of the articles/category pages available on the selected version and language of the knowledge base project. The articles that assigned information to the team account’s profile are available.

From the Knowledge base portal, navigate to Documentation () > **Workflow assignments**.  
![1-Screenshot-Workflow_assignments.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1-Screenshot-Workflow_assignments.png)Team accounts can view the number of articles/category pages in each workflow status at any given point in time along with the due date and workflow status. You can also view the articles that are assigned to you from the left navigation menu.

---

## eBook

### Guide to Setup Documentation Workflow

Our eBook will show you how to produce quality documentation!

#### You'll learn,

* *A step-by-step guide to creating documentation workflows*
* *Documentation best practices that improve content quality*
* *How to produce content that meets your customer expectations*

![ebook-documentation-workflow-mockup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ebook-documentation-workflow-mockup.png)

[![2022-02-02_08-23-42](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2022-02-02_08-23-42.png)](https://document360.com/ebook/guide-to-setup-documentation-workflow/#eBook-Form)

---

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="article-templates"></a>

## Templates

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 article templates are pre-designed article structures that you or any team member can use while writing articles for your Knowledge base. These templates provide design consistency and style for your brand, whether you're creating a User guide, FAQ, Release notes, or any custom document.

In Document360, you can create new articles from any basic system templates or create a new article template that you can reuse any number of times in your project.

---

## Creating an article from an existing template

1. From the left navigation pane, hover over the desired category and click on the () icon.
2. Click **Article from template** and enter the article name in the **Name** field.
3. Choose the category location from the **Nest category under…** dropdown.
4. Select one of the available templates.

   A preview will be available in the right frame.
5. Once done, click **Create**.
6. If you don’t find a suitable template in the preloaded list, click **Manage templates** next to the the **Template name**.

   ![Creating a template from existing article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Creating_an_article_from_an_existing_template.gif)

---

## Creating a new template

1. From the Knowledge base portal, Navigate to Documentation() > **Content tools** > **Content reuse** > **Templates** in the Knowledge base portal.

   The **Manage templates** overview page appears.

   You can view the system templates and the templates you have previously added.

> NOTE
>
> Default templates will be created automatically based on your onboarding use case selection. These templates can be edited, copied, or deleted as per your requirements.
>
> ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-New_system_templates.png)

2. Click **Create template** on the top right of the page.

   The **Create template** window will appear.
3. Enter the desired template name.
4. Select the editor type for the template.
5. Enter the description of the templates.
6. Click **Create.**

   A new article is created, and you can start making the necessary changes.
7. Once done, click **Save** or **Save & close** from the Save dropdown.

   Your new template will be added to the list of templates.

   ![2_ScreenGIF-Creating_a_new_template_from_scratch](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Creating_a_new_template_from_scratch.gif)

### Editing a template

1. Hover over the desired template and click the **Edit** () icon.

   The selected template will appear.
2. On the top, next to the template name, click the  icon.

   A popup will appear.
3. Update the name and the description of the template in their respective fields.

   Note that the character limit for the description is 250 characters (including space).
4. Once done, click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Templates.gif)

---

## Saving an existing article as a template

You can add an existing article as a template regardless of its status (Published, Draft, New, Review, Hidden).

1. In the **Documentation editor**, click the More (•••) icon next to an article name.
2. Select **Save as template** and click **Yes** in the **Save** confirmation prompt.
3. You can also find the **Save as template** option under the More (•••) icon on the top-right of the article editor.

   A template has been added, which you can use when creating new articles from a template.
4. Go to the **Manage templates** page to view, edit, and delete the saved template.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Templates.gif)

---

## FAQs

#### Can I clone templates and use them to create a new template?

On the Templates page, you can clone templates to create new ones by hovering over the template and clicking on the **Clone** () icon. This saves time by allowing you to derive aspects from existing templates.

#### What happens if I delete a template that I no longer need?

Deleting a template removes it from the library but doesn't affect articles already created using that template. Your existing content remains unaffected.

#### Is the template I create available for other team members to use?

Once you create or save an article as a template, other team members can view and use the template in the Template library.

#### Does updating a template affect the article created from it?

Updating a template does not affect articles that were created from that template. When you create an article from a template, a local copy of the content is saved in the article. It is isolated from the template content.

#### Can I clone templates used in articles to other languages?

No, templates cannot be cloned to different languages in Document360. Currently, templates can only be cloned within the same language.  
If you need to use a template in a different language:

1. Manually recreate the template in the desired language by copying its structure and content.
2. Translate the content into the desired language.
3. Save the new template in the respective language workspace.

<a id="variables"></a>

## Variables

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can reuse variables when you use the same text-based content in multiple places that may change over time (like field names, contact numbers, addresses, disclaimers, etc.). A **Variable** in Document360 is a reusable element that helps maintain consistency and efficiency across various documentation sections. By employing variables, contributors to your articles can easily update information in one place, and it automatically reflects throughout the entire documentation, ensuring accuracy and reducing redundant efforts.

For example, you want to add your contact information in multiple instances, which might change over time. In this case, you can add a variable for contact information. If a change is required, you can update the variable alone instead of updating it in all instances.  
 (**Contact: +1 897564231/support@serverless.com**)

---

## Creating a variable

To create a variable,

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Variables** in the knowledge base portal.

   The **Variables** page appears. If you have added any variables earlier, you can see them listed here.
2. Click **Create variable** at the top to select language-specific variables (Global, English, French, etc.) added to your project.
3. Enter the **Name** for your variable.

> NOTE
>
> The variable **name** can include letters, numbers, hyphens, and underscores, with a maximum length of 30 characters.

6. The **Merge code value** will be the variable name that appears with the variable tag in your editor.

> For example, if your variable name is **Disclaimer**, your Merge code value would be ***{{variable.Disclaimer}}.***

7. In the **Language** selection dropdown, the default selection is **Global** (Available across all languages). However, if needed, you can choose a desired available language to create a language-specific variable.
8. In the **Content** field, enter the variable's content.

> NOTE
>
> The variable content's character limit is 100 characters with spaces. If you want to add longer texts, expressions, media, tables, or code blocks, use **Snippets**. For more information, read the article on [Snippet](/help/docs/snippets).

#### Formatting options

Use the following text formatting options to style your variable content

a. Basic text formatting:  
 • **Bold**  
 *•* ***Italic***  
 • **~~Strikethrough~~**  
 • **Underline**  
 • **Font size** (8 to 36)

b. Additional formatting:

Click the **More text** icon to access:  
 • **Font Family** (Choose from the list of fonts)  
 • **Text color** (Color picker or HEX code)  
 • **Background color** (Color picker or HEX code)  
 • **Subscript**  
 • **Superscript**  
 • **Clear Formatting**

c. **Insert Link** - To add a hyperlink.

* Click on the **Insert link** icon.
* Type the **URL** and add text to the link.
* If needed, select **Open in new tab.**
* Click **Insert.**

9. Click the **Create variable** button.

The newly created variable will appear on the **Variables** page, where it can be edited or deleted as needed.

![Creating a new variable in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_variables.gif)

---

## Using variable in an article/category page

You can add a variable to your article/category page using two methods.

#### Method 1: Using the syntax (Markdown editor)

In the Markdown editor, type a **variable.MergeCodeValue** between closed double curly brackets.

> **Example**: *{{variable.Disclaimer}}*

You must know the exact merge code value to add the desired variable. The variable will not work even if a single letter changes.

> NOTE
>
> Typing in *variable.Merge\_Code\_Value* will only work in the Markdown editor. If you are using Advanced WYSIWYG editor, you can insert variable using the toolbar.

#### Method 2: From the toolbar (Markdown, WYSIWYG, and Advanced WYSIWYG)

1. Click the Content reuse **()** icon for Markdown and WYSIWYG editor.   
   **(or)**  
   From the Advanced WYSIWYG editor, click **Insert > Variables** or use the slash "**/**" command to access variables.
2. Select the variable or use the **Search variables** bar to narrow down the variable name.

> In the Advanced WYSIWYG editor, the **Variables** pane appears on the right for variable selection. Hover the pointer on the variable name to preview its content.

3. Select the intended variable to insert**.**

> NOTE
>
> In Markdown and WYSIWYG editor, you can select multiple variables in one go.

![Inserting the variables in the Advanced WYSIWYG editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Using_variables_in_advanced_WYSIWYG_method2.gif)

---

## Variables overview page

You can view, edit, or delete a variable on the **Variables** page.

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Variables** in the knowledge base portal.

   The **Variables** page appears where you can find the list of variables you have already added.

![Overview page of Variables in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-overview_of_Variables_page.png)

1. **Languages**: To filter the variables in Global or a specific language.
2. **Search variable**: Search the variable list based on the name.
3. **Used in**: If a variable is not added to any article/category page, the status would be `-`. If a variable is added to any article/category page, you can click the **View** button to see the list of articles/category pages containing the variable.
4. **Language**: The desired language of each variable.
5. **Last modified**: The last time the variable content was updated.
6. **Preview**: Click on the variable name, and you can view the variable's content.
7. **Progress**: Click the globe icon to view the variable’s progress in multiple languages.
8. **Edit** () icon: To edit the variable content.
9. **Delete** () icon: To remove the variable.

---

### View article/category page dependency

In the **Variables** page, you can find the **Used in** column.

1. In the **Used in** column, click on the **View** button.

   The **View references** panel will appear, where you can view the list of articles/category pages to which the variable has been added.
2. Click on the article to expand the section.
3. You can find the following information:

   * The article version.
   * The project workspace and language.
   * The team account name and profile picture who has added the variable.
   * The article states (Published, Draft, New Article).
   * The time/date information when the variable was inserted in the article/category page.

![Viewing the dependency of variables](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Viewing_the_dependency_of_variables.gif)

---

### Editing an existing variable

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Variables** in the knowledge base portal.

   The **Variables** page appears. You can find the list of variables you have already added.
2. Hover over the desired variable and click the Edit **()** icon.

   You can edit the content of the variable. The Name and Merge Code Value cannot be edited.

> NOTE
>
> **Editing a link added in a variable**
>
> Click the link, and you can find the following options:
>
> * **Open link** (): The link will open in the tab. This helps in checking the link.
> * **Style** (): Style has two options.
>
>   + Green: To change the link text color to green.
>   + Thick: To increase the thickness of the link text.
> * **Edit** (): To edit the URL, link text, and change open in the new tab option.
> * **Unlink** (): To unlink the URL and change it to standard text. The URL will be unlinked, and only the URL text will appear.

3. After you complete the content edit, click the **Update** button.

> NOTE
>
> When you edit the content of an existing variable in the library, the content change will reflect in all the articles/category pages that contain the respective variable.

![Editing the existing variables in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF-editing_an_existing_variables.gif)

---

### Deleting a variable

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Variables** in the knowledge base portal.

   The **Variables** page appears. You can find the list of variables you have already added.
2. Hover over the desired variable and click the **Delete** () icon.
3. Click **Yes** in the confirmation prompt.

#### To bulk delete multiple variables

Select multiple intended variables from the **Variables** page and click the **Delete** option at the top of the list.

![Deleting the variables in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Deleting_a_variable.gif)

---

## Translating variables

You can create and manage variables in multiple languages. This ensures that when your articles are translated, the variables match the language of the article, providing a consistent and localized user experience.

#### **Translating new variables**

1. Navigate to the Documentation () > **Content tools** > **Content reuse** > **Variables** in the knowledge base portal.
2. Click **Create Variable**.
3. In the **Language** dropdown, select the intended language (except global).
4. Enter the variable **name** and the content for the variable in English (or your default language).
5. To translate the content into other languages, click the **Translate to other languages** dropdown.
6. Select the desired language(s) from the dropdown menu and click **Translate**.

   > NOTE
   >
   > * The default language will be marked as **Main**.
   > * Translated languages will be indicated with a green tick to show that the translation is complete. If needed, you can navigate to untranslated languages and complete their translation.
7. Once the translations are complete, click **Create Variable** to save the variable along with its translations.

> For example, if you create a variable for a welcome message in English, you can use the translation feature to add the same message in French, Spanish, German, etc.

![Translating the new variables in other languages in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGIF-Translating_new_variables.gif)

#### Translating existing variables

> NOTE
>
> Global variables cannot be translated.

1. Click on the desired existing variable you wish to translate.
2. Navigate to **Translate to other languages** and select the desired language that the variable needs to be translated.
3. Click **Translate**.
4. If needed, you can navigate to other languages and translate them.
5. To retranslate the content, click **Translate again**, which will overwrite the existing translation with the new one.
6. If you need to remove the translated variable for a specific language, click **Remove language**.

   You can retranslate the content at any time if needed.

![Translating the existing variables in other languages in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenGIF-Translating_existing_variables.gif)

---

## FAQ(s)

**How do Variables work?**

Variables allow you to define specific content elements, such as product names or version numbers, in one place. Updating the variable automatically reflects the change across all relevant sections when this content changes, ensuring uniformity.

**What's the benefit of using Variables in my documentation?**

By using Variables, you ensure consistency in your documentation while minimizing the need for manual updates. This saves time, reduces errors, and maintains accuracy, especially when dealing with frequently changing information.

**Can I create my Variables in Document360?**

Document360 empowers you to create custom Variables tailored to your documentation needs. This allows you to adapt the feature to the specific terminology and elements relevant to your content.

**How do I use Variables in my articles?**

Insert the variable into the article content using the editor's toolbar or the merge code value, and it will dynamically pull the information you've defined, ensuring uniformity across your documentation.

**Can Variables be updated across multiple articles at once?**

When you update a Variable, the change is automatically reflected throughout all instances where that variable is used, making it easy to maintain consistent information across your entire knowledge base.

**Are Variables limited to specific types of content?**

Yes, Variables can be used for limited text, number, or link-based content, from product names and version numbers to URLs and contact information.

**How do Variables enhance collaboration among team members?**

Variables streamline the collaboration process by ensuring everyone is using the same accurate information. Changes to a variable are instantly updated across all articles, preventing discrepancies.

**Is using Variables a best practice in technical documentation?**

Using Variables is a best practice that improves technical documentation efficiency, consistency, and accuracy. It's particularly valuable when working with dynamic information that requires frequent updates.

**Can I translate variables into any language?**

You can translate variables into any of your project’s languages.

**Is the definition of a variable term created in the Knowledge base site indexed in search and by Google?**

Yes, the definition of a variable term created in the Knowledge Base (KB) site is indexed in both the site's search and by Google. Once the term is added, it becomes searchable on the website and will also be crawled and indexed by Google.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

<a id="snippets"></a>

## Snippet

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Snippets** is a predefined set of content blocks the content manager or author uses as reusable content. The Snippet's content can vary from simple text or phrases to lengthy paragraphs, tables, images, and more. In Document360, the snippets are stored in a library, and you can easily insert them into articles during editing with just a click of a button.

> NOTE
>
> The Snippet will appear as regular content to the reader on the Knowledge Base site. The reader will not know that the content was rendered through Snippet.

---

## Creating a snippet

To create a snippet,

1. Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Snippets** in the knowledge base portal.

   The **Snippets** page appears. If you have added any snippets earlier, you can see them listed here.
2. Click **Create snippets** at the top to select language-specific snippets(Global, English, French, etc.) added to your project.
3. Enter the **Name** for your snippet.

   > NOTE
   >
   > The snippet **name** can include letters, numbers, hyphens, and underscores, with a maximum length of 30 characters.
4. The **Merge code value** will be the snippet name that appears with the snippet tag in your editor.

   **For example,** if your snippet name is **Disclaimer**, then your Merge code value would be ***{{snippet.Disclaimer}}.***
5. In the **Language** selection dropdown, the default selection is **Global** (Available across all languages). However, if needed, you can choose a desired available language to create a language-specific snippet.
6. In the **Content** field, enter the snippet's content.

   By default, the snippet editor will be WYSIWYG (HTML). However, you can switch to the Markdown editor if required.

> NOTE
>
> Switching to Markdown:
>
> 1. Click **Switch to Markdown**.
> 2. Click **Proceed** in the **Change confirmation** prompt.
>
> **You will lose the WYSIWYG content when you switch to Markdown.**

7. Once done, click **Create snippet**.

![Adding a new snippet in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_a_Snippet.gif)

#### **Formatting options**

**WYSIWYG**

The below formatting options are available for snippet content in WYSIWYG:

![1_Screenshot-Formatting_options_available _in_snippet](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1724477524068.png)

* Basic text formatting options such as **Bold**, **Italic**, **Strikethrough**, and **Underline** are available.
* Additional formatting options include **Font size, Font Family, Text color, Background color, Subscript, Superscript, and Clear Formatting**.
* You can create **Ordered** and **Unordered Lists** for listing items.
* **Insert Image** allows you to insert an image from a URL, local storage, or Drive.
* **Insert Link** lets you add a hyperlink from a provided URL or link to a knowledge base article.
* You can use **Insert callouts** such as Info, Warning, Error, and Success.
* **Insert latex** lets you add expressions and equations:

  + Click the **Insert latex** option, and an **Insert latex expression** panel will appear.
  + Type your desired Latex syntax and click **Insert.**
  + [Read this article](http://docs.mathjax.org/en/latest/input/tex/macros/index.html) for basic Latex commands used in Latex syntax.
* **Insert table** allows you to create a table by selecting the required number of rows and columns.
* **Insert codeblock** lets you add codeblocks.

  + Click **Insert codeblock** and select the language of the desired code from the dropdown.
  + Add code in the **Insert your code** field and click **Insert.**
* You can preview the Snippet in **Code view** (HTML). Click **Code view** to view the preview. If you want to switch back to the editor view, click **Code view** again.

---

**Markdown**

Markdown is handy when significant text and minimal media are involved in the Snippet. You can use Markdown syntax manually while writing or formatting text using the Markdown toolbar.

**For example**, you can make a text appear bold by writing the respective syntax or using the Bold () icon in the Markdown toolbar.

![13_Screenshot-Makdown_options_available _in_snippet](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1724478140496.png)

* Basic text formatting options such as **Bold**, **Italic**, **Strikethrough** are available.
* **Block quote** lets you add block quotes.
* **Line** lets you insert a horizontal line.
* **Ordered List** and **Unordered List** are available for listing items.
* **Insert Table** allows you to create a table by selecting the required number of rows and columns.
* **Insert Image** allows you to insert an image from a URL, local storage, or Drive.
* **Insert Codeblock** lets you add code blocks:

  + Click **Insert Codeblock** and type the desired code inside the code block.
  + Example: ``code``.
* You can use **Insert callouts** such as Info, Warning, Error, and Success.
* **Insert latex** lets you add expressions and equations.

  + Click the **Insert latex** option, and a sample latex syntax () will appear.
  + Type your desired syntax.
  + The syntax must start and end with `$`.

> NOTE
>
> When adding latex, do not include a space between `$` and syntax. For more information, [read this article](http://docs.mathjax.org/en/latest/input/tex/macros/index.html) for basic latex commands.

* **Insert Link** allows you to add a hyperlink from a provided URL or link to a knowledge base article.
* **Glossary** lets you add glossary terms to your Snippet.

---

## Using snippet in the article

There are **two methods** by which you could add a snippet to your article.

#### Method 1: Using the syntax (Markdown editor)

In the Markdown editor, type a **snippet.MergeCodeValue** between closed double curly brackets.

> **Example**: *{{snippet.Disclaimer}}*

You must know the exact merge code value to add the desired snippet. The snippet will not work even if a single letter changes.

> NOTE
>
> Typing in *snippet.Merge\_Code\_Value* will only work in the Markdown editor. If you are using Advanced WYSIWYG editor, you can insert snippet using the toolbar.

#### Method 2: From the toolbar (Markdown, WYSIWYG, and Advanced WYSIWYG)

1. Click on Content reuse **()** for Markdown and WYSIWYG editor.   
   For the Advanced WYSIWYG editor, click on **Insert >** **Snippets****,** or using the slash "**/**" command you can access snippets.
2. Select the snippet or use the **Search snippets** bar to narrow down the snippet name.

> In the Advanced WYSIWYG editor, the **Snippets** pane appears on the right for snippet selection. Hover the pointer on the snippet name to preview its content.

3. Select the intended snippet to insert.

> NOTE
>
> If the **Insert as local copy** toggle is on, the snippet content added to the article will remain unchanged. The snippet in the article will not be affected if the selected snippet's content is modified or removed in the future.

![Inserting snippets in the article in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Inserting_Snippet__in_an_article.gif)

---

## Snippet overview page

You can view, edit, or delete a snippet on the **Snippets** page.

1. Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Snippets** in the knowledge base portal.

   The **Snippets** page appears where you can find the list of snippets you have already added.

![Explaining the Snippet overview page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Snippet_overview_page.png)

1. **Languages**: To filter the snippet in Global or a specific language.
2. **Search snippets**: Search the snippet list based on the name.
3. **Used in**: If a snippet is not added to any article/category page, the status would be `-`. If a snippet is added to any article/category page, you can click the **View** button to see the list of articles/category pages containing the snippet.
4. **Language**: The desired language of each snippet.
5. **Last modified**: The last time the snippet content was updated.
6. **Preview**: Click on the snippet name, and you can view the snippet's content.
7. **Progress**: Click the globe icon to view the snippet’s progress in multiple languages.
8. **Edit** () icon: To edit the snippet content.
9. **Delete** () icon: To remove the snippet.

---

### View article/category page dependency

In the **Snippets** page, you can find the **Used in** column.

1. In the **Used in** column, click on the **View** button.

   The **View references** panel will appear, where you can view the list of articles/category pages to which the snippet has been added.
2. Click on the article to expand the section.
3. You can find the following information:

   * The article version.
   * The project workspace and language.
   * The team account name and profile picture who has added the snippet.
   * The article states (Published, Draft, New Article).
   * The time/date information when the snippet was inserted in the article/category page.

![Viewing the dependencies of snippets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-View%20article_Snippet_dependency.gif)

---

### Editing an existing snippet

1. Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Snippets** in the knowledge base portal.

   The **Snippets** page appears. You can find the list of snippets you have already added.
2. Hover over the desired snippet and click the **Edit ()** icon.
3. After you complete the content edit, click on the **Update** button.

> NOTE
>
> When you update a snippet in the library, the changes are automatically reflected in all articles and category pages that use it. This includes published articles, which will be updated without needing to republish them.

![Editing the existing snippets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Edit_snippet.png)

---

### **Deleting a snippet**

1. Navigate to **Documentation** () > **Content tools** > **Content reuse** > **Snippets** in the knowledge base portal.

   The **Snippets** page appears. You can find the list of snippets you have already added.
2. Hover over the desired snippet and click the **Delete** () icon.
3. Click **Yes** in the confirmation prompt.

#### **To bulk delete multiple snippets**

Select multiple intended snippets from the **Snippets** page and click the **Delete** option at the top of the list.

![Deleting the snippets in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Deleting_a_Snippet.gif)

---

## Translating snippets

You can create and manage snippets in multiple languages. This ensures that when your articles are translated, the snippets match the language of the article, providing a consistent and localized user experience.

> NOTE
>
> Global snippets cannot be translated.

#### Translating new snippets

1. Navigate to the **Documentation** () > **Content tools** > **Content reuse** > **Snippets** in the knowledge base portal.
2. Click **Create snippet**.
3. In the **Language** dropdown, select the intended language.
4. Enter the snippet **name** and the content for the snippet in English (or your default language).
5. Click **Switch to markdown** to change the content editor from WYSIWYG to the Markdown editor.
6. To translate the content into other languages, click the **Translate to other languages** dropdown.
7. Select the desired language(s) from the dropdown menu and click **Translate**.

> NOTE
>
> * The default language will be marked as **Main**.
> * Translated languages will be indicated with a green tick to show that the translation is complete. If needed, you can navigate to untranslated languages and complete their translation.

7. Once the translations are complete, click **Create snippet** to save the snippet along with its translations.

> For example, if you create a snippet for a welcome message in English, you can use the translation feature to add the same message in French, Spanish, German, etc.

![Translating the snippets in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGIF-Translating_snippets.gif)

#### Translating existing snippets

1. Click the desired existing snippet you wish to translate.
2. Navigate to **Translate to other languages** and select the desired language that the snippet needs to be translated.
3. Click **Translate**.
4. If needed, you can navigate to other languages and again translate into those languages.
5. To translate the content again, click **Translate again**. This will overwrite the existing translation with a new one.
6. If you need to remove the translated snippet for a specific language, click **Remove language**.

   You can retranslate the content at any time if needed.

![Translating the existing snippets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenGIF-Translating_existing_snippets.gif)

---

## FAQs

**How many snippets can be created in one project?**

You can create up to 200 snippets in a single project. If you need more, additional snippets can be purchased as an add-on.

**Can I change the name of a snippet after it has been created?**

While you can edit the contents of a snippet, its name cannot be changed after creation.

**Why is a snippet inserted in a new line?**

Snippets are designed as new blocks of content, allowing for multiple lines to be added within them. As such, they will always start from a new line to maintain structure and clarity.

One of the three editors in Document360, WYSIWYG (What You See Is What You Get) is a content editing tool that shows the final output as writers create and format content.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

<a id="glossary"></a>

## Glossary

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A glossary helps readers easily understand frequently used terms, such as words, phrases, acronyms, or abbreviations. By adding a glossary to your knowledge base, you provide quick, convenient access to definitions, making your content more user-friendly and informative.

Glossary terms are visually marked with a dotted underline in your articles and category pages. Readers can hover over these terms to view the definition, ensuring they stay informed without navigating away from the page. You can reuse glossary terms throughout your content as needed. For example, when adding the acronym *GDPR*, you can define it as "General Data Protection Regulation," and the term will be consistently used across all relevant articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1.%20Glossary%20-%20View%20in%20site.png)

> NOTE
>
> Glossary terms are available in both the Knowledge Base and Knowledge Base Assistant.

---

#### Why add a glossary to your Knowledge base?

Including a glossary in your documentation improves both the reader experience and the accuracy of your content. Here’s how:

1. **Improved readability**: Glossary terms allow readers to get instant definitions for complex terms without leaving the page, reducing confusion and ensuring better comprehension.
2. **Consistency**: Once a term is added to the glossary, it can be reused across multiple articles, ensuring that terminology is defined consistently across your entire knowledge base.
3. **Time-saving for writers**: Technical writers no longer have to define terms in each individual article, which reduces redundancy and speeds up the content creation process.
4. **Product-specific education**: You can use the glossary to define product-specific terms or industry jargon, helping readers get familiar with your terminology and enhancing their understanding of your product.

---

## Managing glossary terms

Accessing and managing your glossary is straightforward. Navigate to **Content tools** > **Content reuse** > **Glossary** to view your existing glossary terms. Here’s a breakdown of the key features for managing glossary terms:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2.%20Glossary%20-%20Overview%20page.png)

1. **Languages**: Use the language filter to sort glossary terms by specific languages. Terms marked as "Global" represent glossary terms available across all languages in your knowledge base.
2. **Create**: Add new glossary terms individually or import multiple terms in bulk to streamline content creation.
3. **Export CSV**: Export selected glossary terms as a CSV file for external use, enabling easy sharing or backup.
4. **Search term**: Search for glossary terms by name. Hover over the **Preview** () icon to see a quick definition.
5. **Used In**: If a glossary term is linked to any articles or category pages, the **View** option appears.

   Click **View** to open the **View references** pop-up showing all associated articles or categories. The pop-up also displays the workspace and language of each article.

   Use the dropdown next to each article/category name to see detailed information such as article status, version, a link to view the article in the knowledge base portal, contributor profile image, name, and last updated date.
6. **Language**: Displays the language in which the glossary term is available.
7. **Last Modified**: Shows the most recent time and date the glossary term was updated.
8. **Edit**: Update the glossary term or its content. Note: The term’s language cannot be changed.
9. **Delete**: Remove the glossary term from the knowledge base.
10. **Items on Page/Total Items**: Displays the number of glossary terms shown per page and the total number of terms in the glossary.
11. **Use Eddy AI for glossary generation**

    Leverage **Eddy AI’s glossary generation** to automate the process of creating glossary terms for key phrases and acronyms in your knowledge base. This AI-powered feature analyzes your content and suggests terms that can be defined, saving you time and ensuring your documentation is thorough. For large projects, this feature is especially helpful, as it ensures that all relevant terminology is consistently captured. For more information, read [AI glossary generator](/help/docs/ai-glossary-generator).

---

#### SEO and search benefits of glossary terms

By defining industry-specific terms in your glossary, you’re not only helping your readers but also improving your knowledge base’s SEO. Glossary terms can increase the relevance of your documentation in search engine results by associating definitions with keywords, making it easier for users to find your content online

---

## Quick navigation for glossary management

### Adding glossary terms

* [How to add a glossary term?](/help/docs/adding-glossary-term)
* [How to add a glossary term in articles?](/help/docs/adding-glossary-term-in-articles)
* [How to import the glossary?](adding-glossary-term#importing-glossary-terms)

### Managing glossary terms

* [How to edit a glossary term?](/help/docs/editing-and-deleting-glossary-term#editing-a-glossary-term)
* [How to delete a glossary term?](/help/docs/editing-and-deleting-glossary-term#deleting-a-glossary-term)
* [How to delete multiple glossary terms?](/help/docs/editing-and-deleting-glossary-term#deleting-multiple-glossary-terms)

### Navigation links for glossary

* [How to add the glossary overview page link in the header?](/help/docs/glossary-overview-page#how-to-add-the-glossary-library-page-link-in-the-header)
* [How to add the glossary overview page link in the footer?](/help/docs/glossary-overview-page#how-to-add-the-glossary-overview-page-link-in-the-footer)
* [How to add the glossary overview page link in the menu?](/help/docs/glossary-overview-page#how-to-add-the-glossary-overview-page-link-to-the-menu)
* [How to add the glossary overview page link on the Home page?](/help/docs/glossary-overview-page#how-to-add-the-glossary-overview-page-link-on-the-home-page)

---

### FAQs

#### How do I add a glossary term to my articles?

You can add glossary terms by navigating to **Content tools > Content reuse > Glossary**, then create a new term. Once added, the term can be used in your articles, and readers can hover over it to view the definition.

#### Can I import multiple glossary terms at once?

Yes, you can bulk import glossary terms using the import option in the Glossary section. This is useful for large projects where multiple terms need to be added quickly.

#### What happens if I delete a glossary term?

When a glossary term is deleted, it is removed from all articles where it was used. The term will no longer display as a hoverable definition for readers.

#### Can glossary terms be filtered by language?

Yes, you can filter glossary terms by language. Terms marked as "Global" will be available across all languages in your knowledge base.

#### How can I track where glossary terms are used?

You can click on the **View** option next to any glossary term to see a list of articles or categories it is associated with, including details like article status, version, and contributors.

#### Does the glossary setting change when I switch between workspaces?

No, glossary settings, along with other content tools such as snippets, templates, variables, and tags, are configured at the project and not at the workspace level. This means that when you switch between workspaces, the glossary and other content tool configurations remain unchanged. Each project retains its unique settings regardless of the workspace you are in.

<a id="adding-glossary-term"></a>

## Adding glossary terms

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can easily add glossary terms at any time, making it a quick process that takes just a few seconds.

---

## Adding a glossary term

1. Log in to the ****Knowledge base portal**** and navigate to your project.
2. Select the ****Documentation**** tab and click on ****Content tools**** from the left navigation list pane.
3. Navigate to ****Content tools**> **Content reuse** > **Glossary****. Here, you’ll see a list of existing glossary terms (if any have been added).
4. Click **Create** to create a new glossary term.

   Alternatively, click the dropdown to import terms as a CSV file. For detailed instructions on importing terms, refer to [Import Glossary Terms](adding-glossary-term#importing-glossary-terms).
5. Enter the desired term in the provided field.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Create%20glossary%20-%20English.png)

   When adding a glossary term, you will encounter four fields: **Name**, **Language**, **Term**, and **Content**.

   1. **Name:**

      * This field allows you to give a specific name to the glossary term, which will be used for reference.
      * The character limit for the Name is **100 characters**.
   2. **Language:**

      * Choose the appropriate language for the glossary term from the dropdown menu.
      * If you select a language other than **Global**, the option to translate the term into other languages will be enabled.
   3. **Term:**

      * This field is where you enter the actual term or phrase you want to define.
      * The character limit for the Term is also **100 characters** including spaces. Acceptable inputs include letters, numbers, spaces, and special characters such as () - \_ & : ; ? / . , [ ] @ # ! \*.
   4. **Content:**

      * In this field, you can provide a detailed definition or explanation of the term.
      * The character limit for the Content is **500 characters**.
   > NOTE
   >
   > When translating a term into another language, you can use the name for reference across all languages.

6. Once completed, click **Create glossary** to finalize the addition.

   > NOTE
   >
   > When translating an article into other languages, machine translation credits are consumed based on the number of characters.

### Formatting options

Basic text formatting options include:

* Bold
* *Italic*
* Underline
* ~~Strikethrough~~

You can also access additional formatting features, such as:

* Font size
* Font family
* Text color
* Background color
* Subscript and superscript
* Clear formatting

For item lists, you can use Ordered list and Unordered list options.

To insert images, use the **Insert image** feature to upload from a URL, local storage, or Drive. You can also view the snippet in **Code view (HTML)** and switch back to **Editor view** as needed.

> NOTE
>
> If a glossary term is added under "All," it cannot be added at the language-specific level. For example, if you want to define "TXT record" in multiple languages, create a glossary term in English and translate it to other languages. Use the Name field to identify the term across all languages. A term designated as Global cannot be language-specific.

For a better understanding of how a business glossary can help your Knowledge base, read our blog: [**Importance of business glossary in knowledge management**](https://document360.com/blog/knowledge-management-business-glossary/)**.**

---

## Importing glossary terms

You can also effortlessly import multiple glossary terms using the **Import glossary** option. Before importing, you need to prepare a CSV file with glossary terms and their corresponding definitions.

### Import glossary template

You can create a CSV file matching the required template or download a sample to populate your data.

#### Sample CSV format

| Term | Definition |
| --- | --- |
| First term | First term definition |
| Second term | Second term definition |
| Third term | Third term definition |

#### Download sample CSV file

You can download one of the following templates for local use:

* **With data** - Includes sample terms and definitions.

Import glossary - With data

761 Byte

* **Without data** - Contains only row headers.

Import glossary - Without data

20 Byte

> NOTE
>
> Use software like Microsoft Excel, OpenOffice Calc, or Google Docs to open and edit the CSV file.

### Importing glossary terms using the CSV file

Once your CSV is ready, upload it to the platform and start using the glossary terms in your articles and category pages.

1. Navigate to ****Content tools** > **Content reuse** > **Glossary**** in the Knowledge Base portal.
2. Click **Create > Import terms**, and the import popup will appear.
3. Drag and drop the CSV file or use the **Upload** option to select the file from your device.

   Wait a few seconds for validation. The system will display the number of valid and invalid terms.

   If any terms are invalid, click **Download** next to the error count to review the errors, such as "Already associated term" or "Definition exceeds 500 characters."
4. Click **Import**, and the newly added terms will appear in the Glossary overview.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Import%20glossary%20terms.png)

This feature streamlines the glossary management process, saving you time when handling large sets of terms and definitions.

---

## Troubleshooting

### CSV upload error

If you encounter an error message like *"Please make sure the CSV follows the sample template"* when uploading a glossary CSV file, it may be due to the language settings in your Excel application.

**Cause:** The headers in the template file may have been altered if your Excel language is set to anything other than English. The system cannot detect modified headers, leading to upload failure.

**Resolution:** Follow these simple steps to fix the problem:

* Check and change Excel regional settings (Office 365 Web Application)

1. Open the glossary CSV template in Excel.
2. If you are using **Excel in Office365 (Web Application):**

   1. Go to **File > Options > Regional Settings** in Excel.
   2. In the **Change Regional Format Settings** pop-up, select *English (United Kingdom)* from the dropdown in the **Select your preferred regional format for Excel for the web** field.

* Change regional format in Windows:

1. Open Settings in Windows.
2. Navigate to **Time & Language** > **Language & Region**.
3. Change the regional format to **English (United Kingdom)**.

   Once done,
4. Close and reopen the glossary CSV template in Excel.
5. Ensure the headers match the sample template exactly.
6. Save the file again to ensure the correct headers remain intact.
7. Retry uploading the CSV file.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

---

### FAQs

#### Can I add images to the glossary while importing glossary terms from a CSV file?

Only web images can be imported through definitions. Use the tag `<img src="Image_URL"/>` in your definition cell to add images.

For example, to include an image for "JSON Web Token," add the definition in the CSV as: `JSON Web Token <img src="https://jwt.io/img/logo-asset.svg"/>`

Imported images are stored in the Glossary folder in **My Drive** > **Images** > **Glossary**.

#### How do I add a hyperlink inside a glossary?

You can embed a hyperlink within a glossary definition using HTML tags in the **Code view** of the Glossary editor.

**Example:** If you want to hyperlink the word "Google" to `google.com` in the glossary definition, follow these steps:

1. Navigate to the desired glossary and click **Edit** ().
2. In the editor section, click the **Code view** () icon.
3. Add the hyperlink in HTML format as shown below.

```
<p><a href="https://google.com/">Google</a></p>
```

HTML

Copy

4. Click **Update** to save your changes.

Now, when users hover over this glossary term on the Knowledge base site, they can click "Google" to navigate to `google.com`.

<a id="adding-glossary-term-in-articles"></a>

## Inserting glossary term in an article

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Glossary terms are essential for improving your readers' understanding of frequently used terms, abbreviations, acronyms, and industry-specific jargon. By incorporating glossary terms into your articles and category pages, you ensure that readers can easily grasp complex concepts without leaving the content. Glossary terms are visually marked with a dotted underline, allowing users to hover over them for instant definitions. Here's how you can add glossary terms across different editors in Document360.

---

### How to add glossary terms in the Markdown editor?

The Markdown editor allows you to seamlessly add glossary terms to enhance your articles. You can do this using two methods:

#### Method 1 - Using the menu option

1. Open the desired article in the Markdown editor.
2. In the toolbar, click on the **Glossary** icon.
3. The **Insert glossary term(s)** menu will appear, displaying a list of all available glossary terms.
4. Click the checkbox next to the term(s) to select the term(s) you want to insert into your article.
5. Click **Insert**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Glossary%20in%20markdown%20editor.png)

Your selected glossary terms will now be added to the article, enriching the reader's experience.

#### Method 2 - Using the Markdown syntax

If you prefer to use the Markdown syntax or need to manually input a term, follow this method:

1. Open the desired article in the Markdown editor.
2. Enter the following syntax:  
   `{{glossary.Term_name}}`
3. Replace `Term_name` with the exact name of the glossary term you want to add.

> NOTE
>
> Glossary terms are case-sensitive and must match exactly, including any spaces. To find the exact term name, refer to the Glossary section in your Document360 portal.

### How to add glossary terms in the WYSIWYG editor (HTML)?

If you’re working in the WYSIWYG editor, adding glossary terms is simple and efficient. Follow these steps:

1. Open the desired article in the **WYSIWYG editor**.
2. Click on the **Glossary** option in the toolbar.
3. The Insert glossary term(s) pop-up window will appear with a list of available glossary terms.
4. Click the checkbox next to the term(s) to select the term(s) you want to insert into your article.
5. Click **Insert**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Glossary%20in%20WYSIWYG%20editor.png)

The glossary terms will now be embedded within your article, improving clarity and reader engagement.

### How to add glossary terms in the Advanced WYSIWYG editor?

For more advanced formatting or content management needs, the Advanced WYSIWYG editor also supports glossary terms. Here’s how to do it:

1. Open the article in the **Advanced WYSIWYG editor**.
2. Click on the **Insert** menu in the toolbar.
3. From the dropdown, select **Glossary**.
4. A blade will appear, displaying all available glossary terms.
5. Use the search function to find the specific term you want.
6. Click on the term to insert it into the article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Glossary%20in%20Advanced%20WYSIWYG%20editor.png)

The merge code value will appear in the article: `{{glossary.Term_name}}`

> NOTE
>
> While in the editor, you won’t see a live preview of the glossary term. To see how the glossary will appear to readers, click the **View preview** button in the toolbar. This will allow you to view the article with the glossary terms fully rendered, ensuring they are correctly placed.

<a id="editing-and-deleting-glossary-term"></a>

## Managing glossary terms

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Translating glossaries

You can create and manage glossaries in multiple languages, ensuring a consistent and localized user experience when your articles are translated.

1. Navigate to the ****Documentation****() > ****Content tools**** > ****Content reuse**** > ****Glossary**** in the knowledge base portal.
2. Click **Create**.
3. In the **Language** dropdown, select the intended language (except global).
4. Enter the Glossary **Name, Term** and **Content** in English (or your default language).
5. Click the **Translate to other languages** dropdown to translate the term and content into other languages.
6. Select the desired language(s) from the dropdown menu and click **Translate**.

> NOTE
>
> * The default language will be marked as **Main**.
> * Translated languages will be indicated with a green tick to show the complete translation. If needed, you can navigate to specific languages and complete their translation.

7. Once the translations are complete, click **Create glossary** to save the glossary along with its translations.

![Translating the glossaries in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Translating_the_glossary.gif)

---

## Editing a Glossary term

You can edit glossaries in Document360 by following these steps:

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Glossary** in the knowledge base portal.

   The **Glossary** page appears. If you have added any glossaries earlier, you can see them listed here.
2. Hover over the desired glossary and click the Edit **()** icon.
3. You can update the term and definition of the glossary.
4. Navigate to **Translate to other languages** and select the desired language in which the glossary needs to be translated.
5. Click **Translate**.
6. If needed, you can navigate to other languages and translate them.
7. To retranslate the content, click **Translate again**, which will overwrite the existing translation with the new one.
8. If you need to remove the translated glossary for a specific language, click **Remove language**.
9. Once you have made changes, click **Update**.

> NOTE
>
> Global glossaries can be translated.

![Translating, editing a glossary in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Editing_the_glossary.gif)

---

## Deleting a Glossary

To delete a glossary term,

1. Navigate to Documentation () > **Content tools** > **Content reuse** > **Glossary** in the knowledge base portal.

   The **Glossary** page appears. You can find the list of glossaries you have already added.
2. Hover over the desired glossary and click the **Delete** () icon.
3. Click **Yes** in the confirmation prompt.

#### To bulk delete multiple terms

Select multiple intended glossaries from the **Glossary** page and click the **Delete** option at the top of the list.

![Deleting a glossary in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3-ScreenGIF-Deleting_the_glossaries.png)

> **NOTE**
>
> When deleting a term with dependencies, please follow the below instructions to avoid glossary content loss in articles:
>
> 1. Navigate to the desired glossary term and click on the **View** option.
>
>    The **View references** panel will appear, where you can view the list of articles/category pages to which the glossary has been added.
> 2. Click on the Open in new window () icon and open the article in the portal.
> 3. Manually remove the glossary term.
> 4. Navigate back to the glossary page and click **Delete**.

---

## Exporting glossary terms

You can easily export the glossary terms from your knowledge base project as a CSV (Comma Separated Values) file. This feature allows you to back up your glossary data or share it with your team for further analysis.

To streamline the export process, you can download glossary terms specific to a particular language within your project.

To export your glossary terms,

1. Navigate to **Documentation** > **Content tools** > **Content reuse** > **Glossary**.
2. Select the desired language from the **Languages** dropdown at the top.  
    The default selection is **Global**.
3. Click the **Export CSV** button at the top right.
4. Wait for a few seconds to let Document360 compile the terms.
5. A file with a (.csv) extension is downloaded to your local device storage.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Glossary%20-%20Export%20CSV%20option.png)

> NOTE
>
> To open the exported CSV file, you can use Microsoft Excel, OpenOffice Calc, Google Docs, or other CSV tools.

### What data is included in the exported file?

The exported CSV file contains the following information:

* **Glossary Name:** The name of each glossary term.
* **Glossary Definition:** The definition associated with each term.
* **Dependencies:** The number of articles or categories linked to each glossary term.
* **Updated By:** The name of the user who last updated the term.
* **Updated On:** The date when the term was last modified.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Glossary%20-%20Export%20as%20CSV.png)

By exporting your glossary terms, you ensure easy access to important definitions and enhance collaboration within your team. If you have any questions about this process, feel free to consult our support resources for further assistance.

<a id="glossary-overview-page"></a>

## Managing the glossary landing page

**Plans supporting content reuse**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Readers can access all the glossary terms in the selected language knowledge base on the glossary overview page. You can find the alphabetical list of words at the top, where you can navigate to the desired alphabet glossary. Here's your glossary overview page link:

> `https://yourdomain/docs/glossary-overview`  
>  Replace the <yourdomain> with your Knowledge base site domain

---

### Adding the Glossary library page link in the header

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** from the Knowledge base portal.
2. Select the **Customize site** and select the **Header** dropdown menu.
3. Select **Primary navigation**, and click **Add new item** under left side or right side.

   An **Add new item** panel appears.
4. Select **Glossary** in the dropdown.
5. Add the desired text in the Glossary definition. This text appears on the Knowledge base site.
6. If you want the glossary overview page to appear in a new tab, enable the **Open link in new tab** toggle next to the glossary definition.
7. Click **Save**.

![Portal_Screenshot-Update_Add_glossary_in_header](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Update_Add_glossary_in_header.png)

#### Outcome

![Outcome_Screenshot-Update_Add_glossary_in_header_outcome](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Outcome_Screenshot-Update_Add_glossary_in_header_outcome.png)

### Adding the glossary overview page link in the footer

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** from the Knowledge base portal.
2. Select the **Customize site** and select the **Footer** dropdown menu.
3. You can either configure with **Basic footer** or **Custom footer**.

**Basic footer**  
 If you're using the Basic footer option, follow the below steps:  
 \* Select **Basic footer**, and click the **Add new link** button.  
 \* Add the Link name as Glossary (You can change it as per your requirement).  
 \* Type in your glossary overview page URL \*`https://yourdomain/docs/glossary-overview`.  
 \* Once done, click **Add**.  
 \* Click on the **Save** icon > **Publish** to publish the changes in the KB site.

**Custom footer**  
 If you're using the custom footer option, add the glossary overview page URL  
`https://yourdomain/docs/glossary-overview` in the desired code location and click **Save**.

![Portal_Screenshot-Update_Add_glossary_in_footer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Update_Add_glossary_in_footer.png)

#### Outcome

![Outcome_Screenshot-Update_Add_glossary_in_footer_outcome](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Outcome_Screenshot-Update_Add_glossary_in_footer_outcome.png)

---

### Adding the glossary overview page link to the Secondary navigation

1. Navigate to **Settings** > **Knowledge base site** > **Customize site** from the Knowledge base portal.
2. Select the **Customize site** and select the **Header** dropdown menu.
3. Select **Secondary navigation**, and click **Add new item**.

   Make sure the **Show in home page** check box is enabled.
4. You can either configure with **Single level**, **Multiple level** or **Ticket deflector**.
5. Add the desired **title** and type in your glossary overview page URL `https://yourdomain/docs/glossary-overview` in the **link** field.
6. Click **Add**.

![Portal_Screenshot-Update_Add_glossary_in_mrng](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Update_Add_glossary_in_mrng.png)

#### Outcome

![Outcome_Screenshot-Update_Add_glossary_in_the_Menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Outcome_Screenshot-Update_Add_glossary_in_the_Menu.png)

You can also add a glossary overview page link in any other section on the Home page as per your requirement.

<a id="feedback-manager-overview"></a>

## Feedback manager

**Plans supporting feedback manager**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Feedback manager is a content tool in Document360 designed to help you track, evaluate, and respond to feedback from readers on your knowledge base. It is a powerful tool for addressing user concerns and identifying areas where your content may need improvement.

---

## Feedback manager overview

### Accessing the Feedback manager

To access the Feedback manager in Document360,

1. Navigate to **Documentation** () > **Content tools** > **Documentation** > **Feedback manager** in the Knowledge base portal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Feedback_manager_overview(1).png)

### Features of the Feedback manager

The Feedback manager includes two tabs, each serving a specific purpose in managing reader feedback. Both tabs share similar features, such as filtering, assigning feedback, setting feedback status, and exporting feedback data for further analysis.

#### Article feedback tab

The **Article Feedback** tab compiles feedback directly related to individual articles or categories within your knowledge base. This includes reader comments, positive or negative ratings, and any specific concerns raised about the content.

Readers indicate whether an article was helpful by selecting the  **Yes** or  **No** options at the end of each article. If they select  **Yes**, they can add an optional comment. If they select  **No**, they can choose from options like “Need more information” or *“*Difficult to understand” and may add additional feedback. All responses appear in the **Article feedback tab**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Feedback_manager_article_feedback.png)

#### No search results feedback tab

The **No search results feedback** tab captures feedback from readers who did not find results for their search queries. This feedback is useful for uncovering gaps in content or identifying keywords to improve search relevance.

When a reader does not find any results for a particular search query or keyword, they can share their feedback. All feedback is compiled in the **No search results feedback** tab.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Feedback_manager_no_search_results_feedback.png)

---

## Managing feedback in the Article feedback tab

The feedback in the **Article feedback** tab are user feedback related to articles in your knowledge base. You can use this tab to understand the satisfaction of readers with your articles and find opportunities for improvement.

### Reader actions

At the end of each article, readers can show if the article was helpful or not by,

* **Selecting Yes**: Readers can optionally add a comment about why they found the article helpful.
* **Selecting No**: Readers can choose from reasons (like "Need more information" or "Difficult to understand") and add more comments if needed. If the reader wishes to be informed if you reply to their feedback, they can select the **Notify me about updates** checkbox.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Article_feedback_reader_actions.png)

### Responding to article feedback

To respond to feedback in the **Article feedback** tab, follow these steps:

1. **Select feedback**: Choose an item from the list in the **Article feedback** tab.
2. **Review the feedback**: Read through the reader’s comments to understand their input.
3. **Open the associated article**: The article linked to the feedback is displayed in the top right corner. Click the  icon to open the article in the editor in a new tab.
4. **Assign the feedback**: If necessary, assign the feedback to a team member by selecting their name from the **Assignee** dropdown.
5. **Discussions & history**: Update the feedback with any comments/responses related to the feedback in the **Discussions & history** field.

6. **Update the Feedback Status**: Select a status from the **Status** dropdown to indicate the feedback’s progress. The available statuses are:

   1. **Open**: Feedback is assigned the **Open** status by default, indicating it is yet to be addressed.
   2. **Planned**: The **Planned** status shows that the feedback has been reviewed and scheduled for future action.
   3. **In progress**: Set to **In progress** when a team member actively works on the feedback.
   4. **Complete**: When the feedback has been addressed, assign it the **Complete** status. You can still add comments to feedback marked as **Complete** if needed.
   5. **Closed**: The **Closed** status indicates that the feedback is no longer active, and no further actions can be performed.

> NOTE
>
> If the reader has requested a response for their feedback, enable the **Notify end user/reader** toggle after adding your response in the **Discussions & history** field. When you post a response with this toggle enabled, the feedback status will automatically change to **Closed**.

By addressing feedback in this tab, you can enhance the quality and relevance of your articles, ensuring a better experience for your readers.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Article_feedback_steps.png)

---

## Managing feedback in the No search results feedback tab

The **No search results feedback** tab collects feedback from readers who couldn’t find results for their search queries. You can use this feedback to identify content gaps in your knowledge base or adjust keywords to improve search results.

### Reader actions

If a search yields no results, readers can submit feedback to let you know what information they seek. If the reader wishes to be informed if you reply to their feedback, they can select the **Notify me about updates** checkbox.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Search_results_feedback_reader_actions.png)

### Responding to No search results feedback

To respond to feedback in the *no search results feedback* tab, follow these steps:

1. **Review the search query**: Check the search query provided by the user. This information helps you understand what the reader was looking for but couldn’t find.
2. **Understand the feedback**: Read any additional comments from the user to gain more context about their needs.
3. **Assign the feedback**: Use the **Assignee** dropdown to assign the feedback to a relevant team member.
4. **Take action**: Decide the necessary steps to address the feedback, such as creating new content, updating existing articles, or adding relevant keywords to improve search results.
5. **Discussions & history**: Update the feedback with any comments/responses related to the feedback in the **Discussions & history** field.
6. **Update the status**: Use the same status options as in the **Article feedback** tab (Open, Planned, In Progress, Complete, and Closed) to track the feedback’s progress.

> NOTE
>
> If the reader has requested a response for their feedback, enable the **Notify end user/reader** toggle after adding your response in the **Discussions & history** field. When you post a response with this toggle enabled, the feedback status will automatically change to **Closed**.

By addressing feedback in this tab, you can close content gaps and improve the search experience for your readers.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Search_results_feedback_steps.png)

---

## Additional features

Both feedback tabs include tools to make feedback management easier:

* **Filters**: Filter feedback by status, date, assignee, or other options to quickly find what you need.
* **Bulk actions**: Apply actions to multiple feedback entries simultaneously, like assigning feedback or updating statuses.
* **Export to CSV**: By default, feedback data from the past 90 days will be exported for analysis or record-keeping.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Feedback_manager_additional_features.png)

---

### FAQs

**What is the difference between "Complete" and "Closed" in the Feedback Manager?**

In the Feedback manager, the status **Complete** indicates that the feedback has been fully addressed, while **Closed** signifies that all actions related to the feedback are resolved. Once the feedback is closed, it cannot be reopened, whereas feedback in **Complete** status can be set to **Open** if needed.

**For example**:  
Let's say a user submits feedback about an issue with a feature. Once the team reviews and addresses the feedback, they mark it as **Complete** to show the work is done. However, if the user later reports that the issue isn't fully resolved, the team can change the status from **Complete** back to **Open** to continue working on it.

On the other hand, if the feedback is not in scope or the team finishes all related actions, such as updating the documentation and informing the user, they mark the feedback as **Closed**. Once feedback is **Closed**, it cannot be reopened for further changes.

**Can I export the data from the Feedback manager?**

Yes, you can export data from the feedback from the Feedback manager for a maximum of up to 90 days.

<a id="custom-pages"></a>

## Custom pages

**Plans supporting Custom pages**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Custom pages** featurein Document360 allows you to create dedicated, standalone pages for your Knowledge base site. Custom pages are separate from standard articles and provide the flexibility to add content like Terms & Conditions, Privacy policies, Copyrights. With options for customization, multilingual support, and navigation configuration, Custom pages can enhance the user experience of the Knowledge base site and keep your content organized.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Custom_pages_overview.png "Custom page overview - figma(1).png")

> NOTE
>
> This feature is exclusively available for **KB site 2.0** projects.

## Creating a Custom page

Users with Draft writer, or Editor content roles can create a custom page in the Knowledge base portal. You can also create custom roles with exclusive permissions for custom pages.

To create a custom page,

1. Navigate to **Documentation** () > **Content tools** > **Custom pages** in the knowledge base portal.
2. Click on the **Create page** button to open the **Create custom page** popup.
3. In the Create custom page popup, enter the page name and optional description for the custom page. Select the language for the Custom page from the language dropdown.
4. Click **Create** to open the editor.
5. In the editor, enter the desired content for your Custom page.

> NOTE
>
> Users with **Draft writer**, or **Editor** content roles can create a custom page in the Knowledge base portal. You can also create custom roles with exclusive permissions for custom pages.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Creating_custom_page.gif "Create custom page - figma.png")

The editor provides Advanced WYSIWYG options, allowing you to format text, add images, and structure content as needed.

* **Add and format content**: Add content, images and use other formatting and insert options to organize the content as needed.
* **Set SEO details**: Navigate to **More** () > **SEO**, and enter the **Meta title**, **URL slug**, and **Description** for your custom page.
* **Collaborate with team members**: Add inline comments directly on the content, allowing others to provide feedback and suggestions.

Once you have finished creating your custom page, click **Publish** to go live.

> NOTE
>
> To keep a custom page in draft mode, save your content without selecting **Publish**. This keeps the page hidden from the live site until it’s ready to be published.

---

## Managing a Custom page

You can easily manage your custom pages from the **Custom pages** list in **Content tools**.

### Editing a custom page

To edit an existing custom page,

1. In **Content tools** > **Custom Pages**, select the page you wish to edit, and click **Edit** ().
2. Make the desired updates in the editor, such as changing text, images, or page details.
3. **Save** any changes to keep your draft updated or **Publish** to make it live immediately.

### Deleting a custom page

To delete a custom page,

1. In **Content tools** > **Custom Pages**, select the page you wish to delete, and click **Delete** ().
2. Once you click Delete, the **Delete confirmation** popup will open.
3. Click **View dependencies** to see the articles and KB Customizations that use the custom page.
4. Click **Delete** to permanently delete the custom page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Deleting_custom_page.gif "Delete custom page dependencies - figma.png")

> NOTE
>
> Deleted pages cannot be restored, so ensure the page is no longer needed before deleting.

### Cloning a custom page

In **Content tools** > **Custom Pages**, select the page you wish to clone, and click **Clone** (). A duplicate custom page will be created with the prefix **“Clone -”**.

For example, if a clone a custom page titled *Terms and Conditions*, the duplicate custom page will be titled *Clone - Terms and Conditions*.

---

## Multilingual custom pages

Custom pages support machine translation, enabling you to provide content in multiple languages. To translate the custom pages to another language,

1. Click the language dropdown from the top right of the editor to view the available languages.
2. Select the desired language from the dropdown to enable the **Translate** dropdown.
3. Expand the Translate dropdown to view the number of characters to be translated, and the number of characters available for machine translation.
4. Click Translate to translate the contents of your custom page to the desired language.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_GIF-Translating_custom_page.gif "Translate custom page - figma.png")

---

## Try this feature

Once created, custom pages can be added to your Knowledge base site’s navigation. You can integrate a custom page into the site’s [**header**](/help/docs/header-primary-navigation)or [**footer**](/help/docs/footer-navigation), making it visible across your knowledge base.

To add a custom page to the header or footer, go to **Customize Site** in the **Knowledge Base Site** settings, where you can choose the location and display options.

* To add a custom page to a header, select **Custom page** from the list of navigation menus under **Primary navigation**.
* To add a custom page to a footer, enter your desired title, and a link to the Custom page while adding a new link to the footer.

To see custom pages in action, explore the interactive demo below, which showcases how to create and integrate a custom page seamlessly into your Knowledge Base site:

---

### FAQs

**How many custom pages can I create?**

Each project allows up to 5 custom pages by default, with options to add more depending on your plan.

**Can I make a custom page private?**

Yes, you can restrict access to custom pages based on user roles in your knowledge base settings.

**Where will custom pages appear?**

They can be included in the left navigation or placed in the header or footer for quick access across the site. If a custom page is publishing, but not included in the header or footer, only users with a link to the custom page can access it.

**What can I do if I accidentally delete a custom page?**

Deleted pages cannot be restored, so always double-check before deleting.

<a id="tags"></a>

## Tags

**Plans supporting tags**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Tags in Document360 help you easily identify, filter, navigate, and group related articles, category pages, or files within your knowledge base.

---

## What are tags?

A tag is a simple label made up of letters, numbers, words, or phrases that describe the content of an article, category page, or file.

For example, if an article covers software installation, you can apply the tag *Installation*. When readers see this tag next to the article, they’ll instantly know what to expect.

### How tags improve your experience

* Simplify team and reader navigation (via identification, filtering, and browsing)
* Group similar articles or files for easier access
* Improve keyword searches within your knowledge base
* Boost visibility on third-party search engines by generating unique URLs for tags

> NOTE
>
> Try the [AI Tag recommender](/docs/ai-tag-recommender) to automatically generate and apply relevant tags to your content.

### Best practices for using tags

| Do’s | Don’ts |
| --- | --- |
| Keep tags concise | Overuse tags on a single page |
| Use broad category terms | Assign irrelevant or redundant tags |
| Ensure tag consistency across your knowledge base | Make spelling or semantic errors in tag names |

---

## FAQs

**Can I assign multiple tags to a single article or file?**

Yes, you can assign various tags to a single article, category page, or file. This capability enables you to capture the multiple aspects and topics covered within the content.

**What's the advantage of using tags for grouping content?**

Using tags for grouping allows you to create thematic collections of content. For instance, you can group articles from different categories related to a common theme under a specific tag, making it easier for users to explore comprehensive information.

**Do tags have any impact on search functionality?**

Yes, tags enhance search functionality. When users search for specific topics, content with relevant tags will be more accurately identified and presented in search results, helping users find pertinent information faster.

**Can I search for content using tags?**

Yes, you can use tags to refine your search results. Document360 will display a list of content items tagged with that keyword or label when you search for a specific tag.

**Is there a limit to the number of tags I can assign to an item?**

There's no strict limit, but Document360 recommends using a reasonable number of tags to maintain clarity. Assign tags that accurately represent the main themes or topics of the content.

**Is there a limit to the number of tags I can add in a project?**

Yes, you can add up to 1000 tags in a single Document360 project.

**Can I bulk-import tags into my Document360 project?**

No, with the current implementation, you cannot bulk-import tag.

<a id="tag-manager-overview-page"></a>

## Manage tags page overview

**Plans supporting tags**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Manage tags** page in Document360 is your central hub for managing tags within your knowledge base. Here, you can assign tags to articles, category pages, and files stored on Drive. This page also allows you to organize tag groups, helping you consolidate related tags and view their dependencies across all articles, categories, and files.

To access the Tags Overview page, go to **Documentation** > **Content tools** > **Documentation** > **Tags**.

---

## Key features of the Manage tags page

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1.%20Manage%20tags%20page.png)

1. **Create tag**: Easily add new tags to your project, which can be later associated with articles, category pages, and files.
2. **Search tags**: Use this field to quickly filter and search for existing tags in your project. Simply type in the keyword, and relevant results will be displayed below.
3. **Created by**: View the contributor’s name who created each tag, providing transparency and accountability within your tagging strategy.
4. **Date**: Check the creation date for each tag, helping you track updates and changes over time.
5. **Tag dependency**:

   View how many instances each tag has been associated with across:

   * Articles
   * Page category
   * Files in drive
   > NOTE
   >
   > You cannot delete a tag if it has dependencies, meaning it is associated with any articles, category pages, or files. Please remove the tag’s dependencies first before deleting it from the tag library.
6. **Edit options**:

   Access various actions to manage your tags:

   * Edit: Click the edit icon to modify the tag name and description.
   * Move: Easily relocate tags to different categories or groups.
   * Merge tags: Combine similar tags to reduce redundancy.
   * Remove references: Detach tags from specific articles, categories, or files.
   * Delete: Remove tags from your project, ensuring your tagging system stays organized.
7. **Export**: Export all tags in your project to a CSV file for external use or analysis.
8. **Filter**:

   Use the "Filter" option at the top-right to narrow down the displayed tags by various criteria, such as:

   * Tag associations
   * Creation on
   * Created by

---

## FAQs

**Can I view the list of all Tags used in my knowledge base?**

Yes, the **Manage tags** overview page *(****Content tools*** *>* ***Documentation*** *>* ***Tags****)* displays all the tags available in your knowledge base project. This page helps you manage and maintain a consistent tagging strategy across your content.

**Can I view which is associated with which article or file?**

The tag references in articles, categories, and files can be viewed from the **Manage tags** overview page. Click on the number in the consequent columns and View dependencies for the tags.

**Can I edit or remove Tags?**

Yes, you can easily edit or remove Tags at any time. Navigate to the **Manage tags** overview page *(****Content tools*** *>* ***Documentation*** *>* ***Tags****)* select the tag, and the Edit and Delete option appears at the page top.

**Can I merge two or more tags?**

You can merge similar tags by selecting them in the **Manage tags** overview page and clicking on the **Merge tags** option at the top.

**Can I remove tag dependencies?**

You can remove tag dependencies one article/file at a time or use the bulk dependency remove. Select the tags in the **Manage tags** overview page and click on the **Remove dependencies** option at the top.

<a id="adding-a-new-tag"></a>

## Adding a new tag

**Plans supporting tags**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Team accounts in Document360 can create tags to organize articles, page categories, and files in Drive. Tags help classify and manage content efficiently across the project, while also enhancing search functionality by making content easier to find.

> NOTE
>
> Use the [**AI tag recommender**](/help/docs/ai-tag-recommender) feature in Document360 to analyze article content and recommend relevant tags. If no suitable tag exists in your tag library, the recommender can also help you create new tags.

---

## Adding tags to the library

There are **four** methods to add tags to your project's Tag library.

1. From the **Manage tags** overview page
2. From **More article options** in the editor
3. Adding tags to files in **Drive**
4. Adding tags to the articles in the **All articles** page

### Adding tags from the Manage tags overview page

To add tags from the **Manage tags** overview page,

1. Log in to the **Knowledge base portal** and select the **Documentation ()** tab from the left navigation sidebar.
2. Navigate to **Content tools > Documentation > Tags**.
3. On the **Manage tags** overview page, click the **Create tag** button at the top-right.
4. Enter the tag name and description in the respective fields.
5. Select the group you want to associate the tag with (the individual tag is the default selection).
6. Click the **Create** button to add the tag to your project's tag library.

![1_Screenshot-Creating_a_new_tag_method1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Add_tags_content_tools.png)

### Adding tags from More article options in the editor

To add tags in the editor,

1. In the documentation editor, click the **More ()** icon.
2. From the menu, select **Tags** to open the **Article settings** window.
3. In the **Tags** field:

   * Click the field to open a dropdown showing existing tags.
   * Type in the field to search for matching tags. The dropdown will filter results as you type.
   * If the tag you typed does not exist, the dropdown will show an option to create a new tag. Select this option to add the tag to your library.
4. After selecting or creating the desired tags, click **Save** to apply the changes.

![2_ScreenGIF-Creating_tags_in_documentation_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Add_tags_editor.gif)

### Adding tags to files in Drive

To add tags to files in Drive,

1. Navigate to the **Drive** and click on the desired file name.
2. Click the **More ()** icon next to the file name and select either **Add tags** or **View details** to open the **File details** side panel.
3. In the **File details** side panel, locate the **Tags** field.
4. In the **Tags** field:

   * Click the field to open a dropdown showing existing tags.
   * You can type in the field to search for matching tags. The dropdown will filter results based on your input.
   * If the tag you typed does not exist, you will see an option to create a new tag.Click this option to add the new tag.
5. After selecting or creating the desired tags, click the **Update** button to save the changes.

![3_Screenshot-Adding_tags_in_drive_method_3](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Add_tags_drive.png)

### Adding tags to articles from the All articles page

1. From the Knowledge base portal, go to Documentation > All articles.
2. Select one or more articles from the list.
3. Select **Create tags** from the toolbar. This opens the **Create tags** window.
4. In the **Create tags** window:

   * Use the **Tags** field to select existing tags from the dropdown or type to search for tags.
   * If the tag you typed does not exist, select the option to create a new tag.
5. After selecting or creating the desired tags, click **Save** to apply the changes.

![4_Screenshot-Method4_Adding_tags_in_All_articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Add_tags_all_articles.png)

## Tag limitations and details

Below are some of the details and limitations of tags in Document360.

### **Number of tags in a project**

Team members can add up to **1,000 tags** to a single project. Tags are listed on the **Manage tags overview** page, with pagination at the bottom for easier navigation.

### **Tag character limit**

* **Tag name**: The maximum character limit, including spaces, is **30**.
* **Tag description**: The maximum character limit, including spaces, is **100**.

### **Tag description**

* When you hover over a tag in the **Knowledge base portal** or **Knowledge base site**, the tag's description appears as a tooltip.
* On the dedicated **Tags page** in the **Knowledge base site**, the tag description appears below the tag title.

## **Tag naming guidelines**

Tags can include:

* Uppercase and lowercase characters (with multi-language support)
* Numbers
* Spaces
* Selective special characters: **\_ + - @ # % ^ & ! ()**

> NOTE
>
> Tag name cannot contain the following special characters: **\ / : \* ? " <> |**.

<a id="tag-groups-overview"></a>

## Tag groups page overview

**Plans supporting tag groups**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Tags in Document360 help you organize articles, page categories, and files in Drive. But managing a large number of tags can get complicated. To make it easier, Document360 allows you to group related tags into **Tag groups**. Tag groups help you keep your tags organized and easier to manage. Within each group, you can see the tags it contains and their dependencies, making it simple to maintain a clear and organized tag library.

---

## Creating a tag group

To create a tag group,

1. Log in to the **Knowledge base portal** and select the **Documentation ()** tab from the left navigation sidebar.
2. Navigate to **Content tools > Documentation > Tags**.
3. Select the **Groups** tab. You can view the list of Tag groups if you have any.
4. Click on the **Create group** to add a new tag group.
5. Add the **Tag group** name and description and click **Create**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Creating_tag_groups.gif)

## Adding tags to tag groups

There are two methods for adding tags to tag groups.

* **Method 1**: Assign a tag to a group while creating it by selecting the desired group from the **Select group** dropdown.
* **Method 2**: In the tag library, select multiple tags, click **Move** in the toolbar, and assign them to the desired group.

## Deleting tag groups

To delete a tag group, go to the **Tag groups** page, select the group you want to delete, and click **Delete** in the toolbar.

> NOTE
>
> Deleting a tag group will remove all dependencies of the tags in the group from associated articles, page categories, and files. Additionally, the tags themselves will be deleted from the project.

---

### FAQs

#### **Can I add tags to tag groups after creating them?**

Yes, you can add tags to tag groups either while creating the group or later by selecting multiple tags in the tag library and moving them to the desired group.

#### **What happens if I delete a tag group?**

Deleting a tag group will remove all dependencies of the tags in the group from associated articles, page categories, and files, and the tags themselves will be deleted from the project.

#### Is it possible to add tag groups to articles?

No, tag groups cannot be added to articles. They are designed to help organize your tags and provide a way to view all articles associated with the tags in a specific tag group.

<a id="tag-dependency-viewer"></a>

## Manage tag dependencies

**Plans supporting tags**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Tag dependencies allow you to view and manage where tags have been applied in your project, such as articles, page categories, and files in Drive. This ensures you can track and clean up tag usage across your project efficiently.

## Viewing tag dependencies

To view tag dependencies,

1. Navigate to **Documentation** > **Content tools** > **Documentation** > **Tags**.
2. Click the number displayed under the **Articles**, **Page category**, or **Files in drive** columns to open the **Tag dependencies** window and view detailed information.
3. Review the detailed information about the selected tag's usage in the **Tag dependencies** window.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-View_tag_dependencies.png)

### Information available in the Tag dependencies window

In the **Tag dependencies** window, you can view detailed information about where the tag is applied:

* **For articles**: Article title, status (new article, draft, published), workspace, language, article creator, and the article's date of creation.
* **For page categories**: Page category title, status (new article, draft, published), workspace, language, article creator, and the page category's date of creation.
* **For files**: File name.

---

## Removing tag dependencies

You can remove tags from articles, page categories, or files directly from the **Tag dependencies** window by following these steps:

1. Select the desired items (articles, page categories, or files) using the checkboxes.
2. Click **Remove dependencies** to remove the tag from the selected items.
3. To remove the tag from all listed items, click **Select all** and then **Remove dependencies**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Remove_tag_dependencies.png)

<a id="find-and-replace"></a>

## Find and replace

**Plans supporting find and replace**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Find and replace** allows you to search and replace a keyword/phrase across your project's articles and category pages.

You can search only words and numbers and you can replace those with words, numbers, and selective characters.

![4b_Screenshot-Find_and_replace-Text_fields](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4b_Screenshot-Find_and_replace-Text_fields.png)

---

## Performing the find and replace operation

1. Go to the Documentation () icon > **Content tools** > **Documentation** > **Find and replace**.  
   ![1b_Screenshot-Accessing_find_and_replace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1b_Screenshot-Accessing_find_and_replace.png)
2. Enter the desired keyword/phrase you want to search in the **Find** field.

   * A list of articles and category pages which has the keyword/phrase appears.
   * You can use the available filter options by clicking on **Filter** available on the top-right to narrow down the results.
   * Select the **Match whole words** checkbox to find and replace a specific word/phrase.
   > For example, when you replace `page` with `article`, all occurrences of `page` will be replaced with `article` but only when it is a separate word. The word `homepage` will be ignored for this action.

   > NOTE
   >
   > The number of times the term is mentioned in the article is fetched by the **Find** field and displayed as occurences. The occurrences are displayed at the top of the article preview pane.
   >
   > ![2_Screenshot-Find_and_replace-Article_preview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Find_and_replace-Article_preview.png)

3. Select the articles and category pages in which you want to replace the text.

   * To replace the text in the desired article, select the adjacent checkbox.
   * If you want to replace it in all instances, select the check box adjacent to the **Articles/Category pages** column header.
4. Enter the desired keyword/phrase you want to replace in the **Replace with** field.
5. Click **Replace**.

> NOTE
>
> The **Replace** button is enabled only when you select at least one article/category page.

6. Select the desired article status after replacement.

   * **Publish** - To publish the article after replacing the keyword/phrase.
   * **Draft** - To keep the article in the draft after replacing the keyword/phrase.
7. Click **Apply**.
8. To view the full article on a new tab, click on the open article in new tab () icon near the **Article preview**.  
    ![6b_Screenshot-Find_and_replace-Confirmation_prompt](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6b_Screenshot-Find_and_replace-Confirmation_prompt.png)

### Filter options

The following filter options are available:

* **Workspace/Language** - To filter the search results by workspace and language.
* **Visibility** - To filter the search results by visibility status (Visible/Hidden).
* **Status** - To filter the search results by article status (New article/Draft/Published).
* **Contributors** - To filter the search results by contributors. You can search by team account name, and multiple selections are allowed.
* **Tags** - To filter the search results by tags.
* **Updated on** - To filter the search results by last updated date range.

![5d_Screenshot-Find_and_replace-Filters_available](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5d_Screenshot-Find_and_replace-Filters_available.png)

## Find and replace in editor

1. You can also use the **Find and replace** tool within the Editor.
2. Navigate to the desired editor and click the find and replace () icon.  
   ![New_Screenshot-Find&Replace_in_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New__Screenshot-Find&Replace_in_editor.png)

   > NOTE
   >
   > When the tool is used from the editor, it finds and replaces the text only in the respective article.

---

## FAQ(s)

**Who can access the Find and replace?**

Find and replace is available only for team accounts with Content role as **Editor** (or) custom content role with the Perform **Find and replace** permission.

**Can I perform Replace without entering anything in the 'Replace with' field?**

* You can perform Replace without content in the **Replace with** field. The keyword/phrase entered in the **Find** field will be removed from the selected articles and category pages.
* When you enter nothing in the **Replace with** field and click **Replace**, the 'Replace content is not provided' message appears in the 'Confirm replace' prompt.

**Does the 'Replace with' change the Markdown or HTML syntax entered in the editor?**

No, it does not replace the Markdown or HTML syntax entered in the editor. It replaces the text that appears in the Knowledge base article.

> For example, to replace the keyword "Set up" with "Install" in an article with Markdown syntax, enter as : Find - `Set up`; Replace - `Install`.

**Do the search results return the articles in the Recycle bin?**

No, the articles and category pages dumped in the Recycle bin will not be covered in the search.

**How many replacement events can be performed?**

The occurrences in a maximum of 1000 articles can be replaced in a single event.

A tool in Document360 used by writers to draft and format content. Document360 offers three types of editors: Markdown, WYSIWYG, and Advanced WYSIWYG.

Permissions assigned to a team account in Document360 that define the actions they can perform on knowledge base content, such as creating, editing, or managing articles and categories.

![8_Screenshot-Content_role_view permission](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Content_role_view%20permission.png)

A folder in the Document360 drive where deleted files and folders are temporarily stored. It allows users to recover accidentally deleted items if needed. Deleted items are stored for 30 days before they are deleted permanently.

<a id="seo-descriptions"></a>

## SEO descriptions

**Plans supporting SEO description**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

SEO descriptions can be added for individual articles in the article settings. To manage or generate SEO descriptions for multiple articles or page categories, use the SEO description tool in the Content tools section.

## Generating SEO descriptions

To manage the SEO descriptions for multiple articles or page categories,

1. Log in to the Knowledge base portal and choose the desired project.
2. Choose a workspace from the Workspace dropdown menu. Make sure the workspace language is set to English.
3. Navigate to **Content tools** > **Documentation** > **SEO description** in the Documentation tab.
4. Select the checkbox next to each article for which you want to generate SEO descriptions.

> NOTE
>
> Articles with fewer than 200 words are ineligible for SEO description generation, and their checkboxes will be disabled.

5. Click **Ask Eddy AI** in the top-right corner to generate SEO descriptions for the selected articles.
6. Review the generated descriptions in the SEO description column:

   1. If you are satisfied with all generated descriptions, click **Save**.
   2. If you are not satisfied with any description, click **Cancel**.
   3. For partially satisfactory results, click **Save** or **Cancel** individually for each article in its respective row.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Content_tools_seo_description.gif)

### Filters in the SEO description tool

You can use the Filter dropdown to quickly identify the articles for which you want to generate SEO descriptions.

The following filters are available in the **Filter** dropdown:

* **SEO description**

  + **Available**:Filter the articles with existing SEO description.
  + **Not available**: Filter the articles without an existing SEO description.
* **Category**: Filter the articles by category or subcategory.
* **Contributor**: Filter the articles by contributors.
* **Tags**: Filter the articles with the tags.
* **Updated on**: Filter the articles updated within a time frame or a specific range of dates.

---

### FAQs

#### **What happens when I use the “Select all” option and try to generate SEO descriptions for articles with fewer than 200 words?**

When using the **Select all** option, all articles on the page are selected, including those with fewer than 200 words. If you proceed to generate SEO descriptions, a confirmation prompt will notify you that descriptions cannot be generated for these articles. To continue generating descriptions for eligible articles, type "yes" in the field and confirm by clicking **Yes**.

#### How do I generate the SEO description for individual articles from the editor?

You can generate the SEO description for individual articles from the editor using the [**AI SEO description generator**](/help/docs/seo-description-generator).

#### What are some best practices while draft SEO titles and descriptions?

#### Best practices for SEO descriptions

1. **Keep it concise (around 155-160 characters):** Meta descriptions should be brief yet informative. They are snippets that appear in search engine results, so ensure they’re clear and concise.
2. **Include relevant keywords:** Incorporate primary and secondary keywords naturally, reflecting the core topic of the article to improve discoverability.
3. **Align with user intent:** Ensure the meta description answers what your target audience might be looking for. This helps increase click-through rates by attracting the right audience.
4. **Make it actionable:** Use calls to action like “Learn more,” “Discover,” or “Get started” to encourage users to click on your link.
5. **Unique for every page:** Ensure every page on your website has a unique meta description to avoid duplicate content issues.
6. **Avoid keyword stuffing:** Overloading the meta description with too many keywords can make it seem unnatural and may negatively impact SEO.

#### Best practices for SEO titles

1. **Optimal length (50-60 characters):** Keep your title under 60 characters to ensure it doesn’t get cut off in search results.
2. **Include primary keywords:** The title should include your primary keywords, preferably at the beginning, to improve relevance for search engines.
3. **Reflect the article’s content:** The title should accurately represent the article’s subject matter to avoid misleading users or increasing bounce rates.
4. **Make it engaging:** Write compelling titles that spark interest. Use power words or questions to attract user attention.
5. **Avoid redundancy:** Ensure your title is clear, straightforward, and free from unnecessary repetition of words.
6. **Brand inclusion (optional):** You can add your brand’s name at the end of the title to improve brand visibility, but only if space allows without truncating essential keywords.

<a id="export-documentation-as-zip"></a>

## Exporting your Document360 project as a ZIP file

**Plans supporting import and export of project**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Using the **Export** option in Document360, you can export and download the contents of your project as **ZIP** file.

The exported Document360 ZIP file contains the following:

* Articles and category pages
* Media files hosted in Drive (Exporting media files is optional)

The exported project ZIP file can be easily imported onto another project in Document360.

---

## Exporting a project

To export a Document360 project as a ZIP file,

1. Navigate to **Documentation ()** > **Content tools** > **Import & Export** > **Import & Export project**.
2. Click the **Export** button to open the **Export project** popup.
3. In the **Export project** popup, select the **Article modified on** option that matches the articles you want to export. Choose **All** to export all articles, **7 days**, **30 days**, or **90 days** to export articles modified within the selected timeframe, or **Custom date** to specify a custom date range.
4. Select the workspace you wish to export by checking the box next to the workspace name. Selecting a workspace includes all languages and categories within that workspace.
5. To export specific languages and categories within a workspace, click the arrow next to the workspace name to view the available languages. Then, click the arrow next to each language to display its categories. You can select specific languages and categories as needed.

> NOTE
>
> As you make the selections, the total categories selected for export are displayed at the top-right of the frame.

6. Check the **Include media files** box to include related media files in the exported ZIP file.
7. Click **Export** to begin exporting the project contents.

> NOTE
>
> Depending on the size of the content selection, the time taken to export may vary.
>
> For example, the typical sample project content provided by Document360 is usually exported in 60 seconds or less.

![Screengif-Updated_Exporting_your_Document360_project_as_a_ZIP_file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Export_project_file.gif)

The export process is initiated, and you will get a notification popup at the top-right when the export is complete and ready for download. You can navigate to other modules while the export is in progress.

---

## Downloading the ZIP file

To download the exported Document360 project ZIP file,

1. Navigate to **Documentation ()** > **Content tools** > **Import & Export** > **Import & Export project**. The latest exported file will be available under **Recent files** (The date and time of export will be available in the file).
2. Click **Download** to save the file in your local storage (or)Click **Copy link** to generate a downloadable link for the export file.

![Screenshot-Updated_Import_and_Export_projects-Download_the_exported_file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Download_exported_project_zip_file.png)

## Export project API endpoint

* To use the export project API endpoint, you should be on the **Business** or **Enterprise** plan. You can use it up to 2 times per day.

> NOTE
>
> Once you perform a new export operation, the previously exported ZIP available for download is overwritten.

---

### FAQ

**In what format are the articles available in the exported ZIP file?**

If you select a single language while exporting your Document360 project:

* Articles created in the **Markdown editor** will be in **.md** format.
* Articles created in the **WYSIWYG/Advanced WYSIWYG editor** will be in **.html** format.

If you select multiple languages while exporting your Document360 project:

* All articles will be downloaded in **.json** format.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="import-a-documentation-project"></a>

## Importing a Document360 project ZIP file

**Plans supporting import and export of project**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Once you complete exporting the **Document360** **ZIP files**, they can be imported to any project. This is useful when you need to migrate your knowledge base from one project to another, or if you need to restore your knowledge base from a backup ZIP file.

Importing a **Document360** ZIP file includes:

* Articles and category pages
* Media files included in the exported ZIP file

> NOTE
>
> To import a **Document360** project, the team account must have the **Editor** content role. For custom content roles, the account must have **Update** and **Publish access** to the **Project Import & Export** feature.

---

## Importing a project ZIP file

To import a **Document360** project ZIP file,

1. Navigate to **Documentation**() > **Content tools** > **Import and export** > **Import and export project** in the Knowledge base portal.
2. Click the **Import**  button to open the **Import project** panel.
3. Drag and drop the project ZIP file from your local storage or use the **Upload** option to select the ZIP file.

   Document360 will upload and validate the ZIP file.
4. If you need to choose a different ZIP file, click **Replace**.
5. After successful validation, a confirmation message will display details about the ZIP file, such as:

   * **Languages**
   * **Number of categories**
   * **Number of articles**
6. Select the **Set article status to publish** checkbox if you want all the imported articles to be published. If the checkbox is not marked, all the imported articles remain in the **Draft** state.
7. Click **Import**  to finalize the process.

Once the ZIP file is successfully imported into your desired project, all articles and media files will become available within the project.

![Screenshot-Updated_importing_document360_successfull](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Import_zip_file_process.gif)

---

### Importing projects with the same workspace slug

When importing a project ZIP file into another project with the same workspace slug:

* The imported articles and categories will merge with the existing articles and categories within the same workspace.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Importing_Document360_project_within_same_workspace.png)

If the workspace slug of the destination project differs from the slug in the imported ZIP file:

* A **new workspace** will be created with the workspace name and slug from the imported project. All imported data will be added to this new workspace.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Importing_Document360_project_as_seperate_workspace.png)

---

### Importing a project ZIP file into a specific workspace without overriding existing content

To import a project ZIP file into a specific workspace while avoiding conflicts with existing articles or workspace slug:

1. Export the desired categories from your **Document360** project as a ZIP file.
2. Extract the ZIP file in your local file explorer.

   The extracted folder contains two main directories: **Media** and **workspace\_slug**.

   * **Media**: Contains all media files of the project.
   * **workspace\_slug**: Contains two folders and a JSON file:  
     a) **Articles**: List of articles in the project.  
     b) **Categories**: List of page categories in the project.  
     c) **workspace\_slug\_category\_articles**: A source file with workspace and article data.
3. Open the **workspace\_slug\_category\_articles** file in a code editor.
4. Modify the workspace name and slug to match the destination workspace name and slug.
5. Save your changes and rename the JSON file using the destination workspace slug format: `workspace_slug_category_articles`.

   **Example:** `v2_category_articles`
6. If needed, update the slugs of articles or categories, and the language code in the extracted folders.
7. Compress the modified files into a new ZIP file and name it using the destination workspace slug.
8. Return to your **Document360** project and import the newly created ZIP file.

In this example, we are importing a project ZIP file with the workspace slug **v1** into a project with the workspace slug **v2**. To match the target workspace **v2**, we update the workspace name and slug in the **v1** ZIP file.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGIF-Importing_steps_of_Document360_project.gif)

The above screen recording demonstrates how to change the workspace slug and name from **v1** to **v2** in the extracted files, re-compress the modified files into a new ZIP file, and successfully import them into the **Document360** project with the workspace slug **v2**.

---

### FAQs

#### What happens to my existing content when I import Document360 project data from a ZIP file?

Importing project data from a **Document360** ZIP file behaves differently based on the workspace slug:

* If the workspace slug in the ZIP file matches the destination project’s workspace slug, the imported articles and categories will merge with the existing articles and categories within the same workspace.
* If the workspace slug in the ZIP file differs from the destination project’s slug, a new workspace will be created using the workspace name and slug from the imported project. All imported data will be added to this new workspace.

Importing the ZIP file does not affect your project’s settings. Be sure to back up any important data before proceeding with the import.

#### What happens if I import a ZIP file into the same project it was exported from?

If you import a ZIP file into the same project from which it was exported, any articles in the ZIP file that match existing articles in the project will be overwritten with the version from the ZIP file. Articles that do not exist in the ZIP file will remain unchanged.

#### How do I find the Workspace slug URL for my project?

1. Navigate to the desired **Document360** project.
2. Go to **Settings**() > **Knowledge base portal** > **Localization & Workspaces**.
3. In the **Localization & Workspaces** tab, hover over the desired workspace and click the **Edit**() icon.

   The **Edit workspace** panel will appear.
4. In the **Slug URL** field, locate the slug URL for the workspace.

#### Can I import only ZIP files for Document360 projects? Are ZIP files from other platforms supported?

No, ZIP files from other platforms are not supported. Only project export ZIP files generated in **Document360** can be used while importing content to a project.

#### What is the maximum size for Document360 project ZIP files I can upload?

**Document360** project ZIP files can be uploaded up to a maximum size of 1 GB.

#### Why did my Document360 export file fail to import?

There are several reasons why your **Document360** export file may fail to import:

1. **Unsupported features**  
   If the export file contains workspaces, languages, or other features not supported in your current Document360 plan, the upload will fail. Hover over the info icon for details on unsupported features.
2. **Mismatched slugs and workspace names**  
   The workspace names and slugs in the source and destination projects do not match. Ensure these align before attempting the upload.
3. **Incorrect file format**  
   The imported file must follow the required format for the import process. Verify the structure and ensure it meets the necessary guidelines.
4. **Missing languages in destination**  
   If the import file contains languages that are not available in the destination workspace, the upload will not proceed. Add the required languages to the destination workspace before uploading.

![Screenshot-Updated_importing_document360_successfull](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Import_zip_file_error.png)

<a id="migrating-documentation-from-another-knowledge-base-platform"></a>

## Migrating documentation from other platforms

**Plans supporting content migration**

| Professional | Business | Enterprise |
| --- | --- | --- |
| **✓** | **✓** | **✓** |

Document360 supports migration from 100+ Knowledge base platforms. Document360 provides migration support as an add-on in the Business and Enterprise plans.

Migrating documentation from one knowledge base platform to another platform can be tricky and overwhelming. With Document360, it is just a simple process.

The Document360 migration team has helped customers migrate from other platforms such as

* Zendesk
* Freshdesk
* HelpDocs
* WordPress
* KnowledgeOwl
* GitHub
* Intercom
* Drift
* Confluence  
   and many more.

![4_Screenshot-Migration-Platforms_supported](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731245595890.png)

### Initiating a migration request

Get the latest information on migration to Document360 on the [**Migration page**](https://document360.com/migration-request/) on our website. You can initiate a migration request from the website through the [**Migration request form**](https://document360.com/migration-request/#MigrationForm).

If you're currently using a trial version of Document360, to migrate your existing knowledge base content to Document360, follow these steps.

1. Navigate to **Documentation** ()> **Content tools** > **Import & Export** > **Migrate content**.

![Screenshot-Updated_Migration-Accessing_migration_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731245662452.png)

2. Click the **Initiate migration** button and a popup appears.
3. Enter the hyperlink to your existing external knowledge base or product documentation site in the **External knowledge base link** field.

   This refers to the link at which your content is currently hosted.  
   For example, docs.yourcompany.com
4. Enter the knowledge base platform used in the **Current platform** field.

   This refers to the platform currently hosting your documentation.  
   For example, Zendesk, Intercom, Confluence, etc.
5. Click the **Submit** button.

![Screenshot-Updates_Migration-Accessing_migration_page_request](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731245721164.png)

Once you submit the information, one of Document360's migration experts will contact you to help with the migration process.

---

## Document360 migration - What happens next?

![Screenshot-Updated_Migration-Process](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731245759014.png)

### Step 1: Kick-off

Document360's migration expert will contact you to understand your current knowledge base system and provide an estimate. We can migrate from pretty much any existing knowledge base system or platform.

### Step 2: Migrate

The migration team then uses automated tools and manual processes to migrate your knowledge base. This will be an iterative process with regular updates and sync-ups.

### Step 3: Test

We perform a thorough QA (Quality Assurance) process, set redirection rules, and make sure your new Document360 knowledge base is live without losing any of your existing SEO (Search Engine Optimization) traffic.

### To set up a redirect rule for the subfolder URL path

When you migrate from another platform to Document360, you must set up a redirect rule at the subfolder level. This will enable any URLs from your previous platform to redirect to documentation in your current knowledge base in Document360.

Follow the below steps to set up a redirect rule for the subfolder URL path:

1. Go to **Settings** > **Knowledge base site** > **Article redirect rules** > **New redirect**.
2. Select Redirect type as **Replace with**.
3. Enter the old subfolder path in the **Source path** field.
4. Enter the subfolder path you want to redirect in the **Destination URL** field.
5. Click **Save**.

> **For example**, you want to redirect the subfolder path `/help/customer/` to `/docs/en/` in the URLs `https://docs.churn360.com/help/customer/article_slug`.
>
> * Enter `/help/customer/` in the **Source path** field.
> * Enter `/docs/en/` in the Destination URL field.
>
> With the above redirect rule, all the URLs with subfolder path `/help/customer/` in the configured knowledge base domain (`https://docs.churn360.com/`) will be redirected to the subfolder path `/docs/en`.

---

### FAQ

**Why should I set up a redirect rule when I change the subfolder path?**

Your readers would have bookmarked the articles in your old knowledge base. Your articles would be backlinked in internal and external articles as references. So, when you do not set up a redirect rule for these URLs, it will lead to a 404 error page. 404 error pages play a negative role in google search index which will pull down google search results and mainly cause a bad reader experience.

<a id="pdf-design-templates"></a>

## Designing a PDF template

**Plans supporting export to PDF**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

PDF templates (previously "Design templates") define the PDF's design, styling, and text formatting aspects ready to be exported. Templates help maintain brand consistency for the different PDFs generated.  
 PDF templates are chosen along with other settings when the Team account initiates a new **Export to PDF**.

Team accounts can choose the existing system template (Default) or create a new one.

---

## PDF templates overview page

Users can access the PDF templates in the Knowledge base portal.

1. Go to the Documentation () icon > **Content tools** > **Import & Export** > **Export to PDF**.
2. Select the **PDF template** tab at the top.
3. You can find the list of PDF templates available (both system templates and custom templates).

   The information available here is the Template name and the last modified time/date. The data can be sorted in ascending or descending order.
4. The template name is the name of the respective project (If this feature is being accessed for the first time and no custom template is added).
5. You can add and manage all PDF templates from this page.  
    ![1_Screenshot-Accessing_the_PDF_templates_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_the_PDF_templates_overview.png)

   ### Template actions on the overview page

   You can perform the following action on the PDF templates on the overview page. The individual template controls are visible when the user hovers the mouse pointer over each template.

* **Clone**: Create a duplicate template similar to the original. Clicking on the clone button would open the PDF template settings page. ‘Clone’ will be added to the original template name. The user can make the necessary changes and click **Save**.
* **Edit:** Users can click on the **Edit** button and edit all the previously saved settings on the template. Once the changes are done, click on the **Save** button. Click on the **Back** button to return to the overview page.
* **Delete**: Click the Delete option to remove any design template from the list. A delete confirmation prompt is displayed. Click **Yes**.  
   The delete option is disabled for the default template. Also, if only one template is available in the list, that is considered a default template.
* **Create new template**: Unlike the other actions, this action has a dedicated button at the top of the page. Users can click this button to create and add new PDF templates to the list.

![4_Screenshot-Updated_PDF_templates_create_new_template](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Updated_PDF_templates_create_new_template.gif)

---

## New PDF template

On the design template overview page, click on the **Create new template** button at the top. A design settings window appears. Specify the following settings in each section.

---

### Template name

Add a name for the new design template. This is a mandatory field. The name can be a maximum of 250 characters with space. Letters, numbers, spaces, and special characters (- and \_) can be added.

![5_Screenshot-PDF_templates_create_new_template_overall_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-PDF_templates_create_new_template_overall_settings.png)

There are three main design segregations for creating the PDF template.

### **1.  Design options**

#### Layout style

Select the page orientation of the template (Portrait or Landscape). Choose between **Portrait** (Height > Width)

or \*\* \*\* (Height < Width).

![6_Screenshot-PDF_templates_create_new_template_display_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-PDF_templates_create_new_template_display_settings.png)

#### Margin

You can choose from the four different system margins or a custom margin.

![7_Screenshot-PDF_templates_create_new_template_display_settings_Margins](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-PDF_templates_create_new_template_display_settings_Margins.png)

* **Normal** - Top: 50px, Bottom: 50px, Left: 60px, Right: 60px
* **Moderate** - Top: 30px, Bottom: 30px, Left: 40px, Right: 40px
* **Narrow** - Top: 10px, Bottom: 10px, Left: 15px, Right: 15px
* **Wide** - Top: 70px, Bottom: 70px, Left: 80px, Right: 80px
* **Custom margins** - The margins can be set from a minimum of 10 pixels to 80 pixels

![8_Screenshot-PDF_templates_create_new_template_display_settings_Custom_margins](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-PDF_templates_create_new_template_display_settings_Custom_margins.png)

#### Cover page

You can add a cover page to the PDF template by turning on the toggle. The cover page is the first page in the PDF file. The cover page is applied only if the checkbox is selected.  
You can preview the cover page on the right.

![1_advancedPDFtemplate](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_advancedPDFtemplate.png)

**a.  Title:** The title text that appears on the Cover. The title must be less than or equal to **15 characters**. It can comprise letters, numbers, spaces, and special characters.

**b.  Description:** Provide a short description of the PDF document. The description must be less than or equal to **500 characters**. It can comprise letters, numbers, spaces, and special characters.

**c.  Color:** Specify the text color of the Title and description on the cover. Use the color picker or the hex code to specify the color.

**d.  Logo:** Upload any logo image to appear on the cover page. Click on the **Click to upload logo or image** button, select the image from the local storage file explorer, and click the **Open** button.  
You can select the three standard square sizes available **Small**(150px), **Medium**(200px), **Large**(250px), or choose a **Custom size** in pixels. The canvas size can be between 20 and 350 pixels in width and height.

**e. Image:** Upload any image to appear on the cover page. Click on the **Background color / image** to select the background color. Choose the color from the pop-up color palette. Click image and click **Click to upload** to upload an image.

#### Terms & conditions

Click on the checkbox to insert any article or custom text into the exported PDF document.

![10_Screenshot-PDF_templates_create_new_template_display_settings_Terms_and_conditions](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-PDF_templates_create_new_template_display_settings_Terms_and_conditions.png)

* **Link existing article**- You can choose any one of the existing articles from the project to be included as default in the PDF template.
* **Custom** - You can use the text formatting options to draft custom content to appear in the PDFs.  You can add text, numbers, special characters, and links to the field.

  > NOTE
  >
  > There are no character limits for the Terms & Conditions.

#### Table of content

Select the checkbox to enable the table of contents in your PDF document.  The table of contents helps in easy navigation to the section of the PDF documents.

![11_Screenshot-PDF_templates_create_new_template_display_settings_Table_of_contents](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-PDF_templates_create_new_template_display_settings_Table_of_contents.png)

You can select the checkbox(s) of the heading(s) to make them visible in the table of content in the PDF.  When you choose a subheading, all the higher-level headings are automatically selected.

For example, when you select H4, H2 and H3 are automatically selected.

The page numbers are added to the heading on the Table of Contents page.

**Using Table of contents in a document**  
 A table of contents serves two primary functions:

* It's a straightforward way to show every topic your PDF covers at a glance
* It makes document navigation a breeze by clearly showing the page on which each subject is explained

#### Watermark

Turn on the **Enable watermark** available at the bottom.  
 You can choose a text or image watermark on your PDF document.

> **What is a watermark?**  
>  A **watermark** is a text or image behind the document's main text.  It is usually a lighter shade than the text to read the document easily.
>
> Text watermarks are often used to categorize or show a document's purpose with words such as DRAFT, CONFIDENTIAL, etc.
>
> Image watermarks add brand identity, visual attention, and a professional look with imagery such as logos.

![12_Screenshot-PDF_templates_create_new_template_display_settings_watermark](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-PDF_templates_create_new_template_display_settings_watermark.png)

* **Text watermark** - A simple text can be added as a watermark using the text field.  The character limit is maximum of 65 characters including spaces
* **Image watermark** - If an image watermark is required, select an image, click on the **Click to upload logo or image**, and select an image from your local storage file explorer to continue.  
   You can select the three standard square sizes available **Small**(150px), **Medium**(200px), **Large**(250px), or choose a **Custom size** in pixels.  The canvas size can be between 20 and 350 pixels in width and height.

### 2.  Header & footer

#### Header image

Set a header image for the PDF doc template using this section.  This acts as a logo (or any image) placeholder on all the pages except for the cover.  
 Click on the **Click to upload logo or image** option and select the required image from the local storage file explorer.

![13_Screenshot-PDF_templates_create_new_template_Header_and_footer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-PDF_templates_create_new_template_Header_and_footer.png)

* **Alignment** - You can select the position of the header image in the document.  The selections available are **Left, Center,** or **Right**.
* **Image size** - Users can select the three standard sizes available **Small**(50x60px), **Medium**(70x80px), **Large**(80x95px), or choose a **Custom size** in pixels. The canvas size for **Height** and **Width** can be between 20 and 85 pixels.

#### Page numbers

Click on the checkbox to enable page numbers on each page.

![14_Screenshot-PDF_templates_create_new_template_Page_number](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-PDF_templates_create_new_template_Page_number.png)

* **Page number type** - Users can select from the three types of page numbers provided

  > + Page 1 of 10, Page 2 of 10, ...
  > + Page 1, Page 2, Page 3....,
  > + 1,2,3...
* **Text alignment** - Choose the position of the page number in the document, **Left, Center or Right**

#### Footer text

Click on the checkbox to enable the footer text in your document.  The footer text has no character limit and can comprise letters, numbers, spaces, and special characters.

![15_Screenshot-PDF_templates_create_new_template_Footer_text](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_Screenshot-PDF_templates_create_new_template_Footer_text.png)

* **Content** - Type in the content that appears in the document's footer section
* **Font size** -The font size (10 to 16) can be customized based on the requirement.
* **Font color** - Specify the text color of the footer content.  Use the color picker or the hex code to specify the color.

> NOTE
>
> As the footer space in the PDF page is dynamic based on the text and font size, the text does not appear truncated in the final document.

### 3.  Text Settings

Specify the Heading and paragraph font-related settings for the PDF text in this section.

![19_Screenshot-PDF_templates_New_template_Text_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/19_Screenshot-PDF_templates_New_template_Text_settings.png)

#### Heading text settings

* **Font family** - Select the font family for the Headings in the PDF document

  For example, Arial, Calibri, Verdana, etc.
* **Heading color** - Specify the text color of the Heading tags (H2, H3, H4). Use the color picker or the hex code to specify the color

#### Paragraph text settings

* **Font family** - Select the font family for the Headings in the PDF document

  For example, Arial, Calibri, Verdana, etc.
* **Font size** - Choose the font size(10 to 24) in the PDF design template
* **Font color** - Specify the text color of the paragraph content.  Use the color picker or the hex code to specify the color
* **Disable links** - Turn on or off the hyperlinks in the PDF that you want to export.  When you turn on the toggle, other than the table of contents and direct URL, the hyperlinks in the PDF are disabled

  For example, when you turn on the **Disable links** toggle and export a PDF, the hyperlinks in the exported PDF are disabled.  However, the hyperlinks of the table of content and direct URL work.
* **Links color** - Specify the color of the links that appear in the document.  Use the color picker or the hex code to specify the color

  > **Pro tip** - Choose the color that aligns with your brand or the Heading color for a more visual appeal

---

## Default template

Any created PDF template can be set as a **Default** template.  The default template is available without selection in the "Select PDF template" when you initiate an Export to PDF.

![16_Screenshot-PDF_templates_create_new_template_Set_as_default](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_Screenshot-PDF_templates_create_new_template_Set_as_default.png)

Click on the **Set as default setting** on the design template page before you **Save** any template. A **Default** tag appears next to the template name on the design template overview page.

![17_Screenshot-PDF_templates_default_template](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_Screenshot-PDF_templates_default_template.png)

> NOTE
>
> The default design template cannot be deleted.

---

## FAQ(s)

**What are PDF templates?**

PDF design templates are pre-designed layouts or formats that can be used as a starting point for creating professional-looking PDF documents. They provide structured and design elements, such as fonts, colors, and graphics, that can be customized with specific content.

**How can the PDF templates benefit me?**

PDF templates save time and effort by providing a ready-made framework for your documents. They ensure consistency in branding and visual appeal, making your PDFs look polished and visually appealing. Templates also streamline the design process, allowing you to focus on content compilation rather than starting from scratch.

**Can I customize PDF templates to fit my needs?**

Yes, PDF templates are meant to be customizable. You can modify the text, images, colors, and layout of the template to align with your specific requirements. This allows you to maintain your brand identity while tailoring the design to suit your content and purpose.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="compliling-content-for-pdf"></a>

## Compiling content for PDF

**Plans supporting export to PDF**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Create a new PDF (customizing the content you want in your PDF) and add PDF attributes like file name, choosing templates, and choosing the content. The exported PDF can also be password-protected if the user chooses to add a level of access security.

---

## Export to PDF

Go to **Documentation**() > **Content tools** > **Import & Export** > **Export to PDF**, and the Content templates tab is the default selection.

> NOTE
>
> You can only export **published articles** and **category pages**. All the hidden articles/categories are will not be available for export.

### Create new PDF

Follow the below steps to create a new PDF.

1. In the **Export to PDF** page, click the **Create new PDF** button on the top right corner.   
   The **Start export** page opens.
2. Enter the **Name** for the PDF.
3. Enter a **Password** if you want to password-protect your PDF.
4. In the **Select PDF template** field, choose the required PDF template from the dropdown menu.   
   The design template is used to style the PDF content template. Users can configure the visual aspects like the cover page, table of contents, watermark, layout, header & footer, and font settings.   
   To learn more about creating PDF templates, read the article on Designing a PDF template.
5. Select the required **Workspace**.
6. Select the required **Language**.   
   ![2-Screenshot_Start-Export](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2-Screenshot_Start-export.png)You can view the preview of the selected template on the right side. You can navigate between Cover, Terms, ToC, and Content previews.
7. In the **Categories & articles** section, click **Select category articles** to choose the categories.
8. In the **Add categories & articles** popup window, select the sub-categories and articles that you want to export.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3-Screenshot_Add-categories-and-articles_1.png)

8. Click **Done** to confirm selection.
9. Click **Export** to initiate export to PDF.  
   The **Export Status** will be updated as *Success* on completion.

> NOTE
>
> You can now download multiple articles from one or more categories on your knowledge base site as PDFs.

---

## Other actions on PDF

You can perform the following actions on the exported PDF.

1. **Download**: Save the generated PDF in your computer.
2. **Regenerate**: Perform the export function again. Clicking on this option exports the latest content available to the PDF.
3. **Clone**: Create a duplicate of the content template with all the attributes similar to the original template.
4. **Edit**: Make changes to the attributes of the content template.
5. **Export details**: View the file name, version, language, categories and articles in the exported PDF.
6. **Delete**: Remove the content template from the template library. This action cannot be reversed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4-Screenshot_Export-to-PDF-actions_1.png)

---

### FAQs

#### How can I share draft articles with members outside my project team?

In the Advanced WYSIWYG editor, you can share draft articles with members who are not part of your project team by using the "Export PDF" option.

1. Navigate to the desired article in the Advanced WYSIWYG editor.
2. Select the More (•••) options > **Export PDF**
3. Download a PDF version of the draft article.

   You can then share this PDF with the relevant members.

#### Why are SVG images not visible in my exported PDFs?

SVG images may not appear in exported PDFs due to a limitation of the SelectPDF plugin, which is used for converting HTML to PDF. When SVGs are included using the `<img>` tag, they are not rendered in the PDF. This is a known limitation of the SelectPDF plugin.  
As a workaround, you can:

1. Convert the SVG file into a supported image format such as PNG or JPG.
2. Re-upload the converted file.

<a id="analytics"></a>

## Analytics

**Plans supporting analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Analytics** section in Document360 provides a comprehensive overview of your Knowledge base's performance, offering insights to help you optimize content and enhance user engagement. It is categorized into several detailed reports:

* [Articles analytics](/help/docs/articles-geography-and-performance)
* [Eddy AI assistive search analytics](/help/docs/eddy-ai-search-analytics)
* [Search analytics](/help/docs/analytics-search)
* [Reader analytics](/help/docs/reader-analytics)
* [Team accounts analytics](/help/docs/analytics-team-accounts)
* [Feedback analytics](/help/docs/feedback)
* [Links status analytics](/help/docs/links-status)
* [Page not found analytics](/help/docs/page-not-found-analytics)
* [Ticket deflector](/help/docs/ticket-deflector-overview)

### Plan availability

The following analytics features are available based on your subscription plan:

* **Professional plan only**:

  + Eddy AI assistive search analytics
  + Links status analytics
  + Page not found analytics
  + Ticket deflector analytics
* **Professional and Business plans**:

  + Article analytics
  + Search analytics
  + Reader analytics
  + Team account analytics
  + Feedback analytics

### Analytics based on workspace and language

The analytics in Document360 are specific to the active workspace and language of your Knowledge base portal. If you switch to a different workspace or language, the analytics will update to reflect data for the selected workspace and language.

To view analytics for a specific workspace or language:

1. Click on the Workspace Dropdown.
2. Select the desired **Workspace** and **Language** from the available options.

The displayed analytics will now correspond to your chosen workspace and language. All data in analytics displayed is based on the UTC time zone.

<a id="articles-analytics"></a>

## Articles analytics

**Plans supporting article analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Articles**analytics page in Document360 offers detailed insights into the performance of your articles, including overall article data, geographic distribution, and top-performing categories and articles. This valuable data can help you understand user engagement, identify popular content, and make data-driven decisions for improving your Knowledge base.

---

## Accessing Articles analytics

To access the Articles analytics page:

1. From the Knowledge base portal, navigate to **Analytics** ()>**Articles**.

   The **Articles** analytics page opens with an overview of article data. This data is specific to the current workspace and language.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Article_analytics.png)

### Using filters to customize data

By default, the data shows metrics for the **last week**. You can adjust this using filters:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.
3. Click on the **All users** dropdown to filter analytics data based on **Team accounts** or **Readers**. This filter applies only to private and mixed projects.
4. If using the **Knowledge base widget**, use the top-right dropdown to switch between **Knowledge base** and **Widget analytics**.
5. Select the JWT widget to track and analyze user interactions and engagement of Feedback analytics within private and mixed projects secured by JWT authentication.

   For more information on Knowledge base widget JWT authentication, read the article on [Managing the Knowledge base widget](https://docs.document360.com/docs/managing-the-knowledge-base-widget).

![Updated_Screenshot-JWT_for_reader_Analytics_June_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_Screenshot-JWT_for_reader_Analytics_June_release.png)

> NOTE
>
> Article analytics data can take up to 15 minutes to reflect in the portal.

---

### Article performance

The following performance information of the articles is available in this section as tiles based on the filters applied. Total views, total reads, total likes and total dislikes here in this section are cumulative metrics which include the total including the deleted articles.

| Field | Description |
| --- | --- |
| **Total articles** | Total number of unique articles that were published in the date range based on the applied filters. The deleted articles are not considered. |
| **Total views** | The number of times an article is accessed is counted once per browser session.   * A view is recorded when an article loads in the browser, regardless of user interaction. * Multiple visits to the same article within a session count as one view, even across tabs or windows or when a user closes and opens the same article within that particular browser session. * Alternatively, if a user opens the same article in a different browser, device, clears the cache & reopens the article or refreshes the browser, they will count as another view. * A browser session resets every 24 hours. Accessing the article after this period will count as another view. |
| **Total reads** | An article read is recorded when a user engages through clicking, scrolling, and spending time on the page. The user has to perform all these three actions to count as one read.   * **Scrolling**: At least a single scroll is needed for a valid read. * **Time spent**: Time is tracked only after 40 seconds spent on the article. If a user becomes idle (e.g., stops interacting) for some time or switches tabs, the timer pauses and resumes upon return. * **Session tracking**: Time spent revisiting the same article within 24 hours in the same browser session is added to the previous session's total.   Reads reflect meaningful interaction, distinguishing them from simple page loads. |
| **Total likes** | The total number of likes an article has received. |
| **Total dislikes** | The total number of dislikes received. |

The aggregated data for **Views**, **Reads**, **Likes**, and **Dislikes** within the selected date range is presented in both a numeric format and graphs. You can interact with the graphs by clicking on the legends at the bottom to view individual data points. Click **Export image** ( ) to save the section as a PNG image.

![3_Screenshot-Article_performance_part](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734677856131.png)

---

### Most read articles

This section displays the top-performing articles based on total read time (in hours or minutes). The **Article name**s are listed on the left, and the **Duration** is displayed on the right. Click on the **Export image** () icon to save the section as a PNG image.

![4_Screenshot-Most_read_analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734677884298.png)

---

### Top articles list

The top five articles are listed with information such as **Article name**s, **Contributors**, **Views**, **Reads**, **Likes**, **Dislikes**, and **Feedback**. These articles are ranked by views. Click **View all** to see all the articles in your knowledge base, along with additional information such as time spent and the last updated date. This list does not contain the deleted articles.

![5_screenshot-Top_Articles_part](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734677909945.png)

To analyze specific articles, select one from the list to view detailed analytics. Filters are available to sort readers by:

* **All readers**
* **Self-registration**
* **JWT**
* **Invited readers**

![10_Screenshot-JWT_filter_updation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732612581614.png)

* You can filter the following article type, contributors, and date.
* Click **Export CSV** to export the articles in the list.
* Click the **Download** () icon to download the last exported file.
* Click on the back arrow on the top-left to navigate back to the **Articles** page.

![6_Screenshot_All_article_entire_view_part](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734677936708.png)

---

### Location-based views

This section displays a world map highlighting countries based on article views. The data is derived from the IP addresses of users who accessed the articles. A table beside the map lists the top 5 countries, showing the total number of views for each of them (here the cumulative views are shown including those that were garnered by deleted articles as well). These locations are ranked by views. The rest of the countries are grouped under Others.

![7_Screenshot-Location_based_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734677969019.png)

* Click on **View all** to view detailed country-based information.

  > NOTE
  >
  > The View all list has tiles representing the number of total views, reads, likes, and dislikes. This count, however, unlike the main page does not include the deleted articles.
* All the countries with at least one view are available. Scroll to view the list of countries on the left side. You can also search for the countries by name.
* The article names, views, reads, likes, dislikes, and average time spent are available as a list.
* You can filter the location data based on article type and date.
* Click on the **Export CSV** button to export the articles in the list.
* Click **Download** () icon to download the last exported file.
* Click the Close (**X**) icon on the top right to navigate back to the **Articles** page.

---

### Top categories

This section displays the top category name and total views. These categories are ranked by views (here the cumulative views are shown including those that were garnered by deleted articles as well).

* Click on **View all** to view the entire list of categories. The category name, number of articles in the category, views, reads, likes, dislikes, and time spent (in minutes) in the categories. This count, however, unlike the main page does not include the deleted articles.
* You can filter the data based on the category type (*All*, *Folder*, *Page,* or *Index*).
* Click on the **Export CSV** button to export the categories in the list.
* Click the Download () icon to download the category list.
* Click on the back arrow on the top-left to navigate back to the **Articles** page.

![8_Screenshot-detailed_Location_based_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734678085925.png)

---

### FAQs

#### **Why do my most-read articles and top articles sections differ?**

The Most read articles section lists the top 5 articles with the longest read times during the selected period. In contrast, the Top articles section lists the top 5 most viewed and read articles on your knowledge base, consolidated for the selected period.

#### **Which team account roles in Document360 can access the Analytics section? Is it limited to Admins and Owners?**

In Document360, Admins, Owners, and Contributors can access the Analytics section if their content role is Editor or draft writer.

If you want to restrict team accounts from accessing the Analytics section, you can create a custom portal and content role and uncheck the "Analytics" permission. This will prevent specific users from accessing Analytics.

When creating a new team account or modifying an existing one, assign this custom content role to ensure users with this role can't access the Analytics section.

> For more details on creating a custom content role, read the [Roles and permissions](/help/docs/roles) article.

#### **How can I find the file size I am trying to export?**

Currently, Document360 does not display the file size before export. After downloading the file, you can check the size on your local device.

#### How does the analytics track read counts for smaller articles that do not require scrolling?

For shorter articles where scrolling is not necessary, a read is counted if a user clicks on the article and spends at least 60 seconds engaging with the content. Even without scrolling, this interaction is recognized as a valid read based on the read time shown in the article.

A chart legend represents data series in a chart, using colors or symbols to differentiate them. For example, each column of data in a chart is shown in a unique color, with the colors and series names displayed as the legend

<a id="eddy-ai-search-analytics"></a>

## Eddy AI search analytics

**Plans supporting Eddy AI analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Eddy AI assistive search analytics empowers you to understand and optimize the performance of AI search in your Knowledge base. The **Eddy AI - Assistive Search** analytics page provides information on the overall Eddy AI performance and search metrics, including unanswered searches of your knowledge base site. Also, you can visualize search analytics through charts and graphs for better understanding.

> NOTE
>
> To know more about the languages supported by Eddy AI, [click here](/help/docs/ai-search-suite#multilingual-support-for-eddy-ai-search-suite).
>
> The Conversational Eddy AI related metrics are available only in **KB site 2.0** projects.

---

## Accessing Eddy AI search analytics

1. Navigate to **Analytics** () >**Eddy AI**in the Knowledge base portal.

   The **Eddy AI - Assistive Search** page will appear.

   You can view a comprehensive overview of article performance for the past week by default, but the filter allows you to select a different date range.

### Using filters to customize data

By default, the data shows metrics for the **last week**. You can adjust this using filters:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.

---

### Eddy AI search analytics page overview

> NOTE
>
> If multiple chatbots are deployed, the data from all chatbot instances will be merged and reflected in the results.
>
> Similarly, if multiple knowledge base widgets are in use, data from all widget instances will be combined into the results.

You can view the following article performance metrics as tiles based on the filter applied:

| Field | Description |
| --- | --- |
| **Total conversations** | Total number of conversations in Eddy AI, where one or more Eddy queries count as a conversation. This metric will be available only for Knowledge base site 2.0 where Eddy AI is conversational. A single message is also counted as a conversation. |
| **Total queries** | Total number of queries performed in Eddy AI. Queries are individual questions included in the conversation. |
| **Answered queries** | Total number of queries that returned a result. |
| **Unanswered queries** | Total number of queries that did not produce any results. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_ScreenShot-Eddy_AI_analytics.png)

---

### Query analysis

You can interact with the graph to learn more information on query analysis:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687587539.png)

1. **Date-wise metrics**: Hover over the graph to find the metrics on a specific date.
2. **Date**: The metrics are shown in month/date format. To view metrics of a different month, click the **This month** dropdown at the top right and make a selection of your choice.
3. **All**: Represents the comparison of answered queries, unanswered queries, and conversations in a single graph.
4. **Answered (green line)**:  Click to view the graph of queries that returned a result.
5. **Unanswered (red line)**: Click to view the graph of queries that did not produce any result.
6. **Conversations (violet line)**:Click to view the graph of conversations. It is available only for KB site 2.0projects. Scroll down to the last section to export **Conversations** in CSV format.
7. **Export image**: To export the Query analysis as an image in .png format.

> NOTE
>
> Try to maintain the **Unanswered** searches as low as possible compared to the **Answered** searches to ensure your readers find the right content when they perform a Knowledge base site search. Unanswered searches typically occur when there is a lack of relevant information in the documentation, causing the Eddy AI to be unable to fetch data for specific search queries. Keeping your documentation up-to-date can help minimise such queries.

---

### Conversation depth metrics

The conversation depth metrics display the graph illustrating the total number of queries per conversation alongside the total number of conversations. Conversation depth metrics are available only for **KB site 2.0** projects.

1. Hover over each bar to see the exact number of conversations.

   The graph tracks conversations ranging from 1 to 5 queries, with conversations exceeding 5 queries grouped under 6+.
2. Click the **Export image** () icon to export Conversation depth metrics as an image in .png format.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687695576.png)

---

### Feedback chart

The feedback charts display the data illustrating the total number of Likes and Dislikes, along with the percentage information. The total percentage of feedback is represented inside the color chart.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687719524.png)

Click the **Export image** () icon to export the Feedback as an image in .png format.

---

### Popular queries

This section showcases the top five popular search themes, along with their frequency counts for the selected month. Queries are grouped by keywords, highlighting the most popular topics of the month and the frequency of related questions asked by readers.

> NOTE
>
> The Popular queries metric is generated only if at least one month of data is available.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687745810.png)

---

### Unanswered queries

This section showcases the top five popular search themes, along with their frequency counts for the selected month. Each keyword represents a popular topic with unresolved searches.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687764606.png)

> NOTE
>
> Post-processing occurs monthly, where 30 days of data is analyzed. The data is sent to OpenAI, which identifies the most common keywords and groups them into 10 primary topics. Any remaining data that does not fit into these categories is grouped under "Others." This helps to organize and highlight the most frequent topics efficiently. This is done for all the answered and unanswered queries.

---

### Most referenced articles

This section lists the five most-referenced source articles for the selected month, along with how often each has shown as a source in Eddy AI search results.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687787606.png)

---

### Conversations

This section offers a detailed view of user interactions in a tabular form showing queries, response status, and feedback.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Conversation_table_in_Eddy_AI_Analytics.png)

1. **Search field:** Enter a query to search for a specific conversation or query.
2. **Conversations:**The conversation will appear. By default, only the first question of each conversation is visible, with the other questions collapsed. Click on a desired query to open a pop-up that displays the entire conversation.

   > NOTE
   >
   > If a conversation started last month and continues into this month, the conversation will be included in last month's analytics.
3. **Query topic:** Query topics are fetched from the list of popular queries. A minimum of 30 days of data is required to generate a query topic.
4. **Response:** Indicates the response status, such as answered () or unanswered queries ().
5. **Feedback**: Displays the feedback, such as likes or dislikes.
6. **Filter**: Filter by query topic, response status, feedback type, or application.

   * **Response Status**: Filter the response status by three options: All, Answered, or Unanswered.
   * **Feedback**: Filter the feedback types by four options: All, None, Liked, or Disliked. By default, **All** is selected.
   * **Query type**: Filters queries from previous months. This filter is unavailable for the current month.
7. **Export**: Export the data as a CSV file based on the applied filters.

---

### FAQs

#### **Why am I unable to filter the data on a weekly basis?**

Popular queries and unanswered search keywords are derived from algorithmic grouping methods. These methods require sufficient data to categorize keywords based on the frequency of responses generated.

#### **How do I resolve queries for which no response is generated?**

To address queries that receive no responses, identify the relevant articles based on the keywords derived from unanswered search prompts raised by readers. Update the content of these articles accordingly.

#### **How does Eddy AI conversation analytics fetch information if the conversation is in multiple languages?**

If a conversation includes multiple languages, the conversation will be updated in the conversation table for each language used. However, specific metrics like total searches, answered queries, unanswered queries found, and feedback received will only be updated for the language in which they occurred.

#### **How does Eddy AI conversation analytics fetch information if the conversation is in multiple workspaces?**

If a conversation includes multiple workspaces, it will be updated in the conversation table for each workspace used. However, specific metrics such as total searches, answered queries, unanswered queries, and feedback will only be updated for the languages used within the respective workspace.

#### **How are queries different from conversations?**

Queries are individual questions included in the conversation. One or more queries contribute to a conversation.

<a id="analytics-search"></a>

## Search analytics

**Plans supporting search analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Use Search Analytics to track reader behavior, optimize your content, and identify gaps in your documentation. This page provides metrics on search trends, successful queries, and no-result searches, helping you enhance the search experience for your users.

---

## Accessing the Search analytics page

To access Search analytics, from the Knowledge base portal, navigate to **Analytics** () and then select **Search**.

### Using filters to customize data

By default, the data shows metrics for the last week. You can adjust these using filters:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.
3. For private and mixed projects, you can filter the search analytics by All users, Team accounts and Readers. For mixed projects, All users will include Team accounts, private readers and public readers data. The readers filter however will only show the private readers data.
4. If using the **Knowledge base widget**, use the top-right dropdown to switch between **Knowledge base** and **Widget analytics**.
5. Select the JWT widget to track and analyze user interactions and engagement of reader analytics within private and mixed projects secured by JWT authentication.

   For more information on Knowledge base widget JWT authentication, read the article on [Managing the Knowledge base widget](/help/docs/managing-the-knowledge-base-widget).

![Updated_Screenshot-JWT_for_Search_analytics_June_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_Screenshot-JWT_for_Search_analytics_June_release.png)

> NOTE
>
> Search analytics data can take up to 15 minutes to reflect in the Knowledge base portal.

---

### Search analytics page overview

The **Search** analytics page shows the below four metric tiles that are also represented graphically in the Search analysis tile.

| Field | Graph color | Description |
| --- | --- | --- |
| **Total searches** | Purple line | The number of searches users perform on the selected project workspace in the Knowledge base site. |
| **Successful searches** | Green line | The searches that returned at least one result. |
| **No result found** | Red line | The total number of searches that did not produce any result. |
| **Bounced** | Yellow line | The searches that returned results, but the user did not click on any of the results. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Search_Analytics.png)

You can interact with the graphs by clicking on the legends at the bottom to view individual data points. Click **Export image** ( ) to save the section as a PNG image.

> NOTE
>
> Aim to keep **No result found** searches as low as possible to improve the overall search success rate.

---

### Search success rate

The **Search success rate** pie chart distinguishes successful and unsuccessful results. The total number of searches is available in the middle of the chart.

* **Successful** refers to the searches that returned results.
* **Failed** refers to the searches that returned no results.

Click **Export image** ( ) to save the section as a PNG image.

![5_Screenshot-Updated_Search_analytics-Search_success_rate](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687879593.png)

---

### Search and No result found list

#### Searches

This section lists the most searched keywords and provides the following information:

| **Field** | **Description** |
| --- | --- |
| **Search keyword** | The exact term searched by users. |
| **Search count** | Number of times the keyword was searched. |
| **Views** | Number of views associated with search results. |
| **Reads** | Number of reads triggered by the search. |
| **Bounced** | Searches that returned results but were not clicked by users. |

You can sort data using numeric values for better analysis.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734687860119.png)

#### No result found

Displays keywords that did not return any results. The following fields are available:

| **Field** | **Description** |
| --- | --- |
| **Search keyword** | Keyword users searched for. |
| **Search count** | Number of times the keyword was searched. |

---

### Export Search analytics data

1. Click **Export CSV** to download the search analytics.

   Wait for a few seconds. Once the file is ready, a Download icon appears next to the **Export CSV** button.
2. Click on the Download () icon, and the file is saved to your local device storage.

   The downloadable file remains available until a new CSV is generated.

   Hover over the Download () icon to see the last export date and time.

---

## Knowledge base site view

This is how your reader would view the search terms that do not return any results. The reader can provide their feedback similar to the Article feedback on their recent search term. They can provide their email (optional) and choose to be notified of any change.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Search_analytics.png)

To know more about No search results feedback, read the article on [Feedback manager](/help/docs/feedback-manager-overview).

---

### FAQs

#### **How can Search Analytics help me identify gaps in documentation?**

You can review the list of **No Results Found** search terms, highlighting topics users are searching for but not finding results. This information helps pinpoint areas where documentation may be lacking or unclear.

#### **How does understanding popular search terms benefit my knowledge base?**

Understanding popular search terms helps identify the topics your readers are most interested in or frequently searching for. By analyzing these terms, you can optimize your Knowledge base content, create new articles to address common queries, and ensure your Knowledge base is aligned with your user’s needs.

#### **What is meant by bounced search?**

The Bounced search refers to a situation where search results are displayed to the user, but they do not click on any of the results. This term is used to describe such instances.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

A chart legend represents data series in a chart, using colors or symbols to differentiate them. For example, each column of data in a chart is shown in a unique color, with the colors and series names displayed as the legend

<a id="reader-analytics"></a>

## Reader analytics

**Plans supporting readers analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Reader** analytics page provides an overview of reader activity in your Private or Mixed access project. Use this tool to track user engagement and optimize your content strategy.

---

## Accessing the Reader analytics page

To view reader analytics, from the Knowledge base portal, navigate to **Analytics** () and then select **Reader**.

### Using filters to customize data

By default, the data shows metrics for the **last week**. You can adjust this using filters:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.
3. If using the **Knowledge base widget**, use the top-right dropdown to switch between **Knowledge base** and **Widget analytics**.
4. Select the JWT widget to track and analyze user interactions and engagement of reader analytics within private and mixed projects secured by JWT authentication.

   For more information on Knowledge base widget JWT authentication, read the article on [Managing the Knowledge base widget](https://docs.document360.com/docs/managing-the-knowledge-base-widget).

![Updated_Screenshot-JWT_for_reader_Analytics_June_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_Screenshot-JWT_for_reader_Analytics_June_release.png)

4. To filter readers by their registration type, use the dropdown menu to select All readers, Self-registration, SSO, JWT, and Invited readers.

> NOTE
>
> Reader analytics data can take up to 15 minutes to reflect in the Knowledge base portal.

---

### Reader Analytics page overview

The **Reader** page shows the below three metric tiles, each representing absolute data points reflecting the overall reader analytics. These metrics remain unaffected by any filters applied to the data.

| Field | Description |
| --- | --- |
| **Total readers** | Number of readers added to your project who can access the Knowledge base. |
| **Self-registered readers** | Readers who registered themselves on your Knowledge base site. |
| **Frequent readers** | Readers who frequently access your articles, calculated based on views and reads.If a reader is searched in the reader table using the search field, the reader gets updated in the frequently modified list. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Reader_analytics.png)

---

### View reader analytics data

The Reader analytics section displays data for the for the selected duration, including the following fields:

| Field | Description |
| --- | --- |
| **Name** | The profile picture and name of the Reader is available here. This is a clickable field.  Click the reader’s name to view detailed information, including total views, reads, likes, dislikes, and a list of articles they've accessed, along with the average time spent and the last viewed date. |
| **Email** | Displays the email of the reader. |
| **Reader type** | Displays the type of reader based on their mode of registration like Self-registration, SSO, JWT, or Invited readers. |
| **Views** | The number of times an article is accessed is counted once per browser session.   * A view is recorded when an article loads in the browser, regardless of user interaction. * Multiple visits to the same article within a session count as one view, even across tabs or windows or when a user closes and opens the same article within that particular browser session. * Alternatively, if a user opens the same article in a different browser, device, clears the cache & reopens the article or refreshes the browser, they will count as another view. * A browser session resets every 24 hours. Accessing the article after this period will count as another view. |
| **Reads** | An article read is recorded when a user engages through scrolling, clicking, or spending time on the page.The user has to perform all these three actions to count as one read.   * **Scrolling**: At least a single scroll is needed for a valid read. * **Time spent**: Time is tracked only after 40 seconds spent on the article. If a user becomes idle (e.g., stops interacting) for some time or switches tabs, the timer pauses and resumes upon return. * **Session tracking**: Time spent revisiting the same article within 24 hours in the same browser session is added to the previous session's total.   Reads reflect meaningful interaction, distinguishing them from simple page loads. |
| **Last login** | Displays the login date of the reader’s most recent login. Click a reader's name to view their detailed login activity. |

---

### Reader individual contributions

1. Click on a reader to view more detailed information about their contributions:

* **Profile** - Team account name, Image, Email, Portal role, and Last login date and time (UTC time zone).
* **Contribution performance - Total views**, **Total reads**, **Total likes**,and **Total dislikes**.
* **Articles** - Displays a list of **Article names** to which the user has contributed, along with details such as **Views**, **Reads**, **Likes**, **Dislikes**, **Created on**, and **Last updated** date. This table can be exported as a CSV file for download to your local system.

2. Click the **Filter** button at the top to filter the analytics data based on **Article type** (*All*, *Page*, *Article*) and **Date** (*7 days*, *30 days*, *Custom date*).
3. Once done, click **Apply**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Reader_analytics.png)

---

### Export reader analytics data

1. Click **Export CSV** to download the reader analytics.

   Wait for a few seconds. Once the file is ready, a Download icon appears next to the **Export CSV** button.
2. Click on the Download () icon, and the file is saved to your local device storage.

   The downloadable file remains available until a new CSV is generated.

   Hover over the Download () icon to see the last export date and time.

Single Sign-On - A method that allows users to access multiple applications with one set of login credentials.

<a id="analytics-team-accounts"></a>

## Team accounts analytics

**Plans supporting team accounts analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Team accounts** analytics overview page provides a detailed view of each team member’s account type, the articles or category pages they create or access, their contributions, and last login details.

---

## Accessing the Team accounts analytics page

To view Team accounts analytics, from the Knowledge base portal, navigate to **Analytics** () and then select **Team accounts**.

### Using filters to customize data

By default, the data shows metrics for the **last week**. You can adjust this using the filter:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.

> NOTE
>
> Team account analytics data can take up to 15 minutes to reflect in the Knowledge base portal.

---

### Team account analytics page overview

The **Team accounts** page shows the below three metric tiles:

| Field | Description |
| --- | --- |
| **Total team accounts** | Number of team accounts in the project in your Knowledge base excluding the deleted team accounts. |
| **Articles published** | Number of articles published based on the **Date** filter you have chosen. |
| **Top performers** | Profile images of top-performing team members, ranked by the number of articles contributed, are displayed here. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Team_account_analytics.png)

---

### View Team account analytics data

The Team account analytics displays data for the selected duration, including the following fields:

| Field | Description |
| --- | --- |
| **Name** | The profile picture and name of the Team account along with its type (normal or SSO) are available here. This is a clickable field.  Click the Team account name to view detailed information, including total views, reads, likes, dislikes, and a list of articles they've accessed, along with the date the articles were created and last updated. |
| **Email** | Displays the email of the reader. |
| **Portal role** | Displays the portal role that is assigned to the Team account (Owner, Contributor, Admin, and more). |
| **Contributed** | Displays the total number of articles contributed by the Team account during the selected time frame. |
| **Last contributed** | The time of the last contribution made by a team account is displayed relative to the current time, such as "4 minutes ago" or "This Monday." For contributions older than a week, the exact date ("Nov 16, 2024") is shown. |

---

### Team account individual contributions

1. Click on a team account to view the detailed information about their contributions:

* **Profile** - Team account name, Image, Email, Portal role, and Last login date and time (UTC time zone).
* **Contribution performance -** Four tiles displaying **Articles created**, **Total views**, **Total likes**,and **Total dislikes**. These metrics exclude the count of deleted articles.
* **Articles** - Displays a list of **Article names** to which the user has contributed, along with details such as **Views**, **Reads**, **Likes**, **Dislikes**, **Created on**, and **Last updated** date. This table can be exported as a CSV file for download to your local system.

2. Click the **Filter** button at the top to filter the analytics data based on **Article type** (*All*, *Page*, *Article*) and **Date** (*7 days*, *30 days*, *Custom date*).
3. Once done, click **Apply**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Team_accounts_analytics.png)

---

### Export Team account analytics data

1. Click **Export CSV** to download the team account analytics.

   Wait for a few seconds. Once the file is ready, a Download icon appears next to the **Export CSV** button.
2. Click on the Download () icon, and the file is saved to your local device storage.

   The downloadable file remains available until a new CSV is generated.

   Hover over the Download () icon to see the last export date and time.
3. To export the analytics of individual team accounts, click on the team account name and then click **Export CSV** available above the list of article performance details.
4. Click the Download () icon, and the file is saved to your local device storage.

<a id="feedback"></a>

## Feedback analytics

**Plans supporting feedback analytics**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Feedback analytics track total comments, likes, and dislikes for each article/page category. You can find the analytical representation of the feedback data in charts and graphs.

---

## Accessing the Feedback analytics page

To view Feedback analytics, from the Knowledge base portal, navigate to **Analytics** () and then select **Feedback**.

### Using filters to customize data

By default, the data shows metrics for the **last week**. You can adjust this using filters:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.
3. If using the **Knowledge base widget**, use the top-right dropdown to switch between **Knowledge base** and **Widget analytics**.
4. Select the JWT widget to track and analyze user interactions and engagement of Feedback analytics within private and mixed projects secured by JWT authentication.

   For more information on Knowledge base widget JWT authentication, read the article on [Managing the Knowledge base widget](https://docs.document360.com/docs/managing-the-knowledge-base-widget).

![Updated_Screenshot-JWT_for_reader_Analytics_June_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_Screenshot-JWT_for_reader_Analytics_June_release.png)

> NOTE
>
> Feedback analytics data can take up to 15 minutes to reflect in the portal from the time the feedback is given.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Feedback_analytics.png)

---

### **Feedback analysis**

The graphical representation of the Feedback analysis is shown below.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734801406078.png)

The **Feedback** page shows the below four metric tiles:

| Field | Description |
| --- | --- |
| **Total article** | The number of articles that received some feedback (Like, dislike, or comment) from the readers. |
| **Total feedback** | The number of comments logged. |
| **Total likes** | The number of likes received, that are accompanied by comments from the readers. |
| **Total dislikes** | The number of dislikes received, that are accompanied by comments from the readers. |

![1_Updated_Screenshot-Feedback_analytics-Overview_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734802023945.png)

---

The Feedback analysis displays the following metrics:

| Field | Description |
| --- | --- |
| **Date-wise metrics** | The metrics on a specific date when you hover over the graph. |
| **All** | The graph of all feedback, including articles, likes, and dislikes. |
| **Articles** | The graph of article feedback. |
| **Feedback** | The number of feedback submitted. |
| **Likes** | The graph of likes received. |
| **Dislikes** | The graph of dislikes received. |
| **Export image** | To export the Feedback analysis graph as an image in .png format. |

---

### Feedback metrics

This section displays a graphical representation of reader’s dislike responses, including the specific reasons selected by readers for their feedback. The dislike responses are:

* Need more information
* Difficult to understand
* Inaccurate or irrelevant content
* Missing or broken link
* Others

![4_Screenshot-Updated_Feedback_analytics-Filters_metrics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734802120667.png)

#### Custom feedback messages

The dislike responses mentioned above are the default system responses. You can change the response on the **Localization variables** page and also view the total count for each type of dislike response selected by readers.

Navigate to **Settings**()> **Knowledge base portal** > **Localization & Workspaces** > **Localization variables**.

For more information, read the article on [Localization variables](/help/docs/localization-variables).

---

### Feedback list

Here, the list of articles, along with the feedback information, is displayed. The information available in this section are

* Article name
* Proportion (Likes vs. Dislikes out of 100)
* The total article views in the selected time frame
* Likes received with feedback or comments
* Dislikes received with feedback or comments
* Feedback or comments received

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734802145188.png)

The actions you can perform from this section are:

* **View in Knowledge base**: This appears next to the article name when you hover over it. Click on this, and the article opens the Knowledge base site in a new browser tab.
* **View feedback**: This appears at the end of the row when you hover your pointer over the article. Clicking **View feedback** redirects you to the **Feedback manager**.
* **Filter**: You can filter the list based on articles, page categories, or both.
* **Export CSV**: Click **Export CSV** to download the reader analytics.

  Wait for a few seconds. Once the file is ready, a Download icon appears next to the **Export CSV** button.

  Click on the Download () icon, and the file is saved to your local device storage.

  The downloadable file remains available until a new CSV is generated.

  Hover over the Download () icon to see the last export date and time.

---

### FAQ

#### **Are feedback submissions without comments included in the metrics displayed on the Feedback Manager tiles?**

No, Any feedback without a comment will not appear in the metrics reflected on the Feedback Analytics tiles. Only feedback submissions that include both a thumbs up/thumbs down response and a comment are counted in the **Feedback analytics** data.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="links-status"></a>

## Links status analytics

**Plans supporting analytics on link status**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Links status** is a sub-feature under the Analytics section of Document360. This feature is a broken link checker that helps validate and monitor all internal, external, and media file links on the knowledge base. It allows you to fix bad/broken links to improve Search Engine Optimization (SEO) and enhance the reader experience.

With the following validations, you can run the link validation at a workspace and language level.

1. **Scheduled validation**
2. **Manual validation**
3. **Article level validation**

> NOTE
>
> For manual and scheduled validation, all the links at the project level are analyzed to check for broken, unknown, or working links.

---

## Accessing the Links status analytics page

To view the Link status analytics, from the Knowledge base portal,

1. Navigate to **Analytics** () and then select **Link status**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Link_status_analytics.png)

---

## Links status overview page

This page contains all the necessary data regarding the links used in your Knowledge base (selected workspace and language). You have two sections on the page: **Links status tiles** and **Links list**.

### 1. Links status tiles

![Image showing links status overview page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Link_analytics.png)

#### Links classification

| Field | Description |
| --- | --- |
| **Total links** | The total number of URLs and files (both internal and external) linked in the different articles on your Knowledge base. |
| **Internal** | The total number of Internal URLs including article links and media file links within your Document360 project. |
| **External** | The total number of External URLs including article links and media file links outside your Document360 project. |
| **Ignored** | The links you want to ignore in the current validation or upcoming validation. |

#### Current state

| Field | Description |
| --- | --- |
| **Redirect URL** | When the link has been temporarily or permanently routed to a different URL. |
| **Working** | The link works fine and points to an intended webpage or file (Internal and External). |
| **Broken** | A broken or dead link is a hyperlink in the article that no longer works because it's encountering one or more issues like URL changes, incorrect URL, page or item removed, or restricted/private knowledge base article URL. Broken status applies to URLs and media files. |
| **Unknown** | The link that does not return a status. |

#### Broken link/image

When a broken link or an image file is accessed:

* **Link** – When the reader clicks on a broken link, a 404-page error or similar message showing that the webpage is unavailable is displayed.  
  ![8_Screenshot-Links_status_404_error_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Links_status_404_error_page.png)
* **Media files** – In the case of an image or video file, a broken image thumbnail icon would be displayed in place of it in the article.  
  ![9_Screenshot-Links_status_Broken_media_file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Links_status_Broken_media_file.png)

---

### 2. Links list

The list of all links used in the entire workspace is displayed below the Links status section. You can find the following information about the links used.

![Image showing list of links used in a workspace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Link_analytics.png)

| Field | Description |
| --- | --- |
| **Article name** | The article name in the Knowledge base that contains the link. |
| **Link type** | **Links**: Internal link, External link, Secured link, Unsecured link **Media files**: Internal file, and External file. |
| **URL** | The actual web link (destination URL) |
| **Redirect URL** | If the existing source path has been redirected to a new destination. |
| **Status** | Indicating the status of the link. **Working**, **Broken**, **Redirected**, or **Ignored**. |

> NOTE
>
> If you have deleted an article after the validation and the report has been generated, the article is grayed out. A trash icon appears next to the article name.

---

### Filters for Links list

The **Filter** button at the top of the Links list section is useful when you have a greater number of links. You can filter links based on four parameters: the **Source**, **Visibility**, **Link type**, and **Status**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734802570175.png)

Once you have selected the filter, click **Apply**.

You can also apply filters directly by clicking on the Link status tile that you prefer to view. For example, when you click on the **Broken** or **External** link status tile, the respective links with the link type or status are displayed in the list.

---

### Export Links list analytics data

1. Click **Export CSV** to download the Link analytics.
2. Click on the Download () icon next to the **Export CSV** button, and the file is saved to your local device storage.

   The downloadable file remains available until a new CSV is generated.

   Hover over the Download () icon to see the last export date and time.

---

## Actions and controls

Above the Links status sections, you can find the controls and data regarding the link analytics.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734802611737.png)

#### a. Validation type

The validation types are **Scheduled**, **Manual**, and **Article level**.

#### b. Report date

* The date of the reports generated will be loaded here. The validation reports are named as per the generation date.
* When you hover over the info () icon adjacent to the **Report data** dropdown, you can view the next or upcoming Scheduled link validation date.

  > NOTE
  >
  > Scheduled link validation runs every 7 days hence only the latest weekly data is shown.

#### c. Manage links

* This button opens the **Manage links** window.
* This window contains information about all the links used, and also those which are **Ignored** or **Included** in the validations under respective tabs.

#### d. Validate links

* This button initiates the Manual link validation at the project level.
* When you click **Validate links,** a confirmation prompt pops up to alert you with the number of manual validations left for the month.
* To proceed, click **Confirm**.

#### e. Manual validation usage

* This status bar shows your project's available Manual validation limit as per your project plan. The limit resets every month.
* The link status validation limit applies to both internal and external links.
* Customers of all price tiers can opt for an increase in the link validation limit anytime based on their requirement for a nominal charge.
* For additional information, contact our [**support team**](https://document360.com/contact-us/).

#### f. Link analytics usage

This status bar shows the stats of the link limit used out of the total limit for your project.

> NOTE
>
> The link validation limit for the plans that support analytics on link status are:
>
> Business plan - 5000 links
>
> Enterprise plan - 10000 links

### Links analytics limit exceeded

When the links count is higher than the total count of links limited for your project, the **Links analytics limit exceeded** text appears instead of the **Link analytics usage**.

* When the link analytics limit is exceeded, and the links validation (both Scheduled and Manual validation) takes place, only the links under the total given limit are validated.
* The extra links that exceed the limit are not validated. Article-level validation is also not possible for those links.

  For example, your total link limit is 10000, but the total link count in your project is 10500. Only the first 10000 links are validated when you perform the links validation. The recently added 500 links are not validated.
* To validate all the links in your project, contact our [**support team**](https://document360.com/contact-us/) to increase the limit for your project.

---

## Link validation

You can perform link validation at a workspace and language level in the below ways,

1. Scheduled validation
2. Manual validation
3. Article level validation

> NOTE
>
> For manual and scheduled validation, all the links at the project level are analyzed to check for broken, unknown, or working links.

### 1. Scheduled validation

This is an automated link validation that runs on a **Schedule**, based on your plan tier.

#### Steps to perform schedule validation

1. On the Knowledge base portal, click on the Analytics () icon on the left navigation sidebar.
2. Click **Links status** on the left navigation pane.
3. The Links status overview page appears.
4. From the **Validation type** drop-down at the top, select the **Scheduled** validation (which is the default selection for your projects).
5. You can find the recently generated Scheduled link validation.
6. If you want to look into any previous reports, from the **Report date** drop-down select the report date you wish to view.

### 2. Manual validation

#### Steps to perform manual validation

1. On the Knowledge base portal, click on the Analytics () icon on the left navigation sidebar.
2. Click **Links status** on the left navigation pane.
3. The Links status overview page appears.
4. From the **Validation type** drop-down at the top, select **Manual** validation.
5. The latest Manual validation report list will appear.
6. Click **Validate links** at the top right to perform a new manual validation.

   > NOTE
   >
   > The analytics report for links is generated every 24 hours (UTC 00:00). If you run consecutive Manual validations within 24 hours, the already run manual validation reports are overwritten with the latest validation data. Once generated, data cannot be retrieved.
7. Once the validation is complete, you will receive a mail on your registered email, and you can view the analytics report on the overview page.

   > NOTE
   >
   > Only team member roles with the Validate link analytics permission can perform link validations.

### 3. Article level validation

When choosing the **Article level validation** from the **Validation type** drop-down, you can view the article/category-page link validations you have already run. This overview page will be empty if you haven't validated links at the article/category page level.

#### Validate links at the article/category-page level

The article/category-page level link validation can be done from the article **editor** section.

1. Navigate to the desired article/category page in the Knowledge base portal.
2. Click on the More () icon at the top right.
3. Click **Analytics** from the listed options.

   The **Article analytics** modal window appears.
4. Click **Validate now** to perform validation.

   > NOTE
   >
   > The article/category-page link validation is unlimited.

---

## Manage links

Click **Manage links** on the Links status overview page.

The **Manage links** overview page will appear.  
This section provides a high-level view of all the top metrics in the broken links.

* **Search** - You can search for a specific URL.
* **Link type** - Refers to whether the link is an External or Internal URL.
* **Dependency** - The number of times the link has been referenced in the Knowledge base articles.
* **Status** - To choose to see if a link is Ignored or Included.

### Add links to Ignore/Include list

1. In the **Manage links** window, select the checkbox of the desired links you wish to ignore or include.
2. In the status column, you can set the status to **Ignored** or **Included** from the dropdown.

   (or)
3. Select the checkbox of the desired link of which you wish to change the status.
4. Click on the **Ignore** option available above the links list.

   The links that are set to Included status will be displayed in the **Included** tab, and the links set to Ignored status will be displayed under the **Ignored** tab.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenShot-Links_status_analytics.png)

### Export

You can export the links into .csv format to your local storage.

1. Click on the **Export CSV** button above the links list.
2. Wait for a few seconds, and a Download ()icon appears next to the **Export CSV** button.
3. Click on the Download () icon, and the exported file will be downloaded to your local computer storage.

---

## Troubleshooting

### Working links appear as broken in the Link status report

Document360 enforces a 5-second validation timeout for link verification. If a request exceeds this limit, the system may flag the link as **Unknown** or **Broken**. Even if the link is functional, it may be incorrectly marked as broken due to the timeout restriction.

**Steps to resolve:**

1. **Manually check the URL**

   1. Open the link in a browser to confirm if it loads correctly.
   2. If the page loads, the link may have been incorrectly flagged as broken.
2. **Validate the link using Postman**

   3. Open Postman and create a new request tab.
   4. Enter the URL and select the **GET** method.
   5. Click **Send** to check the response status.
3. **Interpret the HTTP response status**

   6. If the response is **200 OK**, the link is functional.
   7. If the response code is anything other than **200**, the link might be broken.

![Postman interface showing a GET request with highlighted parameters and response status.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Troubleshooting_Link_status_validation_.png)

Some of the important status codes are:

| **Status code** | **Status description** | **Description** |
| --- | --- | --- |
| **200 OK** | Success | The request was successful, and the expected response was returned. |
| **201 Created** | Resource created | The request was successful, and a new resource was created. |
| **204 No content** | No response body | The request was successful, but there is no response body (common for DELETE requests). |
| **400 Bad request** | Invalid request | The request has incorrect syntax or missing parameters. |
| **401 Unauthorized** | Authentication required | The request lacks valid authentication credentials (e.g., missing or incorrect API key). |
| **403 Forbidden** | Access denied | The request is valid, but the user does not have permission to access the resource. |
| **404 Not found** | Resource missing | The requested resource does not exist or the endpoint is incorrect. |
| **405 Method not allowed** | Invalid method | The HTTP method (GET, POST, etc.) is not allowed for this endpoint. |
| **500 Internal server error** | Server issue | A generic error indicating something went wrong on the server. |
| **502 Bad gateway** | Invalid response | The server received an invalid response from an upstream server. |
| **503 Service unavailable** | Server overloaded | The server is down or overloaded with requests. |
| **504 Gateway timeout** | Timeout error | The server did not receive a response from another service in time. |

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

---

### FAQs

#### What is the purpose of the Links status feature in Document360?

The Links status feature is a broken link checker that helps validate and monitor all internal, external, and media file links on the knowledge base, improving SEO and reader experience.

#### What happens when a user exceeds the Manual validation limit?

When you exceed the validation limit as per your plan, the **Validate links** button will be disabled. The manual validation resets on the first day of every month, and the button is enabled again. You can contact our customer support if you need to increase this limit.

#### How can I prevent specific example links from being flagged as broken in the link status report?

If you have examples or placeholder links in your articles that are being detected as broken links in the analytics, you can exclude these links from validation to avoid confusion.

1. Navigate to **Analytics** () > **Link status**.
2. On the **Link status** page, click **Manage links** in the top-right corner.
3. In the **Manage links** page, by default, the **All links** tab will be selected.
4. Select the links you want to **ignore** from the list or use the search bar to find them.
5. Once you have selected the desired links, click **Ignore** ().

   The ignored links will be moved to the Ignored tab and will no longer appear in link validation reports.

If you want to include these links back in the validation process later:

1. Go to the **Ignored** tab.
2. Select the links you wish to include again.
3. Click **Include** (), and these links will be validated in future link checks.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="ticket-deflector-overview"></a>

## Ticket deflector analytics

**Plans supporting the use of ticket deflector**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Ticket deflector** analytics page provides an overview of all key metrics related to the ticket deflector form(s) in your Knowledge base site or widget.

---

## Accessing the Ticket deflector analytics page

To view Ticket deflector analytics, from the Knowledge base portal, navigate to **Analytics** () and then select **Ticket deflector**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Ticket_deflector_analytics.png)

### Using filters to customize data

By default, the data shows metrics for the last week. You can adjust these using filters on both **Ticket deflector** and **Feedback** tabs:

1. Click the **Date** filter dropdown.
2. Select a predefined range (e.g., **This month**, **Last month**) or choose **Custom** to specify a date range.
3. For private and mixed projects, you can filter the search analytics by All users, Team accounts, and Readers.
4. If using the **Knowledge base widget**, use the top-right dropdown to switch between **Knowledge base** and **Widget analytics**.
5. Select the JWT widget to track and analyze user interactions and engagement of reader analytics within private and mixed projects secured by JWT authentication.

   For more information on Knowledge base widget JWT authentication, read the article on [Managing the Knowledge base widget](/help/docs/managing-the-knowledge-base-widget).

![Updated_Screenshot-JWT_for_Search_analytics_June_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Updated_Screenshot-JWT_for_Search_analytics_June_release.png)

> NOTE
>
> Search analytics data can take up to 15 minutes to reflect in the Knowledge base portal.

---

### Ticket deflector tab

This is the default tab on the **Ticket deflector** analytics page. The **Ticket deflector** page shows the below four metric tiles:

| Field | Description |
| --- | --- |
| **Total feedback** | The total number of feedback entries including the responses from the Knowledge base and the number of forms submitted. |
| **Answered from knowledge base** | The number of queries answered by articles in the knowledge base. |
| **Form submitted** | The total number of ticket deflector forms submitted. |
| **Total search** | The total number of searches performed on the **Quick support** page of the Knowledge base. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734869391552.png)

---

## Sections of Ticket deflector tab

The **Ticket Deflector** tab displays various sections, each highlighting different aspects of its performance.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734869409488.png)

### 1. Satisfaction analysis

This graph shows the percentage of ticket deflector forms submitted and queries answered from the knowledge base. You can interact with the graphs by clicking on the legends at the bottom:

| Field | Description |
| --- | --- |
| **All** | Click to view the total number of feedback entries including the responses from the Knowledge base and the number of forms submitted. |
| **Form submitted** | Click to view the total number of ticket deflector forms submitted. |
| **Answered from knowledge base** | Click to view the total number of queries answered by articles in the knowledge base. |

1. Hover over the graph to find the metrics.
2. Click **Export image** ( ) to save the section as a PNG image.

---

### 2. Frequently selected questions

This section displays the top five most frequently chosen questions from the ticket deflector form. The list shows the questions and how often they were selected. You can export this list using the export () icon.

---

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Ticket_deflector_analytics.png)

### 3. Satisfaction

This section displays a pie chart showing the proportion of forms submitted (orange color) and the number of questions successfully answered by the Knowledge base (green color).  
Click **Export image** ( ) to save the section as a PNG image.

---

### 4. Most useful articles

This section highlights the top articles that were helpful in resolving queries which represents the queries that produced successful search results. It provides the following details:

* **Articles**: The title of the article.
* **Answered**: The number of queries the article helped resolve.

---

### 5. Keywords

In this section, you can view data related to specific keyword searches. The following information is available:

* **Keyword**: The keyword searched by the user.
* **Count**: The number of times the keyword was searched.
* **Answer found**: Indicates whether a suitable answer was found.
* **Answer not found**: Indicates whether the search failed to return an answer.

1. Click **Export CSV** to export the articles in the list.
2. Click the **Download** () icon to download the last exported file.

---

### 6. Search success rate

This section shows the percentage of searches performed using the selected ticket deflector form(s). The chart displays the percentage of successful and unsuccessful searches. Searches that generate results are classified as successful, while those that yield no results are considered unsuccessful.

Click **Export image** ( ) to save the section as a PNG image.

---

## Feedback tab

* The **Feedback** tab displays all user feedback related to ticket deflector forms. Each feedback entry is labeled to indicate its source, such as **Form Submitted** or **Answered from Knowledge Base***.*
* Each feedback entry displays the date and time (in minutes) it was received.
* Click open a feedback to view the feedback content.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734869658688.png)

---

### FAQs

#### What is a ticket deflector?

A **ticket deflector** is a feature designed to reduce the number of support tickets by providing users with relevant Knowledge base articles before they submit a ticket. When users begin filling out the ticket form, the system suggests helpful articles that might answer their questions, deflecting the need to raise a support request.

#### How does the ticket deflector work?

The ticket deflector suggests relevant knowledge base articles based on keywords from the user's query or question. As users type into the form, the system automatically searches the knowledge base and displays suggested articles that may provide the solution, potentially preventing ticket submission.

#### What does the ‘*Answered from Knowledge Base’* metric represent?

The Answered from Knowledge Base metric shows the number of queries that were successfully resolved by the suggested articles in your knowledge base, without the user needing to submit a ticket. This helps measure the effectiveness of your knowledge base in reducing support requests.

#### How can I improve the effectiveness of the ticket deflector?

To improve the effectiveness of the ticket deflector:

* Ensure your knowledge base is up to date with accurate and comprehensive articles.
* Use clear and relevant keywords in your articles to improve searchability.
* Regularly review and update the **Frequently selected questions** section to better address common user queries.
* Analyze the **Search Success Rate** to identify gaps in your knowledge base and add or improve articles accordingly.

#### How is the Search success rate calculated?

The **Search Success Rate** represents the percentage of searches that returned a relevant article for the user's query. It compares the total number of searches performed with the number of successful searches that resulted in the user finding a helpful article.

A chart legend represents data series in a chart, using colors or symbols to differentiate them. For example, each column of data in a chart is shown in a unique color, with the colors and series names displayed as the legend

<a id="manage-api-documentation"></a>

## Managing API documentation

**Plans supporting  API document generation**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The API documentation feature in Document360 makes it easy to create clear, interactive documentation by uploading your API specification files. This process automatically builds detailed documentation that covers everything from API endpoints to methods and responses, helping developers understand and use your API more effectively.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-New_API_button.png)

## Generating API documentation

There are three methods to generate API documentation in Document360:

* **From a URL**
* **From a JSON/YAML file**
* **With a CI/CD flow**

> NOTE
>
> Document360 supports OpenAPI 2.0, OpenAPI 3.0, and Postman API specifications.

### Generating API documentation from a URL

To upload the API specification file as a URL to Document360,

1. Navigate to the desired project in the Knowledge base portal.
2. Select **API documentation** (**{}**) from the left navigation bar.
3. Click the **Create** dropdown from the header menu bar and select **New API** or click the **New API** button from the top right corner. This will display the **New API reference** side panel.
4. In the **Choose source** screen, select the **Create from URL** radio button, and click **Next**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Create_API_from_URL.png)

5. In the **Source settings** screen, enter the URL for your API specification file in the **URL** field.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-URL_field.png)

6. Click **Add API reference** to navigate to the **Finish** screen.
7. On the **Finish** screen, you will be able to see the number of categories and articles that have been created for your API specification file.
8. Click **Publish** to generate your API documentation.

> NOTE
>
> If you wish to verify your API documentation before publishing, click **Close** on the Finish screen to return to the Documentation screen. You will be able to see the drafts of your API documentation in the **Categories & articles** pane.

### Generating API documentation from a JSON/YAML file

To upload the API specification file from a JSON/YAML file to Document360,

1. Navigate to the desired project in the Knowledge base portal.
2. Select **API documentation** (**{}**) from the left navigation bar.
3. Click the **Create** dropdown from the header menu bar and select **New API**. This will display the **New API reference** side panel.
4. In the **Choose source** screen, select the **Upload API definition** radio button, and click **Next**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Create_API_from_JSON_YAML.png)

5. In the **Source settings** screen, upload the API specification file in either JSON or YAML format.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Upload_API_definition.png)

6. Click **Add API reference** to navigate to the **Finish** screen.
7. On the **Finish** screen, you will be able to see the number of categories and articles that have been created for your API specification file.
8. Click **Publish** to generate your API documentation.

> NOTE
>
> To review your documentation before publishing, click **Close** to return to the Documentation screen. Your draft will be visible in the **Categories & Articles** pane.

### Generating API documentation with a CI/CD flow

Before you upload an API specification file with a CI/CD flow, ensure that the latest version of Node.js is installed on your system. If you are unfamiliar with Node.js, refer to [this guide](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) for installation instructions.

Next, from command prompt, install the d360 npm with the following command: `npm install d360 -g`

To upload the API specification file with a CI/CD flow,

1. Navigate to the desired project in the Knowledge base portal.
2. Select **API documentation** (**{}**) from the left navigation bar.
3. Click the **Create** dropdown from the header menu bar and select **New API**. This will display the **New API reference** side panel.
4. In the **Choose source** screen, select the **CI/CD Flow** radio button, and click **Next**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Create_API_with_CI_CD_flow.png)

5. Copy the API token from the **Source settings** screen.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-CI_CD_flow_API_key.png)

6. Paste the API token in the command line tool.
7. Choose the spec file path

   * For **JSON/YAML** file: Type your spec file's directory path in the "`--path`" parameter
   * For **URL**: Type your spec file URL in the "`--path`" parameter
8. Your API specification file will be imported, and API documentation will be generated

---

## Regenerate API documentation

If you make any changes to your API, such as adding any endpoints, you do not need to manually update your API documentation in Document360. You can simply regenerate your API documentation, and any changes in your API will automatically reflect in the API documentation.

> NOTE
>
> Any custom content you add to your API documentation will be retained when you regenerate your API documentation.

### Regenerate API documentation from URL

1. Navigate to the desired project in the Knowledge base portal.
2. Select **API documentation** (**{}**) from the left navigation bar.
3. Click **API docs reference** from the left navigation list pane.
4. Click the more (•••) icon next to the desired API reference for which you want to regenerate the API documentation.

   1. **To regenerate API documentation from the existing URL**:

      * Click **Resync.**
      * The API documentation will be regenerated as per the latest API specification file.
   2. **To regenerate API documentation with a new URL**:

      * Click **Edit.**
      * Enter the new URL in the **URL** field.
      * Click **Update.**
      * The API documentation will be regenerated as per the API specification file in the new URL.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Resync_API_URL.png)

### Regenerate API documentation from an API specification file

1. Navigate to the desired project in the Knowledge base portal.
2. Select **API documentation** (**{}**) from the left navigation bar.
3. Click **API docs reference** from the left navigation list pane.
4. Click the more (•••) icon next to the desired API reference for which you want to regenerate the API documentation.
5. Click **Edit**.
6. Upload the latest API specification file in JSON/YAML format.
7. Click **Update**. The API documentation will be regenerated as per the latest API specification file.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Update_JSON_YAML_file.png)

### Regenerate API documentation integrated with CI/CD flow

You can resync the API reference in your CI/CD pipelines with the help of your [d360 npm packages](https://www.npmjs.com/package/d360). D360 is the command line tool that helps you set up workflows that sync your API docs to Document360.

You can also perform the resync manually using the below command.

```
d360 apidocs:resync 
                    --apiKey=API_key_value
                    --userId=user_id_value
                    --apiReferenceId=API_reference_value
                    --path=Spec_file_path
```

Plain text

Copy

---

### FAQs

**Can I keep the generated API documentation in the draft state?**

After uploading the API reference file, if you click **Close** instead of **Publish**, all the generated API documentation articles are kept in the draft state.

**Can I move a specific API endpoint article from one API reference folder to another in Document360?**

No, it is not possible to move a specific API endpoint article from one API reference folder to another. However, you can move API endpoint articles between subfolders within the same API reference folder.

**Can an article from the API documentation have the same URL as a Knowledge base articles?**

No, a knowledge base article and an API documentation article cannot have the same URL. However, you can keep them under the same subdomain.

**How often is an API reference file resynced?**

If you generated your API documentation from a URL, or a JSON/YAML file, the API reference file is not resynced automatically, and will have to be updated manually. If you want the API reference file to be resynced automatically, it is recommended to integrate the API reference file with CI/CD flow.

---

## Helpful links

* [**d360 npm package link**](https://www.npmjs.com/package/d360)
* [**Source code**](https://github.com/document360/d360)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="edit-clone-and-delete"></a>

## Edit, Clone, and Delete widget

**Plans supporting editing the knowledge base widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can easily manage your Knowledge base Widget in Document360, as all the options are available in just a few clicks away.

## Edit Knowledge base Widget

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click () **Edit**.

![1_editwidget.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_editwidget.png)

3. Update the desired configurations in the **Configure & connect** tab.

![2_editwidget.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_editwidget.png)

4. Click **Save** to confirm the changes.

---

## Clone Knowledge base Widget

1. Navigate to **Knowledge base Widget** in the Knowledge base portal
2. Hover on the desired Knowledge base Widget that you want to clone.
3. Click (

   ) **Clone**.

![2_KBWidget_clone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_KBWidget_clone.png)

4. Specify a title and update the desired configurations in **Configure & connect** tab.

![5_KBWidget_confirmclone.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_KBWidget_confirmclone.png)

5. Click **Save**.

---

## Delete Knowledge base Widget

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget that you want to delete.

![3_KBWidget_delete.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_KBWidget_delete%281%29.png)

3. Click (

   ) **Delete**.

![4_KBWidget_deletewidgetsetting.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_KBWidget_deletewidgetsetting.png)

4. Click **Yes** in the confirmation prompt. Click **No** to undo the process.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="managing-and-customizing-the-knowledge-base-widget"></a>

## Managing and customizing the Knowledge base widget

**Plans supporting knowledge base widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Customizing the knowledge base widget

You can customize each knowledge base widget to improve the user experience.

![1_Screenshot-Overview_page_of_KNowledge_base_Widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Edit_kb_widget.png)

1. Log in to the Knowledge base portal and select your desired project.
2. Navigate to the **Widget ()** tab from the left navigation sidebar. The list of widgets created by the user will be displayed.
3. Hover over the desired widget and click the **Edit** (✎) icon.
4. In the **Configure & connect** tab, expand the **Style widget** section.
5. The following widget customization options are available:

   * [Widget color](/help/docs/styling-the-in-app-assistant#widget-color)
   * [Widget icon](/help/docs/styling-the-knowledge-base-widget#b-widget-icon)
   * [Widget position](/help/docs/styling-the-knowledge-base-widget#c-widget-position)
   * [Hide widget](/help/docs/styling-the-knowledge-base-widget#d-hide-widget)
   * [Hide most searched articles](/help/docs/styling-the-in-app-assistant#hide-most-searched-articles)

![2_Screenshot-Style_your_widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Edit_widget_style_widget_section.png)

### Widget color

You can choose the knowledge base widget theme color. This color is also set as the widget icon color.

1. Click **Change color** to open the color palette.
2. Select a color from the color picker or enter a hex, RGB, or HSL color code.

### Widget icon

Similarly, under the widget color section, you can replace the icon with an image or an available icon.

1. Click the **Change icon** button.
2. Choose an icon from the **Icon set** tab or insert an image from the **Insert image** tab:

   * To insert an image from a URL: Paste the URL and click **Insert.**
   * To upload an image: Click **Upload an image** and select a file from your Drive.

### Widget position

Choose the position of the widget launcher on your website or application.

1. Select **Left** or **Right** to change the widget position.
2. Enter the desired spacing values in the **Side spacing** and **Bottom spacing** fields to position the widget from the side or bottom of the window.

### Hide widget

When toggled on, the Knowledge base widget will be hidden.

NOTE

* The Knowledge base widget is enabled by default.
* To unhide a Knowledge base widget, turn off the **Hide widget** toggle and click **Save**.

### Hide most searched articles

When toggled on, the top search article section will be hidden.

> NOTE
>
> Enabling **Hide top search** disables the URL mapping functionality for the widget.

Once you complete making the desired customizations to the knowledge base widget, click the **Save** button next to the **Widget name** field.

---

## Adding a ticket deflector in Knowledge base widget

To add a ticket deflector to your Knowledge base widget,

1. Log in to the Knowledge base portal and select your desired project.
2. Navigate to the **Widget** tab from the left navigation sidebar. The list of widgets will be listed.
3. Hover over the desired widget and click the **Edit** (✎) icon.
4. In the **Configure & connect** tab, expand the **Ticket deflector** section.
5. Enable the **Show ticket deflector** toggle.
6. Select the desired ticket deflector.
7. If required, update the **Menu name field**.
8. Click the **Save** button next to the **Widget name** field.

![3_Screenshot-Ticket_deflector_in_KB_Widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Edit_widget_ticket_deflector.png)

Once you enable the ticket deflector toggle and click **Save**, the ticket deflector is added to the knowledge base widget.

---

## Content access for the Knowledge base widget

You may want to show only particular articles or hide some articles in your Knowledge base. You can do this effectively with the **Content access** option.

NOTE

The **autosave** option is available for navigation between the Knowledge base widget tabs.

---

### Restricting content access in a Knowledge base widget

To restrict content access in a knowledge base widget,

1. Navigate to **Knowledge base widget** () in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click **Edit** ().

![1_filterwidgetcontent_workspace.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_filterwidgetcontent_workspace%282%29.gif)

3. In the **Configuration & connect** tab, expand the **Content access** section.
4. You have three options:

   1. Project
   2. Workspace
   3. Category

#### Project

When you select **Project**, all the articles in the Knowledge base appear in the Widget.

> Project is selected by default.

---

#### Workspace

You can make the desired language(s) or workspace(s) appear in the Widget.

> **For example**, you want to select a different workspace with a specific language.

1. Select **Workspace** to view the list of available workspaces and languages.
2. Select the checkbox of the desired workspace(s) and language(s), and Click **Save**.

---

#### Category

You can make the desired categories appear in the Widget.

> **For example**, you want to show only the **Sales** categories in the Widget.

1. Click **Category** and select the workspace in the **Choose category**.
2. The list of categories available in the specific workspace appears, select the checkbox of the desired categories.  
   ![2_filterwidgetcontent_category.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_filterwidgetcontent_category.gif)
3. If you want to add more categories from other workspace, expand the **Workspace(s)** to choose the desired categories.
4. Click **Save**.

---

> CAUTION
>
> **Changes in content access will directly affect your URL mapping**
>
> * If you make a change related to the configured URL mapping, the URL mapping will be **disabled** and appear as broken.
>
> > **For example**, you have set the filter Widget content at the project level and configured a URL mapping with a List of articles from category A in workspace V1. Now you are updating the Filter Widget configuration to show only the categories B and C in workspace V1. With this action, the URL mapping will be invalid. This is because the articles you configured in URL mapping will not appear in the Knowledge Base Widget.
>
> ---
>
> * In the URL mapping window, you can only configure articles that are made available in the Filter widget content.
>
> > **For example**, you have set the filter Widget content at the workspace level to show only workspace V1. In this case, you cannot configure a URL mapping with an article available in workspace V2.

---

## Domain restriction

Document360 lets you restrict the Knowledge Base Widget to specific domains.

Once a domain is added to the **Widget security** list, and if a project member wants to install the Knowledge Base Widget on a different domain, they will need to add that domain in the **Widget security** section.

If no domains are added to the list, the Knowledge base Widget can be added to any SaaS application or public website.

### Restrict the Knowledge base widget to a specific domain

To restrict your Knowledge base widget to a specific domain,

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click () **Edit**.

![1_domain_restriction.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_domain_restriction.gif)

3. In the **Configure & connect** tab, expand the **Widget security** section. You can find the list of domains previously added (if added).
4. Enter the domain where you want the Knowledge base Widget to be displayed.

NOTE

The "www" is not a valid part of your domain. Only add what comes after the www. in your URL.

> **For example**: *document360.com*

5. Click **Add** and click **Save**.

NOTE

The **autosave** option is available for navigation between the Knowledge base Widget tabs.

---

## Adding custom links

Need to add a download link to an eBook or Google Sheets?  
You can direct an end user by adding a custom link to the Knowledge base Widget.

![2_addingcusotmlinks.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_addingcusotmlinks.png)

Links are added as a "section" to your Widget. They will be placed in the order they are added, underneath the **Top search articles** section.

To add a custom link,

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click (  ) **Edit**.
3. In the **Installation & Setup** tab, expand the **Add custom links** section.
4. In the **Add Custom Links**  section:

   * Type the title for your section
   * Type the display text for the link

     > **For example,** **Contact Us**
   * Type the URL link

     > **For example,** https://support.document360.com
5. Click the adjacent icon and choose the desired icon from the available options.
6. Click **Add** > **Save**.

![1_addlinks.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_addlinks.gif)

**NOTE**

You can use a `mailto:` in the link field. For example: `mailto:<youremail@somedomain.com>`

### Edit a custom link

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click () **Edit**.
3. In the **Configuration & connect** tab, expand the **Add links** section.
4. In the **Add Links** section, locate the custom link you wish to edit.
5. Click () **Edit** and update the desired fields.
6. Click **Save**.

### Deleting a custom link

1. Navigate to **Knowledge base Widget** in the Knowledge base portal.
2. Hover on the desired Knowledge base Widget and click () **Edit**.
3. In the **Configuration & connect** tab, expand the **Add links** section.
4. In the **Add Links** section, locate the custom link you wish to delete.
5. Click () **Delete**.
6. Click **Save**.

---

## Securing Knowledge base widget authentication using JWT

You can implement an authentication configuration for the widget using JWT, ensuring a secure environment for private and mixed projects.

1. Navigate to Knowledge base widget in the Knowledge base portal.

   The list of widgets will appear.
2. Hover on the desired Knowledge base Widget and click () **Edit**.
3. In the **Configure & connect** tab, navigate to the **JWT** section and **enable** the JWT toggle.

1. **Client ID:** The client ID will be your project’s ID.
2. **Widget ID:** Since multiple widgets may exist, a Widget ID is provided for their unique purposes.
3. **Token endpoint:** A token endpoint is an HTTP endpoint that allows you to obtain an access token given an authorization code.
4. **Client secret:** Click **Regenerate** to generate the client secret. You need to save this for future purposes and the same client secret will apply to all widgets in the future.

> NOTE
>
> The Client secret will be required for JWT widgets you may create. Note that this information will not be stored in Document360.

   e. **Authorize URL:** Paste the authorized URL from your knowledge base widget webpage.

5. Click **Save**.

![Securing the Knowledge base widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Securing_Knowledge_base_widget_authentication_using_JWT.png)

Embed the authorized URL within your code and paste it into the **script section** on your webpage. This will implement a secure, authenticated widget that prevents unauthorized third-party access.

---

### Implementing the auth endpoint

```
[HttpGet]
[Route("authenticate")]
public async Task<IActionResult> WidgetAuthentication(string id)
{
    if (HttpContext.User.Identity.IsAuthenticated)
    {
        var clientData = new ClientDetails()
        {
            ClientId = "{Client ID}",
            Secret = "{Client secret}",
            TokenEndpoint = "{Token endpoint}",
            WidgetId = "{Widget ID}",
            SecurityGroupIds = "{Comma separated reader group IDs}", // mandatory for configuration to render KB widget
            TokenValidity = 15, // integer representing token validity in minutes
        };

        if (clientData == null)
            return NotFound();

        List<string> readerGroupids = null;
        if (!string.IsNullOrEmpty(clientData.SecurityGroupIds))
            readerGroupids = clientData.SecurityGroupIds.Split(',').Select(c => c.Trim()).ToList();

        var payload = new
        {
            username = "{Username}",
            firstName = "{First name}",
            lastName = "{Last name}",
            emailId = "{Email address}",
            readerGroupIds = readerGroupids,
            tokenValidity = clientData.TokenValidity,
            widgetId = clientData.WidgetId,
            projectId = clientData.ClientId
        };

        var payloadString = JsonConvert.SerializeObject(payload);

        var result = await client.RequestTokenAsync(new TokenRequest
        {
            Address = clientData.TokenEndpoint,
            ClientId = clientData.ClientId,
            ClientSecret = clientData.Secret,
            GrantType = "Widget",
            Parameters =
            {
                {
                    "payload",  payloadString
                },
                {
                    "id", clientData.ClientId
                },
            }
        });

        return Ok(new
        {
            accessToken = result.AccessToken,
            expiresIn = result.ExpiresIn
        });
    }
    else
    {
        return Unauthorized(new { success = false });
    }
}
```

C#

Copy

> NOTE
>
> You must include the comma-separated reader group IDs as security group IDs to configure and render the KB widget.

---

### FAQs

#### Why are certain categories appearing on the Knowledge base site but not in the widget?

This issue may occur if category-level access has not been properly configured for the widget. To ensure your categories are visible in the widget:

1. Verify that the team account or reader has permission to view the specific categories/articles in the Knowledge base widget.
2. Check whether category-level access is configured for the widget. If it is, you need to manually add the desired category in the content access section during widget configuration.

**To add the category to the widget:**

1. Navigate to **Knowledge base widget** () in the Knowledge base portal.
2. Hover over the desired widget and click the **Edit** icon ().
3. In the **Configuration & connect** tab, expand the **Content access** section.
4. Select **Category** and choose the desired category to appear in the widget.
5. Click **Save** to apply the changes.

#### The Knowledge base widget is not loading on the Knowledge base site. How can I fix this issue?

The Knowledge base widget may not load on your Knowledge base site if the API key is outdated. Updating the API key should resolve the issue and restore the widget functionality.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="url-mapping"></a>

## URL Mapping

**Plans supporting Knowledge base widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **URL Mapping** feature within the knowledge base widget allows you to tailor the display of specific articles and categories based on the pages your end users visit. This functionality not only enhances user experience by directing users to relevant content but also enables you to hide the knowledge base widget on certain URLs or provide a search bar with custom placeholders, guiding users on what to search.

---

## Using URL mapping

To configure URL mapping, you perform specific actions within the knowledgebase widget for designated URLs.

### Actions

There are four actions you can execute with URL mapping:

1. **Show article:** Displays a single article on the specified URL.
2. **Show list of articles:** Lists selected articles under the **Recommended** section within the Knowledge Base widget on the specified URL.
3. **Show search results:** Allows you to set a specific search term to query your knowledge base, returning relevant search results on the specified URL.
4. **Hide widget:** Prevents the Knowledge Base widget icon from appearing on the specified URL.

You can find these actions under the **URL Mapping** tab or when editing an existing mapping.

> NOTE
>
> For URL Mapping to work, the Knowledge base widget must be installed within your site or app. For more information, read the article on [Installing the Knowledge base widget](/help/docs/installing-the-knowledge-base-widget).

### URL Parameters

When configuring the Knowledge Base widget URL, you can include three types of parameters:

1. **Include Path**: `/thisis/a/path`
2. **Include Query**: `?animal=bear`
3. **Include Hash**: `#inbox`

You can also enable the **Is Regex** toggle to incorporate regular expressions into your URL configurations.

---

## Adding URL Mapping to your Widget

To integrate the desired widget into your knowledge base site, follow these steps:

1. Navigate to **URL Mapping** tab in the **Widget** () in the Knowledge base portal.
2. Click **New URL mapping** and specify the following:

   * **Name** - The URL Mapping name will only be shown on the URL mapping record within Document360
   * **URL structure**  - Select the desired URL parameter type (**Include path**/**Include query**/**Include hash**). You must enable at least one URL parameter
   * Type in the URL on which you want the article/category to show or action to occur.

     > NOTE
     >
     > Your domain name is *not* included in the URL path. For instance, `https://document360.com/ebook/rapid-guide-to-launch-your-knowledge-base/`, your URL Path would be `/ebook/rapid-guide-to-launch-your-knowledge-base/`
   * **Action** - Select the desired action.
   * **Select workspace** - Select the desired version (if you have multiple versions).
   * **Language to** - Select the desired language (if you have multiple languages).
   * **Article to show** - In the search bar, select the articles/categories you want to show from your knowledge base documentation.

   NOTE

   Folder categories are not available for selection. Only **page** and **index** category types are available for selection.
3. Click **Create**.

![1_URLmapping.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_URLmapping.gif)Once an end user accesses your specified URL path and opens the Knowledge Base widget, they will see the mapped article/category. This information remains consistent as they navigate between the Knowledge Base widget tabs within the same version and language.

---

## Editing URL mapping

To modify an existing URL mapping:

1. Navigate to **Widget** () in the Knowledge base portal.
2. Hover on the desired Knowledge base widget and click the **Edit** () icon.

   In the **URL mapping** tab, you can find the list of available URL mapping.
3. Hover over the desired URL mapping and click the **Edit** () icon.

   The **Update URL mapping** blade will appear.
4. Update the desired information and click **Update**.

![2_urlmapping_edit.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_urlmapping_edit.gif)

---

## Deleting URL mapping

You can delete a set URL mapping.

![3_urlmapping_delete.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_urlmapping_delete.png)

1. Navigate to **Widget** () in the Knowledge base portal.
2. Hover on the desired Knowledge base widget and click the **Edit** () icon.
3. In the **URL mapping** tab, you can find the list of available URL mapping.
4. Hover over the desired URL mapping and click the **Delete** () icon.
5. Click **Yes** in the **Delete confirmation** prompt.

---

## URL mapping settings

You can define the Knowledge base widget behavior for URLs that do not have configured mapping. Defining this behavior can improve the user experience and accessibility to the documentation.

![4_urlmapping_settings.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_urlmapping_settings.png)

1. Navigate to **Widget** () in the Knowledge base portal > **Configure & connect**.
2. Under **Set controls** section, expand the **URL mapping settings** section.
3. Select the desired option:

   * **Navigate to the page help/knowledge base**: Select this option to display the article/category in Page help or Knowledge base tab in the Widget.
   * **Do not make any changes to the existing setup**: Select this option to display the last opened article/category in the Widget.
4. Click **Save**.

---

## Basic URL matching

Understanding URL matching is crucial for effective URL mapping. A general-purpose regex for matching typical URLs looks like this:

```
^https?://?[a-zA-Z0-9.-]+/[a-zA-Z0-9/._-]*??[a-zA-Z0-9=&._-]*?#[a-zA-Z0-9_-]*?$
```

Regex

Copy

**Explanation of the components**

* `^https?://?`: Matches the protocol (e.g., `http://` or `https://`). The `?` makes the protocol optional.

  > NOTE
  >
  > Ensure to add a backward slash (\) before every forward slash (/) while testing your URL on https://regex101.com.
* `[a-zA-Z0-9.-]+`: Matches the domain name, including letters, numbers, dots (`.`), and hyphens (`-`).
* `/[a-zA-Z0-9/._-]*?`: Matches the path after the domain, allowing slashes, alphanumeric characters, dots, underscores, and hyphens.
* `?[a-zA-Z0-9=&._-]*?`: Matches optional query parameters (e.g., `?key=value`), making this part optional.
* `#[a-zA-Z0-9_-]*?`: Matches the fragment (e.g., `#section`), which is also optional.

---

### Examples of URL mapping using Regex

#### **Mapping URLs with specific paths**

To map a URL pattern like `/users/{id}`, use:

```
^/users/[0-9]+$
```

Plain text

Copy

This captures a user ID dynamically.

**Example Matches**

* `/users/123`
* `/users/456`

#### **Mapping URLs with query parameters**

For URLs like `/search?q={query}`, the regex would be:

```
^/search?q=[a-zA-Z0-9]+$
```

Regex

Copy

**Example Matches**

* `/search?q=apple`
* `/search?q=123abc`

#### **Mapping URLs with optional parameters**

For a URL pattern like `/products/{category}/{id}`, where category is optional:

```
^/products/[a-zA-Z]+?/[0-9]+$
```

Regex

Copy

**Example Matches**

* `/products/123`
* `/products/electronics/123`

#### **Mapping URLs with wildcard or multiple paths**

For `/blog/*`:

```
^/blog/.*?$
```

Regex

Copy

**Example Matches**

* `/blog`
* `/blog/how-to-code`
* `/blog/2021/10`

**Mapping URLs with subdomains**  
For subdomain URLs:

```
^https?://?[a-zA-Z0-9-]+.example.com$
```

Regex

Copy

**Example Matches**

* `http://blog.example.com`
* `https://shop.example.com`

#### Combining multiple components

To handle more complex URL mappings, you can combine the various components as needed. The comprehensive regex that matches a URL with an optional protocol, domain, path, query parameters, and fragment looks like this:

```
^https?://?[a-zA-Z0-9.-]+/[a-zA-Z0-9/._-]*??[a-zA-Z0-9=&._-]*?#[a-zA-Z0-9_-]*?$
```

Regex

Copy

---

## FAQs

**How can I remove the Page help and Search bar from the widget when URL mapping for a single article is configured?**

To remove the Page help and Search bar from the widget when URL mapping for a single article is configured:

1. Navigate to **Widget** () in the Knowledge base portal.
2. Hover over the desired widget and click the **Edit** () icon.
3. Paste the provided code in the **Custom CSS** tab:

   ```
   li#page-help-tab {
       display: none;
   }

   .article-header .article-back-icon {
       display: none;
   }

   .search-container {
       display: none !Important;
   }
   ```

   CSS

   Copy
4. Paste the provided code in the **Custom JavaScript** tab:

   ```
   setTimeout(function() { $('.search-container').hide();}, 2000);
   setTimeout(function() { $("#knowledge-base-tab").click();}, 2000);
   ```

   JavaScript

   Copy
5. Click **Save**.

This will hide the **Page help** tab and **Search bar** in the widget on the Knowledge base site when URL mapping for a single article is configured.

**How can I see the updates immediately in the KB Widget after adding or updating a URL Map?**

The updates are cached on the server for performance reasons and will automatically refresh every 15 minutes. However, if you need to see the changes immediately, you can clear the application cache.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="customizing-the-kb-widget-using-custom-css-javascript"></a>

## Customizing the Knowledge base widget using Custom CSS/JavaScript

**Plans supporting knowledge base widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Customizing the Knowledge Base (KB) widget allows you to personalize its appearance and behavior, making it align with your branding or specific functionality needs. In this article, we'll walk through customizing the widget's icon, setting up buttons for interaction, managing callbacks for show/hide functionality, and applying styling and localization adjustments.

---

## How to change the default widget icon?

You can easily replace the default Knowledge Base widget icon with a custom one that fits your brand’s design. This gives a more cohesive look to your website or app.

### **Creating a custom button**

To add a custom button that interacts with the Knowledge Base widget:

1. Add a new HTML element, a button, for example, anywhere on your page.

   ```
    <button id="doc360_help_btn" class="btn hide"><span>Help!</span></button>
   ```

   XML

   Copy
2. Assign the element a CSS class that includes `display: none`.

   ```
   .hide
   {
       display:none;
   }
   ```

   CSS

   Copy

### **Setting up callback functions**

To control the visibility of the custom button based on the Knowledge Base widget’s state, you’ll need to create callback functions in JavaScript.

Add the following [callback functions](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function) to any of your JavaScript files or inside a `<script>` tag.

**Show button when widget loads:**

```
function doc360_callback()
{	
    document.getElementById('doc360_help_btn').classList.remove('hide');
}
```

JavaScript

Copy

**Show button after being hidden by URL mapping:**

`doc360_callback` needs to remove the `display: none` from your button. This will be executed when the Knowledge Base widget has completed loading the setting.

```
function doc360_show_callback()
{
    document.getElementById('doc360_help_btn').classList.remove('hide');
}
```

JavaScript

Copy

**Hide button based on URL mapping:**

`doc360_show_callback()` needs to remove the `display: none` from your button. This will be executed if the button was previously hidden by URL mapping

```
function doc360_hide_callback()
{
    document.getElementById('doc360_help_btn').classList.add('hide');
}
```

JavaScript

Copy

`doc360_hide_callback()`needs to add the `display: none` to your button. This will be executed by [URL mapping](/help/docs/url-mapping) if a valid map is found to hide Knowledge Base widget. These functions handle the button's visibility based on the Knowledge Base widget’s state or URL mapping.

> NOTE
>
> The show and hide callbacks are only necessary if you’re hiding the widget on specific pages using URL mapping.

### Integrating the callback functions

To make the widget recognize your custom callbacks, modify the Knowledge Base widget’s JavaScript snippet (found in the widget settings):

```
<!-- Document360 Knowledge Base assistant Start -->
<script>
    (function (w,d,s,o,f,js,fjs) {
        w['JS-assistant']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
        js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
        js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);
    }(window, document, 'script', 'mw', 'https://cdn.document360.io/static/js/assistant.js'));
    mw('init', { apiKey: 'YOUR KEY', 
                   callback:  doc360_callback, 
                   show_callback: doc360_show_callback,  
                   hide_callback: doc360_hide_callback });
</script>
<!-- Document360 Knowledge Base assistant End -->
```

JavaScript

Copy

### **Making the button open the widget**

Once the button is visible, you’ll want it to open the Knowledge Base widget when clicked. You can achieve this with either pure JavaScript or jQuery.

**Using Pure JavaScript:**

```
document.getElementById('doc360_help_btn').addEventListener('click', function () { 
    document.getElementById('document360-assistant-iframe').contentDocument.getElementById('doc360-button').click();
});
```

JavaScript

Copy

**Using jQuery:**

```
$('#doc360_help_btn').click(function() {
    $('#document360-assistant-iframe').contents().find('#doc360-button').click();
}); 
```

JavaScript

Copy

### **Customizing the button’s appearance**

Apply any custom CSS to the button to match your website’s branding. This could involve changing colors, font styles, or adding additional effects.

---

## How to change dark theme in Knowledge base widget?

You can use Custom JavaScript to create this customization.

1. Navigate to **Knowledge base Widget** in the Knowledge base portal and click on the (  ) Edit icon.

![kbwidget_darktheme.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1730066025105.png)

2. Open the **Custom CSS** tab, paste the below snippet, and click **Save**.

```
.doc360-widget-modal {
    background-color: black;
    color: white;
}
 
.doc360-widget-modal div,
.doc360-widget-modal li,
.doc360-widget-modal p,
.doc360-widget-modal ul,
.doc360-widget-modal span,
.doc360-widget-modal input,
.doc360-widget-modal textarea {
color: white !important;
  background-color: black !important;
}
 
.doc360-widget-modal button {
  color: white !important;
}

.eddy-feedback-btn:hover {
    color: black !important;
    background-color: #e4e4e7 !important;
}

.eddy-feedback-btn {
    background-color: black !important;
}
```

CSS

Copy

---

## How to change the fields displayed in the Knowledge base Widget?

You can use Custom JavaScript to create this customization.

1. Navigate to **Knowledge base Widget** in the Knowledge base portal and click on the () Edit icon.

![kbwidget_changefields.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1730066068782.png)

2. Open the Custom JavaScript tab to paste the below snippet.

```
$(document).ready(function() {
    if ($('.tab-link.current').length > 0) {
        $('.tab-link.current').html($('.tab-link.current').html().replace("Page help", "Destek"));
        $('.tabs li:last-child').html($('.tabs li:last-child').html().replace("Knowledge base", "DokÃ¼matasyon"));
    }

    setTimeout(function() {
        $('#top-search-title').html($('#top-search-title').html().replace("Top search articles", "En Ã‡ok Aranan DokÃ¼manlar"));
    }, 3000);
});
$(document).ready(function() {
    $('#search-input').each(function(ev) {
        if (!$(this).val()) {
            $(this).attr("placeholder", "Arama");
        }
    });
    $('#category-filter').each(function(ev) {
        if (!$(this).val()) {
            $(this).attr("placeholder", "Filtrele");
        }
    });
});
```

JavaScript

Copy

3. Replace the text as per your requirement.
4. Click **Save**.

---

## How to set the Knowledge base Widget to open automatically in the knowledge base site?

You can use Custom JavaScript to create this customization.

1. Navigate to **Knowledge base Widget** in the Knowledge base portal and click on the (  ) Edit icon.

![kbwidget_autoopen.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1730066097873.png)

2. Open the Custom JavaScript to paste the below snippet and click **Save**.

```
$(function() {
setTimeout(function(){
let iframe = $('#document360-widget-iframe');
let button = iframe.contents().find('#doc360-button');
button.trigger("click");}, 2000);
});
```

JavaScript

Copy

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="faq-knowledge-base-widget"></a>

## FAQ - Knowledge base widget

**Plans supporting knowledge base widget**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

#### 1. What is a Knowledge base widget?

The Knowledge base widget helps users find answers without leaving your site or application. The feature aims to assist users in finding solutions to common questions, troubleshooting issues, and learning about new features and functionalities, all without leaving the application.

---

#### 2. How is the Knowledge base widget useful for the users?

Here are some scenarios where you can find the Knowledge base widget helpful:

* **User onboarding**: A new user of an app can access the Knowledge base widget to learn the basics of using the app, such as setting up an account, navigating the user interface, and performing common tasks without leaving the application.
* **Technical support**: If a user encounters a problem or error message while using the app, they can use the Knowledge base to search for a solution rather than contacting customer support or searching for answers outside the app.
* **Learning about new features**: As an app or service is updated with new features and functionalities, users can access the Knowledge base widget to learn about what has changed, how to use the new features, and how to benefit from them. It can improve the overall user experience and adoption of new capabilities.

---

#### 3. Is it possible to configure multiple Knowledge base widgets?

Yes, you can configure up to 10 Knowledge base widgets in a project.

---

#### 4. How to change the position of the Knowledge base widget icon on your website?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. In the **Style your widget** section, you can find the **widget position**.
3. Select the **Left** or **Right** button to change the icon position to left or right.
4. Enter the desired spacing values in the **Side spacing** and **Bottom spacing** fields to position the icon.
5. Click the **Save** button at the top.

---

#### 6. How to turn off the top search in the Knowledge base widget?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. In the **Style your widget** section, enable the **Hide top search** toggle.
3. Click the **Save** button at the top.

---

#### 7. Why does a configured URL mapping appear broken?

The URL mapping would be broken due to any changes in the 'Filter widget content' configuration in the 'Installation & setup' tab. Check the URL mapping and update the configuration.

---

#### 8. How do I set my desired logo as a widget icon?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. In the **Style your widget** section, you can find the **widget icon**.
3. Click the **Change icon** button.
4. Choose/upload the desired icon.
5. Click the **Save** button at the top.

---

#### 9. How to hide the Knowledge base widget?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. In the **Style your widget** section, enable the **Hide widget** toggle.
3. Click the **Save** button at the top.

---

#### 10. Can I add custom links in the Knowledge base widget?

Yes, you can add custom links in the Knowledge base widget.

---

#### 11. What is URL mapping?

With URL mapping, you can make specific articles and categories appear in the knowledge base widget, depending on the page the end-user is on. You can also use URL mapping to hide the Knowledge base widget on a specific URL or provide a search bar with a custom placeholder to point end-users in the right direction on what to search.

---

#### 12. How to enable Ticket deflector in the Knowledge base widget?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. Enable the **Show ticket deflector** toggle.
3. Click **Save** at the top.

---

#### 13. Can I add regular expressions (regex) in URL mapping?

You can include regular expressions in your URL by enabling the **Is Regex** toggle.

---

#### 14. What is regex?

Regex, short for "regular expression," is a sequence of characters that defines a search pattern used to match and manipulate text strings.

> For example, you can use regex to configure a single URL mapping for 20 articles with similar URLs.  
>  For instance, consider a scenario where you wish to configure URL mapping for the following articles with the base URL '`https://example.com/docs/drive`':
>
> * `https://example.com/drive-General`
> * `https://example.com/drive-settings`
> * `https://example.com/drive-functionA`
> * `https://example.com/drive-functionB`
> * `https://example.com/drive-functionC`
> * `https://example.com/drive-functionD`
> * `https://example.com/drive-functionE`
>
> Without regex, you would need to add individual URL mappings for each URL. However, by enabling regex, you can add with a single URL mapping: Select the "Include path" option and add `docs/drive` in the URL field. You can use regex to have a more efficient and streamlined mapping process.

---

#### 15. Can I add URL mapping for categories?

Yes, you can add URL mapping for categories. It applies only to page and index categories.

---

#### 16. How to remove the Knowledge base widget icon from an article?

1. Go to the **URL mapping** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. Create a new URL mapping with **Hide** action for the desired article.

---

#### 17. What is the default language behavior of the Knowledge base widget?

The Knowledge base widget will now open in the default browser language by default. If the default browser language is not available in the Knowledge base widget, the default language of the Knowledge base will appear.

#### 18. How do I restrict the Knowledge base widget to a specific domain?

1. Go to the **Installation & Setup** tab of the desired Knowledge base widget (**Knowledge base widget** > **Edit**).
2. In the **Style your widget** section, you can find the **Keep your widget secure**.
3. Enter the domains where you want the Knowledge base widget to display.
4. Click **Add** > **Save**.

<a id="knowledge-base-site-20"></a>

## Knowledge base site 2.0

**Plans supporting Knowledge base site 2.0**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Knowledge Base Site 2.0 introduces an improved experience for accessing articles and browsing information. With an enhanced user interface, better search functionality using AI, and streamlined content organization, users can quickly find relevant articles and troubleshoot issues efficiently. New features such as real-time updates and interactive elements make it easier to navigate and engage with content. The Knowledge base site ensures a more intuitive and efficient knowledge-sharing experience for all users.

> For Your Information (FYI)
>
> To migrate from KB site 1.0 to KB site 2.0, read the article on [**KB site 2.0 migration**](/help/docs/kb-site-20-migration).

---

## Overview of Knowledge base site 2.0

![Image showing sections of Knowledge base site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Knowledge_base_site_2.0.png)

### 1. Header section

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-New_Header_section_of_Knowledge_base_site_2.0(1).png "2_Screenshot-New_Header_section_of_Knowledge_base_site_2.0(1).png")

1. **Logo image:** Displays your organization’s branding element/logo. Clicking on it navigates you to your documentation home page.
2. **Workspace:**

   Use the dropdown to navigate through different workspaces available in the Knowledge base.

   Click on the API documentation workspace to navigate to the API documentation home page.
3. **Primary navigation:** Customize the primary navigation to help you navigate to different pages from your home page or Knowledge base site.
4. **Announcement** () **icon:** The "What’s New" page displays a list of recently published articles (new and forked) in the selected workspace.
5. **Acknowledgment required ()**: This page displays the list of acknowledgment required/acknowledged articles.
6. **Theme:** Switch between System theme, light, and dark themes in the Knowledge base site.   
   By default, the light theme will be set as the system theme.
7. **Language:** Select the desired language from the available list to read the articles.
8. **Secondary navigations:** Customize the secondary navigation to help you navigate to different pages from your home page or knowledge base site.

---

### 2. Left navigation pane

![Overview of the Knowledge base site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-left_side%20pane_KBsite2.0.png)

1. **Search bar:** Access the search function by clicking here or using the shortcut Ctrl + K (Command + K on Mac). Search for desired articles in the Knowledge base or use Eddy AI search for information. To know more information, read the articles on [Search](/help/docs/document360-search).
2. **Hide navigation menu:** Click to hide the left side pane for a wider view of the article.
3. **Tree view:** View the hierarchy of categories and articles in a clear tree structure.
4. **Status of the article:** This small color badge represents the status of the article (new, updated, custom). For more information, read the article on [Article status](/help/docs/article-status).
5. **Context menu:** For private and mixed project users, hover over the context menu to view two options:

   * **Follow category/article:** Click to receive notifications whenever new articles are published or existing ones are updated. This is available only in private and mixed projects. For more information, read the article on [Follow articles and categories](/help/docs/follow-articles-and-categories).
   * **Export PDF:** Export the article/category as a PDF.

---

### 3. Article section

![Knowledge base site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-New_Article_section_of_Knowledgemnt_base_Site_2.0.png)

1. **Breadcrumbs:** Navigate back to the category and sub-category of the article.
2. **Article title:** Displays the title of the article.
3. **Copy link:** Click to copy the article’s URL to the clipboard.
4. **Status badge:** Displays the status of the articles (new, updated, custom).
5. **Article date:** View the published or updated date of the article.
6. **Read time:** View the estimated average time it would take to read the article based on word count.
7. **Contributors:** View the list of contributors who have worked on this article.
8. **Share icon:** Share the article via Twitter, LinkedIn, Facebook, or Email.
9. **More sharing options:** Download the article as a PDF or print it.
10. **Follow**: Click here to follow the articles. This feature is available for reader accounts.
11. **Article summary:** Click to view the summary of the article generated by Eddy AI.
12. **Acknowledgement required**: Scroll to the end of the article and acknowledge article.

---

### 4. Image

When you click on an image on your Knowledge base site, the image opens in an image viewer.

* **Title text**: It displays the caption of the image, if any.
* **Open link**: To open the image URL, if available.
* **Zoom out** (): To zoom out or minimize the image.
* **Zoom in** (): To zoom in or enlarge the image.
* **Download** (): To download the image to your local storage.
* **Close** (X): To close the image.
* **Next** (): To move to the next image.
* **Previous** (): To move to the previous image.

  Hold and drag the image to move it anywhere on the screen. The image closes when you click anywhere on the screen outside the image.

  ![Knowledge base site view of an image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenShot-Knowledge_base_site_2.0.png)

---

### 5. Right side pane

![Overview of the Knowledge base site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Right%20side%20pane_KBsite2.0.png)

1. **Hide navigation menu:** Click to hide the right-side pane for a wider view of the article.
2. **Files:** View attachments associated with the article.
3. **Tags:** View the list of tags associated with the article.
4. **In this article** (Previously “Table of Contents”)**:** View the list of headings within the article.

---

### 6. Article footer

![Article footer of the Knowledge base site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Footer_section_of_Knowledge_base_site_2_0.png)

1. **Feedback of the Article:** Click **Yes** or **No** and enter your feedback for the article.
2. **Previous and Next Article:** Navigate to the previous and next articles in the category.
3. **Related articles:** View a list of associated related articles.

---

## Troubleshooting

This section provides step-by-step guidance to address common challenges that you may encounter while managing or accessing your knowledge base site. From website accessibility problems to configuration errors, each solution is tailored to help you quickly identify and resolve potential roadblocks.

### Website fails to load after entering the URL

If a website is not accessible when you enter a URL, possible causes could be incorrect URL entry, browser cache issues, VPN interference, network problems, server downtime, outdated browsers, or incorrect system date and time settings.

**Steps to resolve:**

1. Ensure the website URL is entered correctly.
2. Reload the page.
3. Clear browser cache:

   1. Right-click anywhere on the page and select **Inspect** to open the developer tools menu.
   2. Right-click the browser's reload button and choose **Hard reload** or **Empty cache**and **Hard reload**.
4. Check if a VPN is active on your device. Disable the VPN and attempt to access the site again.
5. Ensure your system's date, time, and time zone are set correctly.

If the issue persists after these steps, consider contacting the support team for further assistance.

### 504 gateway timeout while accessing the site

**Error:** 504 gateway timeout

If a 504 error occurs while accessing the site, one possible reason could be the sub-folder configuration.

**Steps to resolve:**

1. Check recent changes in the web server configuration:

   1. Review the location blocks or configuration files in the webserver for any recent changes.
   2. If changes are identified, revert them to their previous state.
2. Verify the sub-folder Configuration:

   1. A change in the sub-folder slug within the Sub-folder Configuration may cause the issue.
   2. Revert any recent changes to the sub-folder configuration to resolve the issue.

   For more reference on sub-folder configuration, refer to the article on [Hosting Document360 on a sub-directory](https://docs.document360.com/docs/document360-on-a-sub-folder).

### Page unresponsive while editing an article

**Error:** The page isn’t working. example.com redirected you too many times. ERR\_TOO\_MANY\_REDIRECTS.

If you encounter this error during article editing, possible causes could be an outdated browser cache, overly large articles causing performance issues, missing or improperly closed HTML tags, or excessive redirects due to incorrect configurations in the article.

**Steps to resolve:**

1. **Clear browser cache:** An outdated or corrupted browser cache can interfere with page functionality. Clear the cache, reload the browser and check if the issue persists.
2. **Reduce article length:** Large articles with extensive content can cause performance issues. Consider splitting lengthy articles into smaller sections and organizing them under relevant categories to enhance responsiveness.
3. **Check for missing closed tags:** Ensure all HTML tags in your article have corresponding closing tags, especially in Markdown. Elements like `<table>`, `<div>`, and `<p>` should be properly closed to prevent rendering problems.

These steps can improve your editing experience and help prevent **Page unresponsive** errors.

### Page isn’t working due to too many redirect**s**

**Error:** Page isn’t working: page redirected too many times

Possible causes of this error include incorrect JWT Login URL configuration, using the domain URL as the Login URL causing redirect loops, or outdated settings in the JWT configuration.

**Steps to resolve:**

1. **Check recent changes**: Review any recent updates made to the JWT Login URL in the configuration.
2. **Correct the Login URL**: Ensure the domain URL is not set as the Login URL. Using the domain URL can cause multiple redirect issues.
3. **Update JWT configuration**: Remove the incorrect Login URL from the JWT configuration and replace it with the correct one.

For detailed instructions on configuring JWT, refer to the [JWT article](https://docs.document360.com/docs/configuring-the-jwt-sso).

### Sorry! Project not found during custom domain configuration

**Error:** Sorry! This project does not exist.

Possible causes of this error include incorrect or missing CNAME record configuration, expired CNAME records in the DNS, or incomplete domain verification in the Document360 portal.

**Steps to resolve:**

1. **Verify CNAME Record**: Ensure the CNAME record is added correctly and click the 'Verify' button on the custom domain page in the Document360 portal. Once verified, the custom domain will be set up and active immediately.
2. **Check for CNAME Expiry**: If the CNAME record was updated in the DNS after some time, it may have expired, preventing domain verification and resulting in the error message.
3. **Reconfigure the Domain**: Reconfigure the custom domain, update the CNAME record, and verify the domain in Document360.

For detailed instructions, refer to the [custom domain mapping article](https://docs.document360.com/docs/custom-domain-mapping).

### Encountering "/home/error/" message while accessing the site

**Error:** /home/error/

Possible causes of this error include incorrect site configuration, server-side issues, or unresolved errors in the website's backend. You might encounter this error in the URL section after the domain URL.

**Steps to resolve:**

1. **Contact support**: Reach out to us at [**support@document360.com**](mailto:support@document360.com) with the following details:

   1. A screen share video demonstrating the issue on the page.
   2. Steps to reproduce the error, if possible.
2. **Provide HAR file**: Follow the steps outlined in this[guide](https://docs.document360.com/docs/document360-support-generating-a-har-file) to download the har file.
3. **Share console errors**:

   1. After downloading the har file, click on the ‘console’ tab in your browser's developer tools.
   2. Take a screenshot of the console errors displayed and include it in your email.

### Icons not rendering correctly on the user site

In some cases, icons on the user site may not render correctly, especially when there are a large number of icons for different navigations. The primary reason for broken icons is an unintended modification of the FontAwesome family provided by Document360. This occurs when changes to other classes or HTML tags on the user site unintentionally alter the icon font settings.  
To avoid this issue,

* Ensure that changes to the site's styling or class definitions do not impact the FontAwesome classes or font family settings.
* When targeting specific elements, double-check that icon-related styles remain intact and are not overwritten.

**Steps to resolve:**

**1. Inspect the broken icon:**

1. Use your browser’s developer tools to inspect the user site.
2. Click the broken icon using the selector tool to identify the issue.

2. **Check custom CSS:**

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Review any font rules applied to various classes. In some cases, font changes may unintentionally apply to broader classes, affecting the icons.
3. Ensure font changes are applied only to the specific classes that require them. This will help preserve the default settings for Font Awesome and prevent any unintended impact on icons.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

### Knowledge base site loading without CSS styling

This issue typically occurs when the site is accessed from a network where Document360 domains are blocked or not whitelisted by your company or organization.

**Steps to resolve:**

1. Verify if the site works correctly when accessed from a different network. If it does, the issue is likely related to network restrictions.
2. To resolve this, whitelist the following domains in your network settings to ensure proper access and functionality.

![Image showing domains to whitelist to address troubleshooting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-troubleshooting.png)

### Secure connection issues on the knowledge base site

**Error:**

* This site can’t provide a secure connection
* Your connection isn’t private
* The connection for this site is not secure

**Steps to resolve:**

1. **Check the CAA Record in DNS:**

   1. Verify if a CAA (Certification Authority Authorization) record is added for your knowledge base site in the DNS records.
   2. If no CAA record is found, inspect the SSL certificate used for the site. Refer to the steps in the provided video for guidance.

2. **Update the CAA Record:**

   1. Based on the SSL certificate provider, add the corresponding CAA record to your DNS.
   2. For example, if the certificate provider is Let’s Encrypt, add the second CAA record as specified in the instructions. Similarly, ensure the correct CAA record is added for your certificate type.

3. **Reference for CAA Records:**

   Learn more about CAA records and their importance by reviewing the following article:  
   [CAA Record and Why It Is Needed (SSL-Related)](https://www.namecheap.com/support/knowledgebase/article.aspx/9991/38/caa-record-and-why-it-is-needed-ssl-related/#caa_how).

4. **Contact the DNS Provider:**

   If the issue persists during custom domain setup, reach out to your DNS provider to confirm if there are any additional issues.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

### Encountering "ResourceNotFound" error while accessing the images, files or attachments

**Error**: ResourceNotFound

This error occurs when the SaaS token is not appended to the file URL in **private** and **mixed projects**. Document360 appends a SaaS token to ensure that only authorized users can access the file.

**Steps to resolve:**

* Ensure the SaaS token is appended to the file URL before accessing or sharing the file.
* Try downloading the file again directly from Document360.

![Error message indicating resource not found in XML file format.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1739344746842.png)

### Encountering "AuthenticationFailed" error while accessing images, files, or attachments

**Error:** AuthenticationFailed

This error occurs when the **SaaS token** has expired in **private** and **mixed projects**. In Document360, the SaaS token is valid for **15 minutes** before it automatically updates. If a file with an expired SaaS token is shared, users will not be able to access it. Possible causes includes:

1. **Restricted access to Private projects or content**

   Files in private projects or private content within mixed-visibility projects are restricted to users who do not have the necessary permissions.
2. **SaaS Token expiry**

   * Document360 files use **SaaS tokens** appended to their URLs for **temporary access**. Once the token expires, users cannot access the file.
   * Expiry time varies based on file type:

     + **Standard files:** The SaaS token expires **15 minutes** from the time the link is generated.
     + **Video files:** SaaS token expires **after 1 hour**.

> Example SaaS token:
>
> https://cdn.document360.io/4214231-3333-4222-huafgesu/exp/PaygOps-2024-Oct-29-03-54-19.zip?sv=2023-12-05&spr=https&st=2024-12-02T04%3A22%3A08Z&se=2024-12-02T04%3A52%3A08Z&sr=c&sp=r&sig=BtPheGpDGeLzQWNyv02oxWqWxvn%2FHwef05UCGJ6RsgHU%3D

**Steps to resolve**

* **Refresh the source webpage** and generate a new file link.
* Ensure you share the file within the valid token period (15 minutes for standard files, 1 hour for video files) to prevent expiration.

![Error message indicating authentication failure with details about the request and signature.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Troubleshooting-Authentication%20failed.png)

<a id="customize-site"></a>

## Customize site

**Plans supporting customization of Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In your Document360 project, you can manage your Knowledge base site design and customization from the unified **Customize site** feature. Customizing the appearance and functionality of your knowledge base is crucial to creating a seamless experience for your users. Document360's Customize Site feature allows you to tailor your knowledge base site to align with your brand identity and user preferences. Whether it's selecting themes, adjusting colors, or personalizing layouts, these customization options empower you to create a site that is not only visually appealing but also accessible and user-friendly.

Imagine managing a SaaS product’s support documentation. With **Customize site**, you can match your brand’s colors and logo, ensure accessibility using auto color contrast, and personalize layouts for better navigation.

> For your information (FYI)
>
> This enhancement is available in KB Site 2.0. To migrate from KB site 1.0 to KB site 2.0, read the article on [KB site 2.0 migration](/help/docs/kb-site-20-migration).

> NOTE
>
> **Customize site** is a project-level setting. The changes will reflect in the entire project.

---

## Basic site customization

To perform the basic customization:

1. Navigate to **Settings** ()**>** **Knowledge base site** **>** **Customize site** in the Knowledge base portal.

   The page holds all the basic site design configurations.
2. You can choose one of the three options to set the theme for your knowledge base site from the **Site theme** field:

   * Both Light & Dark
   * Light only
   * Dark only
3. In the **Branding** section, you can choose a **Logo** and **Favicon**. Additionally, you can set a custom redirection link for the logo. When a user clicks the logo on your Knowledge base site, they will be redirected to the specified link, such as your company website or a specific landing page.

   > NOTE
   >
   > Customers who already have a customized logo and favicon will not be affected until they navigate to the **Customize site** settings and save the changes.
4. In the **Colors** section, select the **Auto set color contrast to meet** [**WCAG**](https://www.w3.org/TR/WCAG21/) **standards** checkbox to apply the colors based on your brand to your site elements automatically.

   > NOTE
   >
   > For more information, read the article on [Web Content Accessibility Guidelines (WCAG)](/help/docs/web-content-accessibility-guidelines-wcag).

   1. In the **Brand color** section, you can choose a primary color for CTA's, selection states, and more.
   2. In the **Hyperlink color** section, you can customize the color of hyperlinks in your knowledge base to enhance the user experience. Under this option, you can choose from the three radio options:

      * **Use industry standard:** Applies a commonly used hyperlink color
      * **Use brand color**: Applies the same color you chose from the brand color
      * **Use a different color**: It allows you to select default, hover, and visited colors for hyperlinks.
   > NOTE
   >
   > If you have chosen the option **Auto set color contrast to meet WCAG standards**, both light and dark theme colors will be set automatically. Otherwise, you need to manually set colors for each theme.
5. In the **Fonts** section, you can change the fonts of your Knowledge base content anytime.

   There will be two sub-sections:

   1. **Article font paring**: This font will be applied to all your article titles and contents.

      Click on **Have a specific font combination in mind?** to select more font options. By clicking it, you can choose the font for titles and contents.
   2. **Site font**: Select the font in the dropdown. This will be applied throughout your Knowledge base site. It includes the left navigation pane (categories, sub-categories, article titles) and the navigations for the header, footer, secondary navigations, and controls.

6. In the **Styling** section, you can choose the style for the buttons and form elements. The three options available are:

   * Rounded
   * Sharp
   * Bubble
7. In the **Site layout** section, you will find two options:

   * **Full width**: Full width will extend your content to the edges of a browser window.
   * **Center**: The center layout will fit your content more in the center of a browser window.
8. Once done, click **Save**.

![Configuring the basic customization for the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Basic_site_customization.gif)

---

## Advanced site customization

Personalize your website by incorporating branding elements, header and footer sections, homepage, login page, and error pages in one central location.

1. Navigate to **Settings** ()**>** **Knowledge base site** **>** **Customize site** in the Knowledge base portal.

   The page holds all the basic site design configurations.
2. Click **Customize site**.
3. From this section, you can configure the following site elements:

   * [Site header & footer](/help/docs/site-header-and-footer): Customize the [Header](/help/docs/header-primary-navigation), [footer](/help/docs/footer-navigation), etc.,
   * [Main pages](/help/docs/main-pages): Customize the Home, Documentation, and Login pages
   * [Error pages](/help/docs/error-pages): Customize the [404 page](/help/docs/404-page), [Access denied](/help/docs/access-denied-page), [Unauthorized](/help/docs/unauthorized-page), and [IP restrictions](/help/docs/ip-restriction-page) pages
   * [Custom CSS / JavaScript](/help/docs/custom-css-javascript): Add advanced styling or interactivity to your site.

   The changes you apply on the left section can be previewed on the right window. To edit specific element, click on the desired item in the Preview window. The corresponding settings will appear in the left panel.
4. Use the dropdown to choose the different pages.

   The new interface for the Home page builder provides easier navigation and customization for each section of the homepage.
5. Click the **Save** button at the top right to save your changes.
6. Click **Preview** to get a glimpse of how your site looks.
7. Click **Publish**to commit all the changes you have made.

![Configuring the advanced customization for the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Advanced_site_customization.gif)

---

### FAQs

#### How do I change the site theme?

You can change the Knowledge base site theme by following the below steps:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In **Site theme** section, you can choose from three options:

   * Both Light & Dark
   * Light only
   * Dark only

#### How do I change the Favicons?

Favicon (short for favorite icon) is a small icon, usually 16x16 pixels, used by web browsers to identify your website. The favicon appears in the browser tab for the website, the bookmarks list, and the browsing history list.

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In the **Branding** section, hover over the default favicon and click **Click to change** on Favigon.
3. Now, you can add a Favicon in one of two options available:

   * **Using a URL**: Paste the image URL from any external source and click on **Insert****.**
   * **Upload an image**: Choose your file from the Drive or Upload an image from your local computer storageand click **Insert**.
4. Click **Save****.**

> PRO TIP
>
> * Always use an image with minimalistic and square dimensions (in pixels).
> * As a best practice, ensure your favicon is sized at 48 x 48 pixels for optimal rendering across platforms.

#### Why is the favicon added not rendering on the Knowledge base site?

This issue could be faced when the favicon added does not meet the specified criteria, including size and format. Make the necessary changes to the favicon or try re-uploading it on your Knowledge base site.

#### How do I change the site logo?

Replace the default **Logo** displayed in the top left of the knowledge base by uploading your desired logo.

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In **Branding** section, hover over the default **Logo** and click **Click to change**.
3. Now, you can add a Favicon in one of two options available:

   * **Using a URL**: Paste the image URL from any external source and click on **Insert**.
   * **Upload an image**: Choose your file from the Drive or Upload an image from your local computer storage and click **Insert**.
4. Once done, click **Save**.

#### How do I add text as the logo?

You can add a text as the logo by replacing the default logo displayed in the top left of the Knowledge base.

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In **Branding** section, click **Don't have a logo? Use name instead**.
3. Enter the desired text in the input field.

   For example, you can add a company name or tagline instead of a logo image.
4. Click **Save**.

> NOTE
>
> You can add up to 30 characters for logo text.  
> The maximum size for a logo is:  
> Height - 40 px  
> Width - 270 px  
> When you upload a logo with a bigger size, the logo size will be scaled down and kept within the maximum size.
>
> For example, uploading a logo with a size 500x1000 px (height x width) will be scaled down to 40x80 px.

#### How do I add custom logo URL?

Add a clickthrough URL to your logo with the Logo URL. A user clicks the logo and redirects to the provided link.

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. Add the desired URL in the Logo URL field.
3. Click **Save**.

> NOTE
>
> * If you do not add a logo URL and a user clicks the logo, it redirects to the Knowledge base home page.
> * Custom logo URL is an optional field.

#### How do I set a different logo for different themes?

If you're using a KB site 2.0 project, you can add custom code to set different logos for light and dark themes.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
.brand-logo img {
    content: url('Paste the Light mode logo URL here');
}

/* Override logo image when the theme is set to "dark" */
html[data-bs-theme="dark"] .brand-logo img {
    content: url('Paste the Dark mode logo URL here');
}
```

CSS

Copy

#### How to choose the brand color?

To choose the desired brand color for your Knowledge base site, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. Under **Colors**, you can choose the color for **Brand** color. This will be used as a primary color for CTA's, Selection states, and more.

> NOTE
>
> If you have chosen the option **Auto set color contrast to meet WCAG standards**, both light and dark theme colors will be set automatically. Otherwise, you need to manually set colors for each theme.

3. Once done, click **Save**.

#### How do I choose font family in customize site?

To change the fonts of your Knowledge base, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. Under **Fonts** section, there will be two sections: **Article font parsing** and **Site font**.

* **Article font paring**: This font will be applied to all your article Titles and Contents.

> NOTE
>
> Click **Have a specific font combination in mind?**, to select more font options. By clicking it, you can choose the font for titles and content.

* **Site font**: Select the font in the dropdown. This will be applied throughout the Knowledge base site. It includes the left navigation pane (categories, sub-categories, article titles) and the Navigations (header, footer, secondary navigations, controls).

3. Select the desired font and click **Save**.

> NOTE
>
> Document360 provides a list of common fonts used in documentation. However, you can configure your desired font in the knowledge base. For more information, read the article on [How to configure a custom font in the knowledge base?](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base)

#### How do I change the default paragraph style?

Currently, there is no direct option to change the default paragraph style. However, you can change the default article font in the Document360 editor.

To set the default font for your articles:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In the **Fonts** section, choose your desired font pair in the **Article font paring** tile. This font will appear in the Knowledge base articles.

   For instance, if you draft content in `Verdana` in the Knowledge base portal but select `Ubuntu + Open Sans` in the **Article font pairing**, in the Knowledge base site, the article title will appear in `Ubuntu`, and the article content will be in `Open Sans`.

> NOTE
>
> You can also select your custom font for your articles. For more information, read the article on [How to configure a custom font in the knowledge base?](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base)

To change the paragraph style for individual articles:

1. Open the desired article in the **Advanced WYSIWYG editor** and select the text.
2. Click **Format**, then choose a font style in the **Typography** section.

#### How do I change the button styles?

To change the button styles of your Knowledge base site, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In the **Styling** section, you can select the button style from the options such as rounded, sharp, and bubble.

#### How do I change the site layout in customize site?

To change the site layout in customize site, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. Under Layout, you can find the Full width and Center.

* **Full width**: Full width will extend your content to the edges of a browser window.
* **Center**: The center layout will fit your content more in the center of a browser window.

3. Click **Save**.

#### How do I set the default font for my articles on the Knowledge base site?

To set the default font for your articles:

1. Navigate to **Settings**() > **Knowledge base site**> **Customize site** in the Knowledge base portal.
2. In the **Fonts** section, choose your desired font pair in the **Article font paring** tile. This font will appear in the Knowledge base articles.

   For instance, if you draft content in `Verdana` in the Knowledge base portal but select `Ubuntu + Open Sans` in the **Article font pairing**, in the Knowledge base site, the article title will appear in `Ubuntu`, and the article content will be in `Open Sans`.

> NOTE
>
> You can also select your custom font for your articles. For more information, read the article on [How to configure a custom font in the knowledge base?](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="kb-site-20-migration"></a>

## KB site 2.0 migration

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 introduces Knowledge Base Site 2.0, offering advanced customization capabilities and new functionalities such as following articles and categories, sharing articles via private links, and more, enhancing user experience and engagement. This upgrade allows you to smoothly transition from Site 1.0 to Site 2.0, providing greater control over your Knowledge Base with improved configuration and customization options.

> **For Your Information (FYI)**
>
> By default, KB Site 2.0 is accessible for projects created after June 10th, 2024.

---

## Customizing your knowledge base site 2.0

1. Navigate to **Settings** ()> **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page will appear.
2. A new banner will be displayed to upgrade to Knowledge base site 2.0.

> NOTE
>
> This banner is displayed exclusively for Document360 1.0 Standard plan projects.

3. Click **Experience 2.0** in the banner to explore the KB site 2.0 preview.
4. Upon clicking, you can see two tabs: Site 1.0 (Active) and Site 2.0 (Preview). By default, Site 2.0 tab will be selected.
5. In the **Site 2.0** tab, you can view the **Knowledge Base Site 2.0 preview** banner with the following options:

   1. Go live with Site 2.0
   2. Customize site
   3. Preview site 2.0
   4. How to configure

![1_Screenshot-Customize_site_page_Kb Site 2.0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Customize_site_page_Kb%20Site%202.0.png)

### **a. Go live with Site 2.0**

1. Click **Go live with Site 2.0** to publish KB Site 2.0 with the same functionalities as KB Site 1.0, without customizing it.

   The **Publish confirmation** panel will appear.

> NOTE
>
> You cannot deselect the configurations the first time you are editing.

2. Click **Continue.**

   The **Switch from Knowledge base site 1.0 to 2.0** panel will appear.
3. Enter the subdomain of your project and click **Switch to 2.0**.

   Now you have migrated your KB site into our latest version KB site 2.0.

> NOTE
>
> From KB Site 1.0, the logo, favicon, primary color, link colors, title & body font, and site layout will be retained.

4. Within 30 days, you can revert to KB Site 1.0 by clicking **Rollback to Site 1.0.** Our team will review your request, and your KB site will be reverted to version 1.0.

> NOTE
>
> After rollback to 1.0, the system stores last saved KB site preview.

![2_ScreenGIF-Go_Live_Site_2_0_Migration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Go_Live_Site_2_0_Migration.gif)

### **b. Customize site**

1. Click **Customize site**.

   The overview of customize site page will appear.
2. You can customize various pages such as Site header & footer, Main pages, Error pages, and adding Custom CSS & JavaScript.
3. Once done, click **Save** to save the changes as a draft.
4. Click **Preview** to view the changes in the Knowledge base site.
5. Click **Go live with Site 2.0** to publish the changes in your Knowledge base site.
6. Select the desired configurations and click **Continue**.

   The **Switch from Knowledge base site 1.0 to 2.0** panel will appear.
7. Enter your subdomain of the project and click **Switch to 2.0**.

![3_ScreenGIF-Customize_site_2.0_option_Migration_2_0](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Customize_site_2.0_option_Migration_2_0.gif)

### **c. Preview site 2.0**

Click **Preview site 2.0** to view the KB site 2.0 with default branding elements retained from your KB site 1.0.

### **d. How to configure**

If you need guidance on configuration, click **How to Configure** to watch the instructional video.

---

### FAQ

**Will I lose any integrations or extensions when switching from KB site 1.0 to KB site 2.0?**

No, all integrations and extensions configured in KB site 2.0 will continue to work seamlessly.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="web-content-accessibility-guidelines-wcag"></a>

## Web Content Accessibility Guidelines (WCAG)

**Plans supporting WCAG**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In the digital age, accessibility is not just a feature but a necessity. Ensuring that all users, regardless of their abilities, can access and use our products is a cornerstone of inclusive design. Document360 is compliant with WCAG 2.1 A and AA standards, reinforcing our commitment to accessibility and inclusivity.

> For Your Information
>
> This WCAG is available exclusively in KB Site 2.0, which is accessible for projects created after June 10th, 2024.

---

## Implementing WCAG 2.1 A and AA in Document360

At Document360, we have aligned Document360 with WCAG 2.1 A and AA guidelines to ensure our knowledge base software is accessible to everyone. Here’s how we’ve achieved this:

1. **Text alternatives**: We provide text alternatives for all non-text content, such as images and icons, ensuring that screen readers can convey the information to all users.
2. **Keyboard navigation**: Document360 supports full keyboard navigation, enabling users to access all features and functions without using mouse.
3. **Readable text**: We ensure that all text content is readable and understandable, using clear fonts, appropriate contrast ratios, and simple language to enhance readability.

![WCAG 2.1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-WCAG.gif)

---

## Key Principles of WCAG 2.1

WCAG 2.1 is organized around four core principles that guide the creation of accessible content:

1. **Perceivable**: Information and user interface components must be presented to users in ways they can perceive. This includes providing text alternatives for non-text content.
2. **Operable**: Interface components and navigation must be easy to use, which includes making all functionality available from a keyboard, giving users enough time to read and use content, and providing ways to help users navigate and find content easily
3. **Understandable**: Information and the operation of the user interface must be understandable. This involves making text readable and comprehensible, ensuring web pages operate predictably.
4. **Robust**: Content must be robust enough to be interpreted reliably by a wide range of user agents, including assistive technologies. This ensures compatibility with current and future technologies.

> **NOTE**
>
> For more information, read the [**WCAG 2.0 Guidelines**](https://www.w3.org/TR/WCAG21/).

<a id="header-primary-navigation"></a>

## Header - Primary navigation

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The primary navigation header of Document360 is the bar next to the logo at the top of your site. You can add menus in this space that help readers navigate to different pages from your Home page or Knowledge base site.

---

## Accessing the Header - Primary navigation

To access the customization settings of the header’s primary navigation,

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   This page holds all the basic site design configurations.
2. Click **Customize site**.
3. Select **Site header & footer** from the dropdown available on the left navigation pane.
4. Expand the **Header** option and select **Primary navigation**.

   ![To access header option in site customization in the Knowledge base portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/32_ScreenGif-Primary_navigation.gif)
5. Click **Add new item** to add a navigation menu either to the left or the right of the site header.

The available navigation types are

* Home
* Documentation
* Custom URL
* Call to action
* RSS feed
* Ticket deflector
* Glossary
* API documentation
* Custom page

![Image showing types of navigation available to add in the header](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Header_primary_navigation_nav_types.png)

> NOTE
>
> You can only add up to 6 new items to the header. On exceeding the limit, you will get a warning prompt below the left navigation pane stating, "You have reached the maximum count of 6. To add a new link, remove one existing link."

7. Click the **default background color** to open the color picker and change the color of the primary navigation of the header.
8. **Edit**, **delete**, or **reorder** the menus using the options in the left navigation pane.![6-Screenshot-Accessing_the_Primary_navigation_left_pane_options](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1730220371154.png)
9. Click the **Preview** option on the top right to preview the changes implemented.
10. Click the **Save** button to save all your recent changes.
11. Once done, click the **Publish** button to activate the changes made in the portal on the Knowledge base site.

![52_ScreenShot-Primary_navigation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/52_ScreenShot-Primary_navigation.png)

### Knowledge base site view

![7-Screenshot-Primary_navigation_KB_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7-Screenshot-Primary_navigation_KB_view.png)

---

### FAQs

#### How can I customize the header in Document360?

To customize the header, you can add custom JavaScript code in **Settings** ()> **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal. This allows you to modify the header to include additional elements, such as links or icons.

#### Can I add social media icons to the header in Document360?

Yes, you can add social media icons by appending links and icons to the header navigation area using custom JavaScript. For example, you can include icons for LinkedIn, Twitter, Facebook, and Instagram.

#### How can I dynamically create a feedback link in the header?

You can use JavaScript to create a feedback link dynamically. For example, a `mailto` link can be appended to the header with the current page title as the email subject. This allows users to send feedback about a specific page directly.

#### How do I add buttons to the Knowledge base site header?

You can add colorful buttons to the Primary navigation header by following these steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   This page holds all the basic site design configurations.
2. Click **Customize site**.
3. Select **Site header & footer** from the dropdown available on the left navigation pane.
4. Expand the **Header** option and select **Primary navigation**.
5. Click **Add new item** to add a navigation menu either to the left or the right of the site header.

   The **Add new item** panel will appear.
6. In the **Select type** dropdown, choose **Call to action**.
7. Fill in the following fields:

   1. **Title**: Enter the text to display on the button.
   2. **Link**: Add a hyperlink, email address, or telephone number.
   3. Select the desired text color and background color.
8. Select the **Open link in new tab** checkbox to open the link in a new tab.
9. Click **Add**.

![Adding a call to action button in the Knowledge base site header.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Adding_call_to_actions_button_in_the_header.png)

The public-facing website where end-users can access articles and find answers to their questions.

<a id="header-secondary-navigation"></a>

## Header - Secondary navigation

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Header - Secondary navigation** in **Document360** is a versatile feature that enables you to enhance user navigation by adding menus below the logo. This customization allows seamless access to essential pages, offering readers a smooth browsing experience.

Consider a growing Knowledge base where users frequently visit specific sections such as **Pricing**, **Documentation**, or **Support**. Using the Header Secondary navigation, you can create quick-access menus for these pages, making it easier for visitors to locate important information without exploring multiple sections. This ensures an organized and efficient navigation system, especially beneficial for sites with extensive content.

---

## Accessing the Header - Secondary navigation

To access the Header- Secondary navigation, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Expand **Header**,then select **Secondary navigation**.
5. Click **Add new item** to create a navigation menu.

   The **Add new item** panel will appear.
6. In the **Select type** dropdown, choose from the following navigation types:

   1. **Single level**
   2. **Multiple level**
   3. **Ticket deflector**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_the_header_secondary_navigation.png)

### **Single level** **navigation**

> NOTE
>
> The **Single level** option is selected by default. As the name suggests, it adds a single menu without any sub-menu items.

7. In the **Title** field, enter the text to display on the menu bar.
8. In the **Link** field, add hyperlink, email ID, or telephone number.
9. Select the **Open link in new tab** checkbox to open the link in a new tab.
10. Once done, click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Accessing_Single_level_navigation_in_the_secondary_navigation.png)

### **Multiple level** **navigation**

> NOTE
>
> The **Multiple level**  menu allows you to create a dropdown menu with multiple sub-menus under a single item.

11. In the **Title** field, enter the main menu title.
12. Click **Add sub menu**to add the sub menu items.
13. For each sub menu:

    1. In the **Title** field, enter the text to display on the menu bar.
    2. In the **Link** field, add hyperlink, email ID, or telephone number.
    3. Select the **Open link in new tab** checkbox to open the link in a new tab.
    4. Click **Add**.
    5. Click the **Delete**() icon to delete any submenu.
14. Once done, click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Accessing_multi_level_navigation.png)

### **Ticket deflector** **navigation**

15. In the **Title** field, enter the text to display on the menu bar.
16. In the **Select ticket deflector**dropdown, choose the desired [ticket deflector](/help/docs/adding-a-new-ticket-deflector).
17. Select the **Open link in new tab** checkbox to open the link in a new tab.
18. Once done, click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Accessing_ticket_deflector_in_secondary_navigation.png)

#### Managing secondary navigation items

19. Hover over the desired navigation item:

    1. Click the **Edit**() to modify the item.
    2. Click the **Delete**() to remove the item.
    3. Use the **Reorder** () icon to rearrange elements.
20. Select the **Show in home page** checkbox to display the secondary navigation bar on the Knowledge base site’s home page.
21. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
22. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Managing_secondary_navigation_items.png)

---

### Knowledge base site view

Here's how the secondary navigation appears on the Knowledge base site, showcasing the implementation of single-level navigation (e.g., **Glossary**), multiple level navigation (e.g., **Release notes**), and ticket deflector types.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Knowledge_base_site_view.png)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="footer-navigation"></a>

## Footer

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Add a "Footer" to your knowledge base site to add links to essential resources or information, such as pricing information, free trial sign-up, a Contact us page, etc. Similar to the primary and secondary navigation bar, team accounts can add up to six custom links to the footer navigation. Also, add and feature social media links to drive engagement in your social channels. Custom links will display on the left side of the footer navigation, while social media links will be on the right.

---

## Accessing the Footer navigation settings

1. Navigate to **Settings** ()> **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. Select **Header & Footer** from the dropdown.
4. Click the **Footer** option.
5. You have two design options for the footer: **Basic footer** and **Custom footer**.

   * Click **Basic footer** to add navigation items and social media links.
   * Click **Custom footer** to customize the footer.
6. Use one of the two predefined themes available such as **Theme A** and **Theme B.**
7. Click on **Blank** to input your custom HTML footer.
8. You can **Edit, Delete** or **Reorder** the navigations from the left pane.
9. Click **Preview** on the right side to preview the changes.
10. Click **Save** to save all your recent changes.
11. Click **Publish** to activate the changes made in the portal on the Knowledge base site.

![Accessing the footer navigation settings in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Footer_overview_from_customize_site.gif)

---

### FAQ(s)

**Can I preview the changes made to the footer before saving?**

Yes, you can click Preview on the right side to preview the changes before saving.

**Is it possible to add social media links to the footer?**

Yes, you can add and feature social media links to drive engagement in your social channels.

**How do I delete the footer in the Knowledge base site?**

1. Navigate to **Settings** ()> **Knowledge base site** > **Customize site** > **Customize site**.
2. Select **Header & Footer** from the dropdown.
3. Click the **Footer** option.
4. Choose **Custom footer** and select **Blank**.
5. Without writing any HTML and CSS code, click **Save** and **Publish.**

The public-facing website where end-users can access articles and find answers to their questions.

<a id="custom-footer"></a>

## Custom footer

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Creating a custom footer

Creating a custom footer requires knowledge of HTML and CSS. Follow these steps to customize the footer on your **Knowledge Base Site**.

1. Navigate to the **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   This page displays all the basic site design configurations.
2. On the **Customize site** page, click the **Customize site** button.
3. Select the **Site header & footer** from the dropdown menu.
4. Click the **Footer** tab and choose the **Custom footer** option.

   There are three options:

   1. **Theme A:** A predefined black theme for the footer. You can edit the provided code if needed.
   2. **Theme B:** A predefined black theme for the footer. You can edit the provided code if needed.
   3. **Blank**: Add your custom HTML footer.
5. Turn on the **Preview** toggle to view the output without saving the changes.
6. Click **Save** to apply the changes.
7. Click **Publish** to activate the changes on your Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_custom_footer.gif)

---

### Linking a PDF or other files in the Custom footer

To attach a PDF or other files to the custom footer, follow these steps:

1. Navigate to **Drive** () and select the desired file in the Knowledge base portal.

   The **File details** panel will appear.
2. In the **Location** section, click the **Copy** icon to copy the file link.

> Example link: `https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Importing_multiple_article.gif`

4. Go to the **Settings** () > **Knowledge base site** > **Customize site** > **Customize site** in the Knowledge base portal.
5. Select the **Site header & footer** from the dropdown.
6. Click the **Footer** tab and choose the **Custom footer** option.
7. Select your desired theme.
8. In the **Custom Code** section, paste the copied link in the desired location.
9. Click **Save** and then **Publish** to finalize the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Linking_a_PDF_in_the_Custom%20footer.gif)

<a id="rss-feeds"></a>

## RSS Feeds

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**RSS** stands for **Really Simple Syndication**. It is an XML-based format that automatically updates with new information. **RSS Feed****s** provide a seamless way to keep your readers informed about the latest updates in your Knowledge base. By integrating **RSS Feed** options into your Knowledge base header or footer, you empower your audience to subscribe and stay updated with new and modified articles effortlessly.

Imagine a software company managing extensive documentation for their product updates. By enabling **RSS Feed****s**, customers can stay informed about every new release or bug fix without manually checking the Knowledge base. This ensures readers remain engaged and well-informed.

---

## Adding an **RSS Feed** option to your Knowledge base site

### Header - Primary navigation

To add an **RSS Feed** in the Header - Primary navigation:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Expand **Header**,then select **Primary navigation**.

   The **Primary navigation**panel will appear.
5. Click **Add new item** to add a navigation menu to the left or right of the site header.
6. In the **Select type**dropdown,select **RSS Feed**.
7. In the **Title** field, enter the desired title.
8. Select the **Open link in new tab** checkbox to open the **RSS Feed** in a new tab.
9. Once done, click **Add**.
10. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
11. Once done, click **Publish** to apply the changes.

> NOTE
>
> For more information, read the article on [Header - primary navigation](/help/docs/header-primary-navigation).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_RSS_feeds_in_header_primary_navigation.gif)

### Header - Secondary navigation

To add an **RSS Feed** in the Header - Secondary navigation:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Expand **Header**,then select **Secondary navigation**.

   The **Secondary navigation**panel will appear.
5. Click **Add new item**.
6. In the **Select type** dropdown, select **Single level****.**
7. In the **Title** field, enter the title as **RSS Feed**.
8. In the **Link** field, paste the **RSS Feed** XML page URL.
9. Select the **Open link in new tab** checkbox to open the **RSS Feed** in a new tab.
10. Once done, click **Add**.

> NOTE
>
> For more information, read the article on [Header - secondary navigation](/help/docs/header-secondary-navigation).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_RSS_feeds_in_header_secondary__navigation.gif)

### Footer navigation section

To add an **RSS Feed** in the Footer navigation:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Select **Footer**.  
   **Basic footer**
5. Click **Add new link**.
6. Enter the title as **RSS Feed** and paste the **RSS Feed** XML page URL.
7. Select the **Open link in new tab** checkbox to open the link in a new tab.   
   **Custom footer**
8. Paste the **RSS Feed** XML page URL in the desired location in the HTML code.
9. Once done, click **Save**.

> NOTE
>
> For more information, read the articles on [Footer](/help/docs/footer-navigation) and [Custom footer](/help/docs/custom-footer).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Adding_RSS_feeds_in_footer_navigation.gif)

---

### **Using** **RSS Feed****s**

**RSS Feed****s** allow your readers to stay up-to-date with your Knowledge base through various tools, such as browser extensions, mobile apps, web apps, or desktop applications.

> NOTE
>
> Popular applications and extensions for **RSS Feed** management:
>
> * **RSS Feed** Reader Chrome Extension by Feeder.co
> * Feedly
> * Feeder
> * NewsBlur
> * Inoreader
> * Feedreader Online
>
> *Disclaimer: Some of these tools offer free services, while others may charge a fee depending on usage. Please review pricing details and user reviews before committing to any service. Document360 does not endorse these third-party tools.*

#### **Subscribing or adding Knowledge base Feeds to an RSS Reader**

1. **Accessing the Feed**

   * The reader clicks the **RSS Feed****s** option (with your custom-added text) in your Knowledge base header.
   * A new browser tab will appear displaying the XML file.
2. **Using a browser extension**

   * If the reader has an **RSS Feed** browser extension installed, it may automatically detect the XML file and prompt a **Subscribe** option.
3. **Using an RSS application**

   * Readers need to copy the URL of the XML file and paste it into their preferred **RSS Feed** reader application.

> NOTE
>
> **RSS Feed** allow your readers to stay up-to-date with your Knowledge base through various tools, such as browser extensions, mobile apps, web apps, or desktop applications.

---

## Removing an **RSS Feed** from the Knowledge base site

To remove an **RSS Feed**:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Navigate to the desired location such as Header - primary, Header - secondary, and footer navigation.
5. Hover over the **RSS Feed** item and click **Delete**().
6. Click **Save**.

> NOTE
>
> Even after removing the **RSS Feed** option from your Knowledge base site, readers who previously subscribed will continue to receive updates.

---

### FAQ

#### **Why does clicking the RSS feed lead to a 404 page, and how can I access the RSS feed?**

RSS feeds only work for **public projects** in Document360. If your project is set to private or has mixed access (a combination of public and private content), the RSS feed will display a 404 error page. To access the RSS feed, ensure that your project is publicly accessible.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="main-pages"></a>

## Main pages

**Plans supporting customization of Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Home page (previously "Home page builder") is the first page an end-user will see when they visit your Knowledge base. The Home page lets you customize your home page by adding links, changing colors, including categories from your knowledge base, and more.

---

## Home page

![1_Screenshot-Document360_landing_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Document360_landing_page.png)

> **NOTE**
>
> The header, primary and secondary navigation, and footer appear on the home page but are configured in **Settings** () > **Customize site** > **Header and Footer**.

---

### Accessing the Home page design settings

1. Navigate to **Settings** () > **Knowledge base site**> **Customize site** in the Knowledge base portal.

   The **Customize site** page will appear, holding all the basic site design configurations.
2. Click the **Customize site** button.
3. Select **Home** in the dropdown on the left.

   A default Home page design is available for you to customize. The different sections of the Home page are listed on the left, and a **Live preview** is available on the right.
4. If needed, click **Add section** and choose from the available Body block options each featured for specific content needs:

   * [Rich text](/help/docs/text-block): Add and format textual content using Markdown for enhanced readability and structure.
   * [Multicolumn card section](/help/docs/text-columns-block): Display content in organized columns, perfect for showcasing multiple topics or features side by side.
   * [Image with text](/help/docs/image-and-text): Combine visuals with textual descriptions to create a more dynamic and visually appealing layout.
   * [Custom code section](/help/docs/html-block): Embed Custom HTML and CSS code for advanced content customization.
   * [Knowledge base categories](/help/docs/knowledge-base-categories): Highlight key categories from your Knowledge base to improve navigation.
   * [Widgets](/help/docs/widgets): Add interactive elements, such as surveys or contact forms, to enhance user engagement.

   **Body blocks** enable Knowledge base admins to create visually appealing and intuitive Home pages that effectively guide users. Each block provides a unique way to display content, offering flexibility in designing an engaging and user-friendly **Home page**.

   For example, a software company can use the **Knowledge base categories** block to display product guides. In contrast, the **Image with text** block can highlight key features or announcements, enhancing the user experience and engagement.
5. You can reorder the section on the left pane using drag-and-drop () and click the eye () icon to hide the desired element.

   > **NOTE**
   >
   > The main **Hero section** at the top cannot be dragged and moved.
6. Click **Preview** at the top right to see how the page will look.
7. Click **Save** to save the changes.
8. Click **Publish** to activate the changes made in the portal on the Knowledge base site.

   > **NOTE**
   >
   > The **Publish** button becomes active only after you save your changes.

![Customizing the home page of the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-overview_page_of_home_page.gif)

---

### Home page themes

> **NOTE**
>
> You can only configure Home page themes if you are on a professional, business or enterprise plan.

Customize your Home page with the Document360 themes. You can configure a unique theme for each workspace or language.

1. Click the **Themes** () icon on the Home page design page
2. Select one of the themes: Engage, Innovate, Learn, or Default.
3. Click the eye () icon to view a static preview.
4. Click **Activate** to implement the selected theme.

![Customizing the home page of the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Previewing_the_themes_option_in_the_home_page.gif)

> **NOTE**
>
> The recommended resolution for the homepage image is 1920x415 pixels (width x height). You can customize the resolution as needed.

---

### Home page SEO

You can use a meta title, meta description, and a featured image for your Home page.

In the **Home page** customizing page,

1. Click the **Settings** () icon in the Home page design page.

   The **Settings** panel will appear.
2. You can enter the desired **Title** and **Meta description** for your Home page.
3. Turn on the **Visibility settings** toggle.

   When the toggle is turned off, the home page will no longer be visible in the Knowledge base. Instead, users will be directed to the documentation page of your Knowledge base.
4. Add a featured image from the Drive by clicking **Choose image**.
5. Click **Save**.

![Customizing the home page of the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Settings_page_in_Home_page.png)

---

## Documentation

The Documentation page lets you customize the category navigation by adjusting the position of the search bar and applying background colors.

### Accessing the Documentation page design settings

1. Navigate to **Settings** () > **Knowledge base site**> **Customize site** in the Knowledge base portal.

   The **Customize site** page will appear, holding all the basic site design configurations.
2. Click the **Customize site** button.
3. Select **Documentation** from the dropdown on the left.

   A default Documentation page design is available for you to customize. Customization options for the Documentation page are listed on the left, and a **Live preview** is available on the right.
4. Choose the search bar position:

   * **Left panel:** Place the search bar at the top of the left navigation panel.
   * **Secondary Header:** Position the search bar in the secondary header on the top right.
5. Check the **Add background color** box to apply a background color to the left navigation panel.
6. Click **Preview** at the top right to see how the page will look.
7. Once done, click **Save** to save your changes. If you haven’t saved your changes, an **UNSAVED CHANGES** badge will appear at the top, next to the save button.
8. Click **Publish** to make the changes live.

   ![Document360 interface showing Documentation page customize window.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Documentation_page.png)

---

## Login page

If your Knowledge base is private or mixed access, reader are required to login with their credentials to view the content. You can customize this login page using the **Customize site** option available in Document360.

### Accessing the Login page design settings

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Login page customization.png "Login page customization.png")

1. From the Knowledge base portal, navigate to **Settings** ()> **Knowledge base site** > **Customize site**.

   The page holds all the basic site design configurations.
2. Click the **Customize site** button.
3. In the dropdown menu on the left, select **Login** under **Main Pages**.

   You’ll see a default Login page design ready for customization.
4. Choose one of the following options:

   * **Basic Style**: Customize the default image only.
   * **Custom Style**: Add Custom HTML and CSS. You can turn on/off the **Preview** toggle on the right to switch between rendered view and code view.
5. Click **Preview** at the top right to see how the page will look.
6. Click the **Save** button to save your recent changes.
7. Click **Publish** to activate the changes in the portal on the Knowledge base site.

---

### FAQs

#### How do I add images to the Home page?

To add images to the Home page, paste the following code in the [Custom HTML](/help/docs/custom-html):

```
<img src="paris.jpg" alt="Paris" class="center">
```

XML

Copy

For customizing the alignment, add the following CSS code in the [Custom CSS & JavaScript](/help/docs/custom-css-javascript) section:

```
.center {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 50%;
}
```

CSS

Copy

#### How do I change the position of the search bar to reflect on the knowledge base site?

To adjust the position of the search bar on your Knowledge base site, follow these steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site**. Select the dropdown, and click **Documentation**.
3. On the left panel, you have two options to switch the search bar position.

   **Left panel**: Place the search bar in the category tree on the left side.

   **Secondary Header**: Place the search bar on the right side in the secondary header.
4. If needed, check the **Add background color** box to apply the background color to the search bar.
5. Once done, click **Save** and **Publish**.

#### How do I change the browser tab title for my Knowledge base home page?

The SEO title of the home page appears as the browser tab name. To change the SEO title of the home page:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page will appear, holding all basic site design configurations.
2. Click the **Customize site** button.
3. In the dropdown on the left, select **Home**.
4. Click the **Settings** () icon in the Home page.

   The **Settings** panel will appear.
5. Enter the desired **Title** for your Home page.
6. Once done, click **Save** and **Publish**.

#### How to integrate a video loader into your home page?

Adding a visually appealing video loader to your homepage can create a sense of curiosity and interactivity for your visitors. Follow these simple steps to seamlessly integrate a video loader:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page will appear, holding all basic site design configurations.
2. Click the **Customize site** button.
3. In the dropdown on the left, select **Home**.
4. Create a new custom code section and insert the following HTML code, replacing the `src` link with the video link from your drive:

   ```
   htmlCopy code<div class="video__loader">
       <video muted autoplay loop>
           <source src="https://cdn.document360.io/560b3c6e-18a1-4ad6-babc-d0257662eab2/Images/Documentation/Revolving_Video.mp4" />
       </video>
   </div>
   ```

   XML

   Copy

   This code will seamlessly integrate the video loader into your homepage, enhancing its visual appeal and captivating your audience from the moment they arrive.
5. In the dropdown on the left, select **Custom CSS/JavaScript** and navigate to the **CSS** tab.
6. Replace `"Innovate"` in the following code snippet with the name of your configured theme (e.g., **Engage**, **Learn**, **Innovate**, or **Default**):

   ```
   cssCopy codebody.innovate {
       position: relative;
       overflow: hidden !important;
   }

   body.innovate.custom--loaded {
       overflow: auto !important;
   }

   /* Loader */
   .video__loader {
       width: 100%;
       min-height: 100vh;
       display: flex;
       align-items: center;
       justify-content: center;
       position: fixed;
       top: 0;
       left: 0;
       background: var(--color-dark);
       opacity: 1;
       visibility: visible;
       z-index: 9999999999;
       transition: all 1s ease;
   }

   .video__loader.remove--loader {
       opacity: 0;
       visibility: hidden;
   }

   .video__loader video {
       width: 100%;
   }
   ```

   CSS

   Copy

   This ensures that the CSS styling aligns with your chosen theme, optimizing the visual presentation for enhanced user experience.
7. Navigate to the **JavaScript** tab.
8. Replace `"innovate"` in the following code snippet with your theme name:

   ```
   javascriptCopy code/* Loader */
   var elBody = document.querySelector("body.innovate");
   var customLoaderVideo = document.querySelector(".video__loader");

   document.addEventListener("DOMContentLoaded", function() {
       setTimeout(function() {
           elBody?.classList.add("custom--loaded");
           customLoaderVideo?.classList.add("remove--loader");
       }, 5000);
   });
   ```

   JavaScript

   Copy

   This customization ensures that the JavaScript functionality integrates seamlessly with your theme, enhancing the overall performance of your site.

> NOTE
>
> The video loader function will operate exclusively on the homepage and will not apply to the documentation pages.

#### How to disable the Home page on the Knowledge base site?

1. Navigate to**Settings**() > **Knowledge base site**> **Customize site**in the Knowledge base portal.
2. Click the **Settings**() icon in the Home page design page.
3. Turn off the**Visibility settings** toggle and click **Save**.

#### How to add a contact/register button to your Login page?

Adding a support button to your login page can simplify the process of reaching out for assistance. Follow these easy steps to seamlessly integrate a support button into your login page:

1. Navigate to **Settings** () > **Knowledge base site > Customize site**.
2. Select the **Customize site** button.
3. Select **Login** from the left drop-down under the Main Pages group.
4. Then choose the **Custom style** radio button to enable modifications specifically for your login page.
5. In the HTML customization tab, add the following code to create your support button:

   ```
   htmlCopy code<div class="login-form--support">
       <button class="support-button">
           <a href="Support portal button or registration button link">Contact Support</a>
       </button>
       <p>Click here to Contact Support</p>
   </div>

   ```

   XML

   Copy
6. Next to the HTML tab, find the CSS customization tab. Paste the following code to ensure the support button is centered on the page:

   ```
   cssCopy code.login-form--support {
       text-align: center; /* Centers the content inside the element */
   }
   ```

   CSS

   Copy

By following these steps, you will successfully add a support button to your login page. This enhancement allows users facing challenges to easily access support resources without leaving the login interface, significantly improving their experience. Providing quick assistance right where it’s needed can lead to higher user satisfaction.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="hero-section"></a>

## Hero section

The **Hero section** in **Document360** is a prominent feature displayed at the top of the Knowledge base site’s home page. It provides an opportunity to create a visually appealing introduction to your Knowledge base by customizing text, buttons, and the search bar. By tailoring the **Hero section**, you can ensure it reflects your brand and engages your audience effectively.

For instance, a software company can use the Hero section to prominently display a welcome message, highlight product updates, and provide quick navigation buttons to key resources. This makes it easier for users to find relevant information and creates a professional first impression.

---

## Accessing **Hero section**

To access the **Hero section**:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.

   The **Body** section lists all **Body blocks**, with the **Hero section** at the top.

   > NOTE
   >
   > The **Hero section**at the top cannot be deleted or reordered.
4. Click the **Hero section** to open the **Hero section** panel.

   #### **Adding background to the** **Hero section**
5. In the **Background type**dropdown, choose one of the following options:

   | **Background type** | Description | Alignment options |
   | --- | --- | --- |
   | None | No background will appear. By default, the background color is white. | **Left**, **Center**, **Right** |
   | Insert image | In the **Background image** section, click **Choose image** to upload an image from your drive.  Alternatively, enter the image URL in the **Image URL** field. | **Left**, **Center**, **Right** |
   | Color | Choose a color from the available options or use the **Custom color palette** for a custom color. | **Left**, **Center**, **Right** |
   | Gradient | Select a gradient from the available options. | **Left**, **Center**, **Right** |
   | Pattern | Choose a pattern from the given options. | **Left**, **Center**, **Right** |

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Accessing_the_Hero_section.gif)

   #### **Configuring the** **Hero section** **elements**
6. Expand the **Hero section** and configure the following elements:

   | Element | Actions |
   | --- | --- |
   | **Welcome text** | 1. Enter the desired title in the **Heading text** field. 2. Choose a text color using the **Text color**palette. 3. Click **Delete** () to remove this element. |
   | **Promo text** | 1. Enter the content in the **Paragraph text** field. 2. Choose a text color using the **Text color** palette. 3. Click **Delete** () to remove this element. |
   | **Buttons** | 1. Choose text and button colors using the **Text color**palette. 2. Enter text in the **First button text** field. 3. Provide the URL in the **First button url** field. 4. Click **Add button** to add up to three buttons. 5. Use **Delete** () or **Hide** () icons to remove or hide buttons. |
   | **Search** | The Search bar has no configurable options.  Click **Delete** () to remove the **Search** element if needed. |
7. Hover over any of the four elements (**Welcome text**, **Promo text**, **Buttons**, or **Search**) and click the **Hide** () icon to hide them from the Home page.
8. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
9. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Configuring_the_Hero_section_elements.gif)

### Knowledge base site view

Here's how the Hero section appears on the Knowledge base site, showcasing customized text, buttons, and search functionality, designed to provide a welcoming and navigable interface for users.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Knowledge_base_site_view.png)

---

### FAQ

#### How do I change the **Documentation** button text in the Home page?

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.

   The **Body** section lists all **Body blocks**, with the **Hero section** at the top.
4. Expand the **Hero section** and select **Buttons**.
5. Update the **Documentation** button text.
6. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
7. Once done, click **Publish** to apply the changes.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="text-block"></a>

## Rich text blocks

**Plans supporting customization of Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Rich text** block is a feature that enables you to add a heading and paragraph with customizable formatting. It is ideal for highlighting key features, adding descriptions, or presenting additional information directly in your Knowledge base site’s home page. Easily format the text, apply styles, and enhance the user experience with engaging content.

**Example:** Use a **Rich text** block to showcase your best feature and make it stand out on your site:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Rich_text_in_KBsite2_0_view.png)

---

### **Adding a** **Rich text** **Block**

To add a **Rich text** block to your Knowledge base site’s home page, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.  
   The list of body blocks will appear in the **Body** section.

   In the **Body** section, the list of body blocks will appear.
4. Click **Add section** and select **Rich text**.  
   The **Rich text** block is added to the list.
5. Click the **Rich text** and select the desired background color.
6. Use the **Reorder**() icon to rearrange elements.
7. Click the **Hide**() icon to toggle the visibility of elements.
8. Expand the **Rich text** dropdown to access the **Heading**  and **Paragraph** options.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Rich_text_blocks.gif)

### **Available options**

9. Click **Heading** to edit the heading content.  
   The **Heading**  panel will appear.
10. Enter the desired text in the **Heading text** field.
11. Use the **Text color** palette to choose a color for your heading.
12. In the **Alignment** section, select one of the following options:

    1. **Left****:** Aligns the text to the left.
    2. **Center****:** Aligns the text to the center.
    3. **Right****:** Aligns the text to the right.
13. Click **Delete** to remove only the Heading element.
14. Click **Paragraph** to add a paragraph text block.
15. Enter your content in the **Paragraph text** field.
16. Format the paragraph using the following options:

    1. **Bold** (): Apply bold formatting to text.
    2. **Italic** (): Apply italic formatting to text.
    3. **URL/Link** (): Add URLs or hyperlinks within the text.
    4. **Unordered list** (): Add a bulleted list.
    5. **Ordered list** (): Add a numbered list.
    > NOTE
    >
    > **Markdown syntax** is supported for formatting **Paragraph text** block.
17. Choose the **Text color** palette to set the desired text color.
18. In the **Alignment** section, select one of the following:

    1. **Left****:** Aligns the text to the left.
    2. **Center****:** Aligns the text to the center.
    3. **Right****:** Aligns the text to the right.
19. Click **Delete** to remove only the Paragraph element.
20. Click **Save** and click **Preview** to view the changes on the Knowledge base site.
21. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-available_options_in_Rich_text_blocks.gif)

---

### FAQ

#### How do I delete a **Rich text** block from my Knowledge base site’s home page?

Follow these steps to delete a **Rich text** block:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** > **Customize site** in the Knowledge base portal.
2. From the left-side dropdown, select **Home** page.  
   The list of body blocks appear will in the **Body** section.
3. Click the desired **Rich text** block.  
   The **Rich text** panel will appear.
4. Click **Delete** and confirm by clicking **Yes** in the **Delete confirmation** prompt.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="text-columns-block"></a>

## Multicolumn card section

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The Multicolumn card section allows you to add lists of features, an **About** section, or a **Contact** section to your homepage. Each column includes an icon, a title, and a description field. Using Multicolumn cards on your homepage creates a visually appealing structure that engages users, helps them quickly find key information, and highlights your core offerings.

For example, a software company could use the Multicolumn card section on its homepage to showcase key product features, such as **Data Security**, **User Management**, and **24/7 Support**. Each column could display an icon representing the feature, a concise title, and a brief description. This setup provides a quick interactive view of the software's benefits, helping potential customers quickly understand the product's value.

---

## Adding Multicolumn cards

To add a Multicolumn card section in the Knowledge base site, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations in the **Customize site** page.
3. From the left-side drop-down menu, select the **Home** page to customize.

   The body section will display a list of body blocks.
4. Click **Add section**, then select **Multicolumn card section**.

   By default, the multicolumn card section includes three elements.
5. Click the **Multicolumn card section** to edit the title and overall icon color for the section.
6. To add more column elements, click **Add element** under the Multicolumn card section.
7. The **Reorder** () icon facilitates the rearrangement of elements.
8. Click the **Hide** () icon to toggle the visibility of elements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_Multicolumn_Cards.gif)

### Available options for elements

9. Click an element to edit the following attributes:

   * **Icon**:

     + Click **Change** to update icons for each column.
     + In the **Icons** tab, select a Document360 or [Font Awesome](https://fontawesome.com/icons) icon.
     + In the **Image** tab, either enter the image URL or upload one from the Drive.
   * **Title**: Enter a title for the element. Click the **Hide** () icon to hide it.
   * **Icon color**: Change the icon’s color.
   * **Paragraph text**: Enter the description for each column. The following formatting options are available:

     + **Bold** (): Apply bold formatting to text.
     + **Italic** (): Apply italic formatting to text.
     + **URL/Link** (): Add URLs or hyperlinks within the text.
     + **Unordered list** (): Add a bulleted list.
     + **Ordered list** (): Add a numbered list.
10. Click **Preview** to see your changes in the Knowledge base site.
11. Once finished, click **Save** and **Publish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Available_options_for_elements.png)

---

### Removing the Multicolumn card

To delete a multicolumn card, follow the steps below:

1. Click the **Multicolumn card section**.

   The Multicolumn card section navigation bar will appear.
2. Click **Delete** () in the navigation bar.
3. Click **Yes** in the **Delete confirmation** prompt.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Removing_the_multicolumn_card.png)

---

### FAQ

**How can I update a Multicolumn card element’s icon using Font Awesome?**

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Customize site** in the Knowledge base portal.
2. From the left-side drop-down menu, select the **Home** page to customize.
3. Click the desired element in the Multicolumn card section.
4. Click **Change** in the icon settings.
5. Expand the **Font Awesome** accordion, and enter the class name of the desired Font Awesome icon.

   For example, for the code `<i class="fa-solid fa-files"></i>`, the class name is `fa-solid fa-files`.

<a id="image-and-text"></a>

## Image with text block

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Enhance your Knowledge base site’s home page with the **Image with text** block, a versatile option that combines text and an image to effectively showcase features, descriptions, or announcements. Unlike the **Rich text** block, this feature allows you to visually enrich your content with imagery.

**Example**: Using **Image with text** block, you can showcase your latest feature and its description with dynamic artifacts in your Knowledge base site’s home page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Image_with_text_knowlegde_base_site_view.png)

---

## Adding an Image with text block

To add a **Image with text** block to your Knowledge base site’s home page, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.  
   The **Body** section will display a list of body blocks.
4. Click **Add section** and select **Image with text**.  
   The **Image with text** block is added to the list.
5. Use the **Reorder** () icon to rearrange elements.
6. Click the **Hide** () icon to toggle the visibility of elements.
7. Expand the **Image with text** dropdown to access the **Image**, **Heading**  and **Paragraph** elements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_image_with_text_feature.gif)

### Available options

8. Click the **Image** to edit the image.

   The **Image** panel will appear.
9. Click **Change**to upload or update the image.
10. In the **Image** tab, enter the image URL or upload one from your Drive.
11. In the **Alignment** section, select one of the following options:

    1. **Left****:** Aligns the image to the left.
    2. **Center****:** Aligns the image to the center.
    3. **Right****:** Aligns the image to the right.
12. Click **Heading** to edit the heading content.  
    The **Heading**  panel will appear.
13. Enter the desired text in the **Heading text** field.
14. Use the **Text color** palette to choose a color for your heading.
15. In the **Alignment** section, choose an alignment option: **Left**, **Center**, or **Right**.
16. Click **Delete** to remove only the Heading element.
17. Click **Paragraph** to add a paragraph text block.
18. Enter your content in the **Paragraph text** field.
19. Format the paragraph using the following options:

    1. **Bold** (): Apply bold formatting to text.
    2. **Italic** (): Apply italic formatting to text.
    3. **URL/Link** (): Add URLs or hyperlinks within the text.
    4. **Unordered list** (): Add a bulleted list.
    5. **Ordered list** (): Add a numbered list.
    > NOTE
    >
    > **Markdown syntax** is supported for formatting **Paragraph text** block.
20. Choose the **Text color** palette to set the desired text color.
21. In the **Alignment** section, choose an alignment option: **Left**, **Center**, or **Right**.
22. Click **Delete** to remove only the Paragraph element.
23. Click **Save** and click **Preview** to view the changes on the Knowledge base site.
24. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Accessing_image_with_text_feature_.gif)

---

### FAQ

#### How do I delete an **Image with text** block from my Knowledge base site’s home page?

Follow these steps to delete an **Image with text** block:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** > **Customize site** in the Knowledge base portal.
2. From the left-side dropdown, select **Home** page.  
   The list of body blocks appear will in the **Body** section.
3. Click the desired **Image with text** block.  
   The **Image with text** panel will appear.
4. Click **Delete** and confirm by clicking **Yes** in the **Delete confirmation** prompt.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="html-block"></a>

## Custom code section

**Plans supporting customization of** **Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Custom code section** in **Document360** allows users to add personalized HTML and CSS code to their Knowledge base site home page. This feature is ideal for users looking to enhance their site with custom visuals and interactive widgets.

Suppose your organization runs seasonal promotions. You can use the **Custom code section** to embed a dynamic banner or a countdown timer directly on the home page of your Knowledge base site, ensuring your visitors are aware of ongoing offers or events.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Knowledge_base_site_output.png)

---

## Adding a **Custom code section**

To add a **Custom HTML** block to your Knowledge base site’s home page, follow the steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.  
   In the **Body** section, a list of body blocks will appear.
4. Click **Add section** and select **Custom code section**.  
   The **Custom code section** block is added to the list.
5. Use the **Reorder** () icon to rearrange elements.
6. Click the **Hide** () icon to toggle the visibility of elements.
7. Click the **Custom code section**:

   1. In the **HTML** tab, add or edit the HTML code.
   2. In the **CSS** tab, add or edit the CSS code.
8. Turn on the **Preview** toggle to view the changes.
9. Click **Save** and then click **Preview** to view the changes on the Knowledge base site.
10. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Adding_a_Custom_code_Section.gif)

---

### FAQ

#### How do I delete the **Custom HTML** block from my Knowledge base site home page?

To delete a **Custom HTML** block, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.
4. In the **Body** section, select the desired **Custom code section**.

   The **Custom code section** navigation panel will appear.
5. Click the **Delete** () below the navigation bar.
6. Click **Yes** in the **Delete confirmation** panel.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="knowledge-base-categories"></a>

## Knowledge base categories block

**Plans supporting customization of** **Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Knowledge base categories** block allows you to design a visually appealing and highly functional home page for your Knowledge base site. By showcasing links to popular categories or frequently accessed sections as cards, this feature helps users navigate your documentation effortlessly, improving their overall experience.

Imagine managing a growing Knowledge base for a SaaS product. Customers frequently visit the home page looking for guides, FAQs, or troubleshooting articles. By adding the **Knowledge base categories** block, you can prominently feature "Getting Started," "How-To Guides," or "Troubleshooting Articles" as categories, ensuring users can quickly find the most relevant information. This reduces search time and enhances user satisfaction.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Knowledge_base_site_view_of_Knowledge_base_categories.png)

---

## Adding **Knowledge base categories** block

To add a Knowledge base categories block to your Knowledge base site’s home page, follow the steps below:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.  
   The **Body** section will display a list of body blocks.
4. Click **Add section** and select **Knowledge base categories**.  
   The **Knowledge base categories** block will be added to the list.
5. Click the **Knowledge base categories** to edit the title and overall icon color for the section.
6. Click **Add element** to add more category elements.
7. Select the desired categories from your Knowledge base.
8. Use the **Reorder** () icon to rearrange elements.
9. Click the **Hide** () icon to toggle the visibility of elements.

#### Available options

10. Click a category element to edit the following attributes:

    1. **Icon**:

       * Click **Change** to update icons for each category element.
       * In the **Icons** tab, select either a Document360 or [Font Awesome](https://fontawesome.com/icons) icon.
       * In the **Image** tab, either enter the image URL or upload an image from the Drive.
    > **NOTE**
    >
    > Use square-dimension image files (e.g., 30px x 30px or 50px x 50px) to avoid distortions.

    1. **Title**: Enter a title for the category element.
    2. **Icon color**: Choose the desired color for the icon.
    3. **Paragraph text**: Add a description for each column using Markdown syntax.
    4. **Text color**: Select the text color for the title and paragraph.
11. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
12. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_the_Knowledge_base_categories.gif)

---

### FAQ

#### How do I remove **the **Knowledge base categories** block?**

To remove a knowledge base categories block in the Knowledge base site:

1. Navigate to **Settings**() > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Home** page.   
   The **Body** section will display a list of body blocks.
4. Select the desired **Knowledge base categories** in the **Body** section.
5. Click the **Delete** () below the navigation bar.
6. Click **Yes** in the **Delete confirmation** panel.

   To delete specific category elements, follow similar steps and select the desired element.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="widgets"></a>

## Widgets block

**Plans supporting customization of knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Widgets** are embedded blocks on the platform that serve specific purposes. Now, you can add widgets below the header section on your homepage.

## Adding widget(s) on your Home page

To add widgets to your Homepage,

1. Navigate to **Settings** () **> Knowledge base site > Customize site** in the Knowledge base portal.

   This page contains all the basic site design configurations.
2. Click **Customize site**.
3. From the left-side drop-down menu, select **Home page**.

   You can view the list of body blocks in the body section.
4. Click **Add section**.
5. Select **Widgets** from the available options.
6. The widgets block is added with a **Widgets** dropdown button.

> **NOTE**
>
> * Click the reorder icon () to rearrange elements.
> * Click the preview icon () to toggle the visibility of elements.

7. Click **Add element** and select from the five available widget options:

   1. **Most Viewed Articles:** Views are measured when the readers accessing the articles.
   2. **Most Liked Articles:** Likes are measured when a reader hits the  icon at the end of each article on the Knowledge base site.
   3. **Most Read Articles:** Reads are tracked when a reader:

      * Scrolls through more than half of the article, or
      * Spends more than one minute on the article, or
      * Clicks a hyperlink within the article.
   4. **Recently Modified Articles:** Published articles that have been updated and republished.
   5. **Recently Created Articles:** New articles that have been published for the first time.

> NOTE
>
> * Every time you create and publish an article, it will appear in both the **Recently Created Articles** and **Recently Modified Articles** sections.
> * Only the articles you have access to will appear in this block.

8. Click the desired widgets to add in your homepage.
9. Click on each widget to edit its heading.
10. Click **Preview** at the top to see how the widgets will appear on your Knowledge base homepage.
11. Once finished, click **Save and Publish** to apply the changes to your Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Widget_knolwedge%20base%20portal%202.0%20view.png)

### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Widget_knolwedge%20base%20site%202.0%20view.png)

---

## Deleting the widget section

To delete any widget elements or the entire widget block:

1. Navigate to Settings () **> Knowledge base site > Customize site** > **Customize site** in the Knowledge base portal.
2. In the **Home** dropdown, go to the **Widgets** section.

   The **Widgets** panel will appear.
3. Click **Delete** at the bottom.

   A delete confirmation prompt will appear.
4. Click **Yes** to confirm.
5. To delete the individual widget elements, follow the same process.
6. Once done, click **Save** and **Publish** to reflect the changes in the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Deleting_the_Knowledge_base_site.gif)

---

### FAQs

#### **How do I hide the widget elements from the Knowledge base site?**

To hide widget elements such as Most viewed articles, Most liked articles, Most read articles, Recently modified articles, and Recently created articles, follow the steps below:

1. Navigate to **Settings** () **> Knowledge base site > Customize site** > **Customize site** in the Knowledge base portal.
2. In the **Home** dropdown, select the **Widgets** section.
3. Hover over the desired widget element and click on the **Hide** () icon.
4. Once done, click **Save** and **Publish** to apply the changes.

   The hidden element will no longer be visible on the Knowledge base site.

#### **How do I rearrange the widget elements in the Knowledge base site?**

TO rearrange the widget elements, follow the steps below:

1. Navigate to **Settings** () **> Knowledge base site > Customize site** > **Customize site** in the Knowledge base portal.
2. In the **Home** dropdown, select the **Widgets** section.
3. Hover over the desired widget element and click the **drag and drop** () icon.
4. Once done, click **Save** and **Publish** to apply the changes.

#### **Why do my Recently Created Articles and Recently Modified Articles elements appear similar in the Knowledge base site?**

The two serve different purposes. **Recently Created Articles** lists newly created articles, while **Recently Modified Articles** lists the last five modified articles.

For instance, if you create five articles and then edit and publish them, those articles will appear in both lists because they are considered both recently created and recently modified.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="error-pages"></a>

## Error pages

**Plans supporting error page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Error pages in Document360 serve as fallback landing pages when a Knowledge base reader attempts to access broken, unauthorized, or restricted links. These pages enhance user experience by guiding users through brief, branded messages and redirecting them to the appropriate pages with clear action steps.

Imagine a scenario where a user tries to access an outdated or restricted link within the Knowledge base site. Instead of displaying a generic error message, you can direct the user to a custom-designed page that includes your brand logo, brief information about the error, and suggested next steps—such as navigating back to the homepage or contacting support. This ensures users remain engaged and informed while interacting with your Knowledge base site.

---

## Accessing the error pages design settings

To access the error page, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page holds all the basic site design configurations.
2. Click the **Customize site**.
3. From the left dropdown menu, select the desired error page:

   * [404](/help/docs/404-page)
   * [Access denied](/help/docs/access-denied-page)
   * [Unauthorized](/help/docs/unauthorized-page)
   * [IP restriction](/help/docs/ip-restriction-page)
4. A default page design is available for you to customize. You can choose from the two options:

   * **Basic style**: Customize the default image.
   * **Custom style**: Add custom HTML and CSS. Use the **Preview** toggle on the right side to switch between code view and rendered view.
5. Click **Save** to save all recent changes.
6. Click **Preview** to see the changes on the site.
7. Click **Publish** to activate the changes on the Knowledge base site.

> NOTE
>
> Once you configure an error page, you cannot revert to the default static page. It's recommended to use custom static pages to enhance the Knowledge base experience.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_custom_pages_Design_settings.gif)

---

### Difference between Access denied and Unauthorized pages

While the **Access denied** and **Unauthorized pages** may seem similar, they refer to distinct situations in the knowledge base.

* The **Access denied** page is shown when a user does not have permission to access specific content or sections within the knowledge base.
* The **Unauthorized** page, on the other hand, typically appears when a user tries to access a page or resource that requires authentication, but they are not logged in or their session has expired.

**Example:** Let’s say a user is logged into a private knowledge base but only has permission to view product documentation. If they attempt to access a confidential section reserved for admins, the **Access denied** page will appear, informing them they lack the required permission.

---

### FAQs

**Can I upload images from my local storage for error page design?**

Yes, you can import images from your drive or local storage.

**Why are the Access denied and Unauthorized error pages disabled for my project?**

These error pages are only available for Private or Mixed access projects.

**Can I add video or GIF elements to the error page design?**

Yes, you can add Screen GIFs and video elements to the error page design.

**Is it possible to switch back to the default static page after configuring a error page?**

No, once you configure a error page, you cannot switch back to the default static page.

<a id="404-page"></a>

## 404 page

**Plans supporting error pages**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is a 404 page?

A 404 page appears when a reader tries to access a nonexistent page on the Knowledge base site. For instance, when a reader attempts to access a deleted URL in the Knowledge base site, a 404 page will appear.

Customize the 404 error page of your Knowledge base site by adding a custom message and illustration. This enhances the reader's experience, guiding them to the desired pages instead of leaving them on a default 404 page. You can add links, titles, descriptions, and images that reflect your brand. The 404 page can be customized using either the basic or custom style.

> NOTE
>
> Once you configure a custom 404 page, you cannot revert to the default. It's recommended to have a custom 404 page to improve the reader experience.

---

## Customizing the 404 page

To customize the 404 page, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. From the left dropdown menu, select **404** page.
4. Customize the page using one of two options:

   * **Basic style**: Allows customization of the default image.
   * **Custom style**: Add custom HTML and CSS. Use the **Preview** toggle to switch between code view and rendered view.
5. Click **Save** to save recent changes.
6. Click **Preview** to view changes.
7. Click **Publish** to apply changes to the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_custom_pages_Design_settings.gif)

---

### Basic style

#### Image

Upload a related image to enhance the page.

1. Click **Image**.

   The **Image** panel will appear.
2. Click **Change** and choose between two options:

   a. **Default images**: Select from the default images and click **Save**.

   b. **Image**: Either provide a URL or upload an image from your drive.

   * To upload from URL: Enter the image URL in the URL field and click **Save**.
   * To upload from your drive: Click **Upload an image**, select the file, and click **Save**.
3. Set the image alignment (left, center, or right) as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Upload_Image_Basic_style.png)

#### Heading

1. Click **Heading**.

   The **Heading** panel will appear.
2. Enter the desired heading text.
3. Select a color from the text color palette.

> The default heading will be "404."

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Header_Basic_style_.png)

#### Paragraph

1. Click **Paragraph**.  
   The **Paragraph** panel will appear.
2. Enter a description for the page. This will help readers understand the context.
3. Select a color from the text color palette.

> The default text will be "Oops! Page not found."

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Paragraph_Basic_style_.png)

#### Buttons

Add up to three link buttons to guide readers to the desired pages.

1. Click **Buttons**.
2. Click the **Add button** to create a new button.
3. Enter text and URL for each button.
4. Click the **Delete** () icon to remove a button or the **Hide** () icon to hide it.
5. Click **Delete** at the bottom to remove all buttons.
6. Once done, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Buttons_Basic_style_.png)

> NOTE
>
> Suggested links to include on the 404 page:
>
> * Home page
> * Contact page/form for readers to report a broken link
> * Knowledge base sitemap
> * Some of your most popular blog pages
> * Most popular or valuable product or category pages

---

### Custom style

Customize the 404 page with HTML or CSS section.

1. Select **Custom style** and switch between the **HTML** and **CSS** sections.
2. Update the code as required in each section.
3. Turn on the **Preview** toggle to view the updated page.
4. Once done, click **Save** and **Publish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Custom_style_preview.png)

> NOTE
>
> **Page not found** feature in Document360 shows the list of URLs for which a 404-page error is shown after the link is accessed. It helps in replacing this URL with redirecting URL, which can provide the required content and enhance the reader experience. Also using redirection rule, we can fix the 404-page error.  
> For more information, read the article on [Page not found analytics](/help/docs/page-not-found-analytics).

> NOTE
>
> **Links status** feature checks for broken links across your Knowledge base site and helps you fix them to enhance SEO and improve reader experience. For more information, read the article on [Link status](/help/docs/links-status).

---

### FAQs

#### **What are the common causes of 404 errors?**

Some of the common causes of 404 errors for articles on the Knowledge base site are:

* **Deleted URL:** The article might have been deleted, and the page no longer exists.
* **Changed URL:** The URL of the article was changed, but a redirection wasn’t set up.

  > NOTE
  >
  > When updating an article URL, ensure a redirection rule is applied in the Knowledge base portal.
* **Subfolder path:** All articles on the Knowledge base site may result in 404 errors if the subfolder path is changed from its default name, **“docs.”** This issue applies only when the subfolder host is disabled. Change the subfolder path back to the default **“docs”** and save the changes.
* **Redirection rule:** A redirection rule might be misconfigured, either redirecting the article incorrectly or causing a 404 error.

  1. Go to **Settings** () > **Article redirect rules** and check for any rules applied to the article.
  2. Validate and remove unnecessary or misconfigured rules.
* **Incorrect URL:** The URL was mistyped or linked incorrectly. Ensure the article slug is in all lowercase letters.

  **Server issues:** A server problem prevented the page from loading.

#### **What are the best practices to create a 404 page?**

The best practices for creating a 404 page are:

1. **Keep the design consistent**

* Ensure the 404 page matches the overall look and feel of your website or product.
* Use the same branding, colors, and fonts to create a seamless experience and avoid confusion.

2. **Use clear and friendly language**

* Avoid overly technical jargon. Use simple, friendly language that lets users know they’re in the right place but the page is unavailable.
* Acknowledge the error with a human touch.

3. **Offer helpful navigation**

* Provide clear links to guide users back on track:

  + **Homepage**
  + **Search bar**
  + **Popular or recommended pages**
* Consider offering links to **frequently visited sections**, like support, contact, or a knowledge base.

4. **Add a search bar**

Give users the chance to search for what they were trying to find. A well-placed search bar can help them continue their journey seamlessly.

5. **Explain what might have happened**

* Include a short explanation of why the user may have ended up there (e.g., broken link, outdated URL).
* Keep it light and user-friendly: "It’s possible the page has been moved or no longer exists."

6. **Include a Call-to-Action (CTA)**

* Suggest actions they can take:

  + **Contact support** for help.
  + **Report the broken link**.
* For an e-commerce site, offering product recommendations or deals could also be beneficial.

7. **Add a touch of humor or personality**

* Inject some personality with humor or visuals. A light-hearted approach can ease the frustration of hitting an error.
* Use quirky messaging like: "Looks like this page is on vacation!" or visual elements like an illustration.

8. **Make the page functional**

* Ensure any buttons or links on the 404 page are working properly and are easy to locate.
* Double-check that navigation back to the homepage or other sections is smooth and intuitive.

9. **Add a feedback option**

Provide a link or form to report the issue or give feedback. This can help identify any broken links or common user issues.

10. **Consider SEO**

* Include proper meta tags and an SEO-friendly 404 page that informs search engines of the missing page.
* Include relevant internal links so search engines can still index your important pages.

11. **Use an eye-catching image or animation**

* Visuals can make the 404 page engaging. You can use custom illustrations, fun animations, or even GIFs to add interest and reduce frustration.

12. **Ensure it’s mobile-friendly**

* Make sure your 404 page is responsive and works well on mobile devices, just like the rest of your site.

<a id="access-denied-page"></a>

## Access denied page

**Plans supporting error page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Access denied page

The **Access denied** page appears when a reader with limited permissions in your knowledge base tries to access a URL they are not authorized to view.

For example, if a reader has access to only certain categories in a mixed knowledge base and attempts to access a restricted URL outside of their permissions, they will be redirected to the **Access denied** page.

Customize the **Access denied** page of your knowledge base to provide a more helpful experience by including a clear reason and solution, such as: *"*You don’t have permission to access this page. Contact your admin to request access*."* Customizing this page helps readers understand why they can’t access certain content and how to resolve the issue.

> NOTE
>
> * The **Access denied** page is available only for Private and Mixed projects.
> * Once a custom page is configured, you cannot revert to the default **Access denied** page. It's recommended to have a custom access denied page to enhance the user experience.

![2_Screenshot-Example_Access_denied_custom_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Example_Access_denied_custom_page.png)

---

## Customizing the Access denied page

To customize the Access denied page, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. From the left dropdown menu, select **Access denied** page.
4. Customize the page using one of two options:

   * **Basic style**: Allows customization of the default image.
   * **Custom style**: Add custom HTML and CSS. Use the **Preview** toggle to switch between code view and rendered view.
5. Click **Save** to save recent changes.
6. Click **Preview** to view changes.
7. Click **Publish** to apply changes to the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Customizing_the_Access_Denied_page.gif)

---

### Basic style

#### Adding an image

You can upload an image to make the Access Denied page more engaging.

1. Click **Image**.

   The **Image** panel will appear.
2. Click **Change** and choose between two options:

   a. **Default images**: Select from the default images and click **Save**.

   b. **Image**: Either provide a URL or upload an image from your drive.

   * To upload from URL: Enter the image URL in the URL field and click **Save**.
   * To upload from your drive: Click **Upload an image**, select the file, and click **Save**.
3. Set the image alignment (left, center, or right) as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Image_basic_style_access_denied_page.png)

#### Adding a heading

1. Click **Heading**.

   The **Heading** panel will appear.
2. Enter the desired heading text.
3. Select a color from the text color palette.

> The default heading will be "Sorry!".

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-heading_basic_style_access_denied_page.png)

#### Adding a paragraph

1. Click **Paragraph**.  
   The **Paragraph** panel will appear.
2. Enter a description for the page. This will help readers understand the context.
3. Select a color from the text color palette.

> The default paragraph will be “You are not authorized to access this article or page.”

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Paragraph_basic_style_access_denied_page.png)

### Custom style

Customize the **Access denied** page with HTML or CSS section.

1. Select **Custom style** and switch between the **HTML** and **CSS** sections.
2. Update the code as required in each section.
3. Turn on the **Preview** toggle to view the updated page.
4. Once done, click **Save** and **Publish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Custom_style_access_denied_page.png)

---

### FAQs

**Is the Access denied page available for all project types?**

No, the Access denied page is only available for Private and Mixed projects.

**Can I revert to the default Access denied page after customizing it?**

No, once a custom page is configured, you cannot revert to the default Access denied page.

**How do I hide heading and paragraph elements on the Access denied page?**

To hide the **Heading** or **Paragraph** elements on the Access Denied page, follow these steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page will display all the basic site design configurations.
2. Click **Customize site**.
3. From the left dropdown menu, select **Access denied** page.
4. Hover over the **Heading** or **Paragraph** and click the **Hide** () icon.
5. To unhide these elements, click the **Unhide** () icon.

   > NOTE
   >
   > You cannot unhide or delete the image element in the Access denied page.

**Can I upload my own image for the Access denied page?**

Yes, you can upload your own image or select from default images for the Access denied page.

**What are the best practices while customizing the Access denied page?**

* **Use clear language**: Ensure the message is simple and instructive. Example: “You don’t have permission to access this page. Contact the admin for help.”
* **Link to help resources**: Consider adding a link to a FAQ section or a **Contact support** button for a better user experience.
* **Responsive design**: Ensure the page looks good on both desktop and mobile devices. Test your customizations to confirm that images and text are displayed correctly on all screen sizes.

<a id="unauthorized-page"></a>

## Unauthorized page

**Plans supporting error page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Unauthorized page

The **Unauthorized** page appears when a user without proper permissions attempts to access a restricted URL in your knowledge base. For example, this page will display if a user tries to access private content without the necessary access rights.

To improve user experience, you can customize the Unauthorized page by adding a descriptive message that explains the reason for restricted access and provides a solution, such as: “You don’t have permission to view this page. Contact your admin to request access.”

> NOTE
>
> Once you configure a **custom unauthorized** page, it cannot be reverted to the default version. We recommend creating a custom unauthorized page to enhance the user experience.

![2_Screenshot-Example_Unauthorized_denied_custom_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Example_Unauthorized_denied_custom_page.png)

---

## Customizing the Unauthorized page

Follow these steps to customize the Unauthorized page:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. From the left dropdown menu, select **Unauthorized** page.
4. Customize the page using one of two options:

   * **Basic style**: Customize the default image and text.
   * **Custom style**: Add your own HTML and CSS for a fully personalized page.Use the **Preview** toggle to switch between code view and rendered view.
5. Click **Save** to save recent changes.
6. Click **Preview** to view changes.
7. Click **Publish** to apply changes to the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF_Accessing_Unauthorized_page.gif)

---

### Basic style

#### Adding an image

To enhance the page visually, you can upload a relevant image.

1. Click **Image**.

   The **Image** panel will appear.
2. Click **Change** and choose between two options:

   a. **Default images**: Select from the default images and click **Save**.

   b. **Image**: Either provide a URL or upload an image from your drive.

   * To upload from URL: Enter the image URL in the URL field and click **Save**.
   * To upload from your drive: Click **Upload an image**, select the file, and click **Save**.
3. Set the image alignment (left, center, or right) as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Image_basic_style_access_denied_page.png)

#### Updating the heading

1. Click **Heading**.

   The **Heading** panel will appear.
2. Enter the desired heading text.
3. Select a color from the text color palette.

> The default heading will be "Sorry!".

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-heading_basic_style_access_denied_page.png)

#### Updating the paragraph

1. Click **Paragraph**.  
   The **Paragraph** panel will appear.
2. Enter a description for the page. This will help readers understand the context.
3. Select a color from the text color palette.

> The default paragraph will be “You are not authorized to access this article or page.”

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Paragraph_basic_style_access_denied_page.png)

### Custom style

Customize the **Unauthorized** page with HTML or CSS section.

1. Select **Custom style** and switch between the **HTML** and **CSS** sections.
2. Update the code as required in each section.
3. Turn on the **Preview** toggle to view the updated page.
4. Once done, click **Save** and **Publish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Custom_Style_in_Unauthorized.png)

<a id="ip-restriction-page"></a>

## IP restriction page

**Plans supporting error page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## IP restriction page

The **IP restriction page** appears when a reader attempts to access the Knowledge base site URL from a restricted IP address.

For example, if you've limited access to your knowledge base to a specific IP range, and a reader attempts to access the site from an IP address outside that range, they will see the **IP Restriction** page.

You can customize this page and provide a clear message with instructions, such as: “Your IP address is not authorized. Please contact your admin for access.” This helps users understand why they’re being restricted and how to resolve the issue.

> NOTE
>
> * IP restriction page is available only for the **Enterprise plan** projects.
> * Once a custom IP restriction page is configured, you cannot revert to the default version. It is recommended to create a custom page to enhance the reader experience.

---

## Customizing the IP restriction page

Follow these steps to customize the IP restriction page:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. From the left dropdown menu, select **IP restriction** page.
4. Customize the page using one of two options:

   * **Basic style**: Modify the default image and text.
   * **Custom style**: Add your own HTML and CSS for advanced customization. Use the **Preview** toggle to switch between code view and rendered view.
5. Click **Save** to save recent changes.
6. Click **Preview** to view changes.
7. Click **Publish** to apply changes to the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Accessing_IP_restriction_page_in_the_Knowledge_base_portal.gif)

---

### Basic style

#### Adding an image

Upload a related image to enhance the page.

1. Click **Image**.

   The **Image** panel will appear.
2. Click **Change** and choose between two options:

   a. **Default images**: Select from the default images and click **Save**.

   b. **Image**: Either provide a URL or upload an image from your drive.

   * To upload from URL: Enter the image URL in the URL field and click **Save**.
   * To upload from your drive: Click **Upload an image**, select the file, and click **Save**.
3. Set the image alignment (left, center, or right) as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Adding_images_in_the_IP_restriction_page.png)

#### Customizing the heading

1. Click **Heading**.

   The **Heading** panel will appear.
2. Enter the desired heading text.
3. Select a color from the text color palette.

> The default heading will be "Sorry!".

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Adding_header_in_the_IP_restriction_page.png)

#### Customizing the paragraph

1. Click **Paragraph**.  
   The **Paragraph** panel will appear.
2. Enter a description for the page. This will help readers understand the context.
3. Select a color from the text color palette.

> The default paragraph will be “Your IP address {{template:IPAddress}} is restricted from accessing this article or page.”

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Adding_Paragraph_in_the_IP_restriction_page.png)

### Custom style

Customize the **IP restriction** page with HTML or CSS section.

1. Select **Custom style** and switch between the **HTML** and **CSS** sections.
2. Update the code as required in each section.
3. Turn on the **Preview** toggle to view the updated page.
4. Once done, click **Save** and **Publish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Adding_Custom_CSS&JS_in_the_IP_restriction_page.png)

<a id="custom-css-javascript"></a>

## Custom CSS & JavaScript

**Plans supporting the use of custom CSS and JS in Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## CSS snippets

A snippet is a piece of reusable code, and a CSS Snippet "CSS (Cascading Style Sheets) + Snippet" is a set of utilities and interactive examples for CSS3. It helps create the frequently used layout templates. These are pre-written blocks of code that developers can quickly insert into their projects to achieve specific functionalities without writing the code from scratch.

These snippets help streamline the development process by saving time, reducing errors, and ensuring consistency across the codebase.

An example of a CSS snippet:

```
.shadow {
 box-shadow: 0px 5px 5px rgba(0,0,0,0.4);
 -moz-box-shadow: 0px 5px 5px rgba(0,0,0,0.4);
 -webkit-box-shadow: 0px 5px 5px rgba(0,0,0,0.4);
 }
```

CSS

Copy

The above CSS snippet can make borders and images stand out on your page.

### Customizing CSS using CSS snippets

To customize CSS using CSS snippets, follow the below steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. In the **CSS** tab, you can add code snippets in two ways:

   a. Enter the code snippet in the text area.

   b. Click **Add code snippets** to add the preloaded snippets (7 preloaded snippets).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Adding_code_snippet_in_the_Custom_CSS_tab.png)

3. Once done, click **Save** or Ctrl + S to save the changes you made.

   > For more information, read the article on [CSS Snippets](/help/docs/css-snippets).

---

## JavaScript snippets

A JavaScript snippet is a reusable piece of code written in JavaScript, typically used to perform specific tasks or add functionality to a web page. These snippets are often small, focused, and designed to be easily inserted into existing codebases.

### Customizing JavaScript using custom JavaScript snippets

To customize JavaScript using custom JavaScript snippets, follow the below steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **JavaScript**tab and paste the desired code in the JavaScript snippet.

   For example, to move the related articles above the feedback section in the Knowledge base site, paste the following code into the JavaScript snippet.

```
window.onload = function () {
$(".content_block_text" ).append("<div class=\"sperator\"><hr></div>");
$('.related-articles-container').appendTo('.content_block_text') 
}
```

JavaScript

Copy

4. Once done, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Adding_the_code_in_Custom_JavaScript_snippet.png)

---

## Troubleshooting

### Adapting custom code for the Single Page Application (SPA) model in Document360

With the transition of the Document360 website to a Single Page Application (SPA) model, any custom JavaScript dependent on page refresh events may no longer function as expected. This is because SPAs refresh only the article content, not the entire page.

Below are the areas where users can inject Custom JavaScript within the Document360 portal:

1. **Custom JavaScript**

   Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. **Custom HTML Integrations**  
   Navigate to **Settings** () > **Knowledge base site** > **Integrations** > **Custom HTML** in the Knowledge base portal.

**Recommended solution**

To ensure compatibility with the SPA model, update your custom JavaScript to use the `articleload` event. This event triggers when the article content refreshes, ensuring your scripts work seamlessly in the new architecture.

1. Replace any code that relies on page refresh events with a subscription to the `articleload` event.
2. Use the following code snippet to adapt your custom scripts:

   ```
   window.addEventListener('articleload', function() {
     // Your custom JavaScript code here
   });
   ```

   JavaScript

   Copy
3. Test your updated scripts to confirm they function correctly in the SPA environment.

   If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

---

### FAQs

#### Can custom .css files be applied in Document360?

Yes, Document360 provides you the flexibility to apply custom .css files to tailor the appearance and style of your documentation.

#### If we need to cater to multiple brands, would we require a separate workspace for each brand, or can different styles/style sheets be applied to different projects within a workspace?

If you manage multiple brands, you can either create separate workspaces within a single project or purchase additional projects for each brand. It’s important to note that any CSS added to the project will be applied universally across all workspaces. However, you still have the flexibility to customize the styling of landing pages and other elements for each workspace individually.

<a id="css-snippets"></a>

## CSS Snippets

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## CSS Snippets

A CSS (Cascading Style Sheets) snippet provides a collection of utilities and interactive examples for CSS3, helping to create commonly used layout templates efficiently. CSS snippets are valuable code pieces for saving time and improving productivity during development.

Example of a CSS snippet:

```
.CustomLink
{
 font-size:25px;
}
```

CSS

Copy

The above CSS snippet can be used to change the hyperlink size on the **Knowledge base site**.

### Steps to customize CSS in the Document360 Knowledge base site using CSS snippets

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab.
3. Click **Add code snippets** on the top right of the code space.

   A window appears, preloaded with seven basic snippets that you can use to customize your knowledge base site namely,

* **Change body text font**
* **Change heading font**
* **Change table styles**
* **Center align images in articles**
* **Change home page builder hero section background**
* **Change callout colors**
* **Disable ‘back to top’ button**

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Customization.png)

You can also use snippets other than the pre-loaded Custom CSS snippets by adding your customized code snippets by navigating to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.

4. Press **Ctrl+S** or click the **Save** button on the top right to save the changes.

<a id="callout-styles"></a>

## Callout styles

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is a "Callout"?

A "Callout" is designed to highlight important information within the article content. You can insert callouts using both the Markdown and Advanced WYSIWYG editors in Document360.

---

### **Types of Callouts in Document360**

Document360 provides four inbuilt callouts for

1. **Info**

   > Your title goes here
   >
   > Your content goes here
2. **Warning**

   > Your title goes here
   >
   > Your content goes here
3. **Error**

   > Your title goes here
   >
   > Your content goes here
4. **Success**

   > Your title goes here
   >
   > Your content goes here

## Styling the Callouts

If you want to modify these callouts, follow these steps to change the background color and other styling options:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab, then click the **Add code snippets** link on the right side.

   The **Add code snippets** panel will appear.
3. Select **Change callout colors**. This will take you to the section where the existing callout colors are set.
4. Edit the code to make the necessary changes and add your branding colors.
5. Once done, click **Save**.

By modifying the custom color in the Callout snippet, the changes will be applied across the entire knowledge base.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Styling_callouts_in_Document360.gif)

---

### FAQ

**Can I style callout color in dark mode?**

You can style the callout color in dark mode. For more information, read the article on [How to change the callouts color in dark mode?](/help/docs/how-to-change-the-callouts-color-in-dark-mode).

<a id="body-font-style"></a>

## Body font style

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Body font style is essential in Document360 or any possible avenue for creating crisp, reader-required content. With Document360's **Custom CSS and JavaScript** function, users can achieve the desired font styling and overall Knowledge base look.

## Setting up the body font style using Custom CSS & JavaScript

Follow the below steps to change the body font style in Document360 using CSS Snippets.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Click the **Custom CSS** tab and then click the **Add code snippets** button on the top right.

   A window appears, preloaded with seven basic snippets that you can use to customize your knowledge base site.
3. Click the **Change body text font**. The snippet will be added to your Custom CSS code block.
4. Make the required changes to the code.
5. Click **Save** or press **Ctrl+S** to save the changes.

> **For example**, if you want to change the body font style to **ROBOTO** with the color Red, you can change that in the snippet code. Follow the explanatory GIF image added below.

## An explanatory GIF on changing the Body Font style

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Body%20Font%20-%20Custom%20CSS%20GIF.gif)

NOTE

**Nunito** is the default font style used. You can modify the custom font style and color in the body font snippet, and the modification applies to the entire Knowledge base.

<a id="image-alignment"></a>

## Image alignment

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Image alignment helps you keep your image in the intended area, either to the left, right, or center, and modify it to optimize the site experience for the user. It also helps you to keep the image and content proportions maintained when you resize the content on your Knowledge base site.

By default, images on your knowledge base site are aligned to the left.

## Center images in your Document360 Knowledge base

To align images centrally using custom CSS, follow the below steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click the **CSS** tab.
3. Click **Add code snippets** on the top right of the code space, and a window appears, preloaded with seven snippets that you can use to customize your Knowledge base site.
4. Click **Center align images in articles**, and the snippet will be added to your Custom CSS code block.
5. Click **Save**.

   For example,

KB site 1.0

KB site 2.0

```
.content_block .content_container .content_block_text img{
margin: 0 auto;
display: block;
}
```

CSS

Copy

```
article img {
    margin: 0 auto !important;
    display: block;
}
```

CSS

Copy

The image will now be centered within the frame on your Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Image_center_alignment.png)

### Aligning Images

#### 1. To align the image left

KB site 1.0

KB site 2.0

```
.content_block .content_container .content_block_text img {
    margin: 0px 0 0;
    display: block;
}
```

CSS

Copy

```
article img {
    margin: auto 0 0 0 !important;
    display: block;
}
```

CSS

Copy

#### 2. To align the image right

KB site 1.0

KB site 2.0

```
.content_block .content_container .content_block_text img {
    display: block;
    margin: 0 0 0 auto;
}
```

CSS

Copy

```
article img {
    margin: 0 0 0 auto !important;
    display: block;
}
```

CSS

Copy

#### Remove/erase a previously added code snippet

To remove the previously added code snippet, select the intended snippet and press **delete** on the keyboard.

> NOTE
>
> Before you add a new alignment snippet, don't forget to erase the previously added one.
>
> The image alignment that is set will be applied to the entire knowledge base.

---

## Resizing images on the Knowledge base site

To maintain the text and image proportions when you zoom in (enlarge) or zoom out (minimize) on your Knowledge base site,

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
.content_block .content_container .content_block_text img {
height: auto !important;
}
```

CSS

Copy

```
article img {
    height: auto !important;
}
```

CSS

Copy

3. Click **Save** on the top right.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Custom_CSS.png)

<a id="header-font-style"></a>

## Header font style

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Header fonts are the captain of the main content, as they lead the reader through the introduction to the main content. They are usually large and generally considered the higher-impact text in the content.

All these paramount things make choosing the right header font style more important when taking your content online.

The header fonts are usually the `<H1>`, `<H2>`, `<H3>`, and `<H4>` tags that you mostly use for your titles and headings.

NOTE

The most common Header font for technical documentation is **sans-serif**. Document360 provides this font and the freedom to customize Header fonts according to your preference.

---

## How to change the Header font style in Document360?

#### Using Custom CSS

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Click the **Custom CSS** tab and click the **Add code snippets** button.

   A window appears, preloaded with seven basic snippets that you can use to customize your knowledge base site.
3. Click **Change heading font**. The snippet will be added to your Custom CSS code block.
4. Make the required changes to the code.
5. Click **Save** or press **Ctrl+S** to save the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Header%20Font%20-%20Custom%20CSS%20GIF.gif)

NOTE

**Montserrat** is the default Header font style for all the `<H>` tags. You can modify the custom font style and color in the header font style snippet. This will be applied to the entire knowledge base.

<a id="table-style"></a>

## Table style

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Table style** is an important element in Document360 or in any possible avenue for creating a rich design layout for a document. Document360 has better layout options for **tables and table elements**.

## Why are the table elements important for a document?

Arranging information in a specific arrangement, typically with rows and columns, can help in understanding the complex structures of data.

## Style the tables using CSS Snippets in Document360

Follow the below steps to style the tables using CSS Snippets.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab.
3. Click **Add code snippets** on the top right of the code space.

   A window appears, preloaded with seven basic snippets that you can use to customize your knowledge base site.
4. Click the **Change table styles** (the snippet appears on the Custom CSS code block).
5. Click **Ctrl+S** or **Save** on the top right to save the change.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenShot-Customization.gif)

### Adding custom CSS

You can also add custom CSS styling to your table, apart from the default snippet provided.

> For example,

```
table th, table td{
border: 1px solid #67cfbf;
padding: 2px 10px;
}
table th {
background: #fcf8c0;
font-weight: 600;
}
table th:empty {
display:none;
}
tbody tr:nth-child(odd) {
background-color: #f2f2f2;
}

```

CSS

Copy

If you input this custom CSS code in the code space in the **CSS** tab, your output will appear like below:  
![02_Screenshot_Table_style_CSS](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/02_Screenshot_Table_style_CSS.png)

<a id="article-redirect-rules"></a>

## Article redirect rule

**Plans supporting the use of article redirect rules in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can set up an article redirect rule for any published or draft article URL. The redirect feature is helpful when you change an article's URL and that same URL has been referenced in other articles across your Knowledge base site. You can also perform a bulk import of redirect rules.

Redirect rules prevent users from clicking on **dead** or **broken links**.

---

## Adding an article redirect rule

You can change an article's URL or slug before or after publishing the article or category page. The URL of an index-type category can also be modified. You can make these changes directly in the article editor.

To add the article redirect rule, follow the steps below:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article redirect rules** in the Knowledge base portal.

   The **Article redirect rules** page will appear with a list of existing rules (if any).
2. Click **New redirect** to create a new redirection rule.

   The **New redirect rule** panel will appear.
3. Select the desired **Redirect type**:  
    a. **Ends with**: To set the redirection rule for an article with the unique slug at the end of your URL.   
    b. **Replace with**: To set the redirection rule for the URL text between the domain name and the article slug.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Article_Redirect_rule_Overview_page.png)

#### Ends with

4. In the **Source path** field, type the unique slug at the end of your URL for the redirect.

> NOTE
>
> The URL slug in the source path must start with a **forward slash** (`/`).

5. In the **Destination URL** field, type the full destination URL or type the new slug for redirection. Adding a forward slash (**/**) at the beginning of the destination URL is optional.

> **Example**: To redirect the article URL from `https://docs.document360.com/docs/getting-started-with-document360` to `https://docs.document360.com/docs/getting-started-video-library`, add the source path and destination URL as mentioned below:  
> **Source path**: `/getting-started-with-document360`  
> **Destination URL:** `getting-started-video-library`

6. Click **Create**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Ends_with_redirection_rule.png)

#### Replace with

7. In the **Source path** field, type the text between the domain and the article slug that you want to redirect.

> **Example**: The source path in the URL `https://project.technicaldocumentation.com/v1/docs/fr/getting-started` is `/v1/docs/fr/`.

> NOTE
>
> The source path must start and end with a **forward slash** (`/`).

8. In the **Replace text** field, type the new URL text you want to use for redirection.

> **Example:** Replace `/v1/docs/fr/` with `/v2/docs/en/` in the URL `https://project.technicaldocumentation.com/v1/docs/fr/getting-started`.

> NOTE
>
> The replace text must start and end with a **forward slash** (`/`).

9. Click **Create**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Replace_with_redirection_rule.png)

---

### Best practices

If you manage a multilingual Knowledge base with multiple project workspaces, set redirect rules based on language or workspace. For instance, if you set a rule with the source path `/customer-support` and the destination `/sales-and-support`, this applies only to the default language of the main workspace.

* To apply this rule to another language (e.g., German: `/de/`), create a new rule with the source path `/de/customer-support` and the destination `/de/sales-and-support`.
* To apply the rule in another workspace (e.g., version 1: `/v1/`), set the source path `/v1/docs/customer-support` and the destination `/v1/docs/sales-and-support`.

---

### Site-level redirect rule

In the **Article redirect rules** page, you can set a subfolder redirect rule at the site level using the **Replace with** option. This is useful for migrating from another platform or redirecting deprecated workspaces/languages.

> Example: Set a redirect rule for the subfolder `/azure/serverless` to `/data/cloud360` in the URLs like `https://apidocs.serverless360.com/azure/serverless/article_slug`.

---

## Editing a redirect rule

To edit the article redirect rule, follow the below steps:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article redirect rules** in the Knowledge base portal.

   The **Article redirect rules** page will appear with a list of existing rules (if any).
2. Use the **Filter** to find the desired redirection rule.
3. Hover over the desired rule and click the **Edit** () icon.

   The **Edit redirect rule** panel will appear.
4. Update the necessary field(s).
5. Click **Update**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Editing_a_redirect_rule.png)

---

## Deleting a redirect rule

To delete an article redirect rule, follow the below steps:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article redirect rules** in the Knowledge base portal.

   The **Article redirect rules** page will appear with a list of existing rules (if any).
2. Use **Filter** to find the desired redirection rule.
3. Hover over the desired rule and click the **Delete** () icon.
4. To delete multiple rules, select the checkboxes next to the rules and click **Delete**.
5. Click **Yes** in the **Delete** confirmation panel.

> NOTE
>
> Deleted redirection rules cannot be retrieved.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Delete_a_redirection_rule.png)

---

## Filter a redirect rule

To filter the desired redirect rule, follow the steps below:

1. **Search**: Enter a keyword from the source path or destination URL in the search bar, and the result is populated.
2. **Type**: Filter by the type of redirect: **Ends with**, **Replace with**, or **Both**.
3. **Modified date**: Filter rules by the last modified date, with options such as 1 year, 3 months, 30 days, or 7 days. Click **Custom date** to choose any custom date range and select the desired date range.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Filter_a_redirection_rule.png)

---

## Importing redirect rules

To import bulk redirect rules at once, upload a CSV that matches the following template:

|  |  |  |
| --- | --- | --- |
| **Source** | **Destination** | **RedirectionType** |
| `/myoldarticle` | `newarticle` | endswith |
| `/en/customers/` | `/v1/docs/` | replacewith |

> NOTE
>
> The file size should be less than or equal to 1MB.

#### Import redirect rule file template

You can also download the template here:

[import-redirect-rule.csv](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/import-redirect-rule.csv)

To import redirect rules in bulk:

1. Prepare a CSV file that matches the provided template (file size ≤ 1MB).
2. Navigate to **Settings** ()> **Knowledge base site** > **Article redirect rules** in the Knowledge base portal.
3. Click **Import redirect rule**.

   The **Import redirect rules** panel will appear.
4. Drag and drop the CSV file or select **Click to Upload**.
5. Review the list of valid and invalid rules.

   > NOTE
   >
   > Click the **Download** () icon near to the invalid rules count to download the list of invalid rules.
6. Click **Import** to apply the valid rules.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGIF-Importing_redirection_rule.gif)

---

## Exporting redirect rules

To export redirect rules as a CSV file, follow the steps below:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article redirect rules** in the Knowledge base portal.
2. Click **Export** to download the rules as a CSV file.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Export_Redirection_rule.png)

---

### FAQs

#### **What are Dead links?**

Dead links, or broken links, are hyperlinks that no longer work due to issues like URL changes, incorrect URLs, or restricted/private articles. They typically result in a 404 error page.a

#### **What is an article slug?**

A slug is the part of a URL that uniquely identifies a specific article/page. It comes after the `/` in your project's root URL.

> **Example**:  
> **Article URL**: `https://docs.document360.com/docs/why-did-we-build-document360`
>
> **Slug**: `/why-did-we-build-document360`

#### **How many redirect rules can I set up in a project?**

You can set up a maximum of 10,000 redirect rules per project. If you exceed the limit, please contact our [support team](mailto:support@document360.com).

#### **Are there limits for the import redirect rules feature?**

You can import up to 1,000 redirect rules per day and use the import feature up to five times per day. If you exceed the limit, please contact our [support team](mailto:support@document360.com).

#### **Why is my published article redirecting to another article or leading to a 404 error on the Knowledge base site?**

This issue may occur due to a **redirection rule** applied to the article's link. A redirection rule can redirect the article to another page or cause a 404 error if it is misconfigured.

To resolve this:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article** **redirect** **rules** in the Knowledge base portal.
2. Search for the article's slug in the search bar to check for any redirection rules.
3. If a rule is applied, validate its purpose. If the rule is unnecessary or misconfigured, remove it.
4. Save the changes and revisit the article to ensure it displays as expected on the Knowledge base site.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

#### **Why do I see the error "The KB site is redirected too many times when accessed?"**

This error occurs due to a redirect loop, often caused by setting the Document360 Knowledge base site URL as the Sign-in URL for JWT authentication. Ensure the Sign-in URL for JWT authentication is not the same as the Document360 KB site URL. Use a dedicated authentication page as the Sign-in URL to avoid redirect loops and resolve the error.

#### **How can we address the issue of 404 errors when we discontinue functionalities that lead to incoming links from sources we cannot control?**

For discontinued features, to manage 404 errors effectively, create a standard article informing users about the discontinuation of a functionality, which can be used to redirect relevant articles.

For multiple discontinued functionalities, consider establishing a centralized page that consolidates all related information, ensuring users can easily access updates and reducing the occurrence of dead links.

#### **How do I redirect an article from one page to another using Custom JavaScript?**

To redirect an article from one page to another using Custom JavaScript, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Custom CSS & JavaScript**.
3. Paste the following code in the **JavaScript** tab:

   ```
   $(document).ready(function() {
     if(window.location.href=="source URL") {
       window.location.replace("destination URL");
     }
   });

   ```

   JavaScript

   Copy
4. Replace the **source URL** and **destination URL** in the code.
5. Click **Save**.

#### **Why do I see the error "Failed to save article redirection rule” while saving a new article redirect?**

This error occurs when you try to use a destination slug (the target URL path for a redirection) as the source path for another redirection. Once a destination is defined in a redirection rule, it becomes a static target and cannot be reused as a source in a new rule.   
To avoid this error, ensure that the destination slug is not used as a source path in any existing or new redirection rules.

#### **How do I write a redirection rule to replace the workspace name in the URL?**

You can use redirection rules when migrating from a different platform to Document360.

* Old URL structure: `https://docs.document360.com/{oldworkspace}/section/page`
* New URL structure: `https://docs.document360.com/{newworkspace}/section/page`

The same domain must be mapped to both platforms for the redirection to work. For example,   
If the old workspace is v1 and the new workspace is v2:

| Source | Destination | Rule |
| --- | --- | --- |
| `/v1` | `/` | endswith |
| `/v1/` | `/v2` | replacewith |

This rule ensures that all requests pointing to the old workspace v1 are redirected to the new workspace v2.

#### **How can I redirect a specific article/category URL to the homepage of** **my documentation?**

To redirect a specific URL to the homepage of my documentation, change the destination URL as ‘**/**’.  
For example, if you wish to redirect the URL `https://docs.radixdlt.com/docs/welcome` to `https://docs.radixdlt.com` , set the source URL as /docs/welcome and destination URL as ‘**/**’ in the replace with redirection rule.

<a id="configuring-the-article-settings"></a>

## Article settings & SEO

**Plans supporting the article settings configurations**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Article settings & SEO** section in Document360 allows for configuring various elements of the Knowledge base site to improve user experience and ensure consistency across articles. This section includes settings for the article header, footer, search options, accessibility features, and more. Understanding these settings enables customization of how the Knowledge base site appears and functions, aligning it with your needs and enhancing reader engagement.

For instance, a company managing a software knowledge base customizes the article settings to display contributor names, estimated read time, and social sharing options. They also enable **Show article comments** for user feedback and **Show related articles** to guide readers to relevant content. These settings enhance usability and engagement in the knowledge base.

---

## Configuring the Knowledge base site article settings

To configure the Knowledge base site article settings:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, locate the various accordions that consist of elements displayed on Knowledge base site:

   1. **Accessibility**
   2. **Article header**
   3. **Article right**
   4. **Article bottom**
   5. **Category manager**
   6. **Site header**
   7. **Search settings**
   8. **FAQ**

By default, all article details are automatically shown, and each one can be turned on/off in the **Article settings & SEO** section.

> NOTE
>
> Changes made in **Article settings & SEO** apply to all articles in your Knowledge base site. However, some settings, such as Table of contents or Allow commenting, can be configured for individual articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Article_setting_in_the_Knowledge_base_portal.png)

---

### a. Accessibility

The **Accessibility** accordion includes:

| Feature | Description |
| --- | --- |
| **Enable read out loud** | Turn on this toggle to enable the **Read out loud** feature, which helps users to listen to articles instead of reading them from your Knowledge base site articles. For more information, read the article on [Enhancing accessibility with our read-out-loud feature](/help/docs/text-to-voice-functionality). |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Accessibility-Knowledge_base_portal.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Accessibility_Knowledge_base_site_view.png)

---

### b. Article header

The **Article header** accordion lets you customize header elements displayed at the top of each article on your Knowledge base site. This includes features like contributor lists, estimated read times, and sharing options. These features enhance user engagement by providing quick access to essential tools and information. For more information, read the article on [Article header](/help/docs/article-header).

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Article_header_portal_view.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Article_Header_Knowledge_base_site_view.png)

---

### c. Article right

The **Article right** accordion allows you to choose features displayed in the right sidebar of your Knowledge base site articles:

| Features | Description |
| --- | --- |
| **Show table of contents** | Turn on this toggle and select the desired heading levels (H2, H3, and H4) to display as the Table of contents. Note that H3 and H4 can only be enabled if their parent heading is also enabled.  NOTE  In Document360, H1 is applied to article/page category titles. Hence, the headings starts from H2. |
| **Show article tags** | Turn on this toggle to display tags added to articles. For more information, read the article on [Adding tags](/help/docs/adding-a-new-tag) to an article. |
| **Show article files** | Turn on this toggle to display files attached to articles. For more information, read the article on [Adding files to articles](/help/docs/adding-files-to-articles). |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Article_right_Knowledge_base_portal_view.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Article_right_Knowledge_base_site_view.png)

---

### d. Article bottom

The **Article bottom** accordion configures features displayed at the bottom of Knowledge base site articles includes:

| Features | Description |
| --- | --- |
| **Show article comments** | Turn on this toggle to allow readers to comment on articles using their **Disqus** credentials.  NOTE  Ensure [Disqus integration](/help/docs/disqus) is configured in your Document360 project. |
| **Show feedback form** | Turn on this toggle to display a feedback section for articles. Feedback data is accessible in the **Analytics** () > **Feedback** section. For more information, read the article on [Feedback manager](/help/docs/feedback-manager-overview). |
| **Show Previous/next navigations** | Turn on this toggle to display previous and next navigations between articles at the bottom. If this toggle is turned on, the first article will show only **Next**, and the last article will show only **Previous**.  NOTE  Only articles and category pages appear in this navigation. Index and Folder category types are excluded. |
| **Show related articles** | Turn on this toggle to display related articles added to each article. Select the **Enable dual linking** checkbox to automatically add reciprocal links between related articles. For more information, read the article on [Adding related articles](/help/docs/related-articles).  NOTE  **What is dual linking?**  When dual linking is enabled, if Article-A is added as a related article in Article-B, then automatically Article-B will appear as a related article in Article-A. Save time by using dual linking for adding related articles. With this option, you can avoid adding the related articles in both articles. Instead, you can add a related article to one article and enable dual linking. |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Article_bottom_Knowledge_base_portal_view.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Article_bottom_Knowledge_base_site_view.png)

---

### **e. Category manager**

The **Category manager** accordion includes the following options:

| Feature | Description |
| --- | --- |
| **Show first hierarchical level of categories** | Enable this toggle to expand all main categories by default in the Knowledge base site. When this toggle is turned off, only the first level of the first main category will be expanded by default in the Knowledge base site. |
| **Automatically set article status** | Turn on this toggle to automatically display status tags (New/Updated) for newly published or updated articles.  When this toggle is turned off, no status tags will appear by default when an article is published. Then, it must be added manually. For more information, read the article on [Status indicator](/help/docs/status-indicator).  **Example**: A **New** tag (green) appears for newly published articles, while an Updated tag (orange) appears for edited and republished articles. |
| **Custom status indicator** | Turn on this toggle to add a custom status indicator, such as **Beta**, to articles.  If the Custom status indicator toggle is turned off, the custom status indicator tag is removed from the articles in the Knowledge base site. For more information, read the article on [Setting up the custom status indicator](/help/docs/status-indicator#setting-a-custom-status-indicator). |
| **Show bubble up status** | Turn on this toggle to allow readers to identify categories updated with the latest articles. |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Category_manager_Knowledge_base_portal_view.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Category_manager_Knowledge_base_site_view.png)

---

### f. Site header

The **Site header** accordion includes the **What’s New** feature.

| Feature | Description |
| --- | --- |
| **Show What’s New** | Turn on this toggle to display a **What’s New** () icon, listing recently published or updated articles in the selected workspace. For more information, read the article on [What’s New](/help/docs/document-header). |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-WHats_new_Knowledge_base_portal_view.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Whats_new_Knowledge_base_site_view.png)

---

### g. Search settings

The **Search settings** accordion includes the following options:

| Features | Description |
| --- | --- |
| **Highlight search keywords in articles** | Turn on this toggle to highlight searched keywords within articles in the Knowledge base site. |
| **Enable advanced search** | Turn on this toggle to perform advanced searches across multiple workspaces and languages. For more information, read the article on [Search in Knowledge base site](/help/docs/search-in-knowledge-base-site). |
| **No search result feedback** | Turn on this toggle to display feedback when no search results are found. For more information, read the article on [Search in Knowledge base site](/help/docs/search-in-knowledge-base-site). |
| **Show attachments tab in search** | Turn on this toggle to show attachments tab in search. |
| **Include common words in search** | Turn on this toggle to include common words in search results for broader results. Turn off this toggle for more focused searches. |

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-search_Settings_in_the_Knowledge_base_portal.png)

#### Knowledge base site view

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_screenGIF-Knowledge_base_site_view.gif)

---

### h. FAQ

Expand the **FAQ** accordion to customize the FAQ generator settings at the project level. For more information, read the article on [Setting up the FAQ generator](/help/docs/ai-faq-generator#setting-up-the-faq-generator).

#### Knowledge base portal

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_Screenshot-FAQ_in_the_Knowledge_base_portal_view.png)

---

### FAQs

#### **How do I make only H2 headings appear in the table of contents across all articles in the Knowledge base site?**

To customize the table of contents to display specific level of headings:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, expand the **Article right** accordion.
3. Turn on the **Show table of contents** toggle and select only the **H2** checkbox.

#### **How do I localize variable text in the right sidebar of an article?**

To localize the text displayed in the right sidebar:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Localization & Workspaces** in the Knowledge base portal.
2. In the **Localization variables** tab, expand the **Article right** accordion.
3. Update elements such as Table of contents, Tags, and Files.

   > NOTE
   >
   > By default, the system localizes variables to the respective language.
4. Click **Save**.

#### **How do I localize variable text at the bottom of an article?**

To localize the text displayed at the bottom of an article:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Localization & Workspaces** in the Knowledge base portal.
2. In the **Localization variables** tab, expand the **Article bottom** accordion.
3. Update elements such as:

   * Previous article
   * Next article
   * Related articles
4. Click **Save**.

#### **How do I change the status indicator tag validity?**

To change the validity of status indicator tags for articles:

1. Open the desired article in the **Documentation editor**.
2. Click the **More** () icon and select **More article options**.
3. In the **Status indicator** tab, set the desired validity (1–90 days) in the **Show status for** field.
4. Click **Save**.

#### **How do I change the variable text for status indicators?**

To update the variable text for status indicators in the Category manager:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Localization & Workspaces** in the Knowledge base portal.
2. In the **Localization variables** tab, expand the **Category manager** accordion.
3. Update elements such as New, Updated, Custom, and Deprecated.
4. Click **Save**.

#### **How do I manually set a status indicator for an article?**

To assign a status indicator to an individual article:

1. Open the desired article in the Knowledge base portal.
2. Click the **More** () icon and select **More article options**.
3. In the **Status indicator** tab, choose the desired status.
4. Click **Save**.

#### **What happens if I override an automatically set article status?**

If the **Automatically set article status** toggle is on, project-level settings take precedence over the article level settings, and the status will follow the predefined rules (e.g., **Updated** for republished drafts).

#### **How do I set the status indicator for multiple articles?**

To apply a status indicator to multiple articles at once:

1. Navigate to **Documentation** () > **All articles** in the Knowledge base portal.
2. Select the articles and click **Status indicator** at the top.
3. Choose the desired status and click **Apply**.

#### **How do I choose a background color for a custom status indicator?**

To customize the background color of a status indicator:

1. Navigate to **Settings** ()> **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, expand the **Category manager** accordion and locate the **Custom status indicator**.
3. Click the color option, choose a color, and click the ☑ icon.
4. Hover over the eye () icon to preview the selected color.

#### **How do I enable Bubble up status?**

To enable the Bubble up status in the Knowledge base portal:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** > **Article settings** in the Knowledge base portal.
2. Expand the **Category manager** accordion and turn on the **Show bubble up status** toggle.

#### **Where does the Bubble up status appear?**

The count of articles with **New**, **Updated**, or **Custom** statuses appears next to the category name in folders, indexes, and pages, including subcategories.

#### **How long does the Bubble up status appear?**

The Bubble up status remains visible as long as there are articles in the respective category or subcategory with an active status indicator (New, Updated, or Custom).

* It disappears when all status indicators within the category/subcategory expire.
* Clicking the Bubble up status does not affect its visibility.

#### **How do I localize variables for "What’s New"?**

To modify the "What’s New" text for localized content:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Localization & Workspaces** in the Knowledge base portal.
2. In the **Localization variables** tab, expand the **General** accordion.
3. Update the **What’s New** field and click **Save**.

#### **What happens if I change the article status at the article level when the Automatically set article status option is enabled?**

When the **Automatically set article status** option is enabled, the project-level settings override individual article-level changes:

* If an updated and republished article is manually set to **New** at the article level, the system will still apply the **Updated** status based on the global settings.
* This ensures consistency with the project-wide configuration, even when manual changes are made.

#### **How do I enable breadcrumb navigation for my Knowledge base site?**

#### For Knowledge base site 1.0

1. Navigate to **Settings** ()> **Knowledge base portal** > **Article settings & SEO** in the Knowledge base portal.
2. Expand the **Article header** section, turn on the **Breadcrumb navigation** toggle.

#### For Knowledge base site 2.0

Breadcrumb navigation is enabled by default in Knowledge base site 2.0 and cannot be turned off.

<a id="article-header"></a>

## Article header

**Plans supporting article settings updates for the Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Customize the header elements displayed at the top of each article on your knowledge base site, allowing readers to access features such as contributor lists, estimated read time, and sharing options. These options enhance user engagement by providing readers with quick access to important information and tools.

---

## Enabling the Article header elements

To enable Article header elements, follow these steps:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, expand the **Article header** accordion and turn on the following toggles:

   * **Show article contributors -** Display a list of team members who contributed to the article, allowing readers to view other contributions by each member.
   * **Show read time estimate -**Show an estimated reading time based on an average reading speed of 200 words per minute.
   * **Show Follow button -** Allow readers to follow the article for updates. Read the article on [Follow articles and categories](/help/docs/follow-articles-and-categories) for more information.
   * **Show share options -** Provide quick access to social media sharing options, including Twitter, LinkedIn, Facebook, and Email.
   * **Show print button -** Enable printing of a formatted version of the article.
   * **Show published/updated date -** Show the article’s publication and last updated dates.
   * **Show download as PDF button -** Allow readers to download a well-formatted PDF of the article.

> NOTE
>
> Changes made in the Article header settings apply to all articles at the project level and cannot be customized for individual articles, categories, workspaces, or languages.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/28_ScreenShot-Article_header(1).png "28_ScreenShot-Article_header(1).png")

After enabling these options, it’s helpful to test that each setting displays correctly. We recommend viewing an article as an end-user on the Knowledge base site to ensure the header elements appear as configured.

---

## **Article header elements in the Knowledge base site**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/29_ScreenShot-Article_header(2).png "29_ScreenShot-Article_header(2).png")

|  | Feature | Description |
| --- | --- | --- |
| 1. | **Article contributors** | Displays a list of team members who contributed to the article. Click on a contributor’s name to see all articles they have contributed to within the project. |
| 2. | **Read time estimate** | Displays an estimated reading time at a rate of 1 minute per 200 words. |
| 3. | **Follow button** | Displays a **Follow** () button, allowing readers to follow the article. For more information, read the article on [Follow articles and categories](/help/docs/follow-articles-and-categories). |
| 4. | **Share option** | Displays a **Share** () icon. When clicked, it displays sharing options for social media sites (Twitter (), LinkedIn (), Facebook (), Email ()), each of which can be enabled or disabled individually. |
| 5. | **Print option** | Allows readers to click the **More** () icon, revealing a print option that opens a print preview window. If a printer is set up on the user’s computer, selecting **Print** will produce a formatted copy of the article. |
| 6. | **Published/**  **Updated date** | Displays the article’s published and last updated dates in the knowledge base site. |
| 7. | **Export as PDF** | Allows readers to click the **More** () icon and select **Export** to download a well-formatted PDF of the article. |

---

### Localizing the Article header text

To customize the variable text in the article header based on each language, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Localization & Workspaces** in the Knowledge base portal.
2. Select the **Localization variables** tab.
3. Choose the desired language in the **Select Language** section.
4. Expand the **Article header** accordion.
5. Edit the fields as needed.
6. Click **Save** to apply the changes.

> NOTE
>
> * By default, the variable texts are localized to the respective language.
> * Localization variables here are separate from the Content reuse ([Variables](/help/docs/variables) and [Snippets](/help/docs/snippets)) in Document360.

![Image showing article header section in Localization and Workspaces](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/30_ScreenShot-Article_header.png)

---

### FAQs

**How do I hide the breadcrumbs on the Knowledge base site?**

Breadcrumbs will be visible on the KB site 2.0 by default. However, in KB site 1.0, you get the option of turning on/off the **Show breadcrumb navigation** toggle from the **Article header** accordion in **Article settings & SEO**.

**How do I export a draft or a new article as a PDF?**

To export the draft articles or articles as PDF:

1. Navigate to the draft article in the Knowledge base portal.
2. Click on the **More** () icon near the share option.
3. Click the **Export** **PDF** option to download a neatly formatted PDF document onto your computer's local storage.

**How do I set my default email application for the Share** () **>**  **Email** () **feature on the Knowledge base site?**

When you click the **Share** () icon and select **Email** () in a Knowledge base article, it opens in your browser’s default email application. To set this to your preferred application, like Outlook, follow these steps:

1. Press `Windows + I` to open the **Settings** app.
2. Go to **Apps > Default apps**.
3. Scroll down and select **Choose default apps by protocol**.
4. In the list, find **Mail**.
5. In the **MAILTO** section, click on the current default and choose your preferred email application.

Your email links from the Knowledge base site should now open in the selected app.

**How do I hide the “Print” option on the Knowledge base site?**

To hide the **Print** option in the Knowledge base site:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, expand the **Article header** accordion.
3. Turn off the **Show print button** toggle.

The **Print** option will now be hidden on the Knowledge base site.

**How do I hide the “Export PDF” option on the Knowledge base site?**

To hide the **Export PDF** option in the Knowledge base site:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the **Article settings** tab, expand the **Article header** accordion.
3. Turn off the **Show download as PDF button** toggle.

The **Export PDF** option will now be hidden on the Knowledge base site.

<a id="document-header"></a>

## Site header-What's new

**Plans supporting the What’s New feature**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The "What’s New" feature in Document360 allows users to quickly access recently published or updated articles in the selected workspace.

---

### Enabling or disabling the 'What’s new' option

1. Navigate to **Settings** > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. Expand the **Site header** accordion.
3. By default, the **Show What’s New** toggle will be enabled. You can show or hide the What's New **()** icon on the KB site by turning the toggle on or off.

![Enabling or disabling What's new toggle in the Knowledge base portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshots-Enabling_or_disabling_What's_new.png)

---

## Accessing the What’s new feature

1. Click the Announcement **()** icon on the top right navigation of the Knowledge base site.

   A page will display a list of recent articles published (new and forked) in the selected workspace.
2. Select the desired workspace and language.
3. You can filter the articles by Last 24 hours, Last 7 days, or Last 30 days.

![Accessing the What's new feature in the Knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-accessing_the_whats_new_feature.png)

<a id="follow-articles-and-categories"></a>

## Follow articles and categories

**Plans supporting readers to follow articles and categories**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Follow articles and categories** in Document360 allow users to stay updated with new content and changes in the Knowledge base. By following articles and categories, readers can receive notifications whenever new articles are published or existing ones are updated. This feature helps keep readers informed and engaged with the latest information, ensuring they do not miss important updates.

> For Your Information (FYI)
>
> This feature is available only for **Private** and **Mixed** projects in **KB site 2.0**, which is accessible for projects created after June 10th.

> **NOTE**
>
> The Follow articles and categories feature is applicable only for **Private** and **Mixed projects**.

---

## Enabling the ‘Show Follow button’ from KB Portal

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal**.**

   The **Article settings** page will open by default.
2. In the **Article header** section, turn on the **Show Follow button** toggle.

![Reader notification](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_Reader_Notification.png)

> **NOTE**
>
> By default, the **Show Follow button** toggle is turned on for all new Private and Mixed projects.

---

## Using Follow articles and categories in KB Site

1. Navigate to the desired category and click the **More (•••)** option in the Knowledge base site.
2. Click on **Follow category**.

   A message "Notification turned on" will appear.
3. To follow the article, navigate to the desired article and click **Follow (  ).**

![Reader notification](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-follow_and_Follow_category.png)

When you follow an article, you'll receive email notifications for updates in the following scenarios:

* A new version of an article or a page category is published.
* Any newly published article, page category, or replicated article is published.
* An article or page category is republished.
* A published article is unhidden or recovered from the recycle bin.
* The next version of an article is published via the Zapier and Crowdin integration.
* The next version of an article is published via the API endpoint.

> **NOTE**
>
> * When you follow a category, you will receive email notifications in **30 minutes** if there are any updates in that category. This includes updates to all sub-categories up to level six and all associated articles.
> * In mixed projects, you will see the **Follow category** option. Clicking it will take you to the login page if you are not logged in to the knowledge base site.

Email notifications are not triggered in the following cases:

* When articles or categories are deleted.
* When articles or categories are hidden.
* When the next version of an article is hidden.
* When an article is reordered or moved to another category.
* When the reader doesn’t have view access to the article/category on the KB site.

> NOTE
>
> Readers will be redirected to the respective article on the KB site or to the login page from the email notification.

---

### FAQs

#### How do readers configure their email domain for notifications?

The reader will receive all emails from the configured email domain in **Settings (****)** > **Knowledge base portal** > **Notifications** > **Email domain**. By default, emails will be sent from **support@document360.com** if the email domain is not configured.

#### How do I customize the ‘Follow’ button for the Follow articles and categories?

You can change the **Follow** variable name in **Settings (****)** > **Localization & Workspace** > **Localization variables** > **Article Header.** Enter the desired name in the **Follow** field and click **Save** to save the changes.

#### How do I unfollow a category?

To unfollow a category,

1. Navigate to the desired category and click the **More (•••)** option in the Knowledge base site.
2. Click **Unfollow** to stop notifications. A **Notification turned off** message will appear.

#### How do I unsubscribe from the Follow articles and categories email?

Click **Unsubscribe** in the email and if the reader hasn’t logged in to the KB site, it navigates to the login page. The appropriate article or category will be unfollowed automatically by clicking on the unsubscribe button.

#### Is the ‘Follow Article’ feature available for JWT users?

Currently, the "Follow Article" feature is not available for users with JWT authentication.

<a id="search-in-knowledge-base-site"></a>

## Search in Knowledge base site

**Plans supporting Search in Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Your Document360 knowledge base includes a fast and intuitive search above the articles. Results are filtered by relevance to the search term. They are listed with the name of the article/category, a preview of the search term within the article/category, and the breadcrumb of the article/category. **Advanced search** allows you to segregate the search results with the available filter options. You can perform a combined search across all the workspaces and languages simultaneously. Using **Search attachments**, you can search for content inside PDF attachments in the Knowledge base site.

The search functionality enhances user experience by allowing readers to find relevant articles, attachments, and resources effortlessly. Advanced features, such as filters and keyword operators, streamline the search process, making it indispensable for organizations with diverse and extensive documentation.

---

## Attributes used in the Knowledge base site search

Search results are based on the following attributes:

* Article and category titles
* Tags
* Slug of articles and categories (index and page)
* Breadcrumb
* Text content within articles and categories

> NOTE
>
> **Search priority sequence:** Article title > Associated tags > Article slugs > Breadcrumbs > Article content.

---

## Advanced search

Advanced search helps filter results with various options, enabling combined searches across workspaces and languages.

**Example:** Searching for the `login` keyword across multiple workspaces:

1. Search for the `login` keyword in the Knowledge base site search bar.
2. Select **More article filters**.
3. Apply filters like Workspace, Language, Tags, Contributors, Date, and Categories.

   The search results will populate based on the applied filters.

### Enabling advanced search

To enable the advanced search:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** in the Knowledge base portal.
2. In the Search settings accordion, turn on the **Enable advanced search** toggle.
3. Select the **Include all workspaces in site searches** checkbox to ensure that, by default, the search filter in the Knowledge base site displays **All workspaces** instead of **Current workspace** in the search bar. This allows users to fetch search results from all workspaces automatically.

> NOTE
>
> If the **Enable advanced search** toggle is turned off, the filter options will not appear in the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_New_Screenshot-Enabling_Advanced_Search_in_the_knowledge_base_portal.png)

### Accessing advanced search in the Knowledge base site

1. Enter a keyword in the search bar in the Knowledge base site.

   The related search results will be populated.
2. Click **More article filters** to access advanced search options.
3. Use the available filters to refine results:

| Filter | Description |
| --- | --- |
| **Workspace** | Filter search results by workspace:   * **Current workspace**: Fetches results within the current workspace. * **All workspaces**: Fetches results across all available workspaces. * **Specific**: Allows selecting specific workspaces to limit search results to those. |
| **Language** | Filter search results by language:   * **Current language**: Fetches results in the active language. * **All languages**: Fetches results across all available languages. * **Specific**: Allows selecting specific languages to focus search results on them. |
| **Tags** | Apply this filter to narrow results to articles containing the selected tags. |
| **Contributor** | Filter search results by contributors. Select contributors from the dropdown and apply the filter. |
| **Date** | Filter results by a specific date range such as Last 7 days, Last 30 days, Last 90 days, and Custom range. |
| **Categories** | Select categories to refine the search results to articles or pages belonging to those categories. |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Accessing_advanced_search_in_KB_site.gif)

---

## Search attachments

Search attachments enable users to find content within PDF files in the knowledge base site. When a reader searches for a keyword, two filter tabs appear in the search results:

* **Categories:** Displays search results for the keyword within categories.
* **Articles**: Displays search results for the keyword within articles.
* **API Docs**: Display search results for keywords within API documentation.
* **Files**: Displays search results for the keyword within PDF attachments.

  **Example**: The Search attachments feature enhances search functionality for both readers and team accounts. In the Knowledge base site, if a keyword like SharePoint yields no results in articles, readers can switch to the Files tab to find relevant content within PDF attachments and view them at the right side of the article. In the Knowledge base portal, team accounts searching for a keyword in the Drive can rely on this feature to scan PDF files (up to 10 MB) for the keyword, displaying results even if the file name doesn’t match for relevant PDF content.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_new_Screenshot-Search_attacment_.png)

### Enabling attachment tab in search

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** > **Article settings** in the Knowledge base portal.
2. Expand the **Search settings** accordion and turn on the **Show attachments tab in search** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-enabling_attachment_tab_in_search.png)

> NOTE
>
> * If the **Show article files** toggle is turned off, the **Show attachments tab in search** toggle will be inaccessible. To enable it, expand the **Article right** accordion and turn on the **Show article files** toggle.
> * When the **Show attachments tab in search** functionality is disabled, the search will only operate within the article/page category elements such as title, slug, tags, and content.

---

## No search result feedback

When a search does not return any articles in the knowledge base, it either displays a blank results page or a feedback form if the **No search result feedback** option is enabled. This feedback form allows readers to provide details about what they were looking for. The submitted feedback can be reviewed in the [Search analytics](/help/docs/analytics-search) module, enabling team accounts to assess the input and update the knowledge base as needed.

### Enabling no search result feedback

To enable the **No search result feedback** form,

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** > **Article settings** in the Knowledge base portal.
2. Expand the **Search settings** accordion, turn on the **No search result feedback** toggle.

> **NOTE**
>
> No search result feedback form will be available on the Knowledge base site and the Knowledge base widget.

When no search result feedback form is turned off, a blank result appears for no-result searches.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Enabling_no_search_result_feedback.png)

**Knowledge base site view**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-No_search_feedback_KB_site.png)

---

## Search filters

The **Filter** option, located to the left of the search bar on your knowledge base site, allows you to narrow search results using various filters:

* **Search category titles**: Displays category titles and articles containing the search keyword.
* **Search attachments**: Displays files attachments containing the search keyword.
* **Workspace**: Filters results within the selected workspace:

  + Current Workspace: Searches the active workspace.
  + All Workspaces: Includes all workspaces, including API documentation.
  + Specific: Allows selection of specific workspaces.
* **Language**: Filters results by language:

  + Current Language: Searches the active language.
  + All Languages: Includes all supported languages.
  + Specific: Allows selection of specific languages in your Knowledge base.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Search.png)

---

## Search operator support

Implementing search operators such as quotation marks would allow users to construct precise queries, significantly improving search accuracy and user satisfaction.

* **Double Quotes (**`""`**):**

  Double quotes are used to search for an exact phrase. When you put words inside double quotes, the search engine looks for those exact words in that exact order.
* **Minus Sign (**`-`**):**

  The minus sign is used to exclude certain words from the search results. When you place a minus sign directly before a word (without a space), the search engine will exclude results containing that word.

Let us explore some of the examples,

* `search -recipe` fetches records containing `search`, but not `recipe`.
* `search-recipe` fetches records containing `search` and `recipe` (there’s no exclusion because the minus (`-`) is in the middle of the word).
* `-recipe` fetches every record except those containing `recipe`.
* `-recipe` pasta fetches records containing `pasta`, but not `recipe`.
* `"-recipe"` fetches records containing `“-recipe”` (no exclusion performed).

---

## FAQs

#### What is Advanced search?

Advanced search allows a combined search across all workspaces and languages simultaneously, helping readers locate desired results using available filters.

#### How do I hide the search bar on the Home page?

The search bar of the Home page is visible by default but can be hidden. Hiding the search bar in the header of the home page does not affect its appearance on the knowledge base.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** and select **Customize site**.
2. Select the **Header & Footer** dropdown and then choose **Home**.
3. Click on the **Hero section** and select **Search**.
4. Hover over the **Search** option and click the eye () icon to hide the search bar on the home page.

#### How do I exclude an article from search?

You can exclude an article from searches within your knowledge base or external search engines. For more information, read the article on [Excluding articles from search engines](https://docs.document360.com/docs/excluding-articles-from-searches).

Articles that have been hidden will not appear in your knowledge base site and, therefore, will not be searchable by your readers. However, your team members can search for them in the Knowledge base portal. For more information, read the article on [hiding the article](https://docs.document360.com/help/docs/hiding-article).

> NOTE
>
> Similarly, you can also hide the categories and page categories.

#### Will my search include API documentation results?

In the Knowledge base site search, the **Current workspace** filter will be selected by default. To search within your regular documentation and API documentation as well, you need to select **All workspaces** from the **Filter** option available on the search bar.

However, in Document360 1.0, to search within all workspaces you need to enable the option in your Knowledge base site settings:

1. Navigate to **Settings** () > **Knowledge base site** > **Article settings & SEO** > **Article settings** in the Knowledge base portal.
2. Expand the **Search settings** section, select the **Include all workspaces in site searches** checkbox.

#### How does the search bar behave when RTL languages, such as Hebrew and Arabic, are selected?

When you select an RTL language, such as Hebrew or Arabic, from the language dropdown, the search bar will automatically adjust to align text to the right and take input from right to left.

If multiple languages are selected:

**All selected languages are RTL (e.g., Hebrew and Arabic):** The search bar will maintain the right-to-left input and right alignment.

**A mix of RTL and LTR Languages:** The search bar's behavior will depend on the default language selected. The input will start from the right if the default language is RTL. If the default is LTR, the input will start from the left.

<a id="liking-or-disliking-an-article"></a>

## Liking or disliking an article

**Plans supporting article like or dislike feature**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In the Document360 Knowledge base site, users can like or dislike an article or page category, providing valuable feedback to improve content quality. Users can perform this action multiple times if needed.

Imagine a reader is viewing an article in your Knowledge base site about creating and managing categories for organizing content. The instructions are helpful, but the reader notices that one step is missing a screenshot, which would make the process clearer. The reader can click the **dislike** () icon to submit feedback, explaining that adding a screenshot for step 3 would improve the article.

This feedback process allows readers to directly contribute to enhancing the Knowledge base, ensuring it remains helpful and accurate for everyone.

> NOTE
>
> The undo likes and dislikes feature is supported only in KB Site 2.0 projects. If you’d like to migrate your project to KB Site 2.0, please read the article on [KB site 2.0 Migration](/help/docs/kb-site-20-migration).

---

## Liking or Disliking an article

To like an article:

1. Navigate to the desired article in the Knowledge base site.
2. Scroll down to the end of the article and click the **like** () icon to like the article.

   The **Leave a feedback** panel will appear.
3. Optionally, enter your feedback in the provided space.
4. Select the **Notify me about updates** checkbox and enter your email address if you wish to be notified of updates related to your feedback.
5. Click **Submit.**

   To dislike an article,
6. Click the **dislike** () icon.

   The **Help us to improve this article** panel will appear.
7. Select an existing feedback option or click **Others** to provide custom feedback.
8. If required, select the **Notify me about updates** checkbox and enter your email to receive notifications.
9. Click **Submit.**
10. To undo your action, click the **like** () or **dislike** () icon again.

> NOTE
>
> * Users who dislike an article must provide a comment explaining their feedback; otherwise, the dislike will not be counted.
> * Similarly, readers can like or dislike articles in the Knowledge base widget.
> * In the Public Knowledge base site, you can undo **like** () or **dislike** () actions within 30 days unless you clear your browser cache, which deletes saved data and prevents reversal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-liking_and_disliking_an_Article.gif)

---

### FAQs

**What happens if I click dislike (), provide feedback, and then undo the dislike? What will happen to my feedback in the Feedback manager?**

If you undo a dislike after submitting feedback, the following will occur in the Feedback manager in the Knowledge base portal:

* If the feedback is in an open state, it will be deleted.
* If the feedback is assigned to a team member or in any other state, it will be marked as  **Removed**, indicating that the feedback is no longer active.

**Will undoing a dislike still be recorded in the Analytics section?**

No, once you undo a dislike, the action is canceled and will not be recorded in the **Analytics** () section. This ensures that only active interactions are captured for analysis.

**What happens if I select the "Notify me about updates" checkbox?**

If you select **Notify me about updates** and provide your email, the designated team handling feedback can respond in the Knowledge base portal, and you’ll be notified of any replies related to your feedback.

**Can I provide multiple likes or dislikes on the same article over time?**

You cannot give multiple likes and dislikes on the same article. However, you can change your feedback by simply clicking the opposite button (like or dislike) to switch your feedback status. If you've already left comments, these will remain associated with the new feedback type.

<a id="smart-bar"></a>

## Smart bars

**Plans supporting the use of** **Smart bar****s in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Smart bar** feature in **Document360** allows you to display customizable banners or bars across your Knowledge base site. These bars can convey information, announcements, or messages, tailored to specific conditions such as user location, browser type, or project language settings. By leveraging **Smart bar****s**, you can enhance user engagement and direct attention to critical updates effortlessly.

Imagine you are rolling out a new feature update for your product. To ensure all users are aware, you can create a **Smart bar** to display a notification about the update at the top of every article in the Knowledge base site. You can even localize the bar to show it in different languages based on user preferences.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_New_Screenshot-Smartbars_Knolwedge_base_site_view.png)

---

## **Smart bar** **overview**

The **Smart bar** overview page consists of several key elements:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_New_Screenshot-Overview_of_Smart_bars.png)

1. **Select language**: Displays the global language and any existing project languages along with the number of **Smart bar****s** configured for each.

   For example, **Spanish (2)** means two **Smart bar****s** exists in Spanish.
2. **Status**: Indicates whether a **Smart bar** is active. If the **Status** toggle is turned off, the **Smart bar** will not appear in the Knowledge base site.
3. **Details**: Shows the name, position, and a preview option for each **Smart bar**.
4. **Show rules**: Lists conditions under which the **Smart bar** will appear.
5. **Hide rules**: Lists conditions under which the **Smart bar** will be hidden.
6. **Edit** (): Hover over a **Smart bar** to access the Edit () option.
7. **Delete** (): Hover over a **Smart bar** to delete () it.
8. **Filters**: Use the filter panel to sort **Smart bar****s** by name, location, show rules, or hide rules.
9. **New smart bar**: Click to create a new **Smart bar**.

---

## Creating a new **Smart bar**

To create a new **Smart bar**:

1. Navigate to **Settings** () > **Knowledge base site** > **Smart bar****s** in the **Knowledge base portal**.
2. Click **New smart bar**.
3. In the **Name** field, enter a suitable name.
4. By default, the **Status** toggle is turned on. You can disable it if needed.

#### Configuring the content

5. Expand the **Content** section to define the message.
6. Use the **Global** toggle to set the **Smart bar** visibility for all languages or specific ones.

   1. **Global On**: The message appears across all Knowledge base site pages and languages.
   2. **Global Off**: A language dropdown appears to select specific languages.
7. Add the desired content using basic formatting tools such as Bold (), Italics (), Underline (), Hyperlink (), and Code view ().

#### Customizing **Design and location**

8. Expand the **Design and location** section to personalize the **Smart bar**.
9. Select a position from these options:

   1. **Site top**
   2. **Site bottom**
   3. **Article top**
   4. **Article bottom**

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-four_positions_of_Smart_bar.png)
10. Choose a color theme:

    1. **Light theme**: The background color is grey, and the text color is black.
    2. **Dark theme**: The background color is black, and the text color is white.
    3. **Custom theme**: Customize the background color, CTA background color, text color, and CTA text color using the color picker or by entering Hex, RGB, or HSL codes.

**Advanced display conditions (optional)**

11. Configure visibility rules for showing or hiding the **Smart bar** based on:

| **Condition** | **Description** | **Example** |
| --- | --- | --- |
| **URL** | Define specific URLs to include or exclude. | To display a promotional banner only on the product page URLs of your website. |
| **Query strings** | Use query parameters with operators like Exists, Equals, or Not Equals. | To show a discount code banner when a specific campaign query string is present in the URL. |
| **IP address** | Target specific IP addresses or ranges. | To restrict the visibility of an internal update **Smart bar** to office network IP ranges. |
| **Browser** | Display **Smart bar****s** based on the user’s browser. | To display a compatibility warning for users accessing the site with older browser versions. |
| **Device** | Target devices such as desktops, mobiles, or tablets. | To show a mobile app download banner only for users on mobile devices. |
| **Project** | Configure visibility for specific projects, categories, or tags. | To announce a new feature release to users accessing content in a specific project category. |
| **Language** | Available only if **Global** toggle is turned on. | To display a localized welcome message based on the user’s preferred language. |

12. Select **AND**/**OR** computation for multiple rules (when adding more than one rule):

    * **AND**: All conditions must be true to show/hide the **Smart bar**.
    * **OR**: Any conditions must be true to show/hide the **Smart bar**.
13. Click **Delete** () icon next to each rule to delete that rule alone.
14. Click **Add**.

    The **Smart bar** overview page will display the newly added **Smart bar**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Adding_Smart_bar.gif)

---

### FAQs

#### **How do I edit a** **Smart bar****?**

To modify or update a **Smart bar**,

1. Navigate to **Settings** () > **Knowledge base site** > **Smart bar****s** in the **Knowledge base portal**.
2. Hover over the desired **Smart bar** and click the **Edit** () icon.
3. Modify the name, content, design, or visibility rules.
4. Click **Update** to save changes.

#### **How do I delete a** **Smart bar****?**

To delete a **Smart bar**,

1. Navigate to **Settings** () > **Knowledge base site** > **Smart bar****s** in the Knowledge base portal.
2. Hover over the desired **Smart bar** and click the **Delete** () icon.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="cookie-consent"></a>

## Cookie consent

**Plans supporting the use of cookie consent in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A cookie is a small piece of data stored in a web browser by a website, which the website can retrieve later. In general, **consent** means that users agree to the website's use of cookies for purposes such as analytics, personalization, or targeted advertising. Since the implementation of the EU's General Data Protection Regulation (GDPR), cookie consent has become a critical component of websites and applications. In Document360's knowledge base site, you can add a cookie consent bar or popup for your readers.

---

## Adding a cookie consent message to your knowledge base site

1. Navigate to **Settings** () > **Knowledge base site** > **Cookie consent** in your Knowledge base portal.

   The **Cookie consent** page will appear.

> **NOTE**
>
> Turn on the **Enable the cookie consent on your knowledge base site** toggle and click **Save**. The cookie consent will be visible to your readers.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Cookie_consent_Overview_page.png)

### **Select language**

2. Set the cookie consent message to **All languages** to display it across all languages of your knowledge base site. Otherwise, select your desired language to display the cookie consent in that language.

   The default cookie consent message will appear in the selected language.

> **NOTE**
>
> * Localize the cookie consent message and customize its style for your Knowledge base site.
> * If the cookie consent message is set to **All languages**, it will appear across all languages.
> * If no separate cookie consent is added for a specific language in your project, the **All languages** cookie consent will be displayed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Selecting_languages_for_Cookie_Consent.png)

### **Content**

3. Add your custom cookie consent message using basic text formatting tools such as **bold**, *italics*, underline, or `code view`. You can also add hyperlinks if necessary.
4. To restore the default message, click **Restore default message** at the bottom of the content field.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screnshot-Content_part_in_the_cookie_consent.png)

### **Theme and position**

5. In the **Banner type** field, select either **Bar** or **Popup** to be displayed on your knowledge base site.
6. The **Banner position** varies based on the banner type selected:

   * **Bar**: Choose either **Top** or **Bottom** of the page.
   * **Popup**: Select the position from options such as **Top left**, **Top center**, **Top right**, **Bottom left**, **Bottom center**, or **Bottom right**.

   Since consent is required for site visitors, a CTA(Call to action) is crucial.
7. In the **CTA type** field, choose whether the CTA should be **Text**, **Button**, or **Icon**.
8. In the **CTA text** field, enter the call-to-action text.
9. In the **Banner style** field, select a color theme for the cookie consent banner:

   1. **Light theme**: The background color is white, and the text color is black.
   2. **Dark theme**: The background color is black, and the text color is white.
   3. **Custom theme**: Customize the background color, CTA background color, text color, and CTA text color using the color picker or by entering Hex, RGB, or HSL codes.
10. Use the color picker or enter Hex codes in the **Background color** field to set the banner's background color.
11. Use the **Text color** field to set the banner’s text color.
12. Use the **CTA background color** field to set the background color for the CTA.
13. Use the **CTA text color** field to set the text color for the CTA.
14. Click **Preview** to see a preview of the actual cookie consent message.
15. After you've configured the desired content, theme, and position, turn on the **Enable the cookie consent on your knowledge base site** toggle.
16. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Them_and_position.png)

---

### FAQs

**What is cookie consent?**

Cookie consent refers to users agreeing to let a website use cookie for purposes such as analytics, personalization, or targeted advertising.

**Can I customize the cookie consent message?**

Yes, you can customize the cookie consent message using text formatting tools and adding hyperlinks.

**Is it possible to set the cookie consent message in multiple languages?**

Yes, you can set the cookie consent message to appear in a specific language or in all languages.

**How can I control or disable cookie settings in Document360?**

Currently, Document360 allows customization of the cookie consent banner. However, all cookies added by Document360 are essential to the platform’s functionality. There is no option to disable or decline these cookies.

For more advanced control over cookies, including optional cookies, we recommend using a dedicated cookie management platform.

A European law that establishes guidelines for protecting the privacy and security of personal data, regulating how companies collect, store, and manage such information.

A prompt on a website that encourages users to take a specific action, such as clicking a button, signing up, or downloading content.

<a id="accessing-the-ticket-deflectors"></a>

## Accessing the ticket deflectors in portal

**Plans supporting the use of ticket deflector**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Ticket deflectors are a powerful feature designed to reduce the volume of support tickets by empowering users to resolve their queries independently. By providing self-service options directly within your knowledge base site, ticket deflectors streamline the support process, enabling quicker resolutions and improving overall user satisfaction.

Consider a scenario where a customer encounters an issue while navigating your website. Instead of raising a support ticket, they use the ticket deflector to find a step-by-step troubleshooting guide in the knowledge base site, resolving their issue without contacting support. This not only saves time for the customer but also reduces the workload for your support team.

---

## **Ticket deflectors** overview page

To access the **Ticket deflectors** overview, navigate to **Settings** () > **Knowledge base site** >**Ticket deflectors** in the knowledge base portal.

The **Ticket deflectors** page includes the following elements:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Overview_of_ticket_deflector.png)

1. **Title**: Displays the title of each ticket deflector.
2. **Status**: A toggle that indicates whether the ticket deflector is online or offline.
3. **Last updated by**: Shows the team member who last updated the ticket deflector settings or content.
4. **Last updated**: The date when the ticket deflector settings or content was last modified.
5. **New ticket deflector**: Click **New ticket deflector** to create a new ticket deflector.
6. **Integrate your Helpdesk**: Click **Integrate your Helpdesk** to configure integrations with platforms like Freshdesk or Zendesk.

   Hover over any ticket deflector to access additional options:
7. **Copy** (): Click the **Copy** () icon to generate a link for the ticket deflector. This link allows users to access the ticket deflector form directly online. This icon is available only if the ticket deflectors is active.
8. **Clone**(): Duplicate an existing ticket deflector, including its settings and content, to quickly create a similar form.
9. **Preview in Knowledge base**(): Preview the ticket deflector form as it will appear on the knowledge base site. This helps ensure the content and flow are correct before publishing.
10. **Edit**(): Modify the ticket deflector form's settings, flow, questions, or links.
11. **Delete** (): Remove the ticket deflector from the knowledge base.

> NOTE
>
> * You must set the ticket deflector to offline mode before deleting it.
> * **Ticket deflectors** can only be configured for the main workspace of the project and its languages.

---

## Helpdesk configuration

Ticket deflectors support integration with third-party helpdesk platforms like **Freshdesk** and **Zendesk**. This enables seamless ticket creation directly from the ticket deflector form.

1. Navigate to **Settings** () > **Knowledge base site** >**Ticket deflectors** in the knowledge base portal.
2. Click **Integrate your Helpdesk** to open the configuration panel.
3. Choose one of the following options:

   * **Freshdesk****– Create ticket**
   * **Zendesk****– Create ticket**

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Helpdesk_configuration_panel.png)
4. Configure the selected platform:

   **Freshdesk** **Integration**

   1. Enter the API key and domain URL obtained from **Freshdesk**.
   2. Click **Validate & save** to complete the integration.

> NOTE
>
> For more information on obtaining the API key, refer to this [help article](https://support.freshdesk.com/en/support/solutions/articles/215517-how-to-find-your-api-key).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Freshdesk_configuration_panel.png)

**Zendesk** **Integration**

1. Enter the API key, domain URL, and the **Zendesk** agent’s email address.
2. Click **Validate & save** to complete the integration.  
   Ensure all credentials are accurate for successful validation.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Zendesk_configuration_panel.png)

---

## Adding **Ticket deflectors** in Header and Footer sections

The live ticket deflector form can be added and accessed in the knowledge base site's header and footer sections.

#### Header navigation

To access the Header - Primary navigation, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Expand **Header**,then select **Header navigation**.
5. Click **Add new item** to create a navigation menu.

   The **Add new item** panel will appear.
6. In the **Select type** dropdown, select **Ticket deflector**.
7. Enter a title and select the desired ticket deflector from the dropdown.

   Only ticket deflector forms with an active status will be listed.
8. Select the **Open link in new tab** checkbox to open the link in a new tab.
9. Once done, click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Adding_Ticket_deflector_in_Header_navigation.gif)

To access the Header - Secondary navigation, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.
2. Click **Customize site** to access the design configurations.
3. From the left dropdown, select **Site header & footer**.
4. Expand **Header**,then select **Secondary navigation**.
5. Click **Add new item** to create a navigation menu.

   The **Add new item** panel will appear.
6. In the **Select type** dropdown, select **Ticket deflector**.
7. Enter the desired title in the **Title** field.
8. Paste the desired Ticket’s deflector’s link.
9. Select the **Open link in new tab** checkbox to open the link in a new tab.
10. Once done, click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Adding_Ticket_deflector_in_Header_secondary_navigation.gif)

#### Footer navigation

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** in the Knowledge base portal.

   The **Customize site** page contains all the basic site design configurations.
2. Click **Customize site**.
3. Select **Site header & footer** from the dropdown.
4. Click the **Footer** option.
5. You have two design options for the footer: **Basic footer** and **Custom footer**.

   **Basic footer**
6. Click **Add new link**.
7. Enter the title and paste the desired Ticket deflector’s link.
8. Select the **Open link in new tab** checkbox to open the link in a new tab.
9. Once done, click **Add**.

   **Custom footer**
10. Paste the desired Ticket deflector’s link in the desired code location.
11. Click **Save** and then **Preview** to view the changes on the Knowledge base site.
12. Once done, click **Publish** to apply the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Adding_Ticket_deflector_in_footer_navigation.gif)

### Using form link

The ticket deflector can be added in other relevant places where customer support tickets must be deflected. This will encourage using self-service for troubleshooting and ensure the queries are resolved. Use the copied ticket deflector form link to add the ticket deflector to the knowledge base site.   
You can add the ticket deflector form link to other relevant sections, such as:

* Inside articles or category pages
* Deprecation messages
* Smart bars
* Cookie consent notifications
* Snippets and variables
* Knowledge base home page
* Knowledge base assistant

---

### FAQs

#### How can I copy the ticket deflector form link?

To copy the ticket deflector form link:

1. Navigate to **Settings** () > **Knowledge base site** > **Ticket deflectors** in the Knowledge base portal.
2. Click the **Copy** () icon next to the ticket deflector.

   This link can be shared on websites, social media, or other platforms for direct access to the form.

#### What does the **Clone** option do in Ticket deflector?

The **Clone** () option duplicates an existing ticket deflector form, preserving its settings, questions, and content. You can then customize the cloned form as needed.

#### Can I preview the ticket deflector before publishing it?

Click **Preview in Knowledge base** to view the ticket deflector form as it will appear on the knowledge base site.

#### How can I delete a ticket deflector?

To delete a ticket deflector:

1. Navigate to **Settings** () > **Knowledge base site** > **Ticket deflectors** in the Knowledge base portal.
2. Set the desired ticket deflector’s status to offline.
3. Hover over the ticket deflector and click **Delete** ().

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="adding-a-new-ticket-deflector"></a>

## Adding a new ticket deflector

**Plans supporting the use of ticket deflector**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Ticket deflectors streamline query resolution by helping users find answers independently before reaching out for support. This guide walks you through creating a ticket deflector, from setting up its components to customizing its functionality for user needs.

Imagine you run a SaaS platform with extensive documentation. A user encounters an issue with billing. Instead of submitting a support ticket immediately, the ticket deflector helps the user locate a relevant FAQ or guide on resolving billing issues. If the provided resources don’t solve their problem, they are directed to a tailored contact form to raise a ticket.

> NOTE
>
> In business and enterprise plans you can have multiple ticket deflectors of up to 10.

---

## Creating a new Ticket deflector

To create a ticket deflector, follow these steps:

1. Navigate to **Settings** () >**Knowledge base site** > **Ticket deflectors** in the Knowledge base portal.
2. Click **New ticket deflector**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Creating_a_new_ticket_deflector.png)

### Step 1: Ticket deflector Form Title, Slug, and Description

The ticket deflector form will appear with the default title “**How can we help you?”**

1. Click the **Ticket deflector title** and edit the desired title. Titles cannot exceed 150 characters (including spaces).
2. The **Ticket deflector slug** is autogenerated but can be edited. Slugs cannot exceed 150 characters.

> NOTE
>
> Changing the Ticket deflector’s URL will break any existing references to it.

3. Add a concise description to inform users about the purpose of the ticket deflector.
4. Ensure the **Online** setting is toggled on for the deflector to appear on the Knowledge base site.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Adding_Ticket_deflector_step1.png)

### Step 2: **Context questions**

**Why are** **Context questions** **important?**  
**Context questions** help understand user issues, guide them effectively, and determine the next step in resolution. While called "questions," they can be phrased as statements or prompts based on your audience's needs.

> NOTE
>
> There is no character limit for **Context questions**.

1. Click **Questions** to begin. By default, two questions are provided.
2. For each question:  
   a. Enter the desired text (e.g., *I have a pricing question*).  
   b. Turn on the **Enable search** toggle to require users to search the knowledge base before proceeding.  
   c. Select the **Make search optional** checkbox to allow skipping the search step.  
   d. Choose the next action from the **If user selects this option, go to...** dropdown (e.g., contact form).  
   e. Hover over any question and click the **Delete**() icon to remove unwanted questions.  
   f. Click **Add questions** to include more questions.  
   g. Use the **Reorder**() icon to rearrange the question order.

> NOTE
>
> * At least one qualifying question is mandatory.
> * There are no limits to the number of questions per form.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Context_question_step2.png)

### Step 3: **Suggestions**

In **Suggestions**, adding steps to the Document360 ticket deflector provides simple checkpoint navigation based on user responses. You can guide users directly to the contact form or include additional steps and questions to help them self-serve using the knowledge base.

> NOTE
>
> **Suggestions** are optional for the ticket deflector form. You can create a form with a simple Q&A style or direct users to the contact form or helpdesk ticket based on their responses to the qualifying questions.

#### Creating block steps

1. In the **Suggestions** section, click **Add** to create a block step.
2. Choose one of the following suggestion types:

   1. **Additional question**
   2. **Answer**
   3. **Answer from your knowledge base**

**a.** **Additional question**  
This section is similar to **Context questions** and you can narrow queries further.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Creating_block_steps_Additional_question.png)

1. Enter a title for the block step.
2. Enter the desired question for the block step.
3. Choose the next action from the **If user selects this option, go to...** dropdown (e.g., contact form).
4. Hover over any question and click the **Delete** () icon to remove unwanted questions.
5. Click **Add questions**to include more questions.
6. Use the **Reorder** () icon to rearrange the question order.

**b.** **Answer**  
Enter the desired title and provide a straightforward text answer with basic formatting options (bold, italics, underline, hyperlinks, and code view).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Creating_block_steps_Answer.png)

**c.** **Answer from your knowledge base**  
In this section, you can direct users to a relevant article.

1. Enter the title for the step block.
2. Select the desired workspace in the **Workspace** dropdown.
3. Search and add the article in the **Article** field.

   By default, the next step will be the **Contact form**.

> NOTE
>
> Multiple articles cannot be linked.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Answer_from_your_Knowledge_base.gif)

---

### Step 4: **Help request**

**Contact form**

The next step in a ticket deflector is the contact form. These form fields can be configured or customized to suit the ticket deflector's requirements. You can customize the following field names:

* **Email:** Users will provide their email address for further communication. This is a mandatory field.
* **First Name:** Users will provide their first name. This is a mandatory field.
* **Last Name:** Users will provide their last name. Turn on the toggle to make this field mandatory if required.
* **Telephone:** Users will provide their telephone number. Turn on the toggle to make this field mandatory if required.
* **Description:** Users will describe their issue in this field. This is a mandatory field.
* **Form submission text:** You can update the form submission button text as needed.
* **Allow attachments****:** Turn on this toggle to allow users to upload attachments. A maximum of five attachments, each up to 2 MB, is allowed.
* **Enable captcha****:** Turn on this toggle to enable a CAPTCHA for the form. This protects against bots and spam submissions.
* **After submission message****:** In the **After submission message** accordion, type a custom thank-you message for users after they submit the form. This is a mandatory field and cannot exceed 250 characters, including spaces.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Help_Request_Contact_form.png)

### Step 5: **Ticket submission settings**

**Ticket submission email notification**

In the **Ticket submission email notification** section, you can configure the email subject and the recipients of the notification emails.

1. **Email subject**

   * Enter the desired subject for the email.
   * The email subject cannot exceed 100 characters.
2. **Send notification email to**

   * Add one or more team accounts associated with the project as recipients of the notification email.
   * Click the  button to search and select from the list of team accounts.
3. **These emails** **(adding additional recipients)**

   * Add individual or group email IDs as additional recipients. This is an optional field.
   * There is no limitation on the number of recipients.
   * Enter a valid email ID and press **Enter** on your keyboard.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Ticket_submmision_email_notification.png)

> NOTE
>
> **Mapping Ticket deflector forms to specific emails**
>
> Each ticket deflector form can be mapped to different email addresses within your company.
>
> For example:
>
> * A sales ticket deflector form can send notifications to [**sales@yourcompany.com**](mailto:sales@yourcompany.com).
> * An operations ticket deflector form can send notifications to [**tech@yourcompany.com**](mailto:tech@yourcompany.com).
>
> This feature ensures that relevant departments are notified about submissions or tickets specific to their forms.

**Connect a helpdesk**

From the received ticket deflector, you can create a helpdesk ticket:

1. Expand the **Create helpdesk ticket** accordion and turn on the **Create helpdesk ticket on form submission** toggle.
2. Click **Connect a helpdesk**.

   The helpdesk configuration panel will appear.
3. Select the desired helpdesk application, such as **Freshdesk** or **Zendesk**.
4. Enter the appropriate credentials and click **Validate & save**.

> NOTE
>
> For more information, read the article on [Accessing the Ticket deflectors in portal.](/help/docs/accessing-the-ticket-deflectors)

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-connecting_a_helpdesk.png)

---

### How do I localize the variable text in the ticket deflector?

To localize text in the ticket deflector:

1. Navigate to **Settings** () >**Localization & Workspaces**> **Localization variables** in the Knowldge base portal.
2. Select the desired language.
3. Expand the **Ticket deflector** section and update the desired text(s).

   By default, the variable texts are localized to the respective language.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Localizing_the_ticket_deflector.png)

<a id="integrations-getting-started"></a>

## Integrations in Document360

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 makes it easy to integrate third-party apps and services into your knowledge base, offering over 25 integration options. These integrations provide specialized solutions in the following categories:

* **Analytics**
* **Chat**
* **Comments**
* **Marketing automation**

## Adding a new integration

Follow these steps to add a third-party app or service to your Document360 project:

1. Navigate to **Settings**()> **Knowledge base site** > **Integrations**in the knowledge base portal.
2. In the **Installed integrations** section, you’ll see a list of any existing integrations. You can turn each one on or off directly from this section.
3. Scroll down to view more apps available for integration.
4. Find the app or service you want to integrate and click **Add**.
5. In the **Add new integration** window, choose either **Basic configuration** or **Custom configuration**.
6. Enter the required information, such as the **Description** and **App ID**.
7. Click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Integrations%20-%20Overview%20page.png)

> **NOTE**
>
> The required information (ID or URL) may vary depending on the integration.

For detailed setup instructions for a specific app, click the **Learn more** link in the popup.

Once added, the integration will appear in the **Installed integrations** list.

---

## Integration controls

You can control your integrations from the **Integration overview** settings page ( **Settings**()> **Knowledge base site** > **Integrations**). Here, you can:

* **Status** – Turn integrations on or off without deleting them. Green indicates active, while Gray indicates inactive.
* **Type** – The name and icon of the integration
* **Description** – The custom description given by the user
* **Updated on** – The last log date the integration was added or updated
* **Users** – The team members who added or updated the integration

### Integrations available

| Analytics | Chat | Commenting | Marketing automation |
| --- | --- | --- | --- |
| * [Amplitude](/help/docs/amplitude) * [FullStory](/help/docs/fullstory) * [GoSquared](/help/docs/gosquared) * [Google Analytics](/help/docs/google-analytics-integration) * [Google Tag Manager](/help/docs/google-tag-manager) * [Heap](/help/docs/heap) * [Hotjar](/help/docs/hotjar) * [Mixpanel](/help/docs/mixpanel) * [Segment](/help/docs/segment-integration) | * [Belco](/help/docs/belco) * [Chatra](/help/docs/chatra) * [Crisp](/help/docs/crisp) * [Doorbell](/help/docs/door-bell) * [Freshchat](/help/docs/freshchat) * [Gorgias](/help/docs/gorgias) * Intercom * [Kommunicate](/help/docs/kommunicate) * [LiveChat](/help/docs/livechat) * [Olark](/help/docs/olark) * [Sunshine Conversations](/help/docs/sunshine) | * [Comment](/help/docs/commento) * [Disqus](/help/docs/disqus) | * [Freshmarketer](/help/docs/freshmarketer) * [VWO](/help/docs/vwo) * [Zoho PageSense](/help/docs/zoho-page-sense) |

---

## Custom HTML

Some integrations require adding code snippets to your site. The Custom HTML integration setting allows you to embed multiple third-party widgets into your Knowledge Base.

### Adding Custom HTML code for integrations

1. Navigate to **Settings**()> **Knowledge base site** > **Integrations**in the knowledge base portal.
2. Under **Custom HTML**, select **Add**.
3. Choose where to insert the custom HTML code:

   * **Header**
   * **Begin Body**
   * **End Body**
4. Paste your code snippet into the provided field, then click **Add**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Custom%20HTML%20-%20Integrations.png)

Your code snippet is now active and will appear on the **Integrations** overview page.

---

## Editing or deleting an integration

You can update already added integration's credentials anytime on the **Integrations** overview page.

#### Editing an integration:

1. Hover over the integration and click the **Edit** icon.
2. Update the **Status** (on/off), **Description**, or **App ID/URL**.
3. Click **Update** to save the changes.

#### Deleting an integration:

1. Hover over the integration and click the **Delete** icon.
2. Confirm the deletion by clicking **Delete** in the prompt.

---

### FAQs

#### What should I do if my integration isn’t working, or the toggle button is unresponsive?

First, double-check that the App ID and URL for the integration are correct. If the toggle button is unresponsive, ensure you have a stable internet connection. For app-specific errors, click the Learn more link in the setup window for detailed instructions.

#### What are the best practices for managing my integrations?

Periodically review your active integrations to make sure they’re still relevant to your business needs. Also, keep your integrations up-to-date to avoid any interruptions in functionality.

#### What is the best practice for installing a script to capture analytics on my documentation site?

The recommended approach is to use the **Custom HTML** option in the Integrations section available in the Knowledge base site settings. Add the script in the code space and save your changes. This allows you to seamlessly add your analytics script, ensuring it functions correctly within your documentation site.

<a id="advanced-insertion-rules-in-integration"></a>

## Code inclusion and exclusion conditions

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

After completing an integration setup in Document360, you can configure specific **Code inclusion/exclusion conditions** to manage where and how the integrated application’s code runs. This is useful for targeting specific cases or users.

For example, when integrating Google Analytics, you can set conditions to extract data based on:

* **IP Address** – Limit analytics to a specific IP or IP range.
* **Workspace** – Show analytics based on a selected workspace.
* **Language** – Collect data for specific languages on your site.

You can apply **AND/OR** logic to refine conditions when:

* Multiple conditions are added.
* All conditions should be true.
* Any one condition can be true.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Code%20inclusion%20in%20Integrations%20-%201.png)

### IP address condition

Define conditions based on user IP addresses to allow or restrict data collection from specific locations.

1. On the **Upgrade Integration** window, in the **Select Condition Type** field, choose **IP Address**.
2. From the **Include or Exclude** dropdown, select *Show* or *Hide* based on your needs.
3. In the **IP type** field, choose *Exact* or *Range* to specify a single IP or multiple IP addresses.
4. In the **IP address** field, specify the individual IP addresses or a range.

**Example**: To collect data only from internal users, choose **Exact** in the IP type field to monitor only a specified IP. For a range, set the operator to **Range** and define the IP range you need, allowing data collection across multiple addresses.

### Workspace condition

Set conditions for specific workspaces to control where analytics data is shown or hidden.

1. In the **Select Condition Type** field, choose **Workspace** in the Upgrade Integration window.
2. From the **Include or Exclude** dropdown, select *Show* or *Hide* based on your needs.
3. In the **Select workspaces** field, specify which workspaces to include or exclude. You can add multiple conditions for different workspaces as needed.

### Language condition

Configure language-based conditions to show or hide data collection for selected languages.

1. In the **Select Condition Type** field, choose **Language** in the Upgrade Integration window.
2. From the **Include or Exclude** dropdown, select *Show* or *Hide* based on your needs.
3. In the **Select languages** field, specify the language(s) to include or exclude in the integration. You can add multiple conditions for different languages as needed.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Code%20inclusion%20in%20Integrations%20-%202.png)

<a id="livechat"></a>

## LiveChat

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**LiveChat** is an online customer service tool that uses Artificial Intelligence (AI) to help you connect with your customers instantly. It makes real-time communication easy, allowing your business to respond to customer needs quickly and efficiently.

Integrating **LiveChat** with your **Document360** knowledge base enables customers to get instant support while they browse your content. This not only improves the user experience but also helps your support team handle multiple chats at once, reducing costs and improving customer satisfaction.

![01_Screenshot_Livechat_Integration2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733728804137.png)

---

## Integrating **Document360** and **LiveChat**

To integrate ****LiveChat**** and ****Document360****,

1. From the Knowledge base portal, go to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select **LiveChat** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter your **LiveChat** **ID**.

   > NOTE
   >
   > The **LiveChat** ID is a unique code snippet obtained from the **LiveChat** application. This ID is necessary for integrating LiveChat and **Document360** in the Knowledge Base portal.
4. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
5. Once done, click **Add**.

![2_ScreenGIF-Document360_and_Livechat](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Document360_and_Livechat.gif)

---

## Obtaining the LiveChat ID

#### For existing customers in **LiveChat**

1. Access your **LiveChat** **dashboard** and click **Install** at the top bar.
2. In the **Install chat widget manually** section, find the LiveChat ID within the snippet code, identified with the prefix "*window.lc.license=*".

![3_Screenshot-getting_Live_chat_ID_Existing_customers](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-getting_Live_chat_ID_Existing_customers.png)

#### For a new **LiveChat** user/customer

1. During the initial setup of your **LiveChat** [account](https://www.livechat.com/), you can copy the **LiveChat** **ID** during the installation process.
2. After you complete the LiveChat ID integration setup in your Document360 knowledge base portal, open your **LiveChat** account interface to view and reply to the **LiveChat**s from your users.

   > NOTE
   >
   > With **LiveChat**, you can deploy bots to screen conversations within your documentation site's **LiveChat** chat box, helping to satisfy your customers with their regular queries.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="olark"></a>

## Olark

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Olark** combines live chat functionality with customer data collection to help you improve communication with your users. By integrating **Olark** with **Document360**, you can customize and manage your customers' live chat experience effectively.

**Key Features of** **Olark**

* **Visitor** **Cobrowsing PowerUp**  
  Assist customers directly by navigating their screen in real-time, making troubleshooting and guidance easier.
* **Visitor Geolocation**  
  Gain insights into your customers' locations to provide a more personalized and relevant support experience.
* **Visitor Insights PowerUps**  
  Access detailed customer information, including browsing behavior and interaction history, to enhance your support quality.
* **Transcripts**  
  Maintain a complete record of chat conversations for reference, training, and quality assurance.

---

## Integrating **Document360** and **Olark**

To integrate ****Olark**** and ****Document360****,

1. Log in to the Knowledge base portal and navigate to ****Settings**** **()**> ****Knowledge base site****> ****Integrations****.
2. Select **Olark** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a Description and enter your **Olark** **ID**.

   > NOTE
   >
   > The **Olark** **ID** is a unique code snippet obtained from the **Olark** application, which is necessary for integrating **Olark** and **Document360** in the Knowledge Base portal.
4. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
5. Once done, click **Add**.

![2_ScreenGIF-Integrating_Document360_Olark](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Integrating_Document360_Olark.gif)

---

## Obtaining the **Olark** ID

1. Sign in to your **Olark** account, navigate to **Settings** and select **Channels**.
2. In the **Installation Code** section, click **Copy to Clipboard** to copy the entire code.
3. In the copied code, locate the `olark.identify()` function. The ID is the thirteen-digit number (including dashes) following this function.
4. Copy the **Olark** ID.Use this ID for the integration setup in **Document360**.

Once you complete the **Olark** integration with your **Document360** knowledge base, you can view and reply to your customer chats.

![3_Screenshot-Getting_Olark_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Getting_Olark_ID.png)

> NOTE
>
> You can integrate **Olark**, if you want a lightweight, customizable chat box on your site with built-in automation rules.

---

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="freshchat"></a>

## Freshchat

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Freshchat** is a modern messaging software designed for sales and customer engagement teams to communicate effectively with website visitors. It enables businesses to deploy AI-powered chatbots with seamless integration features.

The platform supports integration with popular communication channels, including **WhatsApp****,** **Apple Business Chat****,** **Facebook Messenger****, and** **LINE**. This allows you to provide a unified messaging experience across your website and mobile app.

**Key Features of** **Freshchat****:**

* **One** **inbox****:** Consolidate messages from different communication platforms into a single inbox, making it easy to manage conversations.
* **Self-Service with AI Bots:** Empower customers with AI-driven chatbots to find answers independently, reducing response times and improving efficiency.

![002_Screenshot_Freshchat_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/002_Screenshot_Freshchat_Integration.png)

---

## Integrating **Document360** and **Freshchat**

To integrated ****Freshchat**** and ****Document360****,

1. From the Knowledge base portal, go to ****Settings**** **()**> ****Knowledge base site****> ****Integrations****.
2. Select **Freshchat** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a Description and enter your **Freshchat** **Token**.

   > NOTE
   >
   > The **Freshchat** **Token** is a unique code snippet obtained from the **Freshchat** application, which is necessary for integrating **Freshchat** with **Document360** in the Knowledge Base portal.
4. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
5. Once done, click **Add**.

![1_ScreenGIF-Integrating_Document360_and_Freshchat](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Document360_and_Freshchat.gif)

---

### Obtaining the **Freshchat** Token

To obtain the **Freshchat** token,

1. Log in to your **Freshchat** dashboard.
2. Navigate to **Settings** > **Admin settings**.
3. Select the **Configuration and Workflows** section and scroll down to **Workflows**.
4. Select **Web Chat Settings** > **Integration Settings.**
5. Under the **Web messenger** section, find and copy the token. This token will be required to integrate **Freshchat** with other platforms.

![2_ScreenGIF-Getting_token_from_freshdesk_for_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Getting_token_from_freshdesk_for_Document360.gif)

After completing the **Freshchat** integration with your **Document360** knowledge base, open your **Freshdesk** account interface to view and reply to your users.

---

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="crisp"></a>

## Crisp

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Crisp** is a shared inbox platform that centralizes all your customer conversations, providing a seamless solution for instant online communication. It enables your team to efficiently handle multiple customer interactions simultaneously while maintaining high customer satisfaction.

**Key features of** **Crisp** **include:**

* **Cost Efficiency:** A single agent can manage multiple conversations at the same time, reducing operational costs.
* **Predefined Answers:** Set automated responses to common customer queries to save time and improve consistency.
* **Enhanced Communication Tools:** Empower your interactions with customers by adding images, buttons, and GIFs to your messages.

---

## Integrating **Document360** and **Crisp**

To integrate **Crisp** and **Document360**,

1. From the Knowledge base portal, navigate to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select **Crisp** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter your **Crisp** **website ID**.

   > NOTE
   >
   > The **Crisp** website ID is a unique code snippet obtained from the **Crisp** application. This ID is necessary for integrating **Crisp** and **Document360** in the Knowledge Base portal.
4. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
5. Once done, click **Add**.

![2_ScreenGIF-Integrate_Document360_and_crisp](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Integrate_Document360_and_crisp.gif)

---

### How do I get the **Crisp** Website ID?

#### For an existing customer in **Crisp**:

1. Open your **Crisp** **dashboard**.
2. Click **Settings** > **Website Settings**.
3. Copy the **Website ID** from the **Setup Instructions** section.

![02_Screenshot_Crisp_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/02_Screenshot_Crisp_Integration.png)

#### For a new customer in **Crisp**:

1. Obtain your **Crisp** **Website ID** during the **Crisp** account installation process. This ID is essential for completing the integration.
2. Follow the **Crisp** integration steps within your **Document360** **Knowledge base portal**.
3. Once the integration is complete, open your **Crisp** account interface to view and respond to chats from your users seamlessly.

> NOTE
>
> You can integrate **Crisp** if you want a chatbot with in-built email campaigns and a reliable mobile application.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="chatra"></a>

## Chatra

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

****Chatra**** is a user-friendly chat software designed for websites, enabling real-time interaction between customers and company representatives. It allows a single agent to handle multiple customer conversations simultaneously, helping reduce operational costs while maintaining high customer satisfaction.

With **Document360**, you can integrate ****Chatra**** into your knowledge base, providing customers with instant access to support as they navigate your content.

![2_Screenshot_Chatra_Integrations](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Chatra_Integrations.png)

---

## Integrating **Document360** and ****Chatra****

To integrate ****Chatra**** and ****Document360****,

1. From the Knowledge base portal, go to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select ****Chatra**** from the list of integrations and click **Add**. The **Add new integration** window will appear.
3. Add a **Description** and enter your ****Chatra** ID**.

   > NOTE
   >
   > The ****Chatra**** ID is a unique code snippet obtained from the ****Chatra**** application. This ID is necessary for integrating ****Chatra**** and **Document360** in the Knowledge Base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![2_Screenshot-integrating_Document360_and_Chatra](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-integrating_Document360_and_Chatra.gif)

---

### Obtaining the ****Chatra**** ID

#### For an existing customer in ****Chatra****:

1. Log in to your ****Chatra**** account to access the ****Chatra** dashboard**.
2. Navigate to **Settings** > **Chat widget**.
3. In the **Chat Widget** window, look for the line that contains `w.Chatra.ID`. The value next to it is your ****Chatra** ID**.

![3_Screenshot-Chatra_ID_chat_widget_existing_user](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Chatra_ID_chat_widget_existing_user.png)

#### For a new ****Chatra**** user/customer:

1. Sign up for a ****Chatra**** account and verify your email address.
2. After email verification, you will receive your ****Chatra** ID** in the confirmation email.

Follow the steps to integrate ****Chatra**** with your **Document360** **Knowledge base portal**. Once the integration is complete, log in to your ****Chatra**** account to view and respond to chats from your users.

![4_Screenshot-Chatra_ID_chat_widget_new_user_customer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Chatra_ID_chat_widget_new_user_customer.png)

> NOTE
>
> Integrate ****Chatra**** with **Document360** to have real-time conversations with your documentation site's users, initiate targeted chats and triggers, know real-time visitors lists, and more. [Click here](https://chatra.com/help/) to know more about the special features that you can reap from ****Chatra**** to your Documentation site.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="door-bell"></a>

## Doorbell

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Doorbell** is an intuitive chat software designed to help you collect, manage, and analyze customer feedback. It streamlines the feedback process, enabling smooth interactions that can lead to increased conversions.

With **Doorbell**, users can enhance their feedback by attaching screenshots, providing additional context for better insights and resolution.

![003_Screenshot_Doorbell_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Screenshot_Doorbell_Integration.png)

---

## Integrating **Document360** and **Doorbell**

To integrate **Doorbell** and **Document360**,

1. From the Knowledge base portal, go to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select **Doorbell** from the list of integrations and click **Add**. The ****Add new integration**** window will appear.
3. Add a **Description** and enter your **Doorbell** **ID** and **Doorbell** **AppKey**.

   > NOTE
   >
   > **Doorbell** ID and **Doorbell** App Key are the unique codes snippet obtained from the Doorbell application. These are necessary for integrating **Doorbell** and **Document360** in the Knowledge Base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![2_Screenshot-integrating_Document360_Doorbell](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-integrating_Document360_Doorbell.gif)

### Obtaining **Doorbell** ID and App Key

#### For an existing customer in **Doorbell**

1. Log in to your **Doorbell** account and navigate to **Settings > Installation Instructions**.
2. In the **Installation Instructions**, find the JavaScript code. The **ID** and **AppKey** are specified within the code.

![3_Screenshot-Getting_Doorbell_ID_and_App_key](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Getting_Doorbell_ID_and_App_key.png)

#### For a new **Doorbell** user/customer

1. Sign up for a **Doorbell** account.
2. During the initial account setup, you will receive your **Doorbell** **ID** and **AppKey**.

After you complete the **Doorbell** integration in your **Document360** knowledge base, open your **Doorbell** account interface to view the feedback from your visitors.

> NOTE
>
> With **Doorbell**'s automatically generated screenshots and sentiment analysis, you can effectively collect, manage, and analyze in-app user feedback from your documentation site. Additionally, you receive instant alert notifications through email or other group notification systems, ensuring timely responses to user feedback.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="gorgias"></a>

## Gorgias

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Gorgias** is a multi-channel helpdesk solution that connects business applications and communication channels, giving support agents a unified view of their customers. It streamlines customer support by centralizing interactions from various platforms into a single interface.

With **Document360**, you can seamlessly integrate **Gorgias** into your knowledge base, enhancing your ability to manage customer queries efficiently.

---

## Integrating **Document360** and **Gorgias**

To integrate **Gorgias** and **Document360**,

1. From the Knowledge base portal, go to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select **Gorgias** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter the **Gorgias** **ID**.

   > NOTE
   >
   > The **Gorgias** ID is a unique code snippet obtained from the **Gorgias** application. This ID is necessary for integrating **Gorgias** and  **Document360** in the Knowledge Base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_Screenshot-Integrating_Gorgias_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_Gorgias_Document360.png)

---

## Obtaining the **Gorgias** App ID

#### For an existing customer in **Gorgias**

1. Log in to your **Gorgias** account and navigate to **More Options** from the **Ticket** dropdown.
2. Select **Settings > Channels > Chat.**
3. Click **Add Chat** and choose the **Any Other Website** option under the integration setup.
4. Click **Create & Customize**.
5. Follow the prompts to customize your chat configuration.
6. Choose the specific **Launcher** for your chat and click **Next.**
7. Once the setup is complete, click **Install Manually** to proceed with the integration.

![2_ScreenGIF-Getting_Gorgias_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Getting_Gorgias_ID.gif)

#### For a new customer in **Gorgias**

1. During the initial setup of your LiveChat account, copy the **Gorgias** **ID** provided during the installation process.
2. Follow the steps to integrate **Gorgias** with your **Document360** **Knowledge base portal**.

Once the integration is complete, log in to your **Gorgias** account to view and respond to user chats seamlessly.

> NOTE
>
> You can integrate **Gorgias** if you need a space where your team members work together to manage, organize, respond to, and report on customer requests (or tickets).

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="belco"></a>

## Belco

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Belco** is a real-time chat software designed for websites, enabling customers to instantly connect with your support team.

By integrating **Belco** with your **Document360** knowledge base, you can provide users with instant support while they navigate your content. Additionally, **Belco** helps reduce operational costs by allowing a single agent to handle multiple customer conversations simultaneously, all while maintaining high customer satisfaction.

---

## Integrating **Document360** and **Belco**

To integrate **Belco** and **Document360**,

1. From the Knowledge base portal, go to ****Settings** ()** > ****Knowledge base site**** > ****Integrations****.
2. Select **Belco** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter your **Belco** **Shop ID**.

   > NOTE
   >
   > The **Belco** Shop ID is a unique code snippet obtained from the **Belco** application. This ID is necessary for integrating **Belco** and **Document360** in the **Knowledge base portal**.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_Screenshot-Document360_and_Belco](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Document360_and_Belco.png)

---

### Obtaining the **Belco** Shop ID

#### For an existing customer in **Belco**

1. Log in to your Belco Chat dashboard and click the **Setup Guide** icon.
2. Click **Install Our Plugin**, enter your shop information, and select **JavaScript** as the installation option.
3. In the generated JavaScript code, find the **Belco** **Shop ID**.

![2_ScreenGIF-getting_Belco_shop_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-getting_Belco_shop_ID.gif)

#### For a new [Belco](https://www.belco.nl/) user/customer

1. During the initial setup of your **Belco** account, copy the **Belco** **ID** provided during the installation process.
2. Follow the steps to integrate the **Belco** **ID** with your Document360 knowledge base portal.

Once the integration is complete, log in to your **Belco** account to view and respond to chats from your users.

![0004_Screenshot_Belco_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/0004_Screenshot_Belco_Integration.png)

> NOTE
>
> You can integrate **Belco** if you want to connect a chatbot with a simple interface and a well-structured platform with a powerful e-commerce plugin.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="sunshine"></a>

## Sunshine Conversations

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

****Sunshine Conversations**** is an API-based modern CRM tool built on **AWS**, designed to help businesses communicate directly with their customers using social media and messaging services.

With ****Sunshine Conversations****, businesses can send messages to customers through social media messaging applications or directly on their website applications. By integrating ****Sunshine Conversations**** with your Document360 knowledge base, you can streamline customer communication and enhance user engagement.

---

## Integrating Document360 and ****Sunshine Conversations****

To integrate ****Sunshine Conversations**** and ****Document360****,

1. From the Knowledge base portal, go to ****Settings**** **()** > ****Knowledge base site**** > ****Integrations****.
2. Select ****Sunshine Conversations**** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter your **App ID**.

**NOTE**

The App ID is a unique code snippet obtained from the ****Sunshine Conversations**** application. This ID is necessary for integrating ****Sunshine Conversations**** and **Document360** in the Knowledge Base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-Integrating_Document360_and_Sunshine](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Document360_and_Sunshine.gif)

---

## Obtaining the ****Sunshine Conversations**** ID

1. Access your ****Sunshine Conversations**** dashboard and complete the initial account setup
2. Go to the **Apps** section in the dashboard and click **Create New App**.
3. Enter a name for your app and any relevant descriptions to help identify its purpose.
4. After filling in the details, save your app. The app will now appear in your **Apps** list.
5. Navigate back to the dashboard and choose the app for which you want to obtain the App ID.
6. Navigate to **Settings** from the dashboard of the selected app.
7. Scroll down to the **App Details** section to find the **App ID**. Click **Copy** to copy the App ID to your clipboard.

> NOTE
>
> If you need API keys, navigate to the **API Keys** section in the same **Settings** menu. Follow the instructions to generate and copy the keys.

![2_Screenshot-Getting_ID_from_Sunshine](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Getting_ID_from_Sunshine.png)

After completing the ****Sunshine Conversations**** integration in your **Document360** knowledge base, you can open the ****Sunshine Conversations**** account interface to set up the backend for message Conversations with social media messaging applications.

> [Click here](https://docs.smooch.io/guide/web-messenger/#styling-the-conversation-interface) to visit the ****Sunshine Conversations**** documentation page for backend setup.

> NOTE
>
> With ****Sunshine Conversations****' communication, you can engage with customers from WhatsApp and SMS, thus ensuring every possibility of customer interaction happens alive.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="kommunicate"></a>

## Kommunicate

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Kommunicate**is a chat software designed for websites, enabling real-time communication between customers and support teams. It provides businesses with an instant online solution to connect with their customers and streamline support operations.

With features like **AI-powered chatbots**, **Kommunicate** enhances customer interactions by automating responses to common queries and improving efficiency. Additionally, it reduces operational costs by allowing a single agent to handle multiple conversations simultaneously while maintaining high customer satisfaction.

By integrating **Kommunicate** with your **Document360** knowledge base, you can deliver seamless support experiences directly within your knowledge base, ensuring faster resolution of customer inquiries.

![1_Screenshot_Kommunicate_Integration1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Kommunicate_Integration%281%29.png)

---

## Integrating Document360 and **Kommunicate**

To integrate **Kommunicate** and **Document360**,

1. From the Knowledge base portal, go to ****Settings**** **()** > ****Knowledge base site**** > ****Integrations****.
2. Select **Kommunicate** from the list of integrations and click **Add**. The ****Add new integration**** window appears.
3. Add a **Description** and enter your **Kommunicate** **ID**.

   > NOTE
   >
   > The **Kommunicate** ID is a unique code snippet obtained from the **Kommunicate** application. This ID is necessary for integrating **Kommunicate** and **Document360** in the **Knowledge base portal**.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-Integrating_Document360_and_Kommunicate](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Document360_and_Kommunicate.png)

---

## Obtaining the **Kommunicate** App ID

#### For existing **Kommunicate** customers

1. Log in to your **Kommunicate** account and navigate to **Settings > Install**.
2. Copy the **App ID** from the JavaScript code in the **Install** **Kommunicate** **on your website** section. The **Kommunicate** **App ID** is the value that follows `appId` in the JavaScript code.

![04_Screenshot_Kommunicate_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/04_Screenshot_Kommunicate_Integration.png)

#### For new **Kommunicate** users/customers

1. During the **Kommunicate** account installation process, you will receive the **Kommunicate** **App ID.** Make sure to copy and save it for use in the integration.
2. Follow the steps to integrate the **Kommunicate** **App ID** with your **Document360** **Knowledge base portal**.

After completing the integration, log in to your **Kommunicate** account to view and respond to chats from your users.

![02_Screenshot_Kommunicate_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/02_Screenshot_Kommunicate_Integration.png)

> NOTE
>
> In the **Kommunicate** AI chatbot, you can qualify leads, schedule meetings, and support your customers 24/7. Thus, you can manage customer conversations more efficiently with less churn rate.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="google-analytics-integration"></a>

## Google Analytics

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Google Analytics** is a widely used **analytics tools** that lets you view website usage metrics such as **conversions**, **traffic sources**, **bounce rates**, **exit percentages**, and more.

You can integrate [Google Analytics](https://analytics.google.com/) with Document360 to know how your users interact with your knowledge base site, highly searched articles, and user locations.

To enable the Google Analytics integration, you'll need a **Google Analytics account** and a **Google Analytics ID**.

> NOTE
>
> You will need administrative privileges on your Google Analytics account to access the ID.

---

## Integrating Document360 and Google Analytics

1. From the Knowledge base portal, go to **Settings**()> **Knowledge base site** > **Integrations**.
2. Select **Google Analytics (New)** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

**Basic configuration** - Configure a standard integration of Google Analytics with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. Google Analytics ID: Type your Google Analytics ID.

> NOTE
>
> The Google Analytics ID is a unique code snippet obtained from the Google Analytics application. This ID is necessary for integrating Google Analytics and Document360 in the Knowledge Base portal.

**Custom configuration** - Configure an advanced integration of Google Analytics with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description  
 b. Type the desired snippet code

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-integrating_Google_Analytics_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-integrating_Google_Analytics_and_Document360.gif)

---

## Obtaining Google Analytics ID

1. From the **Google Analytics account**, go to **Admin > Property Settings > Tracking Code**.
2. This opens the Tracking ID Info page with the snippet, and the **Tracking ID** is what we need to input in the **Google Analytics ID** field back in the Document360 portal.

![002_Screenshot_Google_Analytics_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/002_Screenshot_Google_Analytics_Integration.jpg)

After completing the Google Analytics integration setup in your Document360 knowledge base portal, you can track your knowledge base site performance and get visitor insights.

> NOTE
>
> You can integrate Google Analytics to track user insights like view counts, geolocation, device-wise metrics, behavioral flow, and more.

---

### Helpful links

* [**What is a Tracking ID?**](https://support.google.com/analytics/answer/7372977?hl=en)
* [**What is a Measurement ID?**](https://support.google.com/analytics/answer/7372977?hl=en)
* [**What is a Universal analytics property?**](https://support.google.com/analytics/answer/10220206?hl=en)

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="google-analytics-new"></a>

## Google Analytics (GA4)

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Google Analytics** is a widely used analytics tool that lets you view website usage metrics such as conversions, traffic sources, bounce rates, exit percentages, and more. **Google Analytics (New)** integration in Document360 is specifically for **Google Analytics (GA4)**.

> NOTE
>
> GA4 is the 4th iteration of Google Analytics. It provides you with a **Measurement ID** instead of a **Tracking ID**.
>
> GA3 - Tracking ID begins with the 'UA-'  
> GA4 - Measurement ID starts with the 'G-'
>
> To learn more, visit the [help article](https://support.google.com/analytics/answer/9539598).

---

## Integrating Document360 and Google Analytics(GA4)

You can integrate [Google Analytics (GA4)](https://support.google.com/analytics/answer/10089681?hl=en) with Document360 to know how your users interact with your Knowledge base site, highly searched articles, and user locations. You'll need a **Google Analytics account** and a **Google Analytics ID**to enable the Google Analytics integration.

> NOTE
>
> You will need administrative privileges on your Google Analytics account to access the ID.

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **Google Analytics (New)** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

**Basic configuration** - Configure a standard integration of Google Analytics with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. Google Analytics ID: Type your Google Analytics ID.

> NOTE
>
> Google Analytics ID is the **Measurement ID** of your desired property in Google Analytics (GA4). The Google Analytics ID is a unique code snippet obtained from the Google Analytics application.

**Custom configuration** - Configure an advanced integration of Google Analytics with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-integrating_Google_Analytics_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-integrating_Google_Analytics_and_Document360.gif)

---

## Obtaining Google Analytics ID (Measurement ID)

A Google tag ID is a string of letters and numbers usually beginning with "G-".

1. From the **Google Analytics account**, go to **Admin > Property Settings > Data streams**.
2. Click the desired data stream for which you need the Measurement ID.
3. In the Google tag section at the bottom of the Web stream details page, click **Configure tag settings**.
4. In **Your Google tag** section, copy the **"G-..."** ID appears in the top right.
5. This opens the Tracking ID Info page with the snippet, and the **Tracking ID** is what we need to input in the **Google Analytics ID** field back in the Document360 portal.

> For more information, see [Google Analytics support article](https://support.google.com/analytics/answer/9539598#find-G-ID).

![Obtaining Measurement ID from Google Analytics GA4](https://storage.googleapis.com/support-kms-prod/4vzOnPW93ZjrGTZKfeIJYHXXPmpfCmc0UMHy)

*(Image source: Google support docs)*

After completing the Google Analytics integration setup in your Document360 knowledge base portal, you can track your knowledge base site performance and get visitor insights.

> NOTE
>
> You can integrate Google Analytics to track user insights like view counts, geolocation, device-wise metrics, behavioral flow, and more.

> For information on migration from GA3 to GA4, see [Google Analytics help](https://support.google.com/analytics/answer/10607999?hl=en&ref_topic=10737980)

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="google-tag-manager"></a>

## Google Tag Manager

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Google Tag Manager** is a tag management system. This tool allows the user to easily update measurement codes and related code fragments collectively known as tags in a website or a mobile app. You can use Google Tag Manager to add and update your tags for better analytics and marketing. Google Tag Manager can also be used for site analytics and remarketing.

---

## Integrating Google Tag Manager with Document360

1. From the Knowledge base portal, go to **Settings**()> **Knowledge base site** > **Integrations**.
2. Select **Google Tag Manager** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

**Basic configuration**: Configure a standard integration of Google Analytics with your Knowledge base.

**To configure with Basic configuration:**  
 a. Type a Description.  
 b. Type the Google Tag Manager ID.

> NOTE
>
> The Google Tag Manager ID is a unique code snippet obtained from the Google Tag Manager application. This ID is necessary for integrating Google Tag Manager and Document360 in the Knowledge Base portal.

**Custom configuration**: Configure an advanced integration of Google Tag Manager with your Knowledge base by adding custom events in snippet code.

**To configure with Custom configuration:**  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Google_tag_manager.gif)

---

## Obtaining Google Tag Manager ID

#### For an existing user of Google Tag Manager

1. Click on **add new container** in your **Google Tag Manager** > **Web** (from the Create Container panel) > **Install Google Tag Manager**.

![003_Gif_Google_Tag_Manager_Integrations](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Gif_Google_Tag_Manager_Integrations.gif)

2. Click on **Workspace**, you can find the code on the primary menu bar next to Workspace changes.

![005_Screenshot_Google_Tag_Manager_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/005_Screenshot_Google_Tag_Manager_Integration.png)

#### For a new Google Tag Manager user

1. After the initial Google Tag Manager Account setup, click > **Admin** (next to versions in the primary menu) > **Add Container name**  and **Container platform**.
2. Copy code from the snippet in the **Install Google Tag Manager** popup.

![002_Gif_Google_Tag_Manager](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/002_Gif_Google_Tag_Manager.gif)

After completing the Google Tag Manager integration setup in your Document360 knowledge base portal, you can open your Google Tag Manager account interface to view and access code and related code fragments(tags).

> NOTE
>
> You can integrate Google Tag Manager if you want to update your  tags for conversion tracking, site analytics, and more.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="heap"></a>

## Heap

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Heap**is a **product analytics** tool for analyzing user behavioral data and is convenient for a product and marketing team. It helps with extracting user data and reports in a product that helps to tweak the product.

Some key features of the **Heap** include

**Event feed**: Client-side events will appear in your app's Event Feed as they happen.

**Analysis**: With tools like Graph analysis, Funnel analysis, Users analysis, Retention analysis, Influential analysis, Path analysis, and more, your customer communications will become significantly more effective.

---

## Integrating Document360 and **Heap**

1. From the Knowledge base portal, go to **Settings**()> **Knowledge base site** > **Integrations**.
2. Select **Heap** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

**Basic configuration**: Configure a standard integration of **Heap** with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. **Heap** App ID: Type your **Heap** App ID.

> NOTE
>
> The **Heap** ID is a unique code snippet obtained from the **Heap** application. This ID is necessary for integrating **Heap** and Document360 in the Knowledge Base portal.

**Custom configuration**: Configure an advanced integration of **Heap** with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-Integrating_Document360_and_Heap](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Document360_and_Heap.gif)

---

## Obtaining **Heap** App ID

#### For an existing customer in **Heap**

you can follow the below steps to get the **Heap** **App ID**:

1. Navigate to the **Heap** App dashboard.
2. In the left navigation panel, scroll down and click on **Account** > **Install**.
3. The **Install** **Heap** **on your Development environment** window appears.
4. Select the platform as **Web**.
5. Scroll down to the **Web Installation**, copy the **Heap** ID from the snippet code provided.

![2_ScreenGIF-Existing_customer_in_Heap](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Existing_customer_in_Heap.gif)

#### For a new customer in **Heap**

1. You will be getting the **Heap** App ID during the **Heap** account installation process.
2. After completing the **Heap** integration setup in your Document360 knowledge base portal, open your **Heap** account interface to view and reply to the chats from your users.

![3_Screenshot-new_customer_in_heap](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-new_customer_in_heap.png)

Now you can track and view all your Knowledge base site analytics and user behaviour from **Heap** dashboard.

> NOTE
>
> **Heap** integration helps you with **Heap**’s advanced analytics report, you can analyse user behavioural data and tweak your product features.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="segment-integration"></a>

## Segment

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Segment** is a powerful tool for analyzing user data and will be extremely useful for a product and marketing team to understand user behavior. Good businesses use analytics to have a competitive edge.

**Segment** helps to collect, transform, send, and archive your first-party customer data. **Segment** simplifies managing data and connecting new tools, allowing to spend more time using your data and less time collecting it. You can monitor data from all your other tools, use **Segment** to watch it, and choose the correct data accordingly.

---

## Integrating Document360 and **Segment**

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **Segment** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with a Basic configuration or Custom configuration.

**Basic configuration**: Configure a standard integration of **Segment** with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. **Segment** ID: Type your **Segment** ID.

> NOTE
>
> The **Segment** application. This ID is necessary for integrating **Segment** and Document360 in the Knowledge Base portal.

**Custom configuration**: Configure an advanced integration of **Segment** with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_Screenshot-Integrating_Segment_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_Segment_and_Document360.gif)

---

## Obtaining the **Segment** ID

1. From the **Segment** dashboard, navigate to the left side toolbar and click the **Develop** section.
2. Scroll down, and under **Account info**, you can copy the **Account SID**.

![2_Screenshot-Getting_Segment_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Getting_Segment_ID.png)

After completing the **Segment** integration in the Document360 knowledge base, you can open **Segment** account interface to manage your data and tools.

> NOTE
>
> You can integrate **Segment** to better understand your users with schematized and actionable data to enhance your knowledge base and site experience.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="hotjar"></a>

## Hotjar

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Hotjar** is a behavior analytics tool that helps you get product insights with user-behavior analytics attributes. **Hotjar** provides tools such as heatmaps, session recordings, and surveys that allows to empathize with and understand your users.

---

## Integrating Document360 and **Hotjar**

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **Hotjar** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with a Basic configuration or Custom configuration.

**Basic configuration**: Configure a standard integration of **Hotjar** with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. **Hotjar** ID: Type your **Hotjar** ID.

> NOTE
>
> The **Hotjar** ID is a unique code snippet obtained from the **Hotjar** application. This ID is necessary for integrating **Hotjar** and Document360 in the Knowledge Base portal.

**Custom configuration**: Configure an advanced integration of **Hotjar** with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-integrating_hotjar_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-integrating_hotjar_and_Document360.gif)

---

## Obtaining the **Hotjar** ID

1. From the **Hotjar** overview page, hover over the **Set up** **Hotjar** from the left side and click on it.
2. Under the **Setup** section, you can copy the **Hotjar** **ID** from the snippet next to `hjid`.

![2_Screenshot-Getting_Hotjar_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Getting_Hotjar_ID.png)

After completing the **Hotjar** integration in the Document360 knowledge base, you can open  **Hotjar** account interface to view knowledge base site analytics and performance through features like tracking, highlights, recordings, heatmaps, and surveys.

> NOTE
>
> Why should I integrate **Hotjar**?
>
> You can integrate **Hotjar**, an analytical tool, to give behaviour analytics and feedback data on your customers through tools like heatmaps, session recordings, surveys, and an incoming feedback assistant.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="amplitude"></a>

## Amplitude

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Amplitude** is a **product analytical tool** for analyzing product usage data. It also helps the product and marketing team draw out user behavioural data and reports in a product to tweak it.

Some key features of **Amplitude** are

* **Real-time user analytics** like retention, funnels, revenue analysis, and flexible user segmentation.
* Help analyze user behaviour using their key feature called **microscope**.

---

## Integrating **Amplitude** and Document360

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **Amplitude** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

* **Basic configuration**: Configure a standard integration of **Amplitude** with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. **Amplitude** API key: Type your **Amplitude** API key.  
 c. Use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.

![1_ScreenGIF-Integrating_Amplitude_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Amplitude_and_Document360.gif)

> NOTE
>
> The **Amplitude** API Key is a unique code snippet obtained from the **Amplitude** application. This ID is necessary for integrating **Amplitude** and Document360 in the Knowledge Base portal.

* **Custom configuration**: Configure an advanced integration of **Amplitude** with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.  
 c. Use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.

5. Once done, click **Add**.

#### Session replay and Autocapture implementation

After signing up and activating the account, **Amplitude** prompts you to connect your first application by adding a single snippet. Use the below HTML code snippet to enable Session replay with Autocapture.

```
<script src="https://cdn.amplitude.com/script/AMPLITUDE_API_KEY.js"></script>
<script>
  window.amplitude.add(window.sessionReplay.plugin({sampleRate: 1}));
  window.amplitude.init('AMPLITUDE_API_KEY', {
    "fetchRemoteConfig":true, "autocapture":true
  });
</script>
```

Custom

Copy

For more detailed information about Session Replay implementation, refer to the [Session Replay instrumentation documentation](https://amplitude.com/docs/session-replay/instrument-session-replay) article.

---

## Obtaining the **Amplitude** API Key

#### For an existing customer in **Amplitude**

From the **Amplitude** project dashboard, go to **projects**, and under the **General** section, you can copy the **API Key**.

#### For a new customer in **Amplitude**

1. Register an account in [Amplitude](https://amplitude.com/amplitour/register).
2. You will get the **Amplitude** **API Key** in your initial **Amplitude** Account setup.

![2_Screenshot-getting_Amplitude_app_key](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-getting_Amplitude_app_key.png)

Now you can navigate back to the **Amplitude** dashboard to view analytical reports for the project(site). Also, track and view all the knowledge base site analytics, and user behaviour from here.

---

## FAQ

**Why should I integrate** **Amplitude****?**

You can integrate **Amplitude** to track visitors based on collaborative analytics that helps to fine-tune your product with pre-eminent product analytics reports.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="fullstory"></a>

## FullStory

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**FullStory** is a user-experience Intelligence tool for analyzing user data and will be extremely useful for a product and marketing team to understand user behavior. You can monitor clicks and page transitions easily using **FullStory**.

**FullStory** has special analytics features like real-time user analytics that include retention and funnels. Magic-moments is a unique feature in **FullStory**, which is used to showcase readymade recording sessions of users.

---

## Integrating Document360 and **FullStory**

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **FullStory** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure with Basic configuration or Custom configuration.

**Basic configuration**: Configure a standard integration of **FullStory** with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. **FullStory** ID: Type your **FullStory** ID.

**Custom configuration**: Configure an advanced integration of **FullStory** with your Knowledge base by adding custom events in snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF-Integrating_Document360_and_FullStory](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Document360_and_FullStory.gif)

---

## Obtaining the **FullStory** ID

#### For an existing user of **FullStory**

From the **FullStory** dashboard, navigate to the left corner, click on your work name dropdown, and select **Settings** in it.

On the Settings window, navigate to **FullStory** **Setup** section and Under **Install your** **FullStory** **snippet** you can find the **FullStory** ID:

```
window['_fs_org']

```

Plain text

Copy

#### For a new user of **FullStory**

![2_Screenshot-API_Key_FullStory](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-API_Key_FullStory.png)

After completing the **FullStory** integration in the Document360 knowledge base, you can open the **FullStory** account segment to view the segment-based analytics. Also, track and view all your knowledge base site analytics and user behaviour for your **FullStory** dashboard.

---

## FAQs

**Why should I integrate** **FullStory** **?**

You can integrate **FullStory** to view the site's analytics with segment-based data and online recording sessions.

**What is a** **FullStory** **ID?**

The **FullStory** ID is a unique code snippet obtained from the **FullStory** application. This ID is necessary for integrating **FullStory** and Document360 in the Knowledge Base portal.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="mixpanel"></a>

## Mixpanel

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

****Mixpanel**** is an event-centric analytics tool that tracks user events rather than automatically capturing data.

It enables tracking of:

* Conversion from the **static/dynamic** (feature page) page.
* The dropping rate in the **sales funnel**.
* **Referral sites** with good **ROI**.

**Document360** supports ****Mixpanel**** as one of its many third-party integrations.

---

## Prerequisites before integrating **Mixpanel** with **Document360**

When integrating **Mixpanel** with **Document360**, you can choose from two configuration options:

* **Basic configuration**: This option allows you to set up **Mixpanel** quickly by entering minimal information. However, to enable tracking, you must manually add JavaScript code in the **Customize site** section after completing the integration setup.
* **Custom configuration**: This option provides advanced tracking capabilities, letting you enter JavaScript code directly during the configuration process. For more complex use cases, additional customization can also be applied in the **Customize site** section.

Regardless of the configuration you choose, **no data will be sent to** **Mixpanel** **until JavaScript code is implemented.** Users must write or obtain custom code based on their specific tracking requirements.

> NOTE
>
> **Document360** offers the flexibility to integrate **Mixpanel** in a way that best fits your unique tracking requirements. Since each use case is different, the JavaScript code needed for the integration must be prepared and tested by your team. This approach ensures the code is tailored specifically to your needs and maximizes the effectiveness of your **Mixpanel** integration.

---

## Integrating **Document360** and **Mixpanel**

1. In the Knowledge base portal, navigate to ****Settings**** ()> ****Knowledge base site**** > ****Integrations****.
2. Select **Mixpanel** from the list of integrations and click **Add**.
3. The **Add new integration** window will appear.

**Document360** offers two configuration options for integrating **Mixpanel**:

* **Basic configuration**
* **Custom configuration**

### Basic configuration

Use **Basic configuration** to set up standard **Mixpanel** integration quickly. This option requires adding additional JavaScript code in the **Customize site** section of **Document360** after setting up the integration.

1. Enter the description in the **Add new integration** window.
2. Enter your ****Mixpanel**** ID.
3. Optionally, use the **Code inclusion/exclusion conditions** feature to apply the code based on **IP address**, **Workspace**, or **Language**.
4. Click **Add** to save your integration.
5. Navigate to ****Settings**** ()> ****Customize site****, and click **Custom CSS & JavaScript** to manually add the required JavaScript code to enable data tracking.

![1_ScreenGIF-Integrating_Mixpanel_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Integrating_Mixpanel_and_Document360.gif)

### Custom configuration

Use **Custom configuration** to set up advanced **Mixpanel** integration. This option allows you to add JavaScript code directly in the configuration panel and further customize the integration based on your needs.

1. Enter the description in the **Add new integration** window.
2. Add the desired JavaScript snippet in the configuration window.
3. Optionally, use the **Code inclusion/exclusion conditions** feature to apply the code based on **IP address**, **Workspace**, or **Language**.
4. Click **Add** to save your integration.

For more advanced use cases, you can also add JavaScript code in the ****Customize site**** section.

---

## Obtaining the **Mixpanel** ID

1. [Sign in](https://mixpanel.com/login/) to your **Mixpanel** account.
2. Click **Settings** and then select **Set up** **Mixpanel**.
3. Copy the **Mixpanel** ID.

---

## Sample JavaScript Codes for **Mixpanel** Integration

Below are sample codes for implementing **Mixpanel** tracking. These examples serve as a starting point and must be customized to fit your specific use case.

> NOTE
>
> The following code snippets are examples to illustrate how to configure **Mixpanel** tracking in **Document360**. These are not one-size-fits-all solutions and should be adapted by your development team to suit your requirements.

### Basic page view tracking

Tracks when a user views a page, along with the page URL, title, and referrer.

```
javascriptCopy codewindow.mixpanel.track("Page View", { 
    "Page URL": window.location.href, 
    "Page Title": document.title, 
    "Referrer": document.referrer 
});
```

JavaScript

Copy

### Button click tracking

Tracks when a specific button on the page is clicked.

```
javascriptCopy codedocument.getElementById("subscribeButton").addEventListener("click", function() {
    window.mixpanel.track("Button Click", { 
        "Button Name": "Subscribe", 
        "Page URL": window.location.href 
    });
});
```

JavaScript

Copy

---

### FAQs

#### **What is a** **Mixpanel** **ID?**

The **Mixpanel** ID is a unique code snippet obtained from the **Mixpanel** application. This ID is necessary for integrating **Mixpanel** and **Document360** in the Knowledge Base portal.

#### **Why should I integrate** **Mixpanel****?**

Integrating **Mixpanel** provides robust event-based tracking capabilities, enabling you to analyze user behavior and optimize your Knowledge Base performance.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="vwo"></a>

## VWO

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**VWO** experience Optimization Platform is an all-in-one platform that helps with business metrics. It empowers you to discover insights, test ideas, and improve engagement across the entire customer journey.

The features offered by VWO are

* **Test product features**
* **Extracting user intention details**
* **Push notifications**
* **Creation and optimization of product roadmaps**

---

## How will you integrate Document360 and VWO?

1. From the Knowledge base portal, go to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **VWO** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. You can either configure it with a basic configuration or a custom configuration.

**Basic configuration**: Configure a standard integration of the VWO Account with your Knowledge base.

You need to provide the following details:  
 a. Description: Enter the desired description.  
 b. VWO Account ID: Type your VWO Account ID.

> NOTE
>
> **What is VWO Account ID?**  
> The VWO Account ID is a unique code snippet obtained from the VWO application. This ID is necessary for integrating VWO and Document360 in the Knowledge Base portal.

**Custom configuration**: Configure an advanced integration of VWO with your knowledge base by adding custom events to the snippet code.

To configure with Custom configuration:  
 a. Type a Description.  
 b. Type the desired snippet code.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_ScreenGIF_Integrating_VWO_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF_Integrating_VWO_and_Document360.gif)

### How do I get the VWO Account ID?

#### For a new VWO customer

1 . Register an account in **VWO** and **sign in**.

2 . On Account setup, you will be auto-directed to the **install code section** (you can copy the snippet and paste it into an external text editor).

3. Copy the **var account\_id** from the snippet you copied to your external editor.

![001_Screenshot_VWO_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/001_Screenshot_VWO_Integration.png)

#### For an existing VWO customer

1. Click on your profile picture > **Edit profile**.
2. On the top, copy the **Account ID**.

![2_Screenshot-Getting_VWO_Account_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Getting_VWO_Account_ID.png)

After completing the **VWO** integration in the Document360 knowledge base, you can open VWO account interface to manage web optimization and run test experiments.

> NOTE
>
> Why should I integrate VWO?
>
> You can integrate VWO to get an intuitive point-and-click visual editor for conducting website **A/B testing**. You can also test different variations of the homepage on a small sample of visitors.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="freshmarketer"></a>

## Freshmarketer

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Freshmarketer** marketing automation is a cloud-based conversion optimization solution offering analytics and testing features.

The testing feature in Freshmarketer is A/B testing, and its analytics features are heatmaps and funnel analysis.

The Heat map tool summarizes visitor clicks and mouse movements in real time. The funnel analysis tool helps identify the visitor drop-off on a multi-page website.

Now, you can enjoy the benefits of these features in Document360 by integrating the Document360 knowledge base with Freshmarketer.

---

## How will you integrate Freshmarketer and Document360?

1. From the Knowledge base portal, go to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **Freshmarketer** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. Add a  **Description**  and enter the **Freshmarketer Tag Src**.

   > NOTE
   >
   > **What is Freshmarketer Tag Src?**  
   > The **Freshmarketer Script Tag Src** is a combination of the **Freshmarketer URL** and a **Freshsales Analytics authentication token**, which you can obtain from the Freshmarketer application.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_Screenshot-Integrating_Document360_and_Freshmarketer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_Document360_and_Freshmarketer.png)

---

### How do I get the Freshmarketer Script Tag Src?

1. Open your **Freshmarketer Dashboard**, and click on **Admin settings**.
2. Select the **Tracking and Integrations** section and navigate down to the **CRM Code Library** under Website and Event Tracking.
3. Click **Get started** button next to the **Java** section.
4. You can get the **Script Tag Src** as a URL.

![2_ScreenGIF-Getting_Integrating_ID_from_Freshmarketer](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Getting_Integrating_ID_from_Freshmarketer.gif)

After completing the Freshmarketer integration with your Document360 knowledge base, you can view and manage your contact list, deliver marketing campaigns, and set up automated emails from the Freshmarketer dashboard.

> NOTE
>
> Why should I integrate Freshmarketer?
>
> You can choose to integrate Freshmarketer to upgrade your marketing modules to the next level with list management, marketing campaigns, and automated email marketing.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="zoho-page-sense"></a>

## ZOHO PageSense

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Zoho PageSense** is a conversion optimization and personalization platform that helps you optimize your website, personalize pages to suit your target audience, and boost the overall conversion rate.

With Zoho PageSense, you can do a lot of **tracking**, **analysis**, **optimization**, and **personalization** to your platform.

## How will you integrate Document360 and Zoho PageSense?

1. From the Knowledge base portal, go to **Settings** > **Knowledge base site** > **Integrations**.
2. Select **Zoho PageSense** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. Add a  **Description**  and enter the **Zoho PageSense ID**.

   > NOTE
   >
   > **What is Zoho PageSense ID?**  
   > The **Zoho PageSense ID** is a code you get from the Zoho PageSense Interface application for Document360 and Zoho PageSense Integration in the Document360 Knowledge base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

![1_Screengif-Integrating_Document360_and_Zoho_PageSense](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screengif-Integrating_Document360_and_Zoho_PageSense.gif)

---

### How do I get the Zoho PageSense ID?

1. Register an account in **Zoho PageSense** and **sign in**.
2. Create a **Project**.
3. On the **Project Dashboard**, click on **Snippet** from the top bar.
4. In the Snippet page, click on the **Synchronous tab** and copy the **Zoho PageSense ID** from the snippet.

![2_Screenshot-Getting_Zoho_PageSense_ID](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Getting_Zoho_PageSense_ID.png)

After completing the **Zoho PageSense** integration in your Document360 knowledge base, you can open your Zoho PageSense account interface to view site analytics and performance. Zoho Pagesense allows you to  track, test, analyze, and optimize to improve your product for better conversion.

> NOTE
>
> Why should I integrate Zoho PageSense?
>
> You can integrate Zoho PageSense to get a one-step solution for Complete Conversion Rate Optimization (CRO) to work with different types of experiments like heatmaps, A/B testing, form analytics, and session recording.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="gosquared"></a>

## GoSquared

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**GoSquared** is a platform that will help turn your visitors into loyal customers with a suite of products to connect with your customers.

The integrated suite of products that come with GoSquared are

* **Analytics**
* **Live chat**
* **Automation**
* **Customer Data Hub**

The **Now dashboard** and the **Trend dashboard** are the other two features that give you real-time insights and historical insights on your site performance respectively. [Click here](https://www.gosquared.com/support/articles/1604607-what-is-gosquared) to learn more about GoSquared.

---

## Integrating GoSquared with Document360

1. From the Knowledge base portal, go to **Settings**() > **Knowledge base site** > **Integrations**.
2. Select **Freshmarketer** from the list of integrations and click **Add**.
3. The **Add new integration** panel will appear.
4. Add a  **Description**  and enter the **GoSquared Project Token**.

   > NOTE
   >
   > **GoSquared Project Token** is a code obtained from the GoSquared, and used for integrating Document360 and GoSquared in the Document360 Knowledge base portal.

5. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
6. Once done, click **Add**.

### Obtaining GoSquared Token

1. Register and create an account in GoSquared.
2. Login into your registered GoSquared account.
3. Navigate into your project dashboard in GoSquared and Click **Current project > General**.

![003_Gif_GoSquared_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/003_Gif_GoSquared_Integration.gif)

4. From the **General** page, copy the **GoSquared code snippet**.
5. Now you can get the **GSN code** from the code snippet.

   Existing customers may also follow the same steps.
6. After completing the GoSquared integration with Document360 knowledge base, open your GoSquared account interface to view the analytic reports, and chatbox, and you can prompt users based on the behavioral data.

---

## FAQ

Why should I integrate GoSquared with Document360?

With GoSquared integration, you ca engage with customers using multi-channel messaging, live chat for converting, and web analytics.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="commento"></a>

## Commento

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Commento is a modern commenting interface that can be embedded into your website application. Commento is fast and bloat-free with a modern interface. Refer to the below information to understand how you can bring this commenting interface into your Knowledge base site.

![1_Screenshot_Commento_Integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Commento_Integration.png)

---

## How will you integrate Document360 with Commento?

### Method 1

1. From the Knowledge base portal, navigate to Settings () > **Knowledge base site** > **Integrations**.
2. From the **Comments** section, select **Commento** and click **Add**.
3. The **Add new integration** panel will appear, add a **Description** to it.
4. If required, you can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
5. Once done, click **Add**.

![1_Screenshot-Integrating_Document360_and_commento](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_Document360_and_commento.png)

After completing the **Commento integration** setup in your Document360 knowledge base, head back to your Commento account to see Commento Analytics, and you can also import comments from Disqus if you are using it.

### Method 2

1. On the Commento platform, open the **Staging** tab.
2. Click on **Installation Guide**.
3. In the HTML code displayed under the **Universal Snippet**, replace the URL with the domain of your project.
4. Copy this code.
5. Head back to your Document360 platform and navigate to Settings () > **Knowledge base site** > **Integrations**.
6. Under the **Custom HTML** section, click **Add**.
7. Paste the copied code.
8. From the **Insert code** options, select **At the end of body (below </body>)**.
9. Once done, click **Add**.

   Commento will be integrated with your Document360 Knowledge base.

To know more or explore Commento, please check [**Commento's help articles**](https://docs.commento.io/getting-started).

---

## FAQ

**What do I do when comments like ‘*This domain is not registered with Commento*’ appear on the Knowledge base site?**

To prevent comments from appearing on your Knowledge base site, navigate to Settings () > **Knowledge base site** > **Integrations** and turn off the **Commento** toggle.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="disqus"></a>

## Disqus

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Disqus** is a platform that enables reader commenting and admin moderation on Document360 articles. Integrating Disqus is useful when you want a multilingual-supported comment plugin that can automatically blend into the design of your Knowledge base site.

---

## Integrating Disqus with Document360

1. From the Knowledge base portal, navigate to **Settings** () > **Knowledge base site** > **Integrations**.
2. Click **Disqus** from the list of integrations and click **Add**.

   The **Add new integration** panel will appear.
3. Add a **Description** and enter your **Disqus URL**.

   > NOTE
   >
   > The **Disqus URL** is a unique code snippet obtained from the Disqus Account Interface. This URL is necessary for integrating Disqus and Document360 in the Knowledge Base portal.

   You can use the **Code inclusion/exclusion conditions** feature to insert the code based on certain conditions such as the IP address, Workspace, and Language.
4. Once done, click **Add**.

![1_Screenshot-Integrating_Document360_and_Disqus](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_Document360_and_Disqus.png)

---

### Generating Disqus URL

1. Sign in to your **Disqus account dashboard**.
2. Click **Install Disqus** and then click **Select Platform**.
3. Scroll down and click the **Install manually with Universal code** button.
4. In the **Universal code Install Instructions** window, scroll down and copy the URL from under  `s.src =` in the snippet.

![3_ScreenGIF-Getting_Disgus_URL](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Getting_Disgus_URL.gif)

You can view and reply to your customer chats after completing the Disqus integration with your Document360 knowledge base.

---

### FAQ

#### How does Disqus benefit a Knowledge base site?

Disqus is a platform that enables reader commenting and admin moderation on Document360 articles, providing a multilingual-supported comment plugin that blends into the site's design.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="all-extensions"></a>

## Document360 Extensions - Getting started

**Plans supporting Extensions**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 extensions enhance the functionality of your Knowledge base by seamlessly integrating it with third-party platforms, enabling a more connected and efficient workflow. These extensions allow you to access, manage, and share Knowledge base content directly from other platforms, reducing the need to switch between tools. By integrating Document360 with your existing tools, you can streamline operations and improve collaboration across teams.

## Accessing the Extensions page

1. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** in the Knowledge base portal.

   You can find the list of already configured extensions at the top, if any.
2. Use the dropdown to filter the below list of Extension categories:

   * All extensions
   * Helpdesk
   * Team collaboration
   * Code repositories
   * Translation & browser
3. Click **Connect** on the intended Extension tile.

The extensions available are categorized in the following way:

**Helpdesk**

* [Freshdesk](/help/docs/freshdesk)
* [Zendesk](/help/docs/zendesk-1)
* [Intercom](/help/docs/intercom-integration)
* [Salesforce](https://docs.document360.com/docs/salesforce-integration)

**Team collaboration**

* [Slack](/help/docs/slack)
* [Microsoft Teams](/help/docs/microsoft-teams)
* [Drift](/help/docs/drift)
* [Zapier](https://docs.document360.com/docs/zapier-integration)
* [Make](/help/docs/make-1)

**Code repositories**

* [GitHub](https://portal.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/document/help/view/7678f7e8-9fd8-48a1-ba64-c0d7ed5ffb45)

**Translation and browser**

* [Chrome](/help/docs/chrome-extension)
* [Crowdin](/help/docs/crowdin)
* [Phrase](/help/docs/phrase)

<a id="freshdesk"></a>

## Freshdesk

**Plans supporting integration of Freshdesk extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Document360** knowledge base can be integrated with **Freshdesk** as an extension. With this integration, your support agents can seamlessly carry out customer engagement and ticket conversations using support articles from your knowledge base, without switching between tabs. Support agents can also create articles in the **Document360** knowledge base directly from the **Freshdesk** environment.

---

## Basic setup guide

To establish a connection between **Freshdesk** and the **Document360** knowledge base, follow the below steps:

1. Navigate to ****Settings**** () > ****Knowledge base portal**** > ****Extensions**** in the ****Knowledge base portal****.
2. Scroll down to the **Freshdesk** extension under the **Help desks** section.
3. Click **Connect** on the tile to generate an API token.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Freshdesk.png)

4. Copy the generated API token by clicking on the **Copy ()** icon.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Freshdesk_api_token.png)

5. If you wish to regenerate a token, click **Refresh token**.
6. Navigate to the **Freshdesk** website and log in to your helpdesk.
7. Navigate to **Admin** > **Support Operations** section and select Apps.
8. In the App Marketplace, search for the **Document360** app.
9. Input the copied API token and click **Install**.

You can add multiple API keys from different **Document360** knowledge bases. Click on the Add key button and, using a similar flow, copy and paste the API key in the field and click on Install.

---

### Multi-product support

If your company offers more than one product and maintains different **Document360**-powered knowledge bases for each product, managing multiple **Freshdesk** portals can be cumbersome.

To address this, **Freshdesk** offers **Multi-Product Support**, a feature that allows you to handle customer support activities for different products from a single Freshdesk portal. The agent interface remains the same for these products unless segregated by automation rules. Agents can view tickets from all products in their ticket view.

For seamless integration of multiple **Document360** knowledge bases with a single **Freshdesk** portal, refer to the [Multi-product setup guide](https://support.freshdesk.com/support/solutions/articles/37638-supporting-multiple-products-with-freshdesk).

---

## Feature highlights

### 1. Search for and share articles

* Once the API key has been validated by **Freshdesk**, your **Document360** knowledge base is now successfully integrated with the **Freshdesk** environment.
* **Document360** comes in handy when responding to your support tickets; you can search for and share articles with your customers from your integrated knowledge base with just a few clicks. You can do all this without having to leave the Helpdesk environment.

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Freshdesk_search_bar.png)While responding to open tickets,

1. You can find the **Document360** icon along with the formatting options in the ticket response window.
2. Click on the icon, and you can access the knowledge base on a side window.
3. You would be able to select the workspace and the language of the knowledge base you want to access.
4. Now type in the search term in the search bar, and the relevant article list will be displayed below.
5. When you hover over the article with your mouse pointer, you can find two buttons, +link and +Content.

   * **+Link** inserts the hyperlink of the article inside the mail response
   * **+Content** inserts the entire content of the article inside the mail response

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Freshdesk_link_connect_buttons.png)

#### Automated article search

Apart from the regular search, to make things convenient, **Freshdesk** will automatically search the knowledge base using the ticket title and return matching articles under Recommended articles as soon as you click on the **Document360** icon.

### 2. Create articles for knowledge base from **Freshdesk**

Did you not find the support article you’re looking for (or) feel the need to add a new article to the knowledge base?  
You can now create articles for your knowledge base from the **Freshdesk** environment.

1. Click on the **Document360** icon in the ticket response window.
2. A side window with knowledge base access would be displayed.
3. Now select the workspace and language in which you would like to create an article.
4. Select the **+Create New Article** option at the top of the window.
5. Use the Markdown editor to create the article.
6. Add the title of the article and select the category for the article.

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Freshdesk_create_new_article.png)

> NOTE
>
> You cannot create a new category from **Freshdesk**. You can only add articles to any existing categories.

7. Article body editor

   * Basic text formatting: Headings- H2 and H3, Bold, Italics, Ordered List, and Unordered List
   * Insert: Code block, Hyperlink, Image
   * Toggle between editor and display view

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Freshdesk_new_article_editor.png)

8. Once you have added the content for the article, click **Create**.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="freshservice"></a>

## Freshservice

**Plans supporting the integration of** **Freshservice** **extensions with** **Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Enhance your IT service management with **Document360** knowledge base integration for **Freshservice**. This powerful combination allows your IT support team to effortlessly access and share knowledge base articles during ticket resolution, all without leaving the **Freshservice** interface.

Additionally, support agents can contribute to the knowledge base by creating new articles directly from **Freshservice**.

---

## Basic configuration steps

Follow these steps to set up the **Document360** integration with **Freshservice**:

1. Access your **Document360** account and navigate to **Settings** () > **Knowledge base portal** > **Extensions**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Freshservice_integration.png)

2. Locate **Freshservice** in the **Help desks** section.
3. Click **Connect** to generate an API token.
4. Copy the generated API token.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Freshservice_api_token_details.png)

5. To create a new token, use the Refresh token option.
6. Log in to your Freshservice account.
7. Navigate to **Admin** > **Automated & Productivity** > **Apps**.
8. In the Apps marketplace, search for **Document360**.
9. Paste the copied API token and click **Install**.

You can integrate multiple **Document360** knowledge bases by repeating this process with different API keys.

---

## Feature highlights

### Search and share articles

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Freshservice_search_bar.png)

Once integrated, **Document360**'s knowledge base becomes a powerful tool for resolving IT service requests:

1. When responding to a ticket, locate the **Document360** icon in the response toolbar.
2. Click the icon to open the knowledge base sidebar.
3. Choose the relevant workspace and language.
4. Use the search bar to find articles or browse the auto-suggested articles based on the ticket title.
5. Hover over an article to reveal two options:

   1. **+Link**: Adds the article URL to your response.
   2. **+Content**: Pastes the full article content into your response.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Freshservice_link_connect.png)

#### Automated article search

Apart from the regular search, to make things convenient, **Freshservice** will automatically search the knowledge base using the ticket title and return matching articles under Recommended articles as soon as you click on the **Document360** icon.

### Create articles for knowledge base from **Freshservice**

You can add articles to your knowledge base directly from **Freshservice**:

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Freshservice_create_article.png)

1. Click the **Document360** icon in the ticket response area.
2. In the sidebar, select **+Create article**.
3. Choose the appropriate workspace and language.
4. Provide a title and select a category for the new article.
5. Use the built-in editor to craft your article:

   * Basic formatting options: H2, H3, Bold, Italic, Numbered List, Bullet List.
   * Insert features: Code blocks, Hyperlinks, Images.
   * Toggle between edit and preview modes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Freshservice_text_editor.png)

6. After completing the article, click the **Publish** button to add it to your knowledge base.

> NOTE
>
> New categories cannot be created from **Freshservice**. Articles can only be added to existing categories.

<a id="zendesk"></a>

## Zendesk

**Plans supporting integration of Zendesk extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Zendesk** is a customer support software that allows businesses to effectively manage customer questions, complaints, or any other support requests.

With the Document360 knowledge base integrated into your Zendesk platform, your support agents can provide on-point responses to customer queries by searching for and sharing support articles without toggling between different tabs on their browsers.

Without leaving the Zendesk environment, agents can create articles on the Document360 knowledge base efficiently.

## Basic setup guide

### Installing Document360 on Zendesk

Before you can make use of Document360, the app needs to be installed separately on your Zendesk support console. Visit Zendesk and log in to your account.

1. Go to the [**Zendesk Marketplace**](https://www.zendesk.com/marketplace/) and click on **Apps.**
2. In the newly opened Marketplace tab, enter Document360 in the **Filter apps** field.
3. Click on the app.
4. Click on the **How to install** tab to view the instructions and complete any pre-install tasks.
5. Click **Install** at the top right.
6. If you have multiple accounts, select the intended account and click **Install**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zendesk.gif)
7. To complete the installation, you will have to enter the title, token, and restriction details in the respective fields.
8. Once done, click **Install**.

### Configuring Document360 with Zendesk

To obtain an API token from Document360, follow the steps below.

1. On the Document360 portal, navigate to Settings () > **Knowledge base portal** > **Extensions**.
2. In the **Helpdesk** section, click **Zendesk**.
3. Click **Setup**.
4. In the Generate API token option, click **Generate**.

   A **Generate extension token** popup will appear.
5. Click **Yes**.

   A **Connect with Zendesk** popup will appear where you will have your token displayed.
6. Click on the Copy () iconto copy the token.
7. Click **Close**.
8. Go to the Zendesk platform and fill in the **Title** field.
9. In the **Token** field, paste the copied API token from Document360.
10. Add your preferred restriction settings. By default, this option is turned off.
11. Click **Install**.

    ![To generate token and install Document360 on Zendesk](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Zendesk.gif)

---

## Zendesk federated search

Follow these steps to configure Zendesk Federated Search in Document360:

### **1. Access Zendesk setup in Document360**

1. Navigate to **Settings** ()> **Knowledge base portal** > **Extensions** in the Document360 portal.
2. In the **Helpdesk** section, click **Zendesk**.
3. Click **Setup** to open the **Zendesk configuration panel**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Integrating_the_zendesk_extension.png)
4. In the Zendesk configuration panel, click **Configure** under **Zendesk federated search**.

   The **Setup Zendesk federated search** panel will appear.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Configuring_Zendesk_Federated_search.png)
5. Provide the following details:

   * **Subdomain**:  
     Copy the subdomain from your Zendesk URL.  
     Example: For the URL `https://kovaico3776.zendesk.com/admin/apps-integrations/apis/zendesk-api/settings/tokens/`, the subdomain is `https://kovaico3776.zendesk.com`.
   * **Email ID**:

     1. Go to the **Zendesk overview page**, click **Settings** (), and select **Go to Admin center**.
     2. In the left navigation bar, go to **Channels** and click **Email** to view email configurations.
     3. In the **Support addresses** section, locate your Zendesk account’s admin email address.
   * **Zendesk API Token**:

     1. From the **Zendesk overview page**, click **Settings** (), and select **Go to Admin center**.
     2. In the left navigation bar, go to **Apps and integrations** > **Zendesk API**.
     3. Click **Add API token** and copy the generated token.
6. Click **Validate** to confirm the details you entered.
7. In the **Sync with Zendesk** dropdown, select the desired **workspace** and **language** in your Document360 project to sync with Zendesk.
8. Once the configuration is complete, click **Save**.

   You can now search and access your Document360 articles as external sources within the Zendesk platform.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Setting_up_the_Zendesk_federated_search.png)

---

## Search and share articles on ticket responses

While responding to support tickets, you can use the installed Document360 app to respond to customers. You can directly access the Knowledge base in the Zendesk environment.

![4_Screenshot-Search_and_Share_article.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731052747809.png)

The installed app is available on the right side of the open ticket response window.

1. Click on the **Document360** app.
2. As the Document360 frame loads, Zendesk will automatically search for articles based on the title of the support ticket.
3. You can always type in the search term in the field, and the relevant articles will be listed below.
4. Click on **Link article** of the article you wish to attach.
5. You can also preview the article by clicking on **Preview**.
6. In the preview mode, there will be three options,

   * **Open Document360** - The article opens in a new tab.
   * **Link article** - Insert the article link in your response message.
   * **Insert content** - Add the entire article's content to your response message.
7. This makes it easier and more instantaneous for agents to respond to customers as they don't have to navigate between the Document360 and Zendesk tabs.

   Once you link an article to a response, the **Linked** label isn't in the article list. This helps you identify the article that is already linked to the conversation.

---

## Create an article on the Knowledge base from Zendesk

On the Zendesk platform, you can create articles in your Knowledge base, without the need for additional team accounts.

![5_Screenshot-Creating_Articles_From_Zendesk.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Creating_Articles_From_Zendesk.png)

1. Click **Create an article** in the Document360 app frame or click on the plus (**+**) icon.
2. Add the **Title** of the article and select the **category or subcategory** in which you want to place the new article.

> NOTE
>
> You can create root-level categories and subcategories on your knowledge base from Zendesk.

3. You can author the content of your article in the Markdown editor.
4. In the **Article body editor**, basic text formatting such as headings (H2 and H3), Bold, Italics, Ordered list, and Unordered list, and **Insert** options such as code block, Hyperlink, and Image are available.
5. Once done, click **Create**.

   The article is created in a **draft** state, allowing your editors to review and enhance it before publishing it on the Knowledge base.

### Document360 quick launch in the reply window

* In the chat controls at the bottom, you can find the Document360 icon as the **D** logo.
* Click on it, and the module opens

![6_Screenshot-quick_Launch.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731058817733.png)

1. Select the Document360 workspace and language you want to refer to.
2. The relevant articles appear when you use the search.
3. From this window, you can either:  
    **Link article** - to share the article's Document360 URL  
    (or)  
    **Insert article** - to insert the article's content in the response
4. Click on the plus (**+**) icon to create articles for your Document360 Knowledge base from Zendesk.

---

## Removing Document360 from Zendesk

To uninstall a configured Document360 application from Zendesk, follow the steps below:

1. On the Zendesk platform, from the left navigation pane, navigate to **Apps and integrations** > **Apps** > **Zendesk Support apps**.

   The **My Apps** page will appear.
2. You can find the list of apps currently installed.
3. Hover over the Document360 app.
4. Click on the settings () icon and then click **Uninstall**.
5. In the **Uninstall App** prompt window, click **Uninstall App.**

---

## FAQ

**Can I push multiple articles from Zendesk to Document360 simultaneously?**

You can transfer articles from Zendesk to Document360 but the process involves pushing articles one at a time, individually.

<a id="intercom-integration"></a>

## Intercom

**Plans supporting integration of Intercom extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Intercom is a conversational and messenger-based business solution provider. It is a SaaS product that enables effective customer communication using chatbots, live messaging, etc.

You can use Intercom with Document360 to provide real-time support for your website users by searching and sharing articles (link or article content) from your Document360 Knowledge base within the Intercom chat box.

**Prerequisites:** To enable the Intercom messenger integration in Document360, you will need an Intercom account and the Intercom workspace ID associated with that account.

---

## Basic setup guide

To integrate Intercom with your Knowledge base portal, follow the below steps:

1. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** in the Knowledge base portal.

   You can find the **Intercom** under the Helpdesk section.
2. Click **Connect** on the tile to generate an API token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Intercom.png)
3. You are redirected to the **Intercom** page.   
    If you are not logged in, then the **Intercom sign-in** page will appear.
4. On the authorization page, click **Authorize access**.

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-Extension_Intercom_Installing_the_app_Authorization_popup.png)

6. You will be redirected to the **Extensions** page on Document360.
7. Click the Edit () icon in the Intercom tile.
8. Choose the workspace and language from the dropdown.

   The selected workspace and language will be added to the Document360 app on Intercom.

If you wish to remove the Intercom integration from your Document360 portal, follow these steps:

1. On the Intercom page, click **Settings ()** from the left navigation sidebar.
2. Click open the **Integrations** dropdown and select **App Store**.
3. Under the **Manage** section, click **Your installed apps**.

   You can find the Document360 app.
4. Click on the Document360 app tile and scroll down to find the **Uninstall** button.
5. Click **Uninstall** and the Intercom integration will be removed and no longer available in your Document360 portal.

---

## Search for and share articles in chat response

When a customer or website user tries to initiate the chat support conversation by clicking on the **Intercom** messenger () icon on your web page, you will get a notification on the Intercom workspace. Your support agent or you can respond to the conversations from the Intercom workspace.

You can also search and share an article with the user on the Intercom platform. Follow the below steps in that instance:

1. Click the Document360 icon, and a small search window appears.
2. Type the keyword or question in the search bar and press Enter.
3. The top three relevant articles from your knowledge base are listed.

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732005752060.png)

4. If there are more relevant articles, click on the **see more** option.
5. Click on the intended article, and it will be inserted in your chat window as an assistant or a sharded article.

   This action enables you to quickly share the article with the customer within the ongoing chat conversation.
6. Click either the **Send** or **Send and Close** button.

   The customer receives the article assistant or the shared article in the chat.
7. The article will open in a separate tab when the customer clicks on the assistant.

   With this, you can respond by either sharing an article from the Knowledge base or sending an Article search app assistant, allowing customers to search for articles themselves.

> NOTE
>
> When an article link is clicked in the Intercom chat, it opens within the chat box.

## Article search app assistant

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732006699477.png)

Apart from searching and sharing an article with the users, you or your agent might also need to add an article from the Intercom workspace to your knowledge base.

Follow the steps below to create an Intercom article that reflects on your Document360 portal.

1. Click on the Document360 icon available in the chat response options in line with the **Send** button.
2. A small Document360 app assistant opens, where you can find the **Create an article** option with the following fields,

* Article title - give a suitable title for the article
* Article body - give a suitable body content for the article
* Category - choose a suitable category from the dropdown

3. Fill in the required fields.
4. Click **Create article**.

![image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/001_Screenshotnew_Intercom_Extension.png)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="salesforce"></a>

## Salesforce

**Plans supporting integration of Salesforce extension with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
| **✗** | **✗** | Add-on |

Document360 integration within the Salesforce console enhances and equips your support agents with a robust knowledge base while serving customers. With the Document360 app integrated into the Salesforce console, users and support agents within your organization can search for and view articles from your knowledge base directly within the console. They can also create new articles for your knowledge base on the go, directly from the Salesforce environment.

---

## Searching and managing Knowledge base content in Salesforce

### Knowledge base

* In the **Knowledge Base** tab, you can search for and view articles and categories within your knowledge base.
* Utilize the dropdown menus located at the top right of the section to select your knowledge base's workspace and language preferences.
* Options such as **Copy link** and **Open article** are provided for each article and category, excluding folder categories.

### Searching for articles and categories

You have the ability to search for articles and categories using various parameters such as name, content, tag, and slug within the Search field.

* Enter your search term, and relevant results for articles and categories will be displayed.
* Click the desired article or category to access and review the information. Upon clicking, the selected article or category will be presented in the reader's view.
* You can use the **Filter** field to refine your search specifically by the name of articles and categories.

### Reader view

To access and read articles or look up information, simply click on any search result or navigate to the article/category using the category manager. Upon clicking, the selected article/category will be displayed in the reader's view. This functionality applies to all articles and categories, excluding folder categories.

You have the option to copy the entire article or specific excerpts for use in your responses or communications.

* **Copy link**: Click the Copy icon located at the top right of the section to copy the link to the article/category page. This link can be pasted into your responses or any input within the Salesforce environment.
* **Open site**: To view the article/category on your Knowledge Base site, click the Open Article icon adjacent to the Copy icon. This action will open the Knowledge Base site view of the article/category in a new tab.

![6-ScreenGIF-Search_and_share_article_feature_in_Salesforce-min](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6-ScreenGIF-Search_and_share_article_feature_in_Salesforce-min.gif)

---

## Basic setup guide

You need a Salesforce account to perform the below steps to set up a connection between Salesforce and Document360. If you are a registered Salesforce user (Salesforce Lightning platform account), skip this step and go directly to the Installation step.

### Create a Salesforce account

1. To sign up for Salesforce, go to the [**Sign up page**](https://www.salesforce.com/in/form/signup/freetrial-sales/).
2. Enter the details required and click **Start my free trial**.
3. Visit the Salesforce pricing page to choose and purchase plans that suit your needs.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Salesforce.png)
4. You will receive an email with the verification link, account URL, and username on your registered email. Click the **Verify Account** link in the mail.
5. Enter the verification code you received in your mail inbox and click the **Verify** button.

> NOTE
>
> The verification code will be sent via another mail.

You will be redirected to the Salesforce Home page.

### Install the Document360 app on Salesforce

Use the below link to install the Document360 app.

1. Go to [AppExchange page](https://appexchange.salesforce.com/listingDetail?listingId=a0N4V00000GYmjZUAT&tab=e).
2. Click **Get It Now**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Salesforce.png)
3. Log in with your Trailblazer account.
4. Select the desired Salesforce project space:

   * **Install in Production** - To install the Document360 application in the production environment of your Salesforce project.
   * **Install in Sandbox** - To install the Document360 application in the sandbox environment of your Salesforce project.
5. Review the installation details and click **Confirm and Install**.
6. Enter your Salesforce credentials and click **Log In**.
7. Select from any one of the three options provided:

   * **Install for admins only** - To provide Document360 application access for only admins.
   * **Install for all users** - To provide Document360 application access for all users.
   * **Install for specific profiles** - To provide Document360 application access to specific user profiles.

> NOTE
>
> This action will determine the Document360 availability for the users within the Salesforce application.

7. Click the **Install** button.
8. Wait for the Installation complete prompt and click **Done**.

### Add a Visualforce page in the Salesforce developer console

Now, you must add the code provided below in your Salesforce developer console to create a Visualforce page.

1. Search for **Visualforce pages** in the **Quick find** field at the top left and select the **Visualforce pages** option in the search results.
2. Click the **New** button.
3. Type the Label, Name, and Description of the page.
4. Select the **Available for Lightning Experience, Experience Builder sites, and the mobile app** checkbox to enable it.
5. Paste the below code into the **Visualforce Markup** section.

```
<apex:page standardController="Case"> <apex:canvasApp applicationName="Document360" namespacePrefix="Document360" height="800" width="750px"/> </apex:page>
```

Markup

Copy

The height and the width of the application can be edited in pixels. For example, Height = “800px“ width = “750px“.

6. Click the **Save** button at the top.

![4-ScreenGIF-Adding_visualforce_page_in_developer_console-min1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4-ScreenGIF-Adding_visualforce_page_in_developer_console-min%281%29.gif)

---

## Authorize Salesforce integration from your Document360 portal

Login to your Document360 portal to authorize the Salesforce integration.

1. Navigate to the Document360 portal.
2. Go to Settings () > **Knowledge base portal** > **Extensions** > **Salesforce** under the Helpdesk section.

> NOTE
>
> Salesforce is an addon purchase in your Document360 project. Click **Buy now** to purchase.

3. Click **Connect**.
4. Select the authorization type:

   * **Live** - To perform authorization for your production project in Salesforce.
   * **Sandbox** - To perform authorization for your sandbox project in Salesforce.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Salesforce.png)
5. In the **Allow access** window, click **Allow** and wait for a few seconds.
6. Now, you can find the status as ‘*Project connected to Salesforce…*’ in the Salesforce assistant. You can also find the Salesforce account URL associated with your project.
7. Once configured, click **Detail** button on the Salesforce tile to view the configuration information.
8. Click the Delete () icon if you want to remove the configuration.

---

## FAQs

**What is the technical architecture of the Document360 and Salesforce integration?**

The Document360 and Salesforce integration involves utilizing APIs provided by both platforms to enable seamless data transfer and synchronization.

**Which APIs are used for integration, and how are they authenticated?**

Both Document360 and Salesforce offer REST (Representational State Transfer) APIs. Authentication is typically managed through API keys, OAuth tokens, or other secure methods to ensure data confidentiality and integrity.

**Can custom fields in Document360 be integrated with custom objects in Salesforce?**

Yes, custom fields in Document360 can be mapped to custom objects in Salesforce, allowing for a more tailored integration based on specific organizational requirements.

**How is document versioning handled during synchronization?**

Document versioning may involve tracking changes in Document360 and updating corresponding records in Salesforce. The integration should handle versioning in a way that maintains data accuracy and consistency.

**What security measures are in place to protect data during the integration process?**

Security measures may include data encryption during transit, secure API authentication, role-based access controls, and compliance with industry-specific standards to safeguard sensitive information.

**What steps are involved in upgrading the integration when new versions are released?**

Upgrading the integration involves reviewing documentation for any changes in APIs or features, testing in a staging environment, and ensuring compatibility before deploying the update to the production environment.

**Is it possible to have Salesforce as IdP with either SAML/OpenID SSO(Single Sign On)?**

Yes, it is possible to use Salesforce as an IdP with either SAML/OpenID.

<a id="cases-page"></a>

## Cases page

**Plans supporting integration of Salesforce extension with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
| **✗** | **✗** | Add-on |

In Salesforce, a Case refers to a customer query, feedback, or concern. Support agents use cases as reference points to enhance service delivery. Customers may reach out through various channels such as phone, email, web, or social media platforms.

Integrating Document360 with the Cases home page on Salesforce streamlines access to knowledge base articles directly within the Salesforce console. This integration facilitates quicker resolution of customer issues by providing agents with relevant information at their fingertips.

---

## Integrating Document360 and Cases home page

To set up a connection between Document360 and Cases in Salesforce, follow the below steps:

1. From the Salesforce home page, navigate to **Service**, then select **Cases**.
2. The recently added cases are displayed on the Cases home page. If you don't have any active cases, you can create a new one.
3. To add a new case, click **New** at the top right.

   In the pop-up window, you can provide details about your new case, such as its nature, customer information, case origin, priority, and more.
4. Click **Save**.

   Once the desired case is selected, its overview page will appear.
5. Click the Quick settings icon at the top right and select **Edit Page**.
6. In the Quick Find search bar, type **Lightning App Builder** to access the Lightning App Builder page, where you can customize your cases page with drag-and-drop components.
7. Search for **Visualforce** in the Lightning App Builder and drag the Visualforce component onto the design page. Adjust the component's height in pixels as required in the right section.

> NOTE
>
> Make sure to utilize the exact or larger height pixel size specified during the creation of the Document360 Visualforce page. For more information, refer to the article on [Salesforce](https://docs.document360.com/docs/salesforce).

8. The Document360 app is added to the page. You can add, delete, or reposition the different components on the page.
9. Once done, click **Save**.
10. An activate component prompt appears. Click the **Activate** button.
11. Now navigate back to the **Cases** page, and the knowledge base section is added.

![5-ScreenGIF-Adding_visualforce_component_in_Cases_page-min1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5-ScreenGIF-Adding_visualforce_component_in_Cases_page-min%281%29.gif)

### Create Knowledge base articles in Salesforce

After integration, without leaving the Salesforce environment, you can directly create an article for your knowledge base.

1. Click the **Create article** tab.
2. Enter the title of the article.
3. Select the desired category where you want the new article to be placed.
4. Provide the article content in the Content section. You can utilize markdown syntax in this section.
5. Once you've finished, click the **Create article** button at the bottom.

> NOTE
>
> The newly created article will be in **draft state**. An admin, owner, or editor can then access the Document360 portal to review and publish the new article.

---

## Recommendations

* Document360 automatically retrieves articles relevant to your case and presents them in this tab. These articles are sourced based on keywords found in the **Subject** field of the case.
* By default, articles from the main workspace and default language are showcased as recommendations. However, you have the flexibility to adjust the workspace and language preferences using the dropdown menu located at the top widget.
* This section displays up to five articles. Each article is accompanied by its title, a brief content excerpt, options to copy the content, and the ability to open the article in a new tab.

![8_Screenshot-Recommended_tab_for_Salesforce_cases_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731245955408.png)

<a id="slack"></a>

## Slack

**Plans supporting integration of Slack extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

is a cloud-based team communication platform that helps different teams in an organization work together seamlessly. Integrating Document360 with Slack enables your agents to access your knowledge base directly within their workspace.

Apart from searching for articles, you can create user-friendly documentation and author in the Markdown editor for any version or language in your knowledge base on Slack.

---

## Basic setup guide

To set up a connection you must have a Slack account.

### Connecting the Document360 extension in Slack

1. Navigate to Settings () > **Knowledge base portal** > **Extensions** in the Knowledge base portal. Go to the desired Document360 project.
2. You can find Slack in the listed extensions.
3. In the Slack assistant, click **Connect**.
4. The app will redirect you to Slack to grant access to your workspace.
5. Click **Allow** and return to Document360.
6. The success message would also display the name of the connected Slack workspace.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Slack.gif)

---

## Commands and uses

Once the integration between Document360 and your Slack workspace is established, you can use the different functions of Document360 with the **/doc360** in your conversations, either in 'direct message' conversations or in a channel.

### **Commands**

|  |  |
| --- | --- |
| **Help** | **/doc360**<space>**help** |
| **Search article** | **/doc360**<space>**search**<space>**query** |
| **Create Article** | **/doc360**<space>**create**<space>**Title of the article** (optional) |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731301155878.png)

### Search and share articles

#### **Command:** `/doc360 search query`

Once Document360 is connected to your Slack workspace, your team can easily search for and share support articles within Slack using specific commands. This makes it faster to share knowledge and add context to conversations without needing to ask others for information or switch between tabs.

You can access all Knowledge base articles directly in Slack and share any article you find by linking it directly in your chat.

To search for an article during a conversation,

1. Enter the search command`/doc360 search query` and hit Enter.
2. Select the **version** and **language** of the knowledge base you want to search.

   The search results will be populated with two options:

* **Open Article** - to open the article in a new tab
* **Link Article** - to send the article result in the conversation

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Search_and_share_articles.gif)

### Creating an article from Slack

To create an article for your Knowledge base, enter the `/doc360 create` command followed by an optional title to open the article creation model.

#### Command: `/doc360 create Title_of_the_article`

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenVideo-Article_Creation_from_Slack.gif)

1. Choose the version of the Knowledge base you want to use to create the Article.
2. Select the category under which the Article should be placed.

> NOTE
>
> You cannot create a new category on Slack. However, you can add articles to any existing category.

3. Enter the content of your Article using the Markdown editor.

   The Article would be created in a draft state, allowing your editors to review and enhance it before publishing it on the Knowledge base.

---

## Removing the Document360 app from the Slack workspace

1. From your Slack workspace, visit Slack's App Directory.
2. Select **Manage** at the top right.
3. Choose **Document360** from the list in the left-hand column.

   You will be redirected to the **Document360 App Info page**.
4. In the **configuration section**, scroll down to the **Remove application** and click **Remove App**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenVideo-Removing_Doc360_Slack(1).gif)

If you face any issues, please get in touch with us at [support@document360.com](mailto:support@document360.com).

<a id="microsoft-teams"></a>

## Microsoft Teams

**Plans supporting integration of MS Teams extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Microsoft Teams is a widely used messaging and business collaboration application that helps a company's workforce stay organized and engage in conversations on a single platform.

## Teams and **Document360**

Once you configure the API and connect **Teams** and **Document360**, you can experience the cross-platform functionality in your Teams application.

After integrating, you can search for and share articles from your knowledge base in Teams, chats, and channels without leaving Microsoft Teams.

---

## Basic setup guide

### 1. Add the **Document360** app to Teams

1. On the Microsoft Teams window, click on **Apps** from the left navigation bar.
2. In the search bar, type in Document360.
3. Click on the app assistant and click **Add**.

![1_ScreenVideo-Adding_Dco360_in_MicrosoftTeams](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenVideo-Adding_Dco360_in_MicrosoftTeams.gif)

4. Now, you can find the Document360 logo in the bottom chat controls and at the search bar at the top when you type `/Document360` and press **Enter**.
5. If you already have a live knowledge base powered by Document360, you can easily connect it using an API key.

### 2. API key generation on **Document360**

1. From the **Knowledge base portal**, go to **Settings**() >**Knowledge base portal**>**Extensions**>**Team collaboration**.
2. You'll find the **Microsoft Teams** assistant.
3. Click **Connect**, and the **Microsoft Teams details** blade appears with a generated API key.
4. Copy the generated API token, which would be required while connecting your knowledge base with your **Teams** app.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Microsoft_Teams.png)

### 3. **Document360** API Configuration

Your knowledge base would be connected and accessible only after configuring the API between Teams and **Document360**.

You can access the **Add API Key** field in the Teams application by,

1. In **Microsoft Teams**, go to any chat and click **+** in the text field.
2. Click **Document360** from the listed Apps and then click **Add API key**.
3. Paste the generated API key in the Teams API key window. You will get a success message indicating the integration status.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731247419615.png)
4. To uninstall or remove the integration right-click on the Document360 app and click **Uninstall**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Microsoft_Teams.png)

---

## Searching and Sharing Articles

After successful integration, you can search for and share articles from your **Document360** knowledge base without leaving the Microsoft Teams platform with individual contacts and channels.

When you want to search for a particular article from the integrated knowledge base,

1. Click the **Document360** logo from the chat controls.
2. Enter the keyword in the search bar.
3. Select all the relevant articles from the search results.

![4_Screenshot-Article_search_and_send](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731246868630.png)

(or)

1. Enter `/Document360search` in the new message field at the bottom and hit Enter.
2. Another sub-field would appear with the search bar.
3. Enter your search query, and the results are populated.
4. Click on the result, and it will be added to the conversation.

You can edit your response with a custom message before sending it.

---

## FAQs

**Does Microsoft Teams have a Knowledge base feature?**

There is no built-in Knowledge base feature available on Microsoft Teams. However, you can integrate Knowledge base and documentation platforms like Document360 to work seamlessly with Teams.

**Can I share content from my Knowledge base on Teams?**

You can share article content, excerpts, links, media, and files from your Document360 Knowledge base in your Teams chats, replies, and posts.

**Is it possible to add the Microsoft Teams extension for non-readers?**

Yes, you can add a Microsoft Teams extension for non-readers by using the generated API token in the team collaboration settings of the extension.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="drift"></a>

## Drift

**Plans supporting integration of Drift extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Drift is a conversational messenger platform you can add to your website, Knowledge base, or online business. Integrating your Document360-powered Knowledge base with the Drift chat application gives you an additional edge when providing support or answering your customers' queries.

You can share relevant articles and information from your Knowledge base without leaving the Drift conversation page. During real-time conversations, this would make so much sense and cut back on the response time, as the service provider (your support agent) doesn't have to navigate to a separate window or browser tab to search the articles from your knowledge base and then share the link.

---

## Basic setup guide

To enable this extension, you should have a registered Drift account. If you don't have one, you can create one by following the signup instructions on the application website, <https://app.drift.com>.

In Document360, there are three steps to establish a connection between Document360 and Drift:

1. Acquire custom JavaScript from the Drift portal
2. Setting up Drift Chat on Document360
3. Configuring your Document360 knowledge base on Drift Composer

> NOTE
>
> * If you're an existing user of Drift or have it added to any of your company's websites or Document360 home page, you can skip the 1st and 2nd sections of the Basic Setup Guide.

### 1. Acquire custom JavaScript from the Drift portal

#### a. If you are a new customer to Drift:

You will get the code assistant during the initial account setup, and after signup,  log in to your Drift account on the [Drift app website](https://app.drift.com/home/dashboard).

1. Log in to your Drift **Dashboard**.
2. Navigate to Settings ()> **App Settings.**
3. From the tree-view menu on the left, click **App settings** and select the **Install** option.
4. Select **JavaScript**, and a code window will appear.
5. Click **Copy** to copy the script to your clipboard.

#### b. If you are an existing customer of Drift:

You can follow Step 2, outlined for the new customer

![1_ScreenVideo-Drift_Code_Copy.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Draft_widget_javascript.png)

The copied JavaScript would come in handy on the Document360 portal.

### 2. Setting up Drift Chat on Document360

To set up the drift chat window on your Document360 page,

1. Go to your project in the Document360 portal.
2. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
3. From the left navigation pane, click on the **JavaScript** tab.
4. Paste the copied script and click **Save**.

![2_ScreenVideo-copy_paste_code.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Drift_extension_javascript_code.gif)

Now, the Drift chat icon appears on your Document360. Your customers can use this assistant chat window to interact with you. You can share and manage articles from your knowledge base without leaving the drift chat response.

### 3. Configuring your Document360 knowledge base on Drift Composer

> NOTE
>
> Only when document360 is authorized and configured can you search for and share articles from your knowledge base with your end users.

1. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaborations**.
2. Navigate to Drift and click **Connect**.
3. The page would be redirected to an authorized page on Drift.
4. Click the **Authorize App**.

![3_ScreenVideo-Drift_Setup.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Drift_extension_authorization.gif)

After successful integration, you can access the connected knowledge base on Drift conversations using slash commands (**/doc360**).

Once the Knowledge base has been integrated and authorized, you can search for articles from your knowledge base using keywords.

1. In the admin chat response window, type **/doc360**, then a space followed by the search term.
2. Hit enter, and a relevant article search list will appear.
3. Now you have three buttons below each of the listed articles:

* **Share**: Sends the article link along with the meta text provided to your end-user chat.
* **Edit**: This allows you to edit the text or link and then press 'Enter.'
* **Cancel**: This aborts the article search.

<a id="zapier-setup-guide"></a>

## Zapier - Setup guide

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Zapier is an online automation tool that helps to connect Document360 with other third-party tools and applications. Zapier acts as a buffer by creating automated workflows called Zaps, which work based on actions and triggers.

### Prerequisites

1. You must have an active Zapier account to begin with or [**sign up**](https://zapier.com/sign-up) for one.
2. An account in the third-party application you wish to connect with Document360 using Zapier (for example, Google Docs, Typeform, and more.)

Check out [Zapier's getting started guide](https://zapier.com/resources/guides/quick-start) to learn how to connect to Document360 with other apps on Zapier, build workflows, and automate repetitive tasks

## API key generation in Document360

1. Navigate to the desired Document360 project.
2. Navigate to Settings ()> **Knowledge base portal** > **Extensions** > **Team collaboration**.
3. On the Zapier extension tile, click **Connect**.
4. A **Zapier details** popup appears with a generated **Token**.
5. Click the Copy () icon.

This API key will be used to connect the Document360 knowledge base with third-party applications on Zapier.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Zapier_setup_guide.png)

---

## Zapier use cases for Document360

Below are some useful Zapier integrations that can enhance your experience with Document360 by connecting it to popular tools:

* [Google Docs + Document360](/help/docs/google-docs-document360-integration)
* [Google Sheets + Document360](/help/docs/document360-with-google-sheets-integration)
* [Google Drive + Document360](/help/docs/google-drive-document360)
* [Trello + Document360](/help/docs/document360-with-trello-integration)
* [GitHub + Document360](/help/docs/github-document360)
* [Confluence Server + Document360](/help/docs/confluence-document360)
* [Zoho CRM + Document360](/help/docs/zoho-crm-document360)
* [Pipedrive + Document360](/help/docs/pipedrive-document360)
* [Hubspot + Document360](/help/docs/hubspot-document360)
* [Asana + Document360](/help/docs/asana-and-document360-integration)
* [monday.com + Document360](/help/docs/mondaycom-document360)
* [Typeform + Document360](/help/docs/typeform-document360)
* [Document360 + Gmail](/help/docs/document360-gmail)
* [Document360 + Mailchimp](/help/docs/document360-mailchimp)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="google-docs-document360-integration"></a>

## Integrating Google Docs with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations around the world use Google Docs as a document management tool. Google, as a platform, offers a more integrated environment where managing multiple forms of documents and files is rather easy.

---

## Integrating Google Docs with Document360

Using Document360 as your knowledge base platform, you can collaborate with multiple external vendors who contribute content through Google Docs. While Google Docs is a great platform for collaboration, manually transferring these articles to Document360 can be time-consuming and effort-intensive.

By connecting Google Docs and Document360 on Zapier, you can easily facilitate the content flow between these platforms. To establish a connection between Google Docs and Document360, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Google Docs and Document360 in Zapier

![2_Screenshot-Connecting_Google_Docs_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Connecting_Google_Docs_and_Document360.png)

### Step 1: Connecting Google Docs

1. In the **Trigger** field, choose **Google Docs**.
2. In the **Trigger event** field, select the required Event to trigger in the Google Docs.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

![3_Screenshot_Google_Doc_Sign_in_credentials](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_Google_Doc_Sign_in_credentials.png)

5. Click **Continue.**

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Zaps.png)
6. Find the list of folders retrieved from your connected Google Drive account.
7. Choose the desired folder and click **Continue**.
8. Zapier runs a test to make sure the trigger is correctly configured.
9. Create a Google Doc inside the selected folder and test the trigger.

### Step 2: Connecting Document360

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![6_Screenshot_Zapier_API_Token_Pasting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot_Zapier_API_Token_Pasting.png)

8. You can find the connected Document360 project on the **Connect Document360 account** page.

   If you wish to configure a different account later, you can do that by clicking on Change.
9. Click **Continue**.

### Step 3: Customize Zap

1. Map the fields from Google Docs into Document360. Map all the required fields:

![5_Screenshot-Map_the_fields_from_the_Google_Docs_into_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Map_the_fields_from_the_Google_Docs_into_Document360.png)

* **Title**: By default, the title in Google Docs is selected here. However, you will have various options available depending on your business requirements.
* **Content**: By default, content in Google Docs is selected here. However, you will have various options available depending on your business requirements.
* **Version**: Choose the desired workspace in the knowledge base project where you wish to create the article.
* **Language**: Choose the desired language in the selected workspace in which you wish to create the article.
* **Category**: Choose the desired category in the selected language in which you want the article to be created.
* **Publish**: Choose True for the article to be published. Choose False for the article to be in draft state.

2. Once done, click **Continue**.

> NOTE
>
> Only after you map all the required fields, the **Continue** button will be enabled.

### Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*An Article was sent to Document360*’.

   In your Document360 Knowledge base portal, you'll find the article titled after the Google Docs file name, located in the folder you previously selected.
3. Head back to the Zapier setup window.

### Turn on Zap

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Google Docs** trigger and the corresponding action of the new article in **Document360**.
3. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Google Docs+Document360 Zap overview page.

![7_Screnshot_Zap_connection_Successful](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screnshot_Zap_connection_Successful.png)

---

## Zap overview

#### Create articles in Document360 from a new Google Docs file

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Google_docs.png)

### Deleting a Zap

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the arrow (**>**) icon to the right of the desired Zaps and click **Turn off and delete Zap**.

   The selected Zap will be deleted.

<a id="document360-with-google-sheets-integration"></a>

## Integrating Google Sheets with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations use spreadsheets as their go-to tool for collecting and organizing data, which is among the simplest of its uses. Google Sheets is a free, web-based spreadsheet platform from Google that allows users to organize, collaborate, analyze, and edit distinct types of information. Multiple users can format and edit files in real time, and any changes made to the spreadsheet can be tracked by a revision history.

---

## Integrating Google Sheets with Document360

Using Document360 as your Knowledge base platform, you can maintain a Google Sheets log of all articles in the Knowledge base. Each time a new article is added, an entry must also be made in Google Sheets. While Google Sheets makes tracking straightforward, manually updating every addition in Document360 can be time-consuming and effort-intensive.

By connecting Document360 and Google Sheets on Zapier, you can easily facilitate the content flow between Google Sheets and Document360. To establish a connection between Google Sheets and Document360, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Google Sheets and Document360 in Zapier

### 1. Setting up the trigger: Connecting Document360

1. In the **Trigger** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)

8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

   ![3_Screenshot_Zapier_API_Token_Pasting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_Zapier_API_Token_Pasting.png)
10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

### 2. Setting up the action: Connecting Google Sheets

1. In the **Action** field, choose **Google Sheets**.
2. On the Setup blade that appears on the right, select **Create Spreadsheet Row** in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.
5. Click **Continue**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Sheets.gif)
6. In the **Configure** blade, update the following fields:

   * **Drive** - The default option is **My Google Drive** or choose the drive from the list.
   * **Spreadsheet** - Select the desired Spreadsheet file from your Google Drive.
   * **Worksheet** - Choose the desired worksheet in the selected spreadsheet file above.
7. As soon as you select the worksheet, you can find the column headings listed. Select the Document360 article attribute you want to map with the respective field. Click **Continue**.

   > NOTE
   >
   > Zaps are intended to only add rows to the end of the spreadsheet and not any other row in between.
8. Once done, move ahead to the **Test** section and click **Publish**.

   You will get a **Zap published** popup to confirm that the Zap is on.

![5_Screenshot_Zap_connection_Successful](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731402818017.png)

> NOTE
>
> If you rename your sheet or worksheet(s) within the Sheet, you'll need to reselect them in the Zap Editor to update to the new names.

---

## Zap overview

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Google_sheets.png)

### Deleting a Zap

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the arrow (**>**) icon to the right of the desired Zaps and click **Turn off and delete Zap**.

   The selected Zap will be deleted.

> NOTE
>
> Since you’re building a Zap that uses Google Sheets to add data, there are a few things you will need to do to get that sheet ready to work with Zapier. Refer [Work with Google Sheets in Zaps](https://help.zapier.com/hc/en-us/articles/8496276985101-Work-with-Google-Sheets-in-Zaps) for more information on how to interact with your sheet effectively.

---

## FAQ

**How is a spreadsheet different from a worksheet?**

A Spreadsheet is the overall file you select from Google Drive, while a Worksheet is the specific tab within that file where the data is located.

<a id="google-drive-document360"></a>

## Integrating Document360 with Google Drive

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Integrating Google Drive with Document360 enables seamless access to your files directly within your Knowledge base portal. This integration allows you to easily link, manage, and share Google Drive files, for easy collaboration and documentation workflows.

---

## Integrating Document360 with Google Drive

Using Document360 as your knowledge base platform, you can efficiently manage and share documents across your team. However, manually linking and organizing files from Google Drive to Document360 can be a time-consuming task.

You can automate file management by integrating Google Drive with Document360 through Zapier. This ensures a smooth workflow between these platforms. To set up the integration between Google Drive and Document360, follow the steps below:

1. Log into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then clickZapsfrom the optionsavailable.

   Zap will be created with **Trigger** and **Action** flow.

![1_Screenvideo-Creating_a_workspace_in_zapier_dashboard2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenvideo-Creating_a_workspace_in_zapier_dashboard%282%29.gif)

### Connecting Google Drive and Document360 in Zapier

![2_Screenshot-Connection_Google_Drive_and_Document360_in_Zapier](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Connection_Google_Drive_and_Document360_in_Zapier.png)

### 1. Setting up the trigger: Connecting Document360

1. In the **Trigger** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![4_Screenshot_Zapier_API_Token_Pasting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot_Zapier_API_Token_Pasting.png)

     You can find the connected Document360 project on the **Connect Document360 account** page.

10. If you wish to configure a different account later, click **Change**.
11. Click **Continue**.

### 2. Setting up the action: Connecting Google Drive

1. In the **Action** field, choose **Google Drive**.
2. On the Setup blade that appears on the right, select a desired action from the available options in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.
5. Click **Continue**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Drive.gif)
6. In the **Configure** blade, update the following fields:

* **Drive** - The default option is **My Google Drive** or choose the drive from the list.
* **Folder** - Select the desired folder from the dropdown.
* **File** - Select the desired file from the dropdown. This is a mandatory field.
* **Convert to Document** - Choose **True** or **False** based on your requirements.
* **File Name** - Enter a suitable file name.
* **File Extension** - Enter a suitable extension for the file.

  > NOTE
  >
  > The configurations details differ based on the Action event you choose. The above mentioned fields are required if select upload actions.

7. Once done, click **Continue**.
8. Go to the **Test** section and click **Test step**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Zapier_Google_Drive.gif)

   If successful, you will get the message ‘*Test item sent! Check your Google Drive account to view it.*’
9. Once done, click **Publish**.

   A **Zap published** popup confirms the Zap is on.
10. Click **Manage your Zap** to go to the Google Drive+Document360 Zap overview page.

![7_Screenshot_Zap_connection_Successful](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732093770417.png)

---

## Zap overview

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Google_drive.png)

### Deleting a Zap

If a Zap is no longer needed or is outdated, you can delete it to keep your Zapier dashboard organized. To delete a Zap,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the arrow (**>**) icon to the right of the desired Zaps and click **Turn off and delete Zap**.

   The selected Zap will be deleted.

Zapier is a web automation tool used to connect web apps and services. It's used to automate and streamline your online workflows without coding, whether automating things like social media, project management, note-taking, email, or meetings.

Zapier allows users to automate tasks between apps with no coding required. By creating Zaps (automated workflows), you can trigger actions across different platforms, saving time and reducing errors.

<a id="document360-with-trello-integration"></a>

## Integrating Trello with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Trello is a visual project management tool that empowers individuals and teams to organize their projects into boards. It helps to ideate, plan, manage, and celebrate their work together in a collaborative, productive, and organized way.

---

## Integrating Trello with **Document360**

Using **Document360** as your knowledge base, you can integrate it with Trello to manage documentation tasks more efficiently. For example, your documentation team may use Trello boards to organize tasks for writers, editors, and external agencies. Instead of manually updating tasks in both Trello and **Document360**, you can connect them using Zapier to automate task synchronization and keep everything updated seamlessly.

By connecting Trello and **Document360** on Zapier, you can easily synchronize tasks between Trello and your knowledge base on **Document360**. To set up the connection between Trello and **Document360**, follow the steps below:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Trello and **Document360** in Zapier

To establish a connection between Trello and Document360, follow the below steps:

#### Setting up the trigger: Connecting **Document360**

1. In the **Trigger** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![3_Screenshot_Zapier_API_Token_Pasting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_Zapier_API_Token_Pasting.png)

10. You can find the connected **Document360** project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Setting up the action: Connecting Trello

1. In the **Action** field, choose **Trello**.
2. On the Setup blade that appears on the right, select **Create Card** in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your Trella account sign-in credentials and click **Allow**.
5. Click **Continue**.

![4_Screenvideo-Trello_login_in_credentials_sign_in_window](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenvideo-Trello_login_in_credentials_sign_in_window.gif)

6. In the **Setup action** section, choose the intended **Trello board** and **list.**
7. In the **Name** and **Description** field, you can choose one or more Document360 attributes (for example, Content, ID, contributor, version, and update date).
8. In the **Label** field, pick a color label to apply to the card.
9. In the **Card position**, you can choose from two positions (top or bottom).
10. In the **Members** field, choose the members in your Trello board.
11. Hit the **Continue** button at the bottom.
12. Once done, move ahead to the **Test** section and click **Publish**.

    You will get a **Zap published** popup to confirm that the Zap is on.

![5_Screenvideo-Successful_prompt_from_Zapier_Connection](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenvideo-Successful_prompt_from_Zapier_Connection.gif)

### **Syncing Articles to Trello**

After you have successfully created a Zap and configured it, each time an article is published on your connected **Document360** project by any team member, a Trello card will be added to the selected list and board. This card would contain all the article attributes, like content, contributor, publish date, and any other information you have configured on Zap.

Now, looking at the Trello board (for example, Kanban, Agile, etc.) for documentation, you maintain a list of all the published articles on your Knowledge base amongst other lists like new articles and reviews pending. Each article is added as a card to either of the lists, depending on its status.![1_Screenshot_Overview_page_of_trello](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Overview_page_of_trello.png)

---

## Zap overview

You can view and edit the information about the Zaps created on the Zap overview page.  
![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Gmail_extension.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="github-document360"></a>

## Integrating GitHub with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations worldwide use Git to manage code repositories, with GitHub being one of the most popular platforms. GitHub enables developers to showcase their work and collaborate globally.   
Developers use Git commands to commit new features and bug fixes to their project repositories. GitHub also offers an intuitive graphical interface for managing these repositories efficiently.

---

## Integrating GitHub with **Document360**

Using **Document360** as your Knowledge base platform, you can integrate it with GitHub to streamline content management. For example, when developers commit new code or updates to a GitHub repository, corresponding changes may need to be reflected in your knowledge base. Manually updating **Document360** for every change can be time-consuming and prone to errors.

By connecting **Document360** and GitHub via Zapier, you can automate this process, ensuring seamless synchronization between your code repository and knowledge base. To establish a connection between GitHub and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting GitHub and **Document360** in Zapier

Follow the below steps to establish a connection between GitHub and Documnet360:

#### Step 1: Connecting GitHub

1. In the **Trigger** field, choose **GitHub**.
2. In the **Trigger event** field, select the required Event to trigger in the GitHub.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Authorize Zapier**.
5. Choose the desired folder and click **Continue**.

   Zapier runs a test to make sure the trigger is correctly configured.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Zapier_Github.png)

#### Step 2: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

   ![5_Screenshot_Zapier_API_Token_Pasting1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%281%29.png)
10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Step 3: Customize Zap

![6_Screenvideo-Map_fields_from_GitHub_into_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenvideo-Map_fields_from_GitHub_into_Document360.png)

1. Map all the required fields:

* **Title**: The default selection is **New Commit in GitHub**. However, you can choose from various options based on your business requirements.
* **Content**: The default selection is **Commit Message**, but you can select other options depending on your needs.
* **Version**: Select the workspace in your knowledge base project where the article should be created.
* **Language**: Choose the language for the article within the selected workspace.
* **Category**: Select the category under the chosen language where the article will be created.
* **Publish**: Set to **True** to publish the article immediately or **False** to save it as a draft.

2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Send** **Test**.
2. If it is successful, you will get the message ‘*Test Article sent! Check your Document360 account to view it*’.

   In your Document360 Knowledge base portal, you'll find the article titled ‘*New commit in GitHub*’, located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **GitHub** trigger and the corresponding action of the new article in **Document360**.
3. You will get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in **Document360** from new GitHub commits

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-GitHub.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="confluence-document360"></a>

## Integrating Confluence Server with Document360

Many organizations use wikis as a central hub for storing and managing project-related information. Confluence is a popular, secure wiki platform that enables teams to collaborate effectively by organizing and sharing work in dedicated team workspaces. Users can create pages or blogs to capture, structure, and collaborate on ideas and projects, ensuring every team member has access to the knowledge and resources they need.

---

## Integrating Confluence Server with **Document360**

Using **Document360** as your knowledge base platform, you can maintain a log of all articles in Confluence Server. Each time a new article is added to **Document360**, an entry must also be made in Confluence. While Confluence helps with tracking, manually updating each addition can be time-consuming.

By connecting **Document360** and Confluence Server on Zapier, you can easily automate the content flow between **Document360** and Confluence. To establish a connection between Confluence Server and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Confluence Server and **Document360** in Zapier

To establish a connection between Confluence Server and Documnet360, follow the below steps:

#### Step 1: Connecting Confluence Server

1. In the **Trigger** field, choose **Confluence server**.
2. In the **Trigger event** field, select **New Page or Blog Post** to trigger in the Confluence Server.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Yes, Continue to Confluence Server**.
5. Click **Continue**.

   Zapier runs a test to make sure the trigger is correctly configured.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Confluence_server.png)

#### Step 2: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![6_Screenshot_Zapier_API_Token_Pasting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot_Zapier_API_Token_Pasting.png)

10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Step 3: Customize Zap

1. Map all the required fields:

* **Version**: Select the workspace in your knowledge base project where the article should be created.
* **Language**: Choose the language for the article within the selected workspace.
* **Category**: Select the category under the chosen language where the article will be created.
* **Publish**: Set to **True** to publish the article immediately or **False** to save it as a draft.

2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Document was sent to Document360*’.

   In your **Document360** Knowledge base portal, you'll find the article named ‘*Title of your Page / Blog post*’, located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish.**

### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Confluence Server** trigger and the corresponding action of the new article in **Document360**.
3. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

![5_Screenshot_Zap_connection_Successful1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zap_connection_Successful%281%29.png)

## Zap overview

### Create articles in **Document360** from the new Confluence Server Page

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Confluence_server.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="zoho-crm-document360"></a>

## Integrating Zoho CRM with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Customer relationship management (CRM) is a technology for managing all your company’s relationships and interactions with customers and potential customers. The goal of a CRM is to improve business relationships. A CRM system helps companies stay connected to customers, streamline processes, and improve profitability.

A CRM solution helps you focus on your organization’s relationships with individual people, including customers, service users, colleagues, or suppliers, throughout their lifecycle. This includes finding new customers and providing support and additional services throughout the relationship.

One popular CRM is Zoho CRM which has a rich set of features to manage your customer relationship.

---

## Integrating Zoho CRM with **Document360**

Using **Document360** as your Knowledge base platform and Zoho CRM for managing customer relationships, you may encounter a need to create a corresponding knowledge base article in **Document360** whenever a new lead or contact is added in Zoho CRM. This ensures that relevant information about leads or contacts is easily accessible and well-documented.

To establish a connection between Zoho CRM and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Zoho CRM and **Document360** in Zapier

To establish a connection between Zoho CRM and Document360, follow the below steps:

![2_Screenshot-Connecting_Steps_of_Doc360_Zoho_Crm](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Connecting_Steps_of_Doc360_Zoho_Crm.png)

#### 1. Setting up the trigger: Connecting Zoho CRM

1. In the **Trigger** field, choose **Zoho CRM**.
2. In the **Trigger event** field, select the required Event to trigger in the Zoho CRM.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.

   The Zoho domain is an optional field. Select the domain based on your requirements.
4. Once done, click **Yes, Continue to Zoho CRM**.
5. Enter your sign-in credentials and click **Accept**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Zoho_CRM.png)
6. Click **Continue**.
7. Zapier runs a test to make sure the trigger is correctly configured.

#### 2. Setting up the action: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to **Settings**() > **Knowledge base portal**> **Extensions**> **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![5_Screenshot_Zapier_API_Token_Pasting1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%281%29.png)

10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### 3. Customize Zap

1. Map the required fields:

* **Version:** Select the workspace in your knowledge base project where the article should be created.
* **Language**: Choose the language for the article within the selected workspace.
* **Article**: Choose the desired article from the desired category.
* **Publish**: Set to **True** to publish the article immediately or **False** to save it as a draft.

2. Once done, click **Continue.**

#### 4. Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Document was sent to Document360.*’

   In your Document360 Knowledge base portal, you'll find the article titled ‘*Lead Source in Zoho CRM*’, located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Continue**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Zoho CRM** trigger and the corresponding action of the new article in **Document360**.
3. Turn on the Zap toggle.
4. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-ZohoCRM.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the arrow (**>**) icon to the right of the desired Zaps and click **Turn off and delete Zap**.

   The selected Zap will be deleted.

<a id="pipedrive-document360"></a>

## Integrating Pipedrive with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Customer relationship management (CRM) is a technology for managing all your company’s relationships and interactions with customers and potential customers. Pipedrive is a deal-driven customer relationship management CRM solution that also works as an account-management tool with the ability to assist with marketing and the entire sales process. Pipedrive's proactive nature automatically tracks and organizes calls and emails and synchronizes schedules across devices.

---

## Integrating Pipedrive with **Document360**

Using **Document360** as your Knowledge base platform and Pipedrive as your sales platform, you may encounter a need to create a corresponding Knowledge base article in **Document360** whenever a new lead or contact is added in Pipedrive. This ensures that relevant information about leads or contacts is easily accessible and well-documented.

To establish a connection between Pipedrive and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Pipedrive and **Document360** in Zapier

To establish a connection between Pipdrive and Document360, follow the below steps:

![2_Screenshot-Connnecting_steps_Document360_Pipedrive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Connnecting_steps_Document360_Pipedrive.png)

#### Step 1: Connecting Pipedrive

1. In the **Trigger** field, choose **Pipedrive**.
2. In the **Trigger event** field, select the required Event to trigger in the GitHub.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow and Install**.

   Zapier runs a test to make sure the trigger is correctly configured.

![3_Screenshot-Pipedrive_Sign_in_credentials](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Pipedrive_Sign_in_credentials.png)

#### Step 2: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings**() > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![5_Screenshot_Zapier_API_Token_Pasting2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%282%29.png)

     You can find the connected **Document360** project on the **Connect Document360 account** page.

10. Click **Continue**.

#### Step 3: Customize Zap

1. Map all the required fields:

* **Title**: Choose a suitable title from the options available.
* **Content**: Choose suitable content based on your business requirements.
* **Version**: Select the workspace in your knowledge base project where the article should be created.
* **Language**: Choose the language for the article within the selected workspace.
* **Category**: Select the category under the chosen language where the article will be created.
* **Publish**: Set to **True** to publish the article immediately or **False** to save it as a draft.

2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Document was sent to Document360.*’

   In your **Document360** Knowledge base portal, you'll find the article titled ‘*Title of your Pipedrive deal*’, located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Pipedrive** trigger and the corresponding action of the new article in **Document360**.
3. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in **Document360** whenever a new sales deal is added in Pipedrive

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Pipedrive.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="hubspot-document360"></a>

## Integrating Hubspot with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations around the world need a business automation tool that allows business promotions and manages marketing efforts by controlling sales processes. One such platform is HubSpot, a leading inbound marketing, sales, CRM, and customer success growth stack.

---

## Integrating HubSpot with **Document360**

Using Document360 as your knowledge base platform and HubSpot for managing customer support tickets, you may encounter a need to automatically check if a related article exists in your internal knowledge base whenever a new support ticket is created in HubSpot. If no related article is found, a new knowledge base article can be created to address the knowledge gap and assist in resolving the support ticket efficiently.

To establish a connection between HubSpot and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting HubSpot and **Document360** in Zapier

To establish a connection between HubSpot and Document360, follow the below steps:

#### Step 1: Connecting HubSpot

1. In the **Trigger** field, choose **HubSpot**.
2. In the **Trigger event** field, select the required Event to trigger in the HubSpot.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and select the checkbox.
5. Click **Connect app**.

   Zapier runs a test to make sure the trigger is correctly configured.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Hubspot.png)
6. Click **Continue**.

#### Step 2: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings**() > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![4_Screenshot_Zapier_API_Token_Pasting2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot_Zapier_API_Token_Pasting%282%29.png)

You can find the connected Document360 project on the **Connect Document360 account** page.

10. Click **Continue.**

#### Step 3: Customize Zap

1. Map all the required fields**:**

   * **Ticket name**: By default the ticket name will be set to ‘*Title in Document360.’*
   * **Ticket description**: By default the ticket description will be set to ‘*Content in Document360.’*
2. **Version**: Select the workspace in your knowledge base project where the article should be created.
3. **Language**: Choose the language for the article within the selected workspace.
4. **Should this step be considered a "success" when nothing is found?**: Set to **True** or **False**.
5. Once done, click **Continue**.
6. Click **Test & Continue**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **HubSpot** trigger and the corresponding action of the new article in **Document360**.
3. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in **Document360** from new support tickets in HubSpot

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Hubspot.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="asana-document360"></a>

## Integrating Asana with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations use Asana to organize, track, and manage their work across teams. Integrating Asana with **Document360** allows you to streamline task management and ensure alignment between your documentation efforts and Knowledge base updates.

---

## Integrating Asana with **Document360**

Using Document360 as your Knowledge base platform and Asana for managing content collaboration with external vendors, you may encounter a need to streamline the process of adding articles created in Asana to your **Document360** Knowledge base. While this can be done manually, it is time-consuming, effort-intensive, and prone to errors. Automating this process ensures efficiency and accuracy, reducing the risk of mishaps while maintaining a seamless content workflow.

To establish a connection between Asana and **Document360**, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.
3. Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Asana and **Document360** in Zapier

To establish a connection between Asana and Documnet360, follow the below steps:

![2_Screenshot-connecting_steps_Asana_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-connecting_steps_Asana_Document360.png)

#### Step 1: Setting up the Trigger: Connecting Asana

1. In the **Trigger** field, choose **Asana**.
2. In the **Trigger event** field, select the required Event to trigger in the Asana.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   Zapier runs a test to make sure the trigger is correctly configured.

   If your account is already linked to Asana, you can directly select your account in the **Sign-in** window.
5. Select your Asana account and click **Next**.
6. Select the desired Workspace and click **Next**.
7. Select the desired Project and click **Next**.

![3_Screenshot-Asana_Sign_in_credentials](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Asana_Sign_in_credentials.png)

#### Step 2: Setting up action: Connecting Document360

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![5_Screenshot_Zapier_API_Token_Pasting3](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%283%29.png)

   You can find the connected Document360 project on the **Connect Document360 account** page.

8. Click **Continue**.

#### Step 3: Customize Zap

1. Map all the required fields:

   * **Title**: Choose a suitable title from the options available.
   * **Content**: Choose suitable content based on your business requirements.
   * **Version**: Select the workspace in your Knowledge base project where the article should be created.
   * **Language**: Choose the language for the article within the selected workspace.
   * **Article**: Choose the article within the selected category.
2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Document was sent to Document360.*’

   In your Document360 Knowledge base portal, you'll find the article located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Asana** trigger and the corresponding action of the new article in **Document360**.
3. You would get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in Document360 from new Asana tasks

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Asana_extension.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="mondaycom-document360"></a>

## Integrating Monday.com with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations rely on [Monday.com](http://Monday.com) to efficiently organize, track, and manage their work across teams. With its versatile boards and customizable workflows, it enables teams to handle diverse tasks and projects seamlessly. For example, a documentation team comprising writers, editors, and external content agencies can use Monday.com to streamline content creation and collaboration processes effectively.

---

## Integrating Monday.com with **Document360**

If you are using **Document360** as your knowledge base platform and Monday.com for managing content collaboration with external vendors, you may encounter a need to streamline the process of transferring articles created in Monday.com to your **Document360** knowledge base. While this task can be performed manually, it is labor-intensive, time-consuming, and prone to errors. Automating this process ensures efficiency, accuracy, and a smooth content workflow, minimizing the risk of mishaps.

To establish a connection between Monday.com and **Document360**, follow the below steps:

1. Log into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.

   Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Monday.com and **Document360** in **Zapier**

To establish a connection between Monday.com and Document360, follow the below steps:

![1_Screenshots-Connecting_Monday_com_and_Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733211230837.png)

#### Step 1: Setting up Trigger: Connecting Monday.com

1. In the **Trigger** field, choose **Monday.com**.
2. In the **Trigger event** field, select the required Event to trigger on Monday.com.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear. You will have to enter the **API v2 Token**.

   To obtain the **API v2 Token** from the Monday.com profile,
4. Navigate to **Profile** > **Administration**.
5. From the left navigation sidebar, click **Connections**.
6. Under the **API** tab, click the Copy () icon to copy the personal API token.

   ![3_ScreenGIF-Generating_API_token_in_Monday_com](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Generating_API_token_in_Monday_com.gif)
7. Paste the token in the **Zapier** window, and click **Yes, Continue to Document360**.

   1. **Zapier** runs a test to make sure the trigger is correctly configured.
8. Click **Continue**.

#### Step 2: Setting up Action: Connecting **Document360**

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
6. On the **Zapier** extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the **Zapier** window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

![5_Screenshot_Zapier_API_Token_Pasting3](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%283%29.png)

    You can find the connected **Document360** project on the **Connect Document360 account** page.

8. Click **Continue**.

#### Step 3: Customize Zap

1. Map all the required fields:

   * **Title**: Choose a suitable title from the options available.
   * **Content**: Choose suitable content based on your business requirements.
   * **Version**: Select the workspace in your Knowledge base project where the article should be created.
   * **Language**: Choose the language for the article within the selected workspace.
   * **Article**: Choose the article within the selected category.
2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Document was sent to Document360.*’

   In your **Document360** **Knowledge base portal**, you'll find the article located in the folder you previously selected.
3. Head back to the **Zapier** setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.

   You can edit the settings configured on the **Monday.com** trigger and the corresponding action of the new article in **Document360**.

   You will get a success message stating **Your Zap is on**.
2. Click the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in **Document360** from new Monday.com items

You can view and edit the information about the Zaps created on the Zap overview page.  
![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Monday.com.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the arrow (**>**) icon to the right of the desired Zaps and click **Turn off and delete Zap**.

   The selected Zap will be deleted.

<a id="typeform-document360"></a>

## Integrating Typeform with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Typeform is a versatile platform for creating interactive forms, surveys, and quizzes. It offers an intuitive interface and engaging design to help businesses collect user feedback, conduct surveys, and gather data in a conversational format. Typeform is commonly used to gather questions from customers or prospects through engaging forms and surveys.

---

## Integrating Typeform with Document360

Using Document360 as your knowledge base platform and Typeform for collecting customer or prospect questions, you may encounter a need to streamline the process of transferring responses collected in Typeform to your Document360 knowledge base. Automating this process ensures efficiency, accuracy, and a smooth content workflow, reducing manual effort and improving response management.

To establish a connection between Typeform and Document360, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.

   Zap will be created with **Trigger** and **Action** flow.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Typeform and Document360 in Zapier

To establish a connection between Typeform and Document360, follow the below steps:

![1_Screenshot-Connecting_typeform_document360.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733316665587.png)

#### Step 1: Setting up trigger: Connecting Typeform

1. In the **Trigger** field, choose **Typeform**.
2. In the **Trigger event** field, select the required Event to trigger in the Typeform.

   If you wish to configure a different app later, you can do that by clicking on **Change**.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials.
5. Select the checkbox, and click **Let me in**.

   Zapier runs a test to make sure the trigger is correctly configured.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Typeform.png)

#### Step 2: Setting up action: Connecting Document360

1. In the **Action** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to Settings () > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

   ![5_Screenshot_Zapier_API_Token_Pasting1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%281%29.png)
10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Step 3: Customize Zap

1. Map all the required fields:

   * **Title**: Choose a suitable title from the options available.
   * **Content**: Choose suitable content based on your business requirements.
   * **Version**: Select the workspace in your Knowledge base project where the article should be created.
   * **Language**: Choose the language for the article within the selected workspace.
   * **Category**: Select the category under the chosen language where the article will be created.
   * **Publish**: Set to **True** to publish the article immediately or **False** to save it as a draft.
2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Send** **Test**.
2. If it is successful, you will get the message ‘*Test Article sent! Check your Document360 account to view it*’.

   In your Document360 Knowledge base portal, you'll find the article located in the folder you previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Typeform** trigger and the corresponding action of the new article in **Document360**.
3. You will get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create articles in Document360 from new Typeform entries

You can view and edit the information about the Zaps created on the Zap overview page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Typeform.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="document360-gmail"></a>

## Integrating Gmail with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Gmail is a widely used email service developed by Google that provides users with a simple and efficient platform for sending, receiving, and organizing emails. Known for its user-friendly interface, Gmail offers features like powerful search capabilities, spam filtering, and integration with other Google services such as Google Drive and Calendar. Gmail is a versatile tool for communication and collaboration.

---

## Integrating Gmail with Document360

While using Document360 as your knowledge base platform and Gmail as your communication tool, you may encounter a need to keep external vendors or stakeholders informed about updates to your knowledge base. The Document360-Gmail integration simplifies this process by automatically sending custom emails via Gmail whenever a new article is published in your Document360 knowledge base. This ensures seamless communication, reduces manual effort, and keeps all stakeholders effortlessly updated.

To establish a connection between Gmail and Document360, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.

   Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Gmail and Document360 in Zapier

To establish a connection between Gmail and Documnet360, follow the below steps:

#### Step 1: Setting up trigger: Connecting Document360

1. In the **Trigger** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to **Settings**() > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

   ![5_Screenshot_Zapier_API_Token_Pasting1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Zapier_API_Token_Pasting%281%29.png)
10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Test trigger

To test the Document360 trigger,

1. Click **Test trigger** to confirm that the correct account is connected, and the trigger setup is correct.
2. If no error is found, click **Continue**.

   The Document360 account has been successfully linked, and the trigger is set up.

#### Step 2: Setting up action: Connecting Gmail

1. In the **Action** field, choose **Gmail**.
2. On the Setup blade that appears on the right, select the desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.
5. Click **Continue**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Gmail_extension.png)

#### Step 3: Customize Zap

1. Map all the required fields:

* **To**: Enter the recipient's email address. Multiple addresses can be added individually or as a comma-separated list.
* **Cc**: Add email addresses to copy recipients on this email. Multiple addresses can also be added individually or as a comma-separated list.
* **Bcc**: Enter email addresses to blind-copy recipients on this email. Multiple addresses can be added similarly.
* **Subject**: Enter the subject line for the email.
* **From**: Choose an email address or alias linked to your Gmail account.
* **From Name**: Enter the sender's name (must be associated with the connected email address).
* **Body type**: Select the email format as either **Plain Text** or **HTML**.
* **Body**: Write the main content of the email.
* **Add signature default**: Optionally, include a default signature in the email.
* **Label or mailbox**: Select a value for label or mailbox.
* **Attachments**: Attach files by selecting an actual file or providing a public URL to download and attach the file.

> NOTE
>
> Fields marked as required (\*) must be filled in.

2. Once done, click **Continue**. The button enables only when all the fields are filled.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Draft was sent to Gmail.*’

   In your Document360 Knowledge base portal, you'll find the article located in the category you have previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Gmail** trigger and the corresponding action of the new article in **Document360**.
3. You will get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Send emails via Gmail with new articles in Document360

You can view and edit the information about the Zaps created on the Zap overview page.  
![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Gmail_extension.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="document360-mailchimp"></a>

## Integrating Mailchimp with Document360

**Plans supporting integration of Zapier extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Mailchimp is a marketing platform used by organizations worldwide for effective email communication and audience engagement. It offers an all-in-one solution for creating, sharing, and managing emails, advertisements, and other messages tailored to your audience's preferences. With powerful tools, Mailchimp enables users to maintain an up-to-date contact list, track subscriber interactions, and gain insights into audience behavior, ensuring data-driven marketing strategies.

---

## Integrating **Document360** with Mailchimp

Using **Document360** as your knowledge base platform and Mailchimp as your marketing tool, you may encounter a need to keep your audience informed about updates to your knowledge base. The **Document360**-Mailchimp integration streamlines this process by automatically creating or updating campaigns in Mailchimp whenever new content is added or updated in your **Document360** knowledge base. This ensures timely communication, reduces manual effort, and keeps your audience engaged with the latest information.

To establish a connection between Mailchimp and Document360, follow the below steps:

1. Ensure that you have logged into your [Zapier account](https://zapier.com/app/dashboard).
2. From the left navigation menu, click **Create** and then click **Zaps** from the optionsavailable.

   Zap will be created with **Trigger** and **Action** flow.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Zapier_Google_Docs.gif)

### Connecting Gmail and **Document360** in Zapier

To establish a connection between Gmail and Document360, follow the below steps:

#### Step 1: Setting up trigger: Connecting **Document360**

1. In the **Trigger** field, choose **Document360**.
2. On the Setup blade that appears on the right, select a desired event in the **Event** field.
3. Click the **Account** field, and a **Sign-in** window will appear.
4. Enter your sign-in credentials and click **Allow**.

   To generate the API token from the Document360 portal,
5. Navigate to **Settings**() > **Knowledge base portal** > **Extensions** > **Team collaboration**.
6. On the Zapier extension tile, click **Connect**.
7. Click the Copy () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
8. Head back to the Zapier window and paste the API token in the field.
9. Click **Yes, Continue to Document360**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Zapier_Google_docs.gif)
10. You can find the connected Document360 project on the **Connect Document360 account** page.

    If you wish to configure a different account later, you can do that by clicking on Change.
11. Click **Continue**.

#### Step 2: Setting up action: Connect Mailchimp

1. In the **Action** field, choose **Mailchimpmail**.
2. On the Setup blade that appears on the right, select the desired event in the **Event** field.
3. Click the **Account** field and a **Sign-in** window appears.
4. Enter your sign-in credentials and click **Allow**.
5. Click **Continue**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Mailchimp.png)

#### Step 3: Customize Zap

1. Map all the required fields:

* **Audience**: Choose the audience group you want to target for the campaign.
* **Segment or Tag**: Specify the segment or tag to filter your audience. If left blank, the campaign will be sent to the entire selected audience.
* **Email Subject**: Enter the subject line for your email.
* **Preview Text**: Add a snippet that will appear alongside the subject line in recipients' inboxes.
* **From Name**: Set a custom sender name (must be associated with the connected email address).
* **From Email address**: Select the email address or alias from your connected Gmail account.
* **Template**: Choose a template or supply HTML content for the email. If both options are left blank, the campaign draft will not include any content.
* **Email content (HTML)**: Choose a template or provide HTML content. Only one option can be selected; if both are left blank, the campaign draft will have no content.

> NOTE
>
> Fields marked as required (\*) must be filled in.

#### Step 4: Test Zap

1. In the test section, click **Test step**.
2. If it is successful, you will get the message ‘*A Draft was sent to your mail.*’

   In your Document360 Knowledge base portal, you'll find the article located in the category you have previously selected.
3. Head back to the Zapier setup window and click **Next**.
4. Once done, click **Publish**.

#### Turn on Zap

To turn on a Zap once it is tested and published, follow the below steps:

1. After testing the Zap, review or edit the settings before turning on the Zap.
2. You can edit the settings configured on the **Mailchimp** trigger and the corresponding action of the new article in **Document360**.
3. You will get a success message stating **Your Zap is on**. You can click on the **Manage your Zap** button to go to your Zap overview page.

---

## Zap overview

### Create campaigns in Mailchimp from new articles in **Document360**

You can view and edit the information about the Zaps created on the Zap overview page.  
![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Gmail_extension.png)

### Deleting a Zap

To delete a Zap that you have created,

1. Navigate to the **Zapier dashboard**. On the overview page, a list of all existing Zaps will be displayed.
2. Click the **Zap actions** () icon to the right of the desired Zap and click **Delete**.

   The selected Zap will be deleted.

<a id="make-setup-guide"></a>

## Make - Setup guide

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Make** (formerly Integromat) is an online automation platform that connects **Document360** with various third-party tools and applications. It serves as a bridge to create automated workflows, known as Scenarios, that operate seamlessly through predefined triggers and actions.

### Prerequisites

* You must have an active **Make** account to begin with or [**sign up**](https://us2.make.com/organization) for one.
* An account in the third-party application you wish to connect with **Document360** using **Make** (for example, Google Docs, Typeform, and more.)

## API key generation in **Document360**

To generate an API key in the Document360 portal, follow the below steps:

1. Navigate to the desired **Document360** project.
2. Navigate to **Settings** ()>**Knowledge base portal**>**Extensions**>**Team collaboration**.
3. On the **Make** extension tile, click **Connect**.
4. A **Make details** popup appears with a generated **Token**.
5. Click the **Copy** () icon.

This API key will be used to connect the Document360 Knowledge base with third-party applications on **Make**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Make_extension.png)

---

## **Make** use cases for **Document360**

Below are some useful **Make** integrations that can enhance your experience with **Document360** by connecting it to popular tools:

* [Integrating Asana with Document360](/help/docs/asana-document360)
* [Integrating Monday.com with Document360](/help/docs/mondaycom-document360)
* [Integrating Typeform with Document360](/help/docs/typeform-document360)
* [Integrating Google Docs with Document360](https://docs.document360.com/docs/google-docs-and-document360-integration)
* [Integrating Jira with Document360](/help/docs/jira-and-document360-integration)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="asana-and-document360-integration"></a>

## Integrating Asana with Document360

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Asana** is a versatile platform designed for organizing, tracking, and managing work efficiently. It allows teams to create and manage tasks under various projects, streamlining collaboration and ensuring accountability. For documentation teams comprising writers, editors, and external content contributors, **Asana** provides a centralized space to coordinate efforts, track progress, and maintain clarity across projects.

---

## Integrating **Asana** with **Document360**

To integrate Asana with Document360,

1. Ensure that you have logged into your [Make account](https://www.make.com/).
2. Click **Sign in** at the top to log in to your **Make** account.

   The **Make** dashboard will appear.

![1_Screenshot-Make_signin_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733464343369.png)

### Step 1: Create a new scenario

1. Click **Create a new scenario** at the top right.
2. Click the add (**+**) icon, and a list of available applications appears.
3. In the Search field, type in the app name, **Asana**.
4. Select **Asana** and choose the desired task you wish to map with **Asana**.

   For example, select **Watch Tasks or subtasks** to get updates on the new tasks.
5. Click **Create a connection** and enter a connection name.
6. Click **Save**.
7. Allow **Asana** to access your **Make** account by clicking **Allow**.
8. Click **OK**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Asana_Make.gif)

### Step 2: Connecting **Asana**

Connect your **Asana** account with the new scenario in the **Asana** module.

![2_Screenshot-Asana_task_details](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733466870362.png)

1. Select a connection in the **Connection** field. If you have already connected **Asana** with **Make**, select the desired connection.
2. Click the **Filter** dropdown and select **Project**.
3. Click the **Workspace** dropdown and select the desired workspace.
4. Click the **Project ID** dropdown and select the project for which you want to track the tasks.
5. Click the **Completed Since** field and enter the date in the `MM/DD/YYYY HH:MM` format to only return tasks that are either incomplete or that have been completed since the mentioned time.
6. Click the **Modified Since** field and enter the date in the *MM/DD/YYYY HH:MM* format to only return tasks that have been modified since the given time.
7. In the **Limit** field, enter the maximum number of tasks that **Make** will return during one execution cycle.
8. Click **OK**.
9. In the **Choose where to start** popup, select the date/time from when you want to start watching new tasks.
10. Click **Ok**.

Your **Asana** account is now connected with **Make**.

### Step 3: Connecting **Document360**

Once you have connected **Asana** with **Make**, the next step is to link your **Document360** account.

![3_Screenshot-Asana_add_new_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733468868456.png)

1. On the **Integration Asana** page, click the **Add another module** (+) option.
2. In the Search field, enter **Document360**.
3. Select **Document360** and select the action you want to perform in **Document360**.

   For example, you can select **Create an article** to create a draft article.
4. In the **Document360** window, select the connection that you have already connected.  
   To create a new connection,

   1. Click **Create a connection** and enter the **Connection name**.
   2. Enter your API key and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Asana_Make.gif)
5. To generate the API token from the **Document360** portal,
6. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
7. On the **Make** extension tile, click **Connect**.
8. Click the **Copy** () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Asana_Make.gif)
9. Head back to the **Make** window and paste the API token in the field.
10. Click the **Article Title** field and select the parameters you want as the title of your **Document360** article.

    For example, you can select the Task name parameter and retrieve the task name as the title of your **Document360** article.
11. Click the **Article Content** field and select the parameters you want as the content of your **Document360** article.

    For example, you can select the Assignee Name, Resource Type, and Due On parameters.
12. From the **Project Category ID** dropdown, select the category where you want the new article to be created.
13. Click **OK**.

    ![4_Screenshot-Document360_asana_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733472905161.png)

### Step 4: Test the scenario

To test the scenario before activating and publishing,

1. Click the **Run once** button at the bottom left to test your scenario.

   The test details appear at the bottom of the page.
2. To test the scenario, create a new task in the associated **Asana** project.
3. Once you create the task, a new article will be created in the associated **Document360** category.

   You can verify this with the test details at the bottom of the page. If required, you can also navigate to the **Document360** project and check the newly created article.

### Step 5: Schedule the scenario

1. To schedule your scenarios, enable the toggle at the bottom left.

   Turning on this toggle will run the scenario every 15 minutes.
2. Once done, click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Asana_Make.png)

### Step 6: Activate the scenario

1. Click the **Exit editing** () icon at the top.

   The integration dashboard page will appear.
2. Turn on the **ON/OFF** toggle near the **Edit** option, to activate the scenario.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Asana_Make.png)

   Once activated, your scenario will run according to the set schedule.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="monday-document360-integration"></a>

## Integrating Monday.com with Document360

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations rely on [Monday.com](http://Monday.com) to efficiently organize, track, and manage their work across teams. With its versatile boards and customizable workflows, it enables teams to handle diverse tasks and projects seamlessly. For example, a documentation team comprising writers, editors, and external content agencies can use Monday.com to streamline content creation and collaboration processes effectively.

---

## Integrating Monday.com with **Document360**

To integrate [Monday.com](http://Monday.com) with **Document360**,

1. Ensure that you have logged into your [Make account](https://www.make.com/).
2. Click **Sign in** at the top to log in to your **Make** account.

   The **Make** dashboard will appear.

![1_Screenshot-Make_signin_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733728223372.png)

### Step 1: Create a new scenario

1. Click **Create a new scenario** at the top right.
2. Click the add (**+**) icon, and a list of available applications appears.
3. In the Search field, type in the app name, Monday.com.
4. Select Monday.com and choose the desired task you wish to map with Monday.com.

   For example, select **Watch Board’s Column Values** to get triggers when the board’s column values have changed.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreeGif-Monday.com_Make.gif)

### Step 2: Connecting Monday

1. Click **Create a webhook** and enter a webhook name.
2. Click **Create a connection** and enter a connection name.
3. Enter the API token in the **API Key** field.
4. Click **Save**.
5. Allow Monday.com to access your **Make** account by clicking **Allow**.
6. Click **OK**.

   To obtain the **API v2 Token** from the Monday.com profile,
7. Navigate to **Profile** > **Administration**.
8. From the left navigation sidebar, click **Connections**.
9. Under the **API** tab, click the Copy () icon to copy the personal API token.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Generating_API_token_in_Monday_com.gif)

### Step 3: Connecting **Document360**

Once you have connected Monday.com with **Make**, the next step is to link your **Document360** account.

1. On the **Integration Monday** page, click the **Add another module** (+) option.

![3_Screenshot-Monday_add_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733729853164.png)

2. In the Search field, enter **Document360**.
3. Select **Document360** and select the action you want to perform in **Document360**.

   For example, you can select **Create an article** to create a draft article.
4. In the **Document360** window, select the connection that you have already connected.  
   To create a new connection,

   1. Click **Create a connection** and enter the **Connection name**.
   2. Enter your API key and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Monday.com_Make.gif)

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
6. On the **Make** extension tile, click **Connect**.
7. Click the **Copy** () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Asana_Make.gif)
8. Head back to the **Make** window and paste the API token in the field.
9. Click the **Article ID** field and select the required option from the list.
10. In the **Text to Append** field, enter the details required to setup the connection:

    * Group title
    * Item name
    * Update at
    * Assignee
    * Status
11. Click **OK**.  
    ![4_Screenshot-Monday_Document360_make_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733734467420.png)

### Step 4: Test the scenario

To test the scenario before activating and publishing,

1. Click the **Run once** button at the bottom left to test your scenario.

   The test details appear at the bottom of the page.
2. To test the scenario, create a new task in the associated Monday.com project.
3. Once you create the task, a new article will be created in the associated **Document360** category.

   You can verify this with the test details at the bottom of the page. If required, you can also navigate to the **Document360** project and check the newly created article.

### Step 5: Schedule the scenario

1. To schedule your scenarios, enable the toggle at the bottom left.

   Turning on this toggle will run the scenario immediately as the data arrives.
2. Once done, click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Monday.com_Make.png)

### Step 6: Activate the scenario

1. Click the **Exit editing** () icon at the top.

   The integration dashboard page will appear.
2. Turn on the **ON/OFF** toggle near the **Edit** option, to activate the scenario.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Monday.com_Make.png)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="typeform-and-document360-integration"></a>

## Integrating Typeform with Document360

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Typeform is a versatile platform for creating interactive forms, surveys, and quizzes. It offers an intuitive interface and engaging design to help businesses collect user feedback, conduct surveys, and gather data in a conversational format. Typeform is commonly used to gather questions from customers or prospects through engaging forms and surveys.

## Integrating Typeform with **Document360**

To integrate Typeform with Document360,

1. Ensure that you have logged into your [Make account](https://www.make.com/).
2. Click **Sign in** at the top to log in to your **Make** account.

   The **Make** dashboard will appear.

![1_Screenshot-Make_signin_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733737804012.png)

### Step 1: Create a new scenario

1. Click **Create a new scenario** at the top right.
2. Click the add (**+**) icon, and a list of available applications appears.
3. In the Search field, type in the app name, Typeform.
4. Select Typeform and choose the desired task you wish to map with Typeform.

   For example, select **Watch Responses** to get triggers when a new response is submitted.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Typeform_Make.gif)

### Step 2: Connecting Typeform

Connect your Typeform account with the new scenario in the Typeform module.

![2_Screenshot-Typeform_watch_new_response](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733740477517.png)

1. Click **Create a connection** and enter the **Connection name**.
2. Click **Save**.
3. Allow Typeform to access your **Make** account by clicking **Accept**.

   Your Typeform account will be connected to **Make**.
4. In the **Limit** field, enter the maximum number of responses that **Make** will return during one execution cycle.
5. Click the **Form ID** dropdown and select the form you want to watch the responses.
6. If you want the data only when specific fields are filled, add the desired fields with the **Add item** in the **Fields** section.
7. In the **Completed** section:

   * Select the **Yes** option to watch only forms that are submitted.
   * Select the **No** option to watch only forms that are not submitted.
   * Select the **Empty** option to watch only forms with empty responses.
8. In the **Query** field, enter the text string to watch only responses that contain the entered text.
9. Click **OK**.
10. In the **Choose where to start** popup, select the date/time from when you want to start watching new responses.
11. Click **OK**.

### Step 3: Connecting Document360

Once you have connected Typeform with **Make**, the next step is to link your **Document360** account.

![3_Screenshot-New_module_typeform](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733740624575.png)

1. On the **Integration Typeform** page, click the **Add another module** (+) option.
2. In the Search field, enter **Document360**.
3. Select **Document360** and select the action you want to perform in **Document360**.

   For example, you can select **Create an article** to create a draft article.
4. In the **Document360** window, select the connection that you have already connected.

   To create a new connection,

   1. Click **Create a connection** and enter the **Connection name**.
   2. Enter your API key and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Typeform_Make.gif)

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
6. On the **Make** extension tile, click **Connect**.
7. Click the **Copy** () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Asana_Make.gif)
8. Head back to the **Make** window and paste the API token in the field.
9. Click the **Article Title** field and select the parameters you want as the title of your **Document360** article.

   For example, you can select the Task name parameter and retrieve the task name as the title of your **Document360** article.
10. Click the **Article Content** field and select the parameters you want as the content of your **Document360** article.

    For example, you can select the Assignee Name, Resource Type, and Due On parameters.
11. From the **Project Category ID** dropdown, select the category where you want the new article to be created.
12. Click **OK**.

### Step 4: Test the scenario

To test the scenario before activating and publishing,

1. Click the **Run once** button at the bottom left to test your scenario.

   The test details appear at the bottom of the page.
2. To test the scenario, create a new task in the associated Typeform project.
3. Once you create the task, a new article will be created in the associated **Document360** category.

   You can verify this with the test details at the bottom of the page. If required, you can also navigate to the **Document360** project and check the newly created article.

### Step 5: Schedule the scenario

1. To schedule your scenarios, enable the toggle at the bottom left.

   Turning on this toggle will run the scenario every 15 minutes.
2. Once done, click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Typeform_Make.png)

### Step 6: Activate the scenario

1. Click the **Exit editing** () icon at the top.

   The integration dashboard page will appear.
2. Turn on the **ON/OFF** toggle near the **Edit** option, to activate the scenario.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Typeform_Make.png)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="google-docs-and-document360-integration"></a>

## Integrating Google Docs with Document360

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Many organizations around the world use Google Docs as a document management tool. Google, as a platform, offers a more integrated environment where managing multiple forms of documents and files is rather easy.

---

## Integrating **Document360** with Google Docs

To integrate Google Docs with **Document360**,

1. Ensure that you have logged into your [Make account](https://www.make.com/).
2. Click **Sign in** at the top to log in to your **Make** account.

   The **Make** dashboard will appear.

![1_Screenshot-Make_signin_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733745491436.png)

### Step 1: Create a new scenario

1. Click **Create a new scenario** at the top right.
2. Click the add (**+**) icon, and a list of available applications appears.
3. In the Search field, type in the app name, Google Docs.
4. Select Google Docs and choose the desired task you wish to map with Google Docs.

   For example, select **Watch documents** to monitor the new articles created in the Knowledge base.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Google_docs_Make.gif)

### Step 2: Connecting Google Docs

Connect your Google Docs account with the new scenario in the Google Docs module.

1. Click **Create a connection** and enter the **Connection name** or select a connection name from the dropdown if you have one already.
2. From the **Watch Documents** dropdown, select either **By Created Date** or **By Modified Date**.
3. From the **Choose a Drive** dropdown, select the desired drive folder where you want to create the document.
4. In the **Folder ID** field, choose the folder ID where you wish to store your document.
5. In the **Limit** field, enter the maximum number of results to be worked with during one execution cycle.
6. Click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Google_docs_Make.png)

### Step 3: Connecting **Document360**

Once you have connected Google Docs with **Make**, the next step is to link your **Document360** account.

1. On the **Integration Google Docs** page, click the **Add another module** (+) option.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenShot-Google_docs_Make.png)
2. In the Search field, enter **Document360**.
3. Select **Document360** and select the action you want to perform in **Document360**.

   For example, you can select **Create an article** to create a draft article.
4. In the **Document360** window, select the connection that you have already connected.

   To create a new connection,

   1. Click **Create a webhook** and enter the desired webhook name.
   2. Click **Create a connection** and enter the desired connection name.
   3. Enter your API key and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGif-Google_docs_Make.gif)

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
6. On the **Make** extension tile, click **Connect**.
7. Click the **Copy** () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Asana_Make.gif)
8. Head back to the **Make** window and paste the API token in the field.

### Step 4: Test the scenario

To test the scenario before activating and publishing,

1. Click the **Run once** button at the bottom left to test your scenario.

   The test details appear at the bottom of the page.
2. To test the scenario, create a new task in the associated Google Docs project.
3. Once you create the task, a new article will be created in the associated **Document360** category.

   You can verify this with the test details at the bottom of the page. If required, you can also navigate to the **Document360** project and check the newly created article.

### Step 5: Schedule the scenario

1. To schedule your scenarios, enable the toggle at the bottom left.

   Turning on this toggle will run the scenario every 15 minutes.
2. Once done, click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenShot-Google_docs_Make.png)

### Step 6: Activate the scenario

1. Click the **Exit editing** () icon at the top.

   The integration dashboard page will appear.
2. Turn on the **ON/OFF** toggle near the **Edit** option, to activate the scenario.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenShot-Google_docs_Make.png)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="jira-and-document360-integration"></a>

## Integrating Jira with Document360

**Plans supporting integration of Make extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Jira service desk, a product of Atlassian aims to deliver great service experiences and ensures your employees and customers can get help quickly. Jira provides extensive functionalities for service desk management, analytics, request queues, and integration with major team collaboration platforms.

---

## Integrating Jira with **Document360**

To integrate Jira with **Document360**,

1. Ensure that you have logged into your [Make account](https://www.make.com/).
2. Click **Sign in** at the top to log in to your **Make** account.

   The **Make** dashboard will appear.

![1_Screenshot-Make_signin_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733814317319.png)

### Step 1: Create a new scenario

1. Click **Create a new scenario** at the top right.
2. Click the add (**+**) icon, and a list of available applications appears.
3. In the Search field, type the app name Jira Cloud Platform.
4. Select **Jira Cloud Platform** and choose the task you wish to map with Jira.

   For example, select **Watch Issues** to get triggers when a new response is submitted.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Jira_Make.gif)

### Step 2: Connecting Jira

Connect your Jira account with the new scenario in the Jira module.

1. Click **Create a webhook** and enter the desired **Webhook name**.
2. Click **Create a connection** and enter the **Connection name**.
3. Enter the **Service URL**.
4. Enter the **Username** and **API Token**.
5. Click **Save**.
6. From the **Watch Issues** dropdown select the desired option you want to track.
7. From the **Select a Method** dropdown and select the desired option with which you want to search the issues.
8. If required, select the desired filters in **Filter**, **Expand**, and **Fields**.
9. In the **Limit** field, enter the maximum number of tasks Make will return during one execution cycle.
10. Click **OK**.
11. In the **Choose where to start** popup, select the date/time from when you want to start watching new issues.
12. Click **OK**.

    ![2_Screenshot-Jira_make_popup_window](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1733815745423.png)

    Your Jira project is now connected with Make.

### Step 3: Connecting **Document360**

Once you have connected Jira with **Make**, the next step is to link your **Document360** account.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenShot-Jira_Make.png)

1. On the **Integration Jira** page, click the **Add another module** (+) option.
2. In the Search field, enter **Document360**.
3. Select **Document360** and select the action you want to perform in **Document360**.

   For example, you can select **Create an article** to create a draft article.
4. In the **Document360** window, select the connection that you have already connected.

   To create a new connection,

   1. Click **Create a connection** and enter the **Connection name**.
   2. Enter your API key and click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Jira_Make.gif)

   To generate the API token from the **Document360** portal,
5. Navigate to **Settings** () > **Knowledge base portal**> **Extensions** > **Team collaboration**.
6. On the **Make** extension tile, click **Connect**.
7. Click the **Copy** () icon to copy the token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Asana_Make.gif)
8. Head back to the **Make** window and paste the API token in the field.
9. Click the **Article Title** field and select the parameters you want as the title of your **Document360** article.

   For example, you can select the Task name parameter and retrieve the task name as the title of your **Document360** article.
10. Click the **Article Content** field and select the parameters you want as the content of your **Document360** article.

    For example, you can select the Assignee Name, Resource Type, and Due On parameters.
11. From the **Project Category ID** dropdown, select the category where you want the new article to be created.
12. Click **OK**.

### Step 4: Test the scenario

To test the scenario before activating and publishing,

1. Click the **Run once** button at the bottom left to test your scenario.

   The test details appear at the bottom of the page.
2. To test the scenario, create a new task in the associated Jira project.
3. Once you create the task, a new article will be created in the associated **Document360** category.

   You can verify this with the test details at the bottom of the page. If required, you can also navigate to the **Document360** project and check the newly created article.

### Step 5: Schedule the scenario

1. To schedule your scenarios, enable the toggle at the bottom left.

   Turning on this toggle will run the scenario immediately as the data arrives.
2. Once done, click **OK** to save.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Jira_Make.png)

### Step 6: Activate the scenario

1. Click the **Exit editing** () icon at the top.

   The integration dashboard page will appear.
2. Turn on the **ON/OFF** toggle near the **Edit** option, to activate the scenario.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenShot-Jira_Make.png)

Application Programming Interface - A set of rules that allows one software application to communicate with another.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="chrome-extension"></a>

## Chrome

**Plans supporting integration of Chrome extensions with Document360**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Chrome** is a widely used and free cross-platform web browser. The Chrome Web Store offers various extensions to aid in various functions.

> Extensions are the small software programs that enable users to tailor browser functionality and behavior to individual needs or preferences.

The [Document360 extension](https://chromewebstore.google.com/detail/document360/lifhmbmenhhiolpbbahnjicckcnnophl) is now available in the Chrome web store and can be added to the browser.

With the Document360 Google Chrome Extension and access to the API key, we can connect, access, and look up the articles and page categories from your knowledge base within your browser anytime, anywhere.

## Chrome extension: setup

### Adding the Document360 extension in Chrome

1. Open the Chrome browser application on your system and navigate to the [Chrome Web Store](https://chromewebstore.google.com/).
2. Browse or search the Document360 extension and click on it.  
    On the description page, the details can be viewed.
3. Click **Add to Chrome** to add the extension.
4. A pop-up would appear, click **Add extension**.

![1_Screenvideo-Chrome_Extension_Adding.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenvideo-Chrome_Extension_Adding.gif)

You can always manage your extension settings:

5. On the Chrome page, click More()> **Extensions** > **Manage Extensions**, and all the available extensions will be listed.

   > NOTE
   >
   > * You can add or remove extensions in the Chrome browser only when logged in with your Google account.
   > * Also, you’ll be unable to add Chrome extensions as a guest user.
   > * If you want to access the extension in the Incognito window, go to **Manage extensions** and **turn on** the **Allow in Incognito** option.

### **API key configuration**

1. Click on the Document360 icon from the launcher at the top. A side window appears with the required field for the API key.

![5_Screenshot-API_Key.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-API_Key.png)

2. Navigate to the desired Document360 portal.
3. Navigate to Settings ()> **Knowledge base portal** > **Extensions**, and all the available extensions will be listed.
4. In the **Chrome extension**, click **Details**.
5. The **Chrome details** pop-up appears with an **Internal integration token** key.
6. Copy the generated key by clicking on the clipboard () icon.
7. Now paste the key into the Document360 launcher on Chrome and click **Save**.

   Now your Knowledge base would be integrated and available anywhere and anytime on your Chrome browser.

## Feature highlights

**Easy launch and customization**

* Once the Document360 Chrome extension has been successfully integrated using the API key, you can easily launch the Document360 assistant in your Chrome window.
* When you open a new Chrome tab or window, click on the Document360 icon in the extension toolbar at the top to launch it.
* You can also toggle the assistant either to the left or right side of the window. The default mode will be the right side.

![2_ScreenVideo-Document360_Extension.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenVideo-Document360_Extension%282%29.gif)

### **Quick launch label**

* If you close the Document360 assistant, you can find the Document360 quick launch label on the right side of your browser window.
* Click on the label to launch the assistant on the same Chrome tab.
* You can drag the label along the vertical axis and position it in your convenient spot.
* You can also remove the label by hovering your mouse pointer over the label and clicking on theClose (**X**) button.

### **Page Help**

* This is the default tab when you launch the Document360 extension.
* You can find the top-searched articles listed based on your previous searches on the knowledge base.
* You can also search for articles using keywords. Just type in your search term in the field. As you type, the relevant search results for articles will be listed. Select the article, and you can view the entire article in the reader view.

The options available in the reader view are

1. Copy (): Click on the copy icon to copy the content of the entire article to your clipboard.
2. Open in new tab (): This option would open the article location on your knowledge base in a new browser tab.
3. Expand (): This option would expand your reader view screen and not a full-screen view.

![3_Screenshot-PageHelp.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-PageHelp.png)

### **Knowledge base view**

* Click on the **Document360** launcher icon on the Chrome window and select the **Knowledge base** tab in the assistant window.
* This option will give you access to the entirety of the integrated knowledge base. You can browse through the various categories, subcategories, and articles inside the assistant itself.
* This would be an exact copy of the tree-view structure of the integrated knowledge base.
* You can click on the articles and view the content from the reader's point of view.

## **Removing the Document360 extension in Chrome**

To remove the Document360 extension from your Chrome browser, you can either visit the Document360 page in the Chrome Web Store, click on the **Remove from Chrome button**, or click **Remove** again in the prompt.

or  
Right-click on the Document360 launcher icon in the Chrome window, select the **Remove from Chrome** option and click **Remove** in the prompt.

![4_Scrrenvideo-Removing_Doc360.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Scrrenvideo-Removing_Doc360.gif)

---

## FAQ

**What can be accessed through the Document360 Google Chrome extension?**

You can access articles and page categories from your Document360 knowledge base directly in the Chrome browser. The extension provides a search feature, allows you to view articles, and offers quick navigation through your knowledge base structure.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="crowdin"></a>

## Crowdin

**Plans supporting Crowdin extension**

| Professional | Business | Enterprise |
| --- | --- | --- |
| **✗** | Add-on | ✔ |

Crowdin is a cloud-based localization management platform that streamlines the translation process, making it more efficient. By integrating Crowdin with Document360, you can automate and enhance the localization of your multilingual knowledge base, combining both machine and human translation to ensure quality and accuracy.

**Prerequisite**

Before starting the integration, ensure that you have an active Crowdin account. If you don't have one, sign up using valid credentials.

---

## Basic setup guide

### Creating a project in Crowdin

To use the Crowdin platform as a translation partner with Document360 for content translation, ensure you are a registered user of Crowdin on an enterprise account.

1. Log in to your [Crowdin enterprise account](https://accounts.crowdin.com/workspace/choose?continue=%2Fenterprise) and go to your Crowdin workspace.
2. Click **Create Project** on the right of the screen to initiate the setup.
3. In the project field, enter the name of your project.

> NOTE
>
> We recommend having project names be the same to make the **Push to Crowdin** option work seamlessly in Document360. If you choose to have different names in Document360 and Crowdin, follow the below steps.
>
> 1. Create a project in Document360 and Crowdin with the same names.
> 2. Enable the extension for Crowdin in Document360 by creating the Crowdin API key. The project name must be the same to validate the API key. Document360 will not allow the storage of invalid API keys.
> 3. Now, you can choose to change the names.

4. Next, select the source language of your project.

> NOTE
>
> Similar to the project address, the source language cannot be changed once submitted.

5. Select the target languages that are added to the versions in your project.
6. Choose a workflow that maps out the flow of content within your project.
7. Click **CREATE PROJECT**.

### 2_Screenvideo-Creating_a_Project_in_crowdin.gif

### Document360 integration with the Crowdin project

To integrate Document360 with your Crowdin project follow the steps below.

1. Go to Settings ()> **Knowledge base portal** > **API Tokens**.
2. Click **New API Token** or **Create API token** if this is the first token you are creating.
3. Enter the **Token name** in the field.
4. Select the options required in the **Allowed Method(s)** field (GET, POST, PUT, DELETE).
5. Click **Generate** and copy the generated API token.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Crowdin_extension.gif)
6. Next, return to the Crowdin integration webpage.
7. Select the created Crowdin project, and you will be taken to the project dashboard.
8. On the dashboard side menu, go to **Integration.**
9. From the list of integration options available, select the **Document360** application.
10. Now, the application requires an API token from Document360. **Paste** the copied API token.
11. Click **Log in with Document360.**

    ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Crowdin.png)

> NOTE
>
> Machine translations are enabled for each project on **Crowdin**, with **Crowdin Translate** as the default translation engine. If you want to change the translation engines, it is required to configure them before the project members can use them. Some of the other translation engines supported by Crowdin are
>
> * MT Engine IDs
> * Microsoft Translator
> * Yandex Translate
> * DeepL Translator
> * Watson (IBM) Translator
> * ModernMT
> * Amazon Translate
> * Google Translate
> * Google Cloud AutoML Translation
>
> [Click here](https://support.crowdin.com/configuring-machine-translation-engines/#:~:text=By%20default%2C%20machine%20translations%20are,suggestions%20in%20the%20project%20settings.) to learn more about how to configure machine translation engines on Crowdin.

### Acquiring API token from Crowdin

From your Crowdin workspace, select the Crowdin project configured with your Document360 knowledge base.

1. From the top right corner, click **Profile** > **Account settings**.
2. Select the **Access tokens**, and in the **Personal Access Tokens** section, click **New Token**.
3. Enter the **token name** and select **All scopes.**
4. Click **Create**.
5. Your access token has been created. **Copy** the generated token.

### Integrating with Document360

1. Head back to **Document360**, navigate to Settings ()> **Knowledge base portal** > **Extensions**
2. Under the **Translation & Browser extension** tab, select **Crowdin**.
3. **Paste** the copied access token in the API key section.
4. Enter the organization name from your Crowdin account.
5. Click **Save**, and you are ready to go.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Crowdin.gif)

You can now use the **Push to Crowdin** option from Document360.

### Feature Highlights

#### Sync categories and articles to Crowdin for translation

You can sync the types and articles from your Document360 project to Crowdin for translation in the Crowdin workspace.

> NOTE
>
> To sync articles seamlessly between Document360 and Crowdin workspace, ensure the project name is the same.

Log in to your Crowdin account and select the Crowdin project configured with your knowledge base.

1. On the dashboard side menu, navigate to **Integration**.
2. You can view the **Crowdin project** and the Document360 project side-by-side.
3. On the Document360 side, you can view the categories and articles from your connected knowledge base.
4. You can search for articles using the search bar.
5. Select the categories and articles you'd like to sync with your Crowdin project for translation.
6. Click the **SYNC TO** option in the Document360 section.

> NOTE
>
> Each article synced with the Crowdin project would have 2 files.
>
> 1. The article content file, mostly in markdown or HTML format.
> 2. The article title file, which is a .txt file.

## Push to Crowdin from Document360

* After you've integrated your Document360 project with your Crowdin project and synced your categories and articles, you can directly use the **Push to Crowdin** feature on Document360.
* For instance, you have synched and translated your articles on your knowledge base using Crowdin. Later, you may make some changes or update the content of your article. Instead of visiting your Crowdin workspace, you can directly click on Push to Crowdin from your Document360 article editor.
* Click on the **Crowdin icon** on top of the article editor. You can find it next to the **See contributor** option.

**Default language**

In the dropdown **Crowdin Sync** info, you can view the time of the **Last push to Crowdin** and the **Push to Crowdin** button.

**Non-Default languages**

* In the dropdown Crowdin Sync info, you can view the time of the Last translation sync from Crowdin, the time of the Last push to Crowdin, and the **Push to Crowdin** button.
* Click the **Push to Crowdin** button, and the latest article content will be synched to your Crowdin project.

> NOTE
>
> Only the categories and articles already synced with the Crowdin project would be able to use the 'Push to Crowdin' feature.

#### **Timestamp feature**

You can now view the timestamp of the translation actions performed on the specific article.

* **Last translation sync from Crowdin**: The timestamp of the recent translation and Push to Document360 action performed from the Crowdin platform.
* **Last push to Crowdin**: The timestamp of the recent Push to Crowdin action from the Document360 side

### Translating your connected Knowledge base articles

* From your Crowdin platform, select the Crowdin project configured with your Document360 knowledge base. On the **Project home**, you can find details about your project.
* You can view the current translation status, make sure any translations are ongoing, and you can also pause the translation.
* Below is the **Home** tab; under the **Translation** section, you can see the list of target languages for your project. Also, you can find individual **progress indicators** adjacent to them.
* If you click on any language, you will be taken to a page that shows a detailed view of the categories and articles pushed to Crowdin from Document360 for translation.
* You can invite members from your team or any external agencies to collaborate on the Crowdin platform. They can directly edit or review the machine-translated content before pushing it back to the Document360 project.

---

## FAQ

**Does the Document360 subscription include Crowdin translation service?**

No, the Document360 subscription does not include the Crowdin translation service. However, you can integrate Document360 with Crowdin for translation purposes.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="phrase"></a>

## Phrase

**Plans supporting Phrase extension**

| Professional | Business | Enterprise |
| --- | --- | --- |
| **✗** | Add-on | ✔ |

Integrating the Phrase extension with Document360 allows you to translate your content into other languages with just a few simple steps. This upgrade facilitates high accuracy, speed, and scalability in your translations. This can lead to the requirement of fewer resources, quicker business effects, and higher customer engagement.

---

## Setting up Phrase Translation Service

Follow the steps to set up the Phrase translation.

1. Navigate to Settings () > **Knowledge base portal** > **Extensions** in the Knowledge base portal.
2. Locate **Phrase** under the **Translation & Browser** section and click **Connect** on the **Phrase** tile.
3. Click **Create New Configuration** to configure the translation service for the available workspace(s).
4. Paste the generated API token from your Phrase account and click **Validate**.

   For detailed instructions on generating an API token in Phrase, whether you have a free account or another type, please refer to the [help article](https://support.phrase.com/hc/en-us/articles/5808341130268-Generate-API-Access-Token-Strings).
5. Select the workspaces where you want to deploy the Phrase translation service.
6. Once done, click **Create**.

> **NOTE**
>
> * **Resync:** The Resync option is used to update the language changes that occurred in the workspace. If you are editing the default language of the workspace, then the translation will not be modified immediately. Then you need to click **Edit configuration > Resync**. Then the Resync function will ensure that the translations are updated to reflect these changes.

![1_ScreenGIF-Setting_up_Phrase_Integration_](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Setting_up_Phrase_Integration_.gif)

---

## Language Configuration

Follow the steps to select the default language to translate the content to the desired language(s).

1. Navigate to **Localization & workspaces** to view the existing workspaces from the Knowledge base portal.
2. Click **Edit** () to change or designate the default language and the language to which you want the articles translated.
3. Click **More** (•••) to the language that you want to edit.
4. Click **Set as default** to enable the selected language to be the default language.
5. Turn on or turn off the **Enable right to left** toggle to change the script orientation.

> NOTE
>
> Script orientation refers to the direction in which text is read and written, such as from left to right (LTR) or from right to left (RTL).
>
> Turn on the **Enable right to left** toggle to change the LTR (Left to Right) script to the RTL (Right to Left) or vice versa.

6. Click **Update** to save the changes.

![2_Screenshot-Language_configuration_localization&Workspace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Language_configuration_localization&Workspace.png)

---

## Translation Configuration

Follow the steps to configure the translation.

1. Navigate to Settings ()> **Knowledge base portal** > **Extensions** in the Knowledge base portal.
2. Locate **Phrase** and click **Details**.
3. Select the desired Workspace for which you want to configure the translation.
4. Select the language from which you want to translate from the **Translate from** drop-down.
5. Choose the language you want to translate the content from the **Translate to** drop-down.
6. Choose the articles for translation by selecting the checkbox. You can choose an entire category by selecting the checkbox against the category.
7. Click **Translate**.

   > NOTE
   >
   > Here selected articles will be switched over to the Advanced WYSIWYG editor upon translation and cannot be changed back. You can choose to continue or click Continue to terminate the operation.

8. You can view the status of the translation in the **Status** column.
9. Click the **Refresh** () icon to view the article's translation status.
10. You can filter the list of articles based on the status of the article as given below.

    * **Yet to initiate:** Articles that are yet to be translated.
    * **Translated:** Articles that are translated.
    * **Failed:** Failed translations.
    * **In progress:** Article translation is in progress.

![3_Screenshot-Translation_configuration_refresh_filter_translate](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Translation_configuration_refresh_filter_translate.png)

> **NOTE**  
> The translation process can be enabled for single or multiple workspaces.

## Preview Translated Content

1. Navigate to Documentation () and change the workspace language to which the content was translated.
2. Open the specific article and click ( ) **Preview** to preview it if it has not been published.
3. Click **View in knowledge base** (  ) to view the published article, if published.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Phrase_extension.gif)

> NOTE
>
> To use the Phrase translation service extension in Document360, you must subscribe to it. For subscription details, visit Pricing or Request a Demo on the Phrase website.

---

## FAQ

**Can I translate content into any language I choose?**

No, you can only translate content into the languages available in your respective project.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="general-project-settings"></a>

## General project settings

**Plans supporting access to general settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Project settings** page in Document360 allows you to configure various aspects of your knowledge base portal, ensuring that it meets the specific needs of your project and team. From defining project details to customizing editor preferences, managing file formats, and setting analytics rules, these settings give you control over how your knowledge base operates and interacts with external tools.

---

## Accessing the Project settings page

To access the project settings, follow these steps:

1. Navigate to ****Settings** ()** > ****Knowledge base portal**** > ****General****.

### Knowledge base details

2. Enter your project name in the **Project name** field.
3. Select your country from the **Country** dropdown menu.

### Remember state

4. Turn on the **Remember state** toggle to retain and restore the user interface (UI) state from your last interaction within the knowledge base portal.

   For example, if you are working on a specific article and navigate away to check the project settings, when you return to the ****Documentation**** section in the left navigation bar, you will land directly on the article you were working on.

> NOTE
>
> The **Remember state** toggle is enabled by default.

### Editor

5. Choose your default editor from the following options:

   * Select **Markdown** and, if needed, select the **Show line numbers in markdown editor** checkbox to display line numbers in the editor.
   * Select **Advanced WYSIWYG editor** and, if needed, select the **Show outline view in advanced WYSIWYG editor** checkbox.

> NOTE
>
> All the new articles will be created based on these editor choices.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-General_Project_settings_page_!.png)

### Documentation

6. Turn on the **Default review reminder** toggle to enable automatic reminders. Then, enter the number of days after which the reminder should occur.

### Drive settings

7. Choose **Allow all media formats** to permit uploading any media format in the drive.
8. Select **Choose allowed media formats** to restrict uploads to specific media formats.
9. Click **Add**.
10. In the **Add allowed format** panel, enter the **Media type** and **Extension**.
11. To add another media format, click **Add media type**.
12. Once finished, click **Save**.

### Analytics settings

13. To exclude certain IP addresses from project analytics, enter the **Description** and the desired **IP address**.
14. Click the  icon to add the IP restriction.

    A toggle will be created for each IP.
15. Turn off the toggle to remove the restriction.
16. Click the **More ()** icon, then select **Edit** () to update the description or **Delete** () to remove the IP restriction.

### Support access

17. Turn on **Support Access** toggle to grant the support team access to your account for troubleshooting, support, or testing purposes.

> NOTE
>
> To delete your project, please contact our [support](https://document360.com/support/) team.

18. Once done, click **Save** to save the changes.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-General_Project_settings_page_2.png)

---

### FAQs

#### Why should I enable or disable the Remember state feature?

* Enabling Remember state is beneficial for team members who want to keep their last activity within Document360, making it easier to continue their work without losing context.
* Disabling Remember state will reset the view back to the default starting point, which can be useful if you prefer a fresh start every time you navigate back to a section.

**Example:**

* **When enabled:** If you navigate from an article in the ****Documentation**()** section to ****Analytics**()**, then back to the ****Documentation**()** section, you’ll be directed straight to the previously edited article.
* **When disabled:** After switching from the ****Documentation**()** section to ****Analytics**()** and returning, you’ll start from the first article or category in ****Documentation**()**.

#### What scenarios does Remember state apply to in Document360?

1. **Filter**  
   When users switch between modules like ****Drive**()** and ****Analytics**()**, filters they’ve applied are retained for consistent data display.

   **Example:** You’re analyzing articles in Analytics with a custom date range filter. If you navigate to ****Drive**()** and then return to ****Analytics**()**, your custom date range filter remains applied, ensuring the data view remains relevant.
2. **Category manager**   
   Users often expand the category to view subcategories and articles. Remember state retains the category manager’s last position, making it easier to pick up where you left off.

   **Example:** While exploring subcategories in ****Documentation**()**, you expand a category and navigate to ****Analytics**()**. When you return to ****Documentation**()**, the category manager remains expanded in the same position, maintaining your navigation context.
3. **Workspace dropdown**  
   For team members working across multiple workspaces, Remember state preserves the selected workspace even when navigating through other sections.

   **Example:** Suppose you are in ****Analytics**()** under the Beta workspace. You switch to workspace V1, explore the ****Drive**()** section, and then return to ****Analytics**()**. With Remember state enabled, you’ll land back in ****Analytics**()** under workspace V1, maintaining your workspace continuity.

<a id="team-auditing"></a>

## Team auditing

**Plans supporting access to team auditing settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Team auditing** feature allows you to track the actions performed by your team accounts within your Document360 project. For example, you can monitor when a team member adds a new article, updates an existing one, or changes settings in the knowledge base portal. This feature helps ensure accountability, as it logs who performed each action and when, making it easy to trace specific activities, such as restoring an article that was mistakenly deleted or reviewing changes made during a product release.

The **Audit configuration** feature allows you to selectively monitor key actions across your project, helping you stay informed without tracking unnecessary data. This feature is especially useful in projects that require oversight of sensitive information or strict compliance.

For example, a project manager wants to monitor when new articles are published or existing articles are updated, so they turn on the audit configuration for **Documentation editor** events only.

> **NOTE**
>
> Only the **Owner**, **Admin**, and users with a **custom role** who have access to team auditing can view and update the team auditing feature.

---

## Accessing team auditing

1. Navigate to **Settings** () > **Knowledge base portal** > **Team auditing** in the Knowledge base portal.

   By default, **Team auditing** tab will be selected.

   The activity data for all team accounts, including the event, who performed it, the date and time, and the language will appear.

> NOTE
>
> Only 20 audit records are displayed at one instance. Scroll and click **Load more** to view the next set of 20 entries.

2. Use the filters to narrow down the data:

   1. **Events:** View actions performed in specific areas of the project.
   2. **Audit date:** View actions from time period such as 1 year, 3 months, 30 days, 7 days, or set a custom date range.
   3. **Activity by user:** View actions performed by specific team accounts.
3. Click **Refresh** at the top to get the latest updates.
4. Click **Export CSV** to download the report to your local device.

> NOTE
>
> You can use Microsoft Excel, OpenOffice Calc, Google Docs, or other CSV tools to open the exported CSV file.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Auditing_and_Activity_tracking.gif)

---

## Setting up the audit configuration

To set up your audit configuration and tailor what you want to monitor:

1. Navigate to **Settings** () > **Knowledge base portal** > **Team auditing** in the Knowledge base portal.
2. Go to the **Audit configuration** tab.
3. Turn on the **All events** toggle to monitor all project-related events.
4. If you want to monitor only specific modules or events, turn on the toggle for the desired event category from the following modules:

   **a. Documentation editor**

   Tracks events related to documentation editor, such as:

   1. Article visibility changed
   2. Article settings updated
   3. Article slug updated
   4. Article title updated
   5. Article published
   6. Article created
   7. Article renamed
   8. Article deleted
   9. Article forked
   10. Article version deleted
   11. Bulk delete article versions
   12. Updated translation status
   13. Articles reordered
   14. Article contributors updated
   15. Article workflow status updated
   16. Article workflow due date updated
   17. Article workflow assignee updated
   18. Category created
   19. Category type updated
   20. Category settings updated
   21. Category slug changed
   22. Category contributors updated
   23. Category deleted
   24. Category renamed
   25. Categories reordered
   26. Category published
   27. Category forked
   28. Category version deleted
   29. Bulk delete category versions
   30. Category workflow status updated
   31. Category workflow due date updated
   32. Category workflow assignee updated
   33. Category visibility changed
   34. Article review reminder status updated
   35. Article pushed to crowdin
   36. Categories/Articles restored
   37. Categories/Articles permanently deleted
   38. Recycle bin emptied
   39. Shared article created
   40. Share link generated
   41. Share link deleted
   42. Clone article created
   43. Removed reference article
   44. Added glossary
   45. Updated glossary
   46. Deleted glossary
   47. Imported glossary
   48. Multiple shared article created
   49. Article publish later canceled
   50. Article scheduled for publish

   **b. Drive**

   Track events related to Drive actions, such as:

   1. Folder added
   2. Folder renamed
   3. Folder deleted
   4. File(s) added
   5. File updated
   6. File(s) deleted

   **c. Knowledge base portal settings**

   Tracks portal-specific activities, such as:

   1. Workspace updated
   2. Workspace deleted
   3. Workspace created
   4. Workspace display order changed
   5. Plan tier changed
   6. Payment details updated
   7. Project general settings updated
   8. Backup created
   9. Backup restored
   10. Notification channel deleted
   11. Notification channel created
   12. Notification channel updated
   13. Addons purchased
   14. Subscription created
   15. API token added
   16. API token deleted
   17. Extension token generated
   18. Extension token deleted
   19. Crowdin token added
   20. Crowdin token deleted
   21. Email domain deleted
   22. Email domain added
   23. Email address added
   24. Email user name added
   25. Email address updated
   26. Email user name updated
   27. Display workspaces as menu
   28. Subscription cancellation initiated

   **d. Knowledge base site settings**

   Covers site-specific activities, such as:

   1. Site design settings updated
   2. Custom JavaScript updated
   3. Custom CSS updated
   4. Article settings updated
   5. Project sub-domain updated
   6. Integration created
   7. Integration deleted
   8. Integration updated
   9. Home page builder restored
   10. Home page builder settings updated
   11. Robots.txt updated
   12. Site domain updated
   13. Cookie consent enabled
   14. Cookie consent disabled
   15. Cookie consent updated
   16. Smart bar added
   17. Smart bar updated
   18. Smart bar enabled
   19. Smart bar disabled
   20. Smart bar deleted
   21. Read receipt rule created
   22. Read receipt rule updated
   23. Read receipt rule deleted
   24. Ticket deflector deleted
   25. Ticket deflector added
   26. Ticket deflector updated
   27. Ticket deflector helpdesk added
   28. Ticket deflector helpdesk updated
   29. Ticket deflector helpdesk deleted
   30. Article redirection rule added
   31. Article redirect rule updated
   32. Article redirection rule(s) deleted
   33. Redirect rule(s) exported to CSV
   34. Redirect rules import requested
   35. Meta description generated
   36. Meta details updated
   37. Knowledge base builder updated
   38. Knowledge base builder published
   39. KB site 2.0 published
   40. KB site 2.0 preview created

   **e. Knowledge base widget settings**

   Tracks widget-related actions, such as:

   1. Knowledge base widget settings updated
   2. URL mapping created
   3. URL mapping updated
   4. URL mapping deleted
   5. Knowledge base widget settings deleted
   6. Knowledge base widget settings created

   **f. Users & security settings**

   Includes user management activities, such as:

   1. Site visibility changed
   2. Role added
   3. Role updated
   4. Role deleted
   5. Security group added
   6. Security group updated
   7. Security group deleted
   8. Content access added
   9. Site access added
   10. Content access updated
   11. Site access updated
   12. Content access removed
   13. Site access removed
   14. Team account added
   15. Team account updated
   16. Team account deleted
   17. IP restrictions updated
   18. IP restriction added
   19. IP restriction deleted
   20. Self sign up settings updated
   21. Import readers requested
   22. Import team account requested
   23. Export team account(s) to CSV
   24. Export reader(s) to CSV
   25. SSO configuration added
   26. SSO configuration updated
   27. SSO configuration deleted
   28. SSO users invited
   29. JWT created
   30. JWT regenerated
   31. JWT saved
   32. JWT updated
   33. JWT deleted
   34. Inheritance settings updated
   35. Reader account updated
   36. Reader account created
   37. Reader account deleted
   38. Convert to reader
   39. Convert to SSO team account
   40. Convert to SSO reader
   41. Convert to team account

   **g. Tools settings**

   Tracks actions such as:

   1. Project exported
   2. Project imported
   3. External project import requested
   4. Export PDF requested
   5. Export pdf content template added
   6. Export pdf content template updated
   7. Export pdf content template deleted
   8. Export pdf design template added
   9. Export pdf design template deleted
   10. Export pdf design template updated
   11. Article review reminder created
   12. Article review reminder updated
   13. Article review reminder deleted
   14. Content reuse variable added
   15. Content reuse variable updated
   16. Content reuse variable deleted
   17. Content reuse snippet Added
   18. Content reuse snippet updated
   19. Content reuse snippet deleted
   20. Article template added
   21. Article template updated
   22. Article template deleted
   23. Tag Added
   24. Tag Updated
   25. Tag Deleted
   26. Article imported
   27. Workflow status added
   28. Workflow status updated
   29. Workflow status deleted
   30. Workflow status reordered
   31. Find and replace
   32. Added glossary term suggestion
   33. Content reuse glossary suggested
   34. Updated glossary term suggestion
   35. Export pdf password removed

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Setting_up_the_audit_configuration.png)

---

### FAQs

**What is team auditing in the knowledge base portal?**

Team auditing allows you to track the actions performed by your team accounts within your Document360 project, such as adding or updating articles and changing settings.

**How do I export a specific team account's auditing records?**

To export the audit data for a specific team account, follow these steps:

1. Navigate to **Settings** () > **Knowledge base portal** > **Team auditing** in the Knowledge base portal.

   By default, **Team auditing** tab will be selected.
2. In the **Activity by user** dropdown, select the desired team account and click **Apply**.
3. In the **Event** dropdown, choose the required events and click **Apply**.
4. In the **Audit date** dropdown, choose the date range.

   The audit data for the selected team account will be listed.
5. Click **Export CSV** to download the data as a CSV file.

**How frequently is the audit data updated?**

Audit data is updated in real-time. You can click the Refresh button to ensure you are viewing the latest activities.

**Can I view actions performed by specific team accounts?**

Yes, you can filter the audit data to view actions performed by specific team accounts.

**Can I restrict access to team auditing data for certain team members?**

Yes, access to team auditing can be restricted based on user roles and permissions within the Document360 project.

**Can I recover deleted articles or content through team auditing?**

Team auditing only tracks actions taken, it does not provide recovery options. To recover deleted content, refer to the Document360 [backup and restore](/help/docs/backup-restore) or [version history](/help/docs/revision-history) features.

**Can I monitor specific events instead of all project-related events?**

Yes, turn on the toggle for specific event categories to monitor only those events.

**Can I track changes made to the knowledge base site settings?**

Yes, you can monitor site-specific activities like custom CSS updates, enabling cookie consent, etc.

**Is it possible to track actions related to Drive activities?**

Yes, you can monitor Drive-related activities such as folder additions, deletions, and file updates.

**Why is the article creation event missing or showing the old name in Team auditing after a Word import?**

If the article name is manually updated during the Word import process, this change will not be captured in the Team auditing, and the original name of the Word file will be reflected. To ensure the correct article name is reflected in auditing logs, avoid renaming the article during the import process. Instead, rename it after the import is complete.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

<a id="localization-getting-started"></a>

## Localization - Getting started

**Plans supporting localization settings in Knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Localization is the process of transforming and translating the content, look, and feel of a product or service to a specific market or locale. In most cases, the audience is classified based on language, region, or more. In reality, localization is a business's key to unlocking an entirely new revenue center and widening its brand reach in the global market.

---

Having a global clientele for your business necessitates having a localized language website and knowledge base. This would eliminate many obstacles that your customers encounter when interacting with a single-language website for support.

> NOTE
>
> * Localization will be available in all plans. You can also purchase additional languages localization as an add-on.
> * In Document360, if you have a default language of your knowledge base as English, you can also add support articles in a few other languages, like Spanish and Japanese.
> * The reader would choose to switch between the different languages using a dropdown at the top right section of your page.
> * If you have translated the articles in the respective languages by manual or machine translation, upon selection, the support articles will be displayed in the chosen languages.

### Complete localization

A localized Document360 knowledge base would  constitute the respective language's specific functionalities, articles, and controls. This involves translating the content from the original language and modifying it to better suit the target audience. In addition, the graphics, color, aesthetics, fonts, and images can be customized accordingly.

Apart from the content and visual elements, there are other parameters like units of measure, currencies, local formats for addresses, dates, communication addresses, and more.

A fully localized knowledge base resonates with your diverse users by incorporating culturally relevant nuances, making it feel familiar instead of simply using machine translators and replacing the English words with translated text.

A multilingual Document360 knowledge base could automatically detect and load in a customer's preferred language (based on the customer's login location or browser location preferences).

### FAQ(s)

**What is the localization of a knowledge base?**

Localization of a knowledge base refers to the process of adapting and translating content in your product's documentation to suit the language, culture, and preferences of different target audiences in various regions.

**Why is it important to localize our product's knowledge base?**

Localizing your knowledge base enhances the user experience by providing content in the user's native language, making it easier for them to understand and use your product. It also demonstrates your commitment to serving a global customer base and reducing the churn rate.

**What content should be localized in a knowledge base?**

Typically, all customer-facing content, including articles, FAQs, user guides, smart bars, cookie consent, controls, and interface text, should be localized to ensure consistency and clarity for users in different regions.

**How do I decide which languages to prioritize for localization?**

Document360 recommends you prioritize languages based on your customer demographics, market demand, and potential growth opportunities in specific regions. Analyze your customer's data and feedback to make informed decisions.

**Can I use machine translation for knowledge base localization?**

While the machine translation tools offered by Document360 can be a starting point, it's recommended to have human translators review and refine the content to ensure accuracy and maintain the intended meaning.

**How do I maintain consistency across localized knowledge base content?**

Document360 recommends the implementation of style guides, glossaries, and translation memory to maintain consistent terminology and writing conventions across different languages.

**What challenges should I anticipate during knowledge base localization?**

Some challenges include cultural nuances, technical jargon, and context-specific references that may not directly translate. A well-planned localization strategy can help overcome these challenges. You can also use third-party translation integration, such as Crowdin, with your Document360 project.

> For more information, read the article on [Crowdin integrating with Document360](/help/docs/crowdin).

**How often should I update the localized knowledge base content?**

Document360 recommends you keep localized content up-to-date with the original source content. Regularly review and update translated articles to reflect changes and improvements. Use the "**Review reminder**" feature to set up regular notifications.

**Should I use separate knowledge base workspaces for each language or have a single multilingual knowledge base workspace?**

This depends on your resources and user needs. Document360 recommends the use of a single multilingual knowledge base workspace. It is more manageable, and Document360 offers an array of security and access features for better control and customization.

**How do I measure the success of my knowledge base localization efforts?**

Use metrics like user engagement, performance analytics, geography metrics, support ticket reduction, customer satisfaction, and feedback from users in different regions to evaluate the effectiveness of your knowledge base localization strategy.

<a id="setting-up-a-multi-lingual-knowledge-base"></a>

## Setting up a Multi-lingual knowledge base

**Plans supporting localization settings in Knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can add multiple languages to a single project version or create a language-specific Knowledge base.

## Available languages

Document360 supports a variety of languages for localization using the Document360 machine translation. The languages supported by Document360 are:

**Supported languages**

1. Afrikaans [af]
2. Arabic [ar]
3. Arabic (Egypt) [ar-eg]
4. Chinese [zh]
5. Chinese (Simplified, People's Republic of China) [zh-cn]
6. Chinese (Traditional) [zh-hant]
7. Chinese (Traditional, Taiwan) [zh-tw]
8. Czech [cs]
9. Danish [da]
10. Dutch [nl]
11. English [en]
12. English (UK) [en-gb]
13. English (US) [en-us]
14. Estonian [et]
15. Fijian [fj]
16. Filipino [fil]
17. Finnish [fi]
18. French [fr]
19. French (Canada) [fr-ca]
20. Georgian [ka]
21. German [de]
22. Greek [el]
23. Hebrew [he]
24. Hungarian [hu]
25. Icelandic [is]
26. Indonesian [id]
27. Italian [it]
28. Japanese [ja]
29. Korean [ko]
30. Latvian [lv]
31. Lithuanian[lt]
32. Malagasy[mg]
33. Mongolian[mn]
34. Norwegian [no]
35. Polish [pl]
36. Portuguese [pt]
37. Portuguese (Brazil) [pt-br]
38. Romanian [ro]
39. Russian [ru]
40. Slovakian [sk]
41. Slovenian[sl]
42. Spanish [es]
43. Spanish (Mexico) [es-mx]
44. Swedish [sv]
45. Thai [th]
46. Turkish [tr]
47. Ukrainian [uk]
48. Vietnamese [vi]

## Adding multiple languages to a single version

* From the Knowledge base portal, go to **Settings** > **Knowledge base portal** > **Localization & Workspaces**.
* In the **Localization & Workspaces** tab, you can find the list of versions available in the project.
* There are **two** ways to add a new language to the project version.

### Method 1

1. Click **Edit** (🖉) on the right, and the **Edit workspace** blade appears.
2. Click the **New language** dropdown, and a list of languages appears.
3. Enter the desired language or keyword in the **Search languages** field, and the result is populated.
4. Select the checkbox for the desired language(s) and click **Apply**.
5. Once done, click **Update** at the bottom of the blade.

For more settings related to a language, you can also use More options (•••) adjacent to the language name.

* **Set as default**: Select this option to set the corresponding language as the default language for your knowledge base site.
* **Edit display name**: Use this option to update the display name for your workspace. The updated name will be shown on the knowledge base site when the corresponding language is selected. You can set a custom display name for your workspace in each of the available languages.
* **Right to left**: Most languages are written from left to right. However, there are a handful of languages written in the opposite direction. By enabling this, article content in the HTML editor and reader view (Knowledge base site) would start on the right and end on the left.
* **Hide**: Hides the language from the knowledge base. Hidden languages are indicated by strikethrough in the Knowledge base portal for reference.
* **Delete**: Delete the language from the selected list.

> NOTE
>
> You cannot hide or delete a default language.

![1_Screenvideo-Editing_Lang_Method_1.gif](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Multi-lingial-workspace-edit(1).gif)

### Method 2

1. Click **Add new language**() adjacent to the **Edit** (🖉) icon.
2. Select the check box for the desired language(s) and click **Add.**
3. Enter the desired language or keyword in the **Filter languages** field, and the result is populated.
4. All the categories and articles from your default language are available in the new language(s). However, these articles and categories must be manually translated using machine translation (HTML editor only) or with extensions like **Crowdin**.

![To add a new language to a workspace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Multilingual_Knowledge_base.gif)

> NOTE
>
> While selecting a language for your workspace, all languages other than English will be displayed in their native script.

---

## **FAQ(s)**

**How many languages does Document360 support?**

Document360 supports a total of 49 languages for localization. In the **Enterprise, Business, and Professional plans**, you are provided with 5, 3, and 2 languages respectively. Additional languages can be purchased separately.

> To know more, visit [**pricing plans.**](https://document360.com/pricing/)

**Why does content from some published articles in the default language not appear in the editor for the same article in the secondary language?**

When a new article is created and content is added in the default language, the article will appear in the secondary language, but the content will not be automatically carried over. To translate the content, use the **All articles** section to bulk translate the articles from the default language to the secondary language.

An online library where users can find information about a product, service, department, or topic. It helps users self-serve by providing answers and guidance.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="localization-variables"></a>

## Localization variables

**Plans supporting localization settings in Knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Localization variables provide additional text controls that appear across articles in the reader's view. A localization variable is a text element you can configure, and this text appears consistently throughout your project based on the selected language. These variables will automatically display pre-translated content when you add a language to a workspace.

Imagine you have readers across different regions and want them to see article headers, feedback prompts, or search bar text in their native language. By configuring localization variables, you can ensure a seamless and language-specific experience for each user on the Knowledge base site.

---

### Localizing the text appearing in the knowledge base site

To view and edit localization variables:

1. Navigate to **Settings** () > **Knowledge base portal** > **Localization & Workspaces** > **Localization variables** in the Knowledge base portal.
2. Choose the desired language in the **Select language** section.
3. In the right section, you’ll find variable accordions, such as:

**Eddy AI**

Eddy AI accordion includes variables such as:

**ASSISTIVE SEARCH**

* Hey, I am
* How can I help you?
* Ask
* Facilitating knowledge discovery through conversational intelligence
* Is working diligently to provide you the accurate answer
* Source articles
* Feedback - Yes
* Feedback - No
* Provide more context or information so that I can better understand and assist you
* No results found
* Answer copied
* Is working on your request
* Thank you for your feedback
* We're sorry that the information did not meet your expectations.
* Failed to submit your feedback
* Search Limit Exceeded. Please upgrade the plan.
* Continue conversation with
* AI can make mistakes. Please verify important information
* Generated answer
* Back to search
* Hit enter to Ask
* Ask question
* Chat with
* or enter Keywords
* Go back to conversation
* New conversation
* Powered by

**SUMMARIZER**

* Article summary
* Did you find this summary helpful?
* Summarized
* Summary not available for the article
* Suggestions for improvements
* Optional

**RELATED ARTICLES IN KB SITE**

* Suggested

**Accessibility**

Accessibility accordion includes variables such as:

* Listen
* Listening
* Paused
* Player
* Loading
* Something went wrong. Please try again.

**Advanced search**

Advanced search includes variables such as:

* More article filters
* Category
* Date
* Days
* Clear all
* Clear
* Apply
* Last
* Workspace
* Workspaces
* Language
* Languages
* No matching results were found
* Having trouble finding what you need
* Check your search for typos
* Try clearing some filters
* Try a different search term
* What are you looking for?
* Custom range
* Results found for
* Keyword
* Search glossary terms
* Next
* Previous
* Search category titles
* Enter Keywords

**Article header**

Article header includes variables such as:

* Updated on
* Published on
* Read time
* Contributors
* Print
* Share
* Edit article
* Dark
* Light
* System theme
* Sub categories
* Category view
* Article link copied to clipboard
* Filters
* No data found
* Follow
* Unfollow

**Article right**

Article right includes variables such as:

* In this article
* Tags
* Files

**Article bottom**

Article bottom includes variables such as:

* Previous article
* Next article
* Related articles

**Category manager**

Category manager includes variables such as:

* New
* Updated
* Custom
* Deprecated

**General**

General includes variables such as:

* Search
* View results in page
* Contents
* Tags
* Back
* Articles
* Contributor
* Whats new
* Article
* Last month
* Last week
* Last 24 hours
* Linked Tag
* Glossary
* Published/Updated
* Activity
* Updated
* No glossary found
* Contributed
* Powered by

**Ticket deflector**

Ticket deflector accordion includes variables such as:

* Back
* Cancel
* Question
* Change question
* Change answer
* Solved my issue
* Not solved my issue
* No questions found
* Did not help
* Close
* Search not found
* Search result
* No search performed
* Search again
* Select file
* File size limit
* File count limit
* Files not allowed
* More than 2MB size
* File selected
* Get article content
* Failed to get article
* Processing your request
* Request not submitted
* Enter comment
* Valid phone number
* Valid email
* Valid name
* Refresh article
* Show full article
* Open article
* Preview submit

**Feedback**

Feedback accordion includes variables such as:

* Was this article helpful?
* Yes
* No
* Help us to improve article
* Submit
* Thank you for your feedback
* Enter your feedback here
* Optional
* Please enter a valid email
* Notify me about updates
* Email
* Submit
* Email
* Cancel
* Character limit
* Need more information (Cannot be editable)
* Difficult to understand (Cannot be editable)
* Missing/broken link (Cannot be editable)
* Inaccurate or irrelevant content (Cannot be editable)
* Others (Cannot be editable)
* Thanks for going extra mile
* Information wasn't what you needed

**Export PDF**

Export PDF accordion includes variables such as:

* PDF downloaded successfully
* Preparing your PDF for download
* Export PDF
* Export Articles
* PDF Templates
* Search for category & article
* The requested PDF will be delivered to your email
* No category and articles found

**Read receipt**

Read receipt accordion includes variables such as:

* Acknowledgment is required
* Click to review and confirm
* Acknowledgment status
* Required
* Acknowledged
* Acknowledgment required
* Awaiting your acknowledgment
* Acknowledged on
* You have successfully acknowledged this article on
* Your acknowledgment is required upon reading
* I confirm that I have read and understood the information above
* Thank you for confirming that you have read this article!
* Awesome!!! you are up to date with your reads
* We'll notify you of any new acknowledgments required in the future.
* Looks like you have some reading to do!
* Please read the 'Required' articles and submit your acknowledgment.

4. Expand the desired accordion and update the variable's text.
5. Click **Save**.

> NOTE
>
> * Any changes to these variables will be reflected across all workspaces of your project that use the specified language.
> * Changes may take up to 15 minutes to appear on your Knowledge base site due to caching.
> * For projects with multiple languages, update the localization variable text manually for each language.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Overview_page_of_Localization_variables.png)

---

### FAQs

**How do I change the variable text for the search bar based on the selected language?**

To update the search bar text based on the selected language:

1. Navigate to **Settings** () > **Knowledge base portal** > **Localization & Workspaces** > **Localization variables** in the Knowledge base portal.
2. Select your desired language from the language list.
3. Expand the **General** accordion and enter the new text in the **Search** field.
4. Click **Save**.

**How do I rename the "In this article" text on the Knowledge base site (previously "Table of Contents")?**

To rename the "**In this article**" text:

1. Navigate to **Settings () > Knowledge Base Portal > Localization & Workspaces > Localization Variables** in the Knowledge Base portal.
2. Select your desired language from the language list.
3. Expand the **Article right** accordion and enter your desired text in the “**In this article”** field.
4. Click **Save**.

<a id="workspaces"></a>

## Workspaces

**Plans supporting access to workspace settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 workspaces allow you to create and manage multiple distinct knowledge bases within a single project. This flexibility is especially valuable for organizations with diverse audiences or documentation needs, enabling you to organize content that’s tailored to specific users or product areas. Workspaces keep your documentation organized, accessible, and relevant—no matter the complexity of your knowledge base.

## Defining workspaces and their role

When you purchase a Document360 plan, you’re provided with a single project that serves as your knowledge base repository. A project can contain all of your documentation, making it easy to manage and maintain content in one place. Think of it as the central hub for your knowledge base content, whether you have a single product or multiple offerings.

Within your Document360 project, you can create one or more workspaces to better organize your documentation based on audience, product lines, or other criteria.

A workspace is essentially a specialized area within your project that can house content for a particular group or use case. For example:

* If you’re managing documentation for a single SaaS product, one workspace may suffice.
* If you have multiple products or need separate documentation sets for external customers, internal users, and support teams, multiple workspaces can be more efficient.

The number of workspaces you can create depends on your Document360 plan.

---

## Benefits of using workspaces

Workspaces bring several benefits that can improve both content organization and user experience:

* **Relevant Information**: By separating documentation into specific workspaces, you ensure each audience only sees content that is relevant to them. This makes it easier for users to find the information they need.
* **Better Organization**: You can segment your knowledge base into well-defined areas, making it easier for team members to manage and update content.
* **Team Collaboration**: With workspaces, your team can collaborate more effectively, assigning peer reviews, tracking updates, and providing feedback within designated areas.

---

## Use cases of workspaces

Here are a few scenarios for the user of workspaces:

### Use case 1: Product-specific documentation

Imagine you’re a writer for a SaaS company with multiple products, such as a CRM, a project management tool, and an analytics platform. Instead of purchasing separate Document360 projects for each product, you could create a workspace for each product within a single project. This allows you to manage all documentation in one place, but with clear boundaries for each product’s knowledge base.

### Use case 2: Audience-specific documentation

Consider a SaaS product that has different documentation needs for developers, end-users, and administrators. By setting up separate workspaces for each audience, you can ensure that each group accesses content relevant to their role, avoiding confusion and unnecessary complexity.

### Use case 3: Internal and external knowledge bases

If you’re creating both internal documentation (for your support or development teams) and external documentation (for customers), multiple workspaces make it easy to keep each set of content separate. This structure allows you to control access permissions, ensuring that only designated users can view internal documents while keeping customer-facing content public.

---

## Starting with Workspaces

When you create a new project in Document360, a default workspace titled **v1** is automatically created. You can start building your knowledge base in this workspace immediately or create additional workspaces as your documentation needs evolve.

Using multiple workspaces allows you to keep your documentation streamlined, targeted, and well-organized. This way, every user—from internal teams to end customers—can access relevant information quickly and efficiently.

---

## Adding a new workspace

To add a new workspace,

1. In the Knowledge base portal, navigate to **Settings** () **>** **Knowledge base portal** **>** **Localization & Workspaces** **>** **Localization & Workspaces****.**
2. Click the **Add workspace** button from the top right corner.
3. In the **Add new workspace** popup, enter the required details.

   1. Select the Workspace type - **Knowledge base docs site** or **API documentation workspace**
   2. In the **Name** field, enter your desired name for your new workspace in your preferred language.

      > NOTE
      >
      > The **Name** field has a character limit of 30 characters. You can only use alphanumeric characters and hyphens.
   3. The **Slug URL** field will be auto-populated based on the workspace name you provided in the **Name** field. You can further customize the URL of your workspace based on your requirements.
4. Next, select the **Workspace status** for your new workspace.

   1. **Main workspace**: The **Main workspace** is the default workspace users will see when they visit your knowledge base site.

      > NOTE
      >
      > The Main workspace should be public and cannot be deprecated.
   2. **beta**: Select **beta** to indicate that the workspace is still in progress.
   3. **public**: Select **public** for workspaces that should be visible to users.
   4. **deprecated**: Select **deprecated** to indicate the workspace is old and contains out-of-date information.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding_workspaces.gif)

### Base workspace

While creating a new workspace, you can choose to either create a new workspace or copy an existing workspace from the same project.

#### Create a new workspace

If you select **Create a new workspace**, you will create an empty workspace that does not contain any content.

#### Copy existing workspace

If you select **Copy existing workspace**, you can copy the contents of an existing workspace to your new workspace.

1. Select the workspace you wish to copy from the list of existing workspaces.
2. Click on **Choose categories (optional)** to select specific categories of the existing category. Only the contents of the selected categories will be copied to the new workspace.
3. Select either **New** or **Existing** for **Internal links**.

   1. If you select **New**, the article’s link will point to the article version created in the new workspace.
   2. If you select **Existing**, the article’s link will point to the original article version in the existing workspace.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Base_workspace.gif)

### Languages

The default language of your project will be assigned as the default language of your new workspace as well. To add more languages, click on the **New language** dropdown. From the dropdown, search for the desired language(s) and select the checkbox next to the language name.

For more settings related to a language, click the **More options** (•••) icon next to the language name.

* **Set as default**: Select this option to set the corresponding language as the default language for your knowledge base site.
* **Edit display name**: Use this option to update the display name for your workspace. The updated name will be shown on the knowledge base site when the corresponding language is selected. You can set a custom display name for your workspace in each of the available languages.
* **Right to left**: Enable this toggle for languages that follow a **right-to-left** script (Arabic, Hebrew). By enabling this toggle, the article’s content will start from the right and continue to the left in the knowledge base portal as well as the knowledge base site.
* **Hide**: Select this option to hide the language from the knowledge base. Hidden languages are indicated by strikethrough in the Knowledge base portal for reference.
* **Remove**: Select this option to remove the language from your knowledge base.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Language_workspace.gif)

Once you complete customizing the details of your new workspace, click the **Add** button at the bottom right to finish creating the new workspace.

---

## Purchasing workspaces from Localization & Workspaces

1. In the Knowledge base portal, navigate to **Settings** () **>** **Knowledge base portal** **>** **Localization & Workspaces** **>** **Localization & Workspaces****.**
2. Click **buy more** on the right side of the screen.

> NOTE
>
> The **buy more** link is available only for users assigned the Owner role in projects.

3. Add or remove workspaces in the **Purchase add-on** window. The corresponding cost will be displayed as **Amount due**.
4. Click **Confirm Payment** to proceed with the payment. Once the payment is processed, a payment success message will display, and the additional workspaces will be added to your project successfully.
5. Click **Download** invoice to download the invoice for the payment done.

> NOTE
>
> You can also purchase workspaces from the Billing section in Document360 settings. To learn more, read the article on [**Purchasing add-ons**](/help/docs/add-ons).

## Troubleshooting

### Encountering 404 Page not found error when navigating to a secondary workspace

**Error**: 404 Page not found error

A 404 error can occur for various reasons, including missing or restricted content. If you're experiencing this issue while navigating to a workspace or an article, it may be due to workspace visibility settings or the absence of published articles.

> NOTE
>
> For other potential causes of 404 errors, refer to the [404 Page](/help/docs/404-page) article.

![A 404 error page with a person searching for a missing page illustration.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Troubleshooting_404_page_not_found_error.png)

**Steps to resolve:**

This error may occur due to one of the following reasons:

1. Check if the workspace is set to **Public**:

   1. Navigate to **Settings** () **>** **Knowledge base portal** **>** **Localization & Workspaces** **>** **Localization & Workspaces****.**
   2. Locate the respective workspace and click the **Edit** () icon.
   3. In the **Choose workspace status** section, select the **Public** checkbox.
   4. Click **Update**.

      ![Setting a workspace as "Public" in the Knowledge base](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGIF-Troubleshooting_404_error_steps_to_resolve.gif)
2. No articles are published in the workspace.
3. All articles in the workspace are hidden.

   Ensure at least one article is published and visible on the Knowledge base site.

---

### FAQs

**I am trying to set a workspace as the main workspace, but the Main workspace checkbox is disabled. What do I do?**

To set a workspace as the main workspace, the workspace also needs to be set to public. To enable the Main workspace checkbox, first select the public checkbox. Once you select the **public** checkbox, the Main workspace checkbox will automatically be enabled.

**How many workspaces are available for the various subscription plans?**

Document360 has four subscription plans for users: **Free**, **Professional**, **Business**, and **Enterprise**.

* **Free**, **Professional**, and **Business** plan users have 1 workspace.
* **Enterprise** plan users have 2 workspaces.
* **Professional** and **Business** plan users can purchase 1 additional workspace at US$99/month.
* **Enterprise** plan users can purchase 2 additional workspaces at US$199/month.

**How do I reorder my workspaces?**

To reorder your workspaces, hold and drag the drag handle next to the workspace name. Using the drag handle, move the workspace to the desired location.

**How do I edit a workspace?**

Once you navigate to the **Localization & Workspaces** page in **Settings** ()> **Knowledge base portal**, hover over the workspace you wish to edit. Click the **Edit** () icon that appears at the right side of your screen to edit the workspace. You can edit the following properties of a workspace:

* Workspace name
* Workspace URL
* Workspace status

You can also add or delete workspace languages while editing a workspace.

**How do I delete a workspace?**

Similar to editing a workspace, navigate to the **Localization & Workspaces** page in **Settings** ()> **Knowledge base portal** and hover over the workspace you wish to delete. Click the **Delete** () icon that appears at the right side of your screen to delete the workspace. Note that the delete option will be disable for the Main workspace.

> NOTE
>
> Articles from a deleted workspace will appear as broken links.

**How do I recover a deleted workspace?**

You can recover a deleted workspace by following these steps:

1. Go to **Settings** ()> **Knowledge base portal** > **Backup & Restore** in the Knowledge base portal.
2. Find the desired backup, click the **Restore options** dropdown, and select **Documentation**.
3. In the **Restore documentation** panel, choose the workspace you want to restore.
4. Click **Restore**.

> NOTE
>
> Backup and Restore features are available only on Business and Enterprise plans.

**I have multiple workspaces added to my knowledge base site. How do I display them as a dropdown menu?**

In the Localization and workspaces page, locate the toggle named **Display workspaces as a menu (only public workspaces)**. To display your workspaces as a dropdown menu, set the toggle to **OFF**.

<a id="backup-restore"></a>

## Backup and restore

**Plans supporting access to backup & restore settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 automatically backs up your project's data daily at 00:00 UTC. However, you can also perform manual backups at any time. Additionally, you can restore your project to a previous state from any available backup. The following elements of your Knowledge base can be restored:

* **Documentation**
* **API documentation**
* **Homepage builder**
* **Custom CSS**
* **Custom JavaScript**

> If a team member accidentally deletes or modifies a category in your documentation, you can restore the affected documentation from the most recent backup to recover the lost or altered content.

---

## Creating a manual backup

To create a manual backup, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Backup and Restore** in the Knowledge base portal.
2. Click the **New backup** to initiate a new backup.

   The **Backup name** panel will appear.
3. Enter your desired backup name and click **Backup**.

   Once the backup is complete, it will be added to the backup log.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Creating_a_manual_backup.gif)

---

## Restoring from a Backup

To restore from the backup, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Backup and Restore** in the Knowledge base portal.
2. On the desired backup, click the **Restore** **options** dropdown and select the elements you wish to restore:

   * For **Documentation**, **API documentation**, and **Homepage builder**, select the checkboxes for the options you want to restore, then click **Restore**.
   * For **Custom CSS** and **Custom JavaScript**, compare the backup version with the current version. Click **Restore** to restore the backup version.
3. Click **Yes** in the confirmation prompt.

   The restore process will run in the background, and a **Backup restored** message will appear once it’s complete.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Restoring_a_Backup.png)

---

## Restore options

### 1. Documentation

Restores your project documentation to the state when the backup was created.

1. Select specific workspaces, languages, categories, or articles to restore.
2. Turn on the **Select all** toggle to restore the entire documentation.
3. In the **Restore documentation** panel, hover over any article or category, and the **View** option will appear. Click **View** to preview the backup content before restoring it.

**Example:** To retrieve documentation from a recently deleted language:

1. Navigate to **Settings** () > **Knowledge base portal** > **Backup and Restore** in the Knowledge base portal.
2. Click the **Restore** option and select **Documentation**.
3. Choose the desired workspace and language, then click **Restore**.

> NOTE
>
> * When you restore an existing workspace/language/category/article, it is updated with the backup content.
> * When you restore a deleted workspace/language/category/article, it is added as a new workspace/language/category/article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Restore_Documentation.gif)

---

### 2. API documentation

Restores your API documentation to the state when the backup was created.

1. Select specific workspaces, languages, categories, or articles.
2. Turn on the **Select all** toggle to restore the entire API documentation.
3. Hover over any article/category in the **Restore API documentation** panel to preview its backup content using the **View** option.
4. Click **Restore**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Restore_API_Documentation.png)

---

### 3. Homepage builder

1. Restores all features of the **Homepage builder**, including:

* **Navigations**: Header & Footer
* **Main Pages**: Home, Documentation, Login
* **Error Pages**: 404 page, Access denied page, Unauthorized page, IP restrictions

2. Select the desired workspaces and languages.
3. Turn on the **Select all** toggle to select all workspaces and languages.

**Example:** To retrieve the Home page of a recently deleted language:

1. Navigate to **Settings** () > **Knowledge base portal** > **Backup and Restore** in the Knowledge base portal.
2. Click the **Restore** option and select **Homepage builder**.
3. Select the desired workspace and language, and click **Restore**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Restore_Homepage_Builder.png)

---

**4. Custom CSS**

Restores the custom CSS of your Knowledge base site to the state when the backup was created.

* Compare the backup version of the custom CSS with the current version, with changes highlighted.
* Click the **Copy code snippet** ()icon next to the respective version to copy the CSS code.

**Example:** If multiple team members modify the custom CSS, resulting in overwritten snippets, you can restore the previous version by following these steps:

1. Navigate to **Settings** () > **Knowledge base portal** > **Backup and Restore** in the Knowledge base portal.
2. Click the **Restore** option and select **Custom CSS**.
3. Compare the backup and the current version.
4. Click **Restore** to retrieve the recently changed CSS snippet.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Restore_Custom_CSS.png)

---

### 5. Custom JavaScript

Restores the custom JavaScript of your Knowledge base site to the state when the backup was created.

* Compare the backup version of the custom JavaScript with the current version, with changes highlighted.
* Click the **Copy code snippet** ()icon next to the respective version to copy the JavaScript code.

**Example:** If multiple team members modify the custom JavaScript, resulting in overwritten snippets, to restore the previous version by following these steps:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Backup and Restore**.
2. Click the **Restore** option and select **Custom JavaScript**.
3. Compare the backup version with the current version.
4. Click **Restore** to retrieve the earlier JavaScript snippet.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Custom%20JavaScript.png)

---

### FAQs

**Are backups created after every project update, or do I need to trigger them manually?**

  

Backups are created automatically every day at 00:00 UTC, but they are not triggered after each individual project update. For important changes, you may want to manually create a backup to ensure you have the most recent version of your data saved.

**Can I perform manual backups at any time?**

Yes, you can perform manual backups at any time.

**How long are backups stored, and can I delete older backups?**

  

Backups are stored for up to 90 days, after which they are automatically deleted. There is no option to manually delete older backups.

**What elements of the knowledge base can be restored from a backup?**

You can restore Documentation, API documentation, Homepage builder, Custom CSS, and Custom JavaScript.

**Is it possible to restore specific elements from a backup?**

Yes, you can select specific elements such as Documentation, API documentation, and Homepage builder to restore.

<a id="notifications"></a>

## Notifications

**Plans supporting access to notification settings in Knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can set up notifications for project changes and updates through email (SMTP), Slack, Microsoft Teams, and webhooks. These are referred to as **Notification channels**. Before receiving any alerts, ensure that you configure and authenticate these channels.

For instance, imagine a project manager overseeing multiple contributors in a documentation project. They want to stay informed about every content update or modification made by their team members. By configuring Slack as a notification channel, the manager receives real-time updates directly within their team’s Slack workspace, helping them stay on top of changes without constantly checking the platform.

---

## Accessing notification channels

To configure notification channels, navigate to **Settings**()> **Knowledge base portal** > **Notifications** > **Notification channels**in the Knowledge base portal.

Here, you will find a list of active channels that are receiving notifications from Document360. You can edit or delete channels as needed. To add a new channel, click **New channel**.

> **NOTE**
>
> By default, an email channel (SMTP) is automatically configured and cannot be deleted. However, you can customize the email configuration.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Notification_channel_overview_page.png)

### Adding notification channels

Document360 currently supports the following notification channels:

* [Webhook notification channel](/help/docs/webhook-notification-channel)
* [Slack notification channel](/help/docs/slack-notification-channel)
* [Microsoft Teams notification channel](/help/docs/microsoft-teams-notification-channel)
* [SMTP notification channel](/help/docs/smtp-email-notification-channel)

<a id="webhook-notification-channel"></a>

## Webhook notification channel

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

A **Webhook** is a method of automatically sending real-time data from one application to another when specific events occur. Webhooks in Document360 allow you to send notifications to other applications, keeping your team updated on changes in the Knowledge base portal, site, or widget.

For instance, your support team uses a communication tool like Slack. By setting up a Webhook, you can instantly notify the team when an article is updated, ensuring everyone has the latest information without needing to manually check for updates.

---

## Setting up a Webhook notification channel

To configure a Webhook notification channel in Document360, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** in the Knowledge base portal.

   By default, the **Notification channels** tab will be selected.
2. Click **New channel**.
3. In the **Available channels** panel, select **Webhook** and click **Next**.

   The **Channel configuration** panel will appear.
4. In the **Friendly name** field, enter a unique name for your Webhook channel.
5. In the **Request method** dropdown, select either **POST** or **PUT**, depending on how you want to send the data.
6. In the **Webhook URL** field, enter the URL of the application where you want to send notifications.
7. Choose the desired message format from the **Request content** dropdown.
8. If additional headers are needed, click **Add new** () under **Default headers** and add them.
9. Optionally, enter the **Authorization key** if the receiving application requires authentication.
10. Click **Save**.

> NOTE
>
> For more information, read the [Request header](https://developer.mozilla.org/en-US/docs/Glossary/Request_header) help article.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScrenGIF-Setting_up_the_Webhook_notification_Channel.gif)

Once you save, a new Webhook notification channel with your specified name is created. Now, navigate to the [**Notification mapping**](/help/docs/notification-mapping) tab to map configurations with your Webhook application based on your requirements.

<a id="slack-notification-channel"></a>

## Slack notification channel

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Slack is a collaboration platform that provides a centralized space for team communication, file sharing, and project collaboration. It integrates with various third-party applications, making it a versatile tool for teams.

With Document360, you can share notifications through Slack and configure them to suit different needs. Notifications from the Knowledge base portal, Knowledge base site, and Knowledge base widget can be configured to appear in a designated Slack channel.

For example, a customer support team might set up Slack notifications for new articles or updates to key knowledge base documents, allowing team members to stay informed in real-time without leaving Slack.

---

## Setting up Slack notification channel

Configuring Slack in Document360 involves three main steps:

### Step 1: Creating a new app in Slack

1. If you are new to [Slack](https://slack.com/intl/en-in/), create an account and set up a workspace.
2. If you already have an account, [log in](https://slack.com/intl/en-in/signin#/signin) and navigate to your existing app.

### Step 2: Get the webhook URL

1. Open the [Slack API](https://<span class=) and select **Create New App**.

   Your apps will appear in a list.
2. Select the desired app for which you want to enable notifications.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Slack_YourApps_.png)

3. Go to **Features** > **Activate Incoming Webhooks** andturn on the **toggle ON**.

   In the **Webhook URLs for your Workspace** section, the desired Webhook URL will be listed.
4. Click **Copy** to copy the webhook URL.

![4_Screenshot-Slack_webhook_Link.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Slack_webhook_Link.png)

#### Generating a New webhook

If no webhooks are listed:

1. Click **New Webhook for Your Workspace**.
2. Choose the channel you want notifications to appear in and click **Allow**.
3. The webhook will now appear in the list.

### Step 3: Setting up the configuration in Document360

To setup the configuration in Document360:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notification channels** in the Knowledge base portal.
2. Click **New channel**.

   The **Channel configuration** blade will appear.
3. Select **Slack** and click **Next**.
4. In the **Friendly name** field, enter the desired channel name.
5. In the **Webhook URL** field, paste the **Webhook URL** you copied from Slack.
6. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Slack_notification_channel.gif)

Your new Slack notification channel is created. Navigate to the [**Notification mapping**](/help/docs/notification-mapping) tab to link specific notifications to the Slack channel, to ensure the appropriate alerts are sent to the designated team members.

<a id="microsoft-teams-notification-channel"></a>

## Microsoft Teams notification channel

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Microsoft Teams is a collaborative platform that allows Document360 users to stay updated on important changes through direct notifications within a Teams channel. Notifications for the Knowledge base portal, site, and widget can be sent directly to your team’s chosen Teams channel, keeping everyone informed without needing to constantly check Document360.

For example, if your team relies on Teams for daily updates, you can configure notifications to alert them whenever an article is published or updated in the knowledge base.

---

## Setting up the Microsoft Teams notification channel

Configuring Microsoft Teams notifications in Document360 involves three steps:

* [Creating a channel in Microsoft Teams](/help/docs/microsoft-teams-notification-channel#creating-a-channel-in-microsoft-teams)
* [Obtaining the webhook URL](/help/docs/microsoft-teams-notification-channel#get-the-webhook-url)
* [Setting up the configuration in Document360](/help/docs/microsoft-teams-notification-channel#setup-the-configuration-in-document360)

### Step 1: Creating a channel in Microsoft Teams

1. Open **Microsoft Teams**.
2. Go to **Teams** (), select the **More** (⋯) icon next to the team where you want to add the channel.
3. Click **Add channel** to create a new channel.
4. Enter the channel name and click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Creating_a_channel_in_Microsoft_teams.png)

### Step 2: Obtaining the Webhook URL

1. In the newly created channel, click the **More** (⋯) icon and select **Manage channel**.
2. In the **Settings** tab, click **Edit**.
3. In the search bar, type **Incoming webhook** and click **Add**.
4. Enter a name for your Incoming webhook connection.
5. Optionally, click **Upload image** to upload an image for the webhook.
6. Click **Create** to generate the webhook URL.
7. Click the **Copy** () icon to save the webhook URL to your clipboard.
8. Click **Done**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGIF-Getting_the_Webhook_URL.gif)

*Image source: Microsoft teams*

### Step 3: Setting up the Configuration in Document360

1. Navigate to **Settings** () > **Knowledge base portal** > **Notification channels** in the Knowledge base portal.
2. Click **New channel**.
3. In the **Available channels** panel, select **Microsoft Teams** and click **Next**.

   The **Channel configuration** blade will appear.
4. Select **Microsoft Teams** and click **Next**.
5. Enter a name for this channel in the **Friendly name** field.
6. In the **Webhook URL** field, paste the copied webhook link from Microsoft Teams.
7. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Settings_up_the_configuration_in_Document360.gif)

Your Microsoft Teams notification channel is now set up. Next, go to the [**Notification mapping**](/help/docs/notification-mapping) tab to map specific configurations for sending notifications to the Teams channel as needed.

---

### FAQs

**How do I confirm that notifications are being sent to Microsoft Teams?**

After setting up the Microsoft Teams notification channel, you can test it by mapping a sample notification or enabling a test article update. Check the Teams channel to verify that notifications are arriving as expected. If they aren’t, double-check the webhook URL and permissions in the Teams settings.

**Can I customize which types of notifications are sent to Microsoft Teams?**

Yes, you can select specific notification types in the **Notification mapping** tab in Document360. Here, you can choose which events (e.g., new article published, article updated) will trigger notifications in the Teams channel.

**What should I do if I get an authorization error in Teams?**

Authorization errors often occur if the webhook URL is outdated or permissions are not configured correctly. Try generating a new webhook URL in Microsoft Teams and updating it in Document360. Ensure that the channel has the necessary permissions to receive notifications.

**How do I disable notifications for specific events in Microsoft Teams?**

To disable notifications for specific events, go to the **Notification mapping** tab in Document360, and unselect the types of notifications you no longer wish to receive in Microsoft Teams. This allows you to manage notification frequency and relevance effectively.

**Can I use different Teams channels for different types of notifications?**

Yes, you can set up multiple Teams channels for notifications by creating separate channels in Microsoft Teams and configuring each with its own webhook in Document360. Each channel can then be assigned different types of notifications through **Notification mapping**.

<a id="smtp-email-notification-channel"></a>

## SMTP notification channel

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

SMTP (Simple Mail Transfer Protocol) is a standard protocol for transmitting email messages. In Document360, you can configure SMTP to send email notifications to designated addresses, keeping your team informed about critical updates or changes within your projects. Notifications can be sent from the Knowledge base portal, Knowledge base site, and Knowledge base widget.

For instance, your team wants to receive email notifications whenever there’s an update in a critical Knowledge base article. By configuring the SMTP channel, you can ensure that all team members are instantly alerted to changes, allowing them to stay informed and act promptly.

---

## Setting up the SMTP notification channel

To set the SMTP notification channel, follow the steps below:

1. Navigate to **Settings ()** > **Knowledge base portal** > **Notifications** in the Knowledge base portal.

   The **Notification channels** tab will be selected by default.
2. Click **New channel**.
3. In the **Available channels** panel, select **SMTP** and click **Next**.

   The **Channel configuration** panel will appear.
4. In the **Friendly name** field, enter the desired name for your SMTP channel.
5. In the **Email to** field, enter the email addresses to receive notifications.

> NOTE
>
> * Separate multiple email addresses with a semicolon (;) and no spaces.
> * Do not add a semicolon after the last email address.
>
>   **Example**: xyz@gmail.com;abc@gmail.com;mno@gmail.com

6. Optionally, enter any additional email addresses for the recipients.
7. Optionally, enter any additional email addresses for the recipients.
8. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-setting_up_the_SMTP_notification_Channel.gif)

Your new SMTP notification channel is now set up. To complete the configuration, navigate to the [**Notification mapping**](/help/docs/notification-mapping) tab to map specific events that should trigger email notifications to this SMTP channel.

<a id="notification-mapping"></a>

## Notification mapping

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Notification mapping in Document360 helps your team stay in the loop on critical events, ensuring seamless collaboration and prompt actions. By configuring notifications, you can alert team members about specific updates, reviews, or changes across various modules like documentation, user security, and analytics. This setup keeps everyone aligned without needing to check manually for updates.

---

## Mapping Notification channels to events

To map notification channels to event, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** in the Knowledge base portal.
2. Select the **Notification mapping** tab.

> NOTE
>
> By default, all events are turned off.

3. Turn on the **All events** toggle to enable notifications for all events.
4. To receive notifications for a specific module, turn on its corresponding toggle.
5. Expand the module and enable individual events to receive notifications for only those selected events.

   > **Example**: Turn on the **Documentation editor** module to receive all editor related notifications. Alternatively, expand the module and turn on the **Article published** toggle alone to receive notifications specifically when an article is published.
6. Click **Map to channel** to map each event to their respective channels individually.
7. Click the  icon next to each individual event to map a notification channel.

> NOTE
>
> If an event notification is enabled, it must have at least one channel assigned.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Notification_mapping_in_the_Knowledge_base_portal.png)

### Analytics weekly report mail

The project owners can enable the **Analytics** toggle to receive a weekly analytical report for their project. To set this up:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** in the Knowledge base portal.
2. Select the **Notification mapping** tab.
3. Expand the **Analytics** accordion and enable the **Analytics weekly mail** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Analytics_toggle_in_the_Notification_mapping.png)

---

## Notification events

You can choose to receive notifications for the following events.

**Documentation editor**

The **Documentation editor** module includes several key events that trigger notifications based on changes within articles. These events include:

| Event | Function and use |
| --- | --- |
| Article visibility changed | Notifies users when the visibility settings of an article are altered, affecting who can see it. |
| Article settings updated | Alerts when the settings of an article are modified, ensuring the article is configured correctly. |
| Article slug updated | Signals when the URL-friendly name (slug) of an article is changed, impacting how it is accessed. |
| Article title updated | Notifies users when the title of an article is changed, ensuring the title reflects the content. |
| Article published | Alerts users when an article is published, making it available for readers. |
| Article created | Signals when a new article is created, allowing users to start adding content. |
| Article renamed | Notifies users when an article is renamed, reflecting changes in its title. |
| Article deleted | Alerts when an article is deleted, indicating it is no longer available. |
| Article forked | Alerts when an article is forked, creating a new version based on the original. |
| Article version deleted | Notifies users when a specific version of an article is deleted, affecting version history. |
| Bulk delete article versions | Alerts when multiple article versions are deleted at once, streamlining version management. |
| Updated translation status | Signals when the status of an article's translation is updated, ensuring accurate localization. |
| Articles reordered | Notifies users when the order of articles is changed, affecting how they are displayed. |
| Article contributors updated | Alerts when the contributors for an article are modified, ensuring accurate credit. |
| Article workflow status updated | Signals when the status of an article’s workflow is changed, affecting its review process. |
| Article workflow due date updated | Notifies users when the due date for an article’s workflow is modified, keeping deadlines clear. |
| Article workflow assignee updated | Alerts when the person assigned to an article’s workflow changes, ensuring proper accountability. |
| Category created | Signals when a new category is created, helping organize articles effectively. |
| Category type updated | Notifies users when the type of a category is changed, affecting how articles are classified. |
| Category settings updated | Alerts when settings for a category are modified, ensuring proper organization and visibility. |
| Category slug changed | Signals when the URL-friendly name (slug) of a category is altered, impacting how it is accessed. |
| Category contributors updated | Notifies users when contributors for a category are changed, ensuring proper credit is given. |
| Category deleted | Alerts when a category is deleted, indicating that it and its articles are no longer available. |
| Category renamed | Signals when a category is renamed, reflecting changes in its title. |
| Categories reordered | Notifies users when the order of categories is changed, affecting their display in the interface. |
| Category published | Alerts when a category is published, making it available for use with articles. |
| Category forked | Signals when a category is forked, creating a new version based on the original category. |
| Category version deleted | Notifies users when a specific version of a category is deleted, affecting version history. |
| Bulk delete category versions | Alerts when multiple category versions are deleted at once, streamlining version management. |
| Category workflow status updated | Signals when the status of a category's workflow is changed, impacting its review process. |
| Category workflow due date updated | Notifies users when the due date for a category’s workflow is modified, keeping deadlines clear. |
| Category workflow assignee updated | Alerts when the person assigned to a category's workflow changes, ensuring proper accountability. |
| Category visibility changed | Notifies users when the visibility settings of a category are altered, affecting who can see it. |
| Article review reminder status updated | Signals when the status of an article review reminder is updated, ensuring reviews are tracked. |
| Article pushed to Crowdin | Alerts users when an article is sent to Crowdin extension for translation, facilitating localization efforts. |
| Categories/Articles restored | Notifies users when categories or articles are restored from deletion, making them available again. |
| Categories/Articles permanently deleted | Signals when categories or articles are permanently deleted, indicating they are no longer retrievable. |
| Recycle bin emptied | Alerts users when the recycle bin is cleared, permanently removing all deleted items. |
| Shared article created | Notifies users when a shared article is created, allowing collaboration on content. |
| Clone article created | Signals when a clone of an article is created, enabling users to duplicate and modify content easily. |
| Removed reference article | Alerts users when a reference article is removed, indicating changes in linked content. |
| Multiple shared articles created | Notifies users when several shared articles are created at once, enhancing collaboration. |
| Article publish later canceled | Signals when a previously scheduled article publish is canceled, affecting its availability. |
| Article scheduled for publish | Alerts users when an article is scheduled for future publishing, ensuring timely releases. |
| Share link deleted | Notifies users when a private share link for an article is deleted, impacting access for collaborators. |
| Share link generated | Signals when a new private share link for an article is created, facilitating collaboration on content. |

**Drive**

The Drive module includes several key events that trigger notifications based on changes within drive. These events include:

| Event | Function and use |
| --- | --- |
| Folder added | Notifies users when a new folder is created, keeping the team updated on resource organization. |
| Folder renamed | Alerts users when a folder's name is changed, helping them locate files easily. |
| Folder deleted | Notifies users when a folder is deleted, so they understand changes in organization. |
| File(s) added | Alerts users when new files are added, keeping them informed about available resources. |
| File(s) updated | Notifies users when existing files are changed, important for tracking updates. |
| File(s) deleted | Alerts users when files are removed, ensuring they know about missing resources. |

**Knowledge base portal settings**

The Knowledge base portal settings module includes several key events that trigger notifications based on changes within Knowledge base portal. These events include:

| Event | Function and use |
| --- | --- |
| Workspace updated | Notifies users when changes are made to the settings or details of a workspace, keeping everyone informed. |
| Workspace deleted | Alerts users when a workspace is deleted, indicating it is no longer available for use. |
| Workspace created | Signals when a new workspace is created, providing a new area for organizing projects and content. |
| Workspace display order changed | Notifies users when the order of workspaces in the interface is changed, affecting how they are organized visually. |
| Plan tier changed | Alerts users when the subscription plan for a workspace is upgraded or downgraded, affecting features and limits. |
| Payment details updated | Signals when the payment information for a workspace is updated, ensuring billing is accurate. |
| Project general settings updated | Notifies users when general settings for a project within a workspace are changed, ensuring proper configuration. |
| Backup created | Alerts users when a backup of the workspace is created, allowing for data recovery if needed. |
| Backup restored | Signals when a backup of the workspace is restored, recovering previous data and settings. |
| Notification channel deleted | Notifies users when a notification channel is deleted, affecting how updates are communicated. |
| Notification channel created | Alerts users when a new notification channel is created, providing a way to receive updates and alerts. |
| Notification channel updated | Signals when an existing notification channel is modified, ensuring communication preferences are current. |
| Addons purchased | Notifies users when additional features or addons are purchased for a workspace, enhancing functionality. |
| Subscription created | Alerts users when a new subscription is created for a workspace, enabling access to services and features. |
| API token added | Signals when a new API token is added, allowing for secure access to workspace resources through integrations. |
| API token deleted | Notifies users when an API token is deleted, removing access for integrations linked to that token. |
| Extension token generated | Alerts users when an extension token is created, enabling additional functionality or integrations. |
| Extension token deleted | Signals when an extension token is deleted, affecting the associated features or integrations. |
| Crowdin token added | Notifies users when a Crowdin token is added, facilitating translation and localization processes. |
| Crowdin token deleted | Alerts users when a Crowdin token is removed, affecting translation access and capabilities. |
| Display workspaces as menu | Signals when the workspaces are set to be displayed in a menu format, enhancing navigation and organization. |

**Knowledge base site settings**

The **Knowledge base site settings** module includes several key events that trigger notifications based on changes within Knowledge base site. These events include:

| Event | Function and use |
| --- | --- |
| Site design settings updated | Notifies users when the design settings of the site are changed, affecting its appearance and layout. |
| Custom JavaScript updated | Alerts users when custom JavaScript code is updated, allowing for enhanced site functionality. |
| Custom CSS updated | Signals when custom CSS styles are updated, changing the visual presentation of the site. |
| Article settings updated | Notifies users when settings related to articles are changed, impacting how content is displayed. |
| Project sub-domain updated | Alerts users when the sub-domain for the project is updated, changing the website’s URL structure. |
| Integration created | Signals when a new integration is established with another service, enhancing capabilities. |
| Integration deleted | Notifies users when an integration is removed, stopping data sharing with that service. |
| Integration updated | Alerts users when an existing integration is modified, ensuring connections remain effective. |
| Home page builder restored | Notifies users when the home page builder is restored to a previous version, allowing for revisions. |
| Home page builder settings updated | Signals when settings for the home page builder are updated, affecting layout and content display. |
| Robots.txt updated | Alerts users when the robots.txt file is updated, impacting how search engines crawl the site. |
| Site domain updated | Notifies users when the main domain of the site is changed, affecting the site's accessibility. |
| Cookie consent enabled | Signals when cookie consent is enabled, indicating compliance with privacy regulations. |
| Cookie consent disabled | Notifies users when cookie consent is disabled, impacting user privacy preferences. |
| Cookie consent updated | Alerts users when cookie consent settings are modified, changing user consent options. |
| Smart bar added | Notifies users when a smart bar is added to the site, providing quick access to features. |
| Smart bar updated | Signals when the smart bar's settings or content are updated, improving user interaction. |
| Smart bar enabled | Alerts users when the smart bar is enabled, making it visible on the site for user access. |
| Smart bar disabled | Notifies users when the smart bar is disabled, removing it from the site view. |
| Smart bar deleted | Signals when the smart bar is permanently removed, discontinuing its functionality. |
| Ticket deflector deleted | Alerts users when a ticket deflector feature is deleted, impacting support request management. |
| Ticket deflector added | Notifies users when a new ticket deflector is added, helping to manage support queries effectively. |
| Ticket deflector updated | Signals when an existing ticket deflector is modified, ensuring it works as intended. |
| Ticket deflector helpdesk added | Notifies users when a helpdesk is added to the ticket deflector, providing users with support options. |
| Ticket deflector helpdesk updated | Alerts users when the helpdesk settings in the ticket deflector are updated for better support. |
| Ticket deflector helpdesk deleted | Notifies users when a helpdesk is removed from the ticket deflector, changing support options. |
| Article redirection rule added | Signals when a new article redirection rule is created, guiding users to the correct content. |
| Article redirect rule updated | Alerts users when an existing article redirect rule is modified, ensuring proper content navigation. |
| Article redirection rule(s) deleted | Notifies users when article redirection rules are deleted, potentially affecting content access. |
| Redirect rule(s) exported to CSV | Signals when redirect rules are exported to a CSV file, allowing for data analysis or backup. |
| Redirect rules import requested | Notifies users when a request is made to import redirect rules, updating site navigation. |
| Meta description generated | Alerts users when a meta description for articles is generated, improving SEO visibility. |
| Meta details updated | Signals when meta details for articles are updated, enhancing search engine optimization. |
| Knowledge base builder updated | Notifies users when updates are made to the knowledge base builder, affecting content creation tools. |
| Knowledge base builder published | Alerts users when the knowledge base builder is published, making it available for users. |
| Read receipt rule created | Notifies users when a read receipt rule is created, tracking when articles are viewed. |
| Read receipt rule updated | Signals when an existing read receipt rule is modified, adjusting tracking settings. |
| Read receipt rule deleted | Alerts users when a read receipt rule is deleted, ceasing tracking of article views. |

**Knowledge base widget settings**

The Knowledge base widget settings module includes several key events that trigger notifications based on changes within Knowledge base widget. These events include:

| Event | Function and use |
| --- | --- |
| Knowledge base widget settings updated | Notifies users when the settings for the knowledge base widget are changed, affecting its behavior. |
| URL mapping created | Alerts users when a new URL mapping is created, enabling specific links to direct to content correctly. |
| URL mapping updated | Signals when an existing URL mapping is modified, ensuring links direct users to the intended content. |
| URL mapping deleted | Notifies users when a URL mapping is removed, which may affect how certain links function. |
| Knowledge base widget settings deleted | Alerts users when the settings for the knowledge base widget are deleted, stopping its functionality. |
| Knowledge base widget settings created | Notifies users when new settings for the knowledge base widget are established, enabling its use. |

**Users & Security settings**

The **Users & Security settings** module includes several key events:

| Event | Function and use |
| --- | --- |
| Site visibility changed | Notifies when the visibility settings of the site are altered, affecting who can access the site. |
| Role added | Signals when a new user role is created, allowing for better management of user permissions. |
| Role updated | Alerts users when an existing role's permissions are modified, ensuring up-to-date access control. |
| Role deleted | Notifies when a user role is removed, indicating changes in the available roles for users. |
| Security group added | Alerts when a new security group is created, enabling better organization of users and permissions. |
| Security group updated | Notifies users when an existing security group's settings are changed, ensuring current access control. |
| Security group deleted | Signals when a security group is removed, clarifying the organization of user permissions. |
| Content access added | Notifies when new permissions for accessing specific content are granted, enhancing content security. |
| Site access added | Alerts users when access to the site is granted to new users or groups, facilitating collaboration. |
| Content access updated | Notifies users when existing content access permissions are modified, keeping access controls current. |
| Site access updated | Alerts when site access permissions are changed for users or groups, ensuring proper access management. |
| Content access removed | Signals when permissions to access specific content are revoked, helping maintain content security. |
| Site access removed | Notifies users when site access is revoked for users or groups, ensuring security and control. |
| Team account added | Alerts when a new team account is created, facilitating collaborative work within the organization. |
| Team account updated | Notifies users when changes are made to an existing team account, ensuring accurate team management. |
| Team account deleted | Signals when a team account is removed, clarifying available team structures. |
| IP restrictions updated | Notifies users when the IP address restrictions are modified, enhancing site security. |
| IP restriction added | Alerts when a new IP restriction is added, controlling which IPs can access the site. |
| IP restriction deleted | Signals when an IP restriction is removed, indicating a change in access control for specific IPs. |
| Self sign-up settings updated | Notifies users when the settings for self-sign-up are changed, affecting how users register. |
| Import readers requested | Signals when a request to import new readers is made, helping manage reader access. |
| Import team account requested | Alerts when a request to import team accounts is initiated, facilitating user management. |
| Export team account(s) to CSV | Notifies users when team account data is exported to CSV, providing an easy way to analyze account details. |
| Export reader(s) to CSV | Signals when reader data is exported to CSV, making it easier to manage reader information. |
| SSO configuration added | Notifies users when a new Single Sign-On (SSO) configuration is created, streamlining user authentication. |
| SSO configuration updated | Alerts users when an existing SSO configuration is modified, ensuring up-to-date authentication settings. |
| SSO configuration deleted | Signals when an SSO configuration is removed, indicating a change in authentication options. |
| SSO users invited | Notifies users when invitations are sent to users for SSO access, facilitating user onboarding. |
| JWT created | Alerts when a new JSON Web Token (JWT) is generated, enabling secure user sessions. |
| JWT regenerated | Signals when an existing JWT is regenerated, ensuring continued secure access. |
| JWT saved | Notifies users when a JWT is saved for future use, maintaining secure authentication processes. |
| JWT updated | Alerts users when an existing JWT is modified, keeping authentication secure. |
| JWT deleted | Signals when a JWT is removed, indicating a change in authentication status. |
| Inheritance settings updated | Notifies users when inheritance settings for permissions are modified, ensuring proper access control. |
| Convert to reader | Alerts when a user account is converted to a reader, changing their access level. |
| Convert to SSO team account | Notifies when a user is converted to an SSO team account, allowing for easier authentication. |
| Convert to SSO reader | Signals when a user is converted to an SSO reader, streamlining their access to content. |
| Convert to team account | Alerts when a user is converted to a team account, changing their permissions and access levels. |

**Tools settings**

The **Tools settings** module includes several key events:

| Event | Function and use |
| --- | --- |
| Project exported | Notifies when a project is successfully exported, allowing tracking of project backups. |
| Project imported | Alerts when a project is imported, indicating that external content has been successfully integrated. |
| External project import requested | Notifies the team when a request is made to import an external project, helping them manage incoming content. |
| Export PDF requested | Signals when a request to export project content as a PDF is initiated, keeping the team informed of document outputs. |
| Export PDF content template added | Notifies when a new PDF content template is added, allowing for consistent document formatting. |
| Export PDF content template updated | Alerts users when an existing PDF content template is modified, ensuring everyone uses the latest format. |
| Export PDF content template deleted | Signals when a PDF content template is removed, helping maintain clarity on available document formats. |
| Export PDF design template added | Notifies when a new design template for PDFs is created, aiding in visual consistency for exported documents. |
| Export PDF design template deleted | Alerts users when a PDF design template is deleted, ensuring they know which formats are no longer available. |
| Export PDF design template updated | Signals when a PDF design template is changed, keeping the team informed of design updates. |
| Article review reminder created | Notifies when a reminder for reviewing an article is set, helping ensure timely content evaluations. |
| Article review reminder updated | Alerts users when an existing review reminder is changed, keeping the team updated on review schedules. |
| Article review reminder deleted | Signals when a review reminder is removed, indicating a change in the article evaluation process. |
| Content reuse variable added | Notifies when a new content reuse variable is created, enabling the team to streamline content management. |
| Content reuse variable updated | Alerts users when a content reuse variable is modified, ensuring the latest variables are in use. |
| Content reuse variable deleted | Signals when a content reuse variable is removed, keeping the team informed about available content management options. |
| Content reuse snippet added | Notifies when a new content reuse snippet is created, helping enhance content consistency and efficiency. |
| Content reuse snippet updated | Alerts users when an existing snippet is modified, ensuring everyone has access to the latest content. |
| Content reuse snippet deleted | Signals when a content reuse snippet is removed, clarifying available content management tools. |
| Article template added | Notifies when a new article template is created, promoting consistent article formatting. |
| Article template updated | Alerts users when an article template is modified, ensuring that the latest formatting is used. |
| Article template deleted | Signals when an article template is removed, indicating changes in available formatting options. |
| Tag added | Notifies when a new tag is created, helping in organizing content for easier searching and filtering. |
| Tag updated | Alerts users when an existing tag is modified, keeping the tagging system current and effective. |
| Tag deleted | Signals when a tag is removed, clarifying the tagging system's available categories. |
| Article imported | Notifies when an article is successfully imported, indicating that new content is added to the knowledge base. |
| Workflow status added | Alerts users when a new workflow status is created, providing more options for managing content workflows. |
| Workflow status updated | Notifies when an existing workflow status is modified, ensuring users are aware of the latest workflow options. |
| Workflow status deleted | Signals when a workflow status is removed, keeping the workflow management system clear and up to date. |
| Workflow status reordered | Notifies users when workflow statuses are reordered, helping them understand the new workflow sequence. |
| Update feedback assignee | Alerts users when feedback is reassigned to a different team member, ensuring accountability in content review. |
| Update feedback status | Notifies when the status of feedback is changed, keeping the team updated on the review process. |
| Find and replace | Alerts users when the find and replace function is executed, ensuring changes in content are tracked. |
| Content reuse glossary suggested | Notifies users when a suggestion for a content reuse glossary is made, promoting efficient content management. |
| Export PDF password removed | Signals when the password protection on an exported PDF is removed, indicating changes in document security. |

**Knowledge site**

The Knowledge base site module includes several key events:

| Event | Function and use |
| --- | --- |
| Feedback received | Notifies the team when feedback is submitted by users, helping them understand user opinions. |
| Reader email updated | Alerts users when a reader's email address is changed, ensuring that communication remains effective. |
| Reader self-registration | Notifies the team when a new reader registers themselves, keeping them updated on the growing user base. |
| Like received | Alerts users when an article receives a "like," indicating positive feedback and popularity. |
| Dislike received | Notifies users when an article receives a "dislike," signaling areas for improvement based on user feedback. |

**AI notifications**

The **AI notifications** module includes a key event:

| Event | Function and use |
| --- | --- |
| Credit usage alert | Notifies users when their AI credits are low, important for keeping the service running smoothly. |

**Analytics**

The Analytics module includes a key event:

| Event | Function and use |
| --- | --- |
| Analytics weekly metrics | Notifies users when weekly analytics reports are available, useful for tracking performance. |

**All comments notification**

| Event | Function and use |
| --- | --- |
| All comments notifications | Alerts contributors whenever inline comments are added to articles they have contributed to, ensuring feedback is communicated promptly. |

---

### FAQs

#### **How do I get notified in Microsoft Teams whenever articles are published?**

To get notified in Microsoft Teams whenever articles are published, follow the step below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. Expand the **Documentation editor** accordion and enable the **Article published** toggle.
3. Ensure **Microsoft Teams** is configured as a Notification channel.

   If not, click the  icon next to the **Article published** toggle and enable the **Microsoft Teams** channel.

> NOTE
>
> For more information, read the article on [Microsoft Team notification channel](/help/docs/microsoft-teams-notification-channel).

#### **How do I get notified when my project is exported to Slack?**

To get notified when your project is exported to Slack, follow the step below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. Expand the **Tools settings** accordion and enable the **Project exported** toggle.
3. Ensure **Slack** is configured as a Notification channel.

   If not, click the  icon next to **Project exported** and enable the **Slack** channel.

> NOTE
>
> For more information, read the article on [Slack notification channel](/help/docs/slack-notification-channel).

#### **How do I get notified when a new team account is added via email?**

To get notified when a new team account is added via email, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. Expand the **Users & Security settings** accordion and enable the **Team account added** toggle.
3. Ensure your SMTP channel is configured as a Notification channel.

   If not, click the  icon next to **Team account added** and enable the **SMTP** channel.

> NOTE
>
> For more information, read the article on [SMTP notification channel](/help/docs/smtp-email-notification-channel).

#### **How do I get notified when Eddy AI credit usage decreases?**

To receive alerts for your Eddy AI credit usage, follow these steps:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. In the **Eddy AI notifications** accordion, enable the **Credit usage alert** toggle.

Once enabled, Document360 will notify your configured channels when the credit balance falls to 20%, 10%, or when the balance expires.

#### **How can contributors be notified of inline comments on articles?**

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. Enable the **All comments notification** toggle.

Now, all contributors will receive email notifications whenever inline comments are added to articles they have contributed to.

#### **Why am I not receiving email notifications for article creation?**

If you're not receiving email notifications when a new article is created, please ensure that the **Article created** notification toggled is enabled in your Knowledge base portal. To verify and activate this setting:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** > **Notification mapping** in the Knowledge base portal.
2. In the **Notification mapping** tab, expand the **Documentation editor** section.
3. Turn on the **Article created** toggle.

Once this setting is enabled, the designated email addresses configured should receive notifications upon the creation of new articles.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

> NOTE
>
> If an article is created using the [Word import](/help/docs/importing-articles-from-a-docx-file) feature, the **Article created** email notification will not be triggered.

<a id="notification-history"></a>

## Notification history

**Plans supporting access to notification settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 tracks the history of notifications sent to your configured channels, making it easy to monitor delivery statuses and troubleshoot any failures. This ensures your team can stay on top of important alerts, like system updates or error notifications.

For example, if your team uses Slack for real-time alerts, you can check the **Notification history** to verify whether critical updates were successfully delivered. In case of failure, you can quickly identify and resolve the issue.

---

## Managing Notification history

To access and manage the Notification history:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notification** in the Knowledge base portal.

   By default, the **Notification channels** tab will be selected.
2. Go to the **Notification history** tab.

   A list of past notifications will appear.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Notification_history_overview_page.png)

### Understanding the Notification history

The Notification history provides a detailed breakdown of each notification sent. Here’s what you’ll see:

1. **Channel name:** The channel through which the notification was sent, such as Slack, Webhook, SMTP, or Microsoft Teams.
2. **Status:** The delivery status of the notification, either **Success** or **Failure**.
3. **Submitted on:** The date the notification event was triggered.
4. **Sent on:** The date the notification was actually sent.
5. **History:** Click **View details** to see the email or message that was sent to the user.

Each notification shows details like the channel it was sent to, its delivery status, the submission and sent dates, and event details, enabling you to track notification delivery within a specific timeframe.

<a id="send-notifications-from-custom-email-domain"></a>

## Email domain

**Plans supporting access to email domain settings in the knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Configuring a custom email domain in Document360 allows your organization to send notifications from a branded email address, improving recognition and trust among your readers while reinforcing your branding strategy.

By default, notification emails are sent from `support@document360.com` to team accounts and readers. To make customer notifications more personalized, you can set up emails to be sent from an address like `support@yourcompany.com`, making it easier for recipients to identify and trust the sender.

To enable this feature, you’ll need to configure your DNS entries with your provider to point to Document360.

---

### Prerequisites

* Ensure you have access to a DNS provider such as [GoDaddy](https://www.godaddy.com/en-in), [Hostinger](https://www.hostinger.in), [Namecheap](https://www.namecheap.com), etc.
* This custom email domain feature is available only in the **Enterprise plan**.

---

### Configuring a Custom Email domain

To configure a custom email domain, follow these steps:

1. Navigate to **Settings** () > **Knowledge base portal** > **Notifications** in the Knowledge base portal.

   By default, the **Notification channels** tab will be selected.
2. Select the **Email Domain** tab.
3. In the **Domain name** field, enter your custom email domain (e.g., `yourcompany.com`).
4. Click **Add Domain**. This will generate the DNS records needed for configuration.

**Adding DNS records**

5. Open your DNS provider’s website in a separate tab to add the required MX and TXT records.

> NOTE
>
> Ensure you add the DNS records provided by Document360 to your domain registrar (e.g., GoDaddy, Hostinger). Adding these records will not override existing MX records.

6. Copy the configuration details from the **Setting up your custom email domain** section in Document360 and paste them into your DNS provider’s settings.
7. Return to the **Email domain** page in Document360.
8. Select the **I’ve added the records** checkbox, then click **Verify & Save**.

   Once the MX and TXT records are verified, an **Email Domain Verified** message will appear.
9. After verification, enter your custom sender information:

   1. **Email field:** Enter the desired “From” email address (e.g., `support@yourcompany.com`).
   2. **Name field:** Enter the sender name (e.g., `Your Company Support`).

After setup, emails will be sent from the configured domain with the specified “From” email address and sender name.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Email_domain.png)

---

#### Troubleshooting

If your custom email domain configuration is still inactive after 24 hours, try the following steps:

1. Verify that the MX and TXT records were saved on the domain host.
2. Ensure the MX and TXT information on the domain host matches the records provided by Document360.
3. If issues persist, delete the records on the domain host and re-add them.

For further assistance, please contact us at `support@document360.com`.

---

### FAQs

**What is the purpose of MX records, and how do they work?**

MX (Mail Exchange) records are DNS entries that route emails sent to your domain to the correct mail servers. They define the mail servers responsible for handling your email and their priority order. For example, if one mail server is unavailable, emails are sent to the next server in line based on priority (a lower number indicates higher priority).

**Example:**  
If your domain has the following MX records:

* `10 mail1.example.com`
* `20 mail2.example.com`

Emails are routed first to `mail1.example.com` and then to `mail2.example.com` if the primary server is down.

**How are TXT records used in email authentication?**

TXT (Text) records are DNS entries that store text-based information linked to a domain. They serve multiple purposes, such as verifying domain ownership, setting up email security policies like SPF, DKIM, and DMARC, and providing general domain-related information.

Example: **SPF** (Sender Policy Framework), a TXT record specifies which mail servers are authorized to send emails on behalf of your domain, helping to prevent spoofing.

**SPF Example Record:** `v=spf1 include:_spf.google.com ~all`

By implementing TXT records, you can protect your domain from phishing, spoofing, and unauthorized email usage.

<a id="how-to-use-postman"></a>

## How to use Postman?

**Plans supporting access to API token settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Postman is an API platform for building and using APIs. Linking your Document360 project with Postman is easy and can be completed in a few minutes. You can use the on-premises or web-based Postman.

> NOTE
>
> For more information regarding Postman application, read the following articles.
>
> * [How to download Postman application?](https://www.postman.com/downloads/)
> * [How to install and update Postman application?](https://learning.postman.com/docs/getting-started/installation-and-updates/)
> * [How to use Postman?](https://learning.postman.com/docs/)
> * [FAQs in Postman](https://www.google.com/search?q=FAQs+in+Postman%3F&rlz=1C1CHBD_enIN1119IN1119&oq=FAQs+in+Postman%3F&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgoIARAAGIAEGKIE0gEHNjI5ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8)

---

## **Linking your Document360 project in Postman**

The below steps are based on the on-premises Postman application.

1. Open the **Postman** application.
2. In the **My Workspace** section, click on the **Import** button.

   An **Import** popup window appears.
3. Enter the below URL in the field.  
   <https://apihub.document360.io/swagger/v2/swagger.json>

   The **Choose how to import your API** pop-up will appear with two options.
4. Select the desired option

   * Postman Collection (default)
   * OpenAPI 3.0 with a Postman Collection
5. Click the **Import** button.

   Once the import is done, the action will create a sample request for each endpoint, allowing you to make the request quickly.

   ![Steps to link your Document360 project in Postman](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_ScreenGif-Postman.gif)

### **Authentication in Postman - Generating an API token**

1. In the tree view, expand **Document360 Customer API**.
2. Under the **Authorization** tab, set the **Auth Type** to API Key from the dropdown.
3. Enter the desired variable in the **Key** field.
4. Enter the API token in the Value field. For generating an API token, read the article on [Generating token](https://apidocs.document360.com/apidocs/api-token).

   > NOTE
   >
   > **Generating an API token**
   >
   > a. Navigate to **Settings** > **Knowledge Base portal** > **API tokens**.
   >
   > b. Create the desired API token and copy the token.
   >
   > (or) Copy the token from an existing token.

![Steps for authorization in Postman after importing Document360 project](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_ScreenShot-Postman.png)

1. In the left navigation bar, go to **Environments**.
2. From the left navigation pane, click on **Create Environments**.
3. Under the **Variables** column, type a variable name, for instance, ‘base\_URL,’ and set the **Type** to default.
4. Enter `https://apihub.document360.io` in the **INITIAL VALUE** and **CURRENT VALUE** fields for the base URL.
5. Click on the **Save** button.

   The project authentication is completed. Now you can easily access all the available endpoints and perform various actions.

   ![Steps to authenticate Document360 project](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_ScreenShot-Postman.png)

### **Use cases**

With the help of Postman, you can perform various actions in Document360.

Here are a few basic use cases for your reference

* [How to create and publish an article?](https://apidocs.document360.com/v2/docs/how-to-create-and-publish-an-article)
* [How to update a published article?](https://apidocs.document360.com/v2/docs/how-to-update-a-published-article)
* [How to update SEO details?](https://apidocs.document360.com/v2/docs/how-to-update-seo-details)

---

### FAQ(s)

**What should I do if my Postman session ends after refreshing the page?**

If your Postman session ends after refreshing the page, you will need to authenticate again. Follow the steps provided in the article to re-authenticate.

<a id="how-to-use-swagger"></a>

## How to use Swagger?

**Plans supporting access to API token settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Swagger is an interface description language that describes RESTful APIs expressed using JSON. It allows you to create interactive, machine and human-readable [API documentation](https://document360.com/blog/api-documentation/). It helps you visualize and interact with the API's resources without any implementation logic. It is a web-based application.

---

## **Swagger documentation site**

1. Open the [Swagger documentation site](https://apihub.document360.io/).
2. To authenticate the documentation, click **Authorize**.  
   The **Available authorizations** panel will appear.
3. Enter the API token in the **Value** field.

   > NOTE
   >
   > You can select an existing token, or you can generate a new token as per your requirement. To generate a new token, follow the below steps
   >
   > * Go to **Settings** > **API tokens** in the Knowledge Base portal.
   > * Type a name for the API token in the **Enter token name**.
   > * Select the required HTTP method(s). You have four methods under **Allowed method(s)**: **GET**, **PUT**, **POST** and **DELETE**.
   > * You can only use the generated token for the selected method(s). It cannot be used to perform other methods.
   > * Click **Copy** to copy the API token.
4. Click the **Authorize** button.
5. Once done, click the **Close** button.  
   The authorization is done successfully.

   ![Image showing authorize panel in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_ScreenShot-Swagger.png)

   > NOTE
   >
   > If you wish to change to a different token, click **Authorize** > **Logout** > enter your **API token** > **Authorize** > **Close**.

### GET

* The **GET** method is used to retrieve information.
* Below is an example of **GET** action, to retrieve all records about the team account.

![Image showing GET action in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_ScreenShot-Swagger_Get.png)

1. Fill the marked fields and click the **Execute** button.

   The information about the team account will be available under the **Responses** section.

![Image showing GET action in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_ScreenShot-Swagger_Get.png)

### POST

* The **POST** method is used to add an item.
* Below is an example of a **POST** action, to add a team account to a project.

![Image showing POST action in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_ScreenShot-Swagger_Post.png)

1. You should add the team account information such as email\_id, first\_name, and last\_name to add a user to the project.  
   The team account will be added to the project.
2. Click the **Execute** button.  
   The addition of the team account will be successful if the status is 200 and the success is true.

### PUT

* The **PUT** method is used to update an existing item.
* Below is an example of **PUT** action, to update a user role in the project.

![Image showing PUT action in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_ScreenShot-Swagger_Put.png)

1. Enter the userId in the marked field.
2. Update the user role with the number mentioned for the user role syntax. The numbers for the respective roles are as follows:

   * 1 → Administrator
   * 2 → Editor
   * 3 → Draft Writer
   * 4 → Reader
   * 7 → Owner
3. Once done, click on the **Execute** button.

   The update of the user is successful if the status is 200 and the success is true.

### DELETE

* The **DELETE** method is used to delete an item.
* Below is an example of a **DELETE** action, to delete a userId.

1. Enter the userId in the marked field.
2. Once done, click on the **Execute** button.  
   If the status is 200 and the success is true, the userId will be successfully deleted.

   ![Image showing DELETE action in Swagger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_ScreenShot-Swagger_Delete.png)

> NOTE
>
> It is mandatory to enter the content in the field that are marked \***required**.

 For more information, refer to the following blogs

1. [Ultimate guide to create an API documentation with examples](https://document360.com/blog/api-documentation/)
2. [Feature spotlight – API in Document360](https://www.google.com/search?q=Feature+spotlight+%E2%80%93+API+in+Document360&rlz=1C1CHBD_enIN1119IN1119&oq=Feature+spotlight+%E2%80%93+API+in+Document360&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg80gEHNDI5ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8)

   ---

   ## FAQ(s)

   **What should I do if refreshing the page ends my session?**

   If you refresh the page, the session might end, and you will have to authenticate again. Follow the steps provided for authentication.

   **How should I format fields that require a specific character?**

   You must use an underscore wherever required. For example, use “email\_id” instead of “email id.” Using spaces will result in an error.

<a id="full-portal-search"></a>

## Portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Full portal search** is a dedicated space to search the entire project content, files, tags, users, content tools, and settings. Perform a combined search across all the workspaces and languages simultaneously.

---

## Accessing the full portal search

1. Click on the **Search** () icon to the right of the top navigation bar.
2. Enter the desired keyword and use the **All** dropdown at the left of the search bar to apply the desired module to narrow down the results.

   There are five sub-modules and one combined module (**All**) in the Full portal search.

   * [All](/help/docs/full-portal-search)
   * [Article](/docs/article-full-portal-search)
   * [Drive file](/docs/drive-full-portal-search)
   * [Users & Groups](/docs/users-groups-full-portal-search)
   * [Tags](/docs/tags-full-portal-search)
   * [Settings](/docs/settings-full-portal-search)

> NOTE
>
> Press the **Escape** button to retract this screen.

     Only five results of each search will be displayed.

3. To view more results, click the **More articles** option below the displayed results.
4. If needed, you can apply the **Filter** ()option on the top right.
5. To preview, click on the desired search item.
6. Click on the **Go to article** option at the top to navigate to the desired article.

   ![Perform full portal search to find the desired item.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Full_portal_search.gif)

---

### FAQ(s)

**What can I search using the full portal search, and is the search keyword highlighted in the results?**

The full portal search applies to article/category pages, Drive files, Users & Groups, Tags, Content tools, and Settings. The search keyword is highlighted in the search results on the Search page.

**Why isn't my analytics information appearing in the full portal search results?**

The full portal search does not include data from the Analytics sections in the Knowledge base portal. However, the settings module will display the information related to Analytics in the search results.

<a id="article-full-portal-search"></a>

## Article-portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Articles - Full portal search** acts as a dedicated space to search the entire project's articles and category pages. Perform a combined search across all the workspaces and languages simultaneously.

---

## Accessing the articles through full portal search

1. Click on the **Search** () icon to the right of the top navigation bar.

   > NOTE
   >
   > Press the **Escape** button to retract this screen.
2. Click on the **All** drop down to the left of the search bar and select **Articles**.
3. Type in the keyword to perform a search.
4. The articles/page categories matching the search item will be displayed as you type the keyword.

   The search result will display the following information:

* Article title
* Breadcrumb
* Article workspace
* Language
* Status of the article

5. You can apply filters from the **Filter** () option available on the right side below the navigation bar.
6. To preview, click on the desired search result.
7. Click on the full screen() icon to expand the preview. Click the previous (**<**) or next (**>**) button to navigate between the search result articles.
8. Click on the **Go to article** optionat the top of the preview to navigate to the article.

   ![Perform full portal search to navigate to the article module.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Article_full_portal_search.gif)

---

## Filters

#### a. Workspace/Language

Click on the dropdown and select the **Workspaces(s)** and **Language(s)** for the search results. The language selection can be found when the Workspace dropdown is further expanded. If you want to search across all the available workspaces(s) and language(s), either select the **Workspace** checkbox or don't apply this filter.

#### b. Visibility

Filter the search results based on the visibility state of the article. There are three selections available, **None, Visible,** and **Hidden**. The **None** would be the default selection which would mean no filter is applied.

#### c. Status

Filter the search results based on the article status. There are four statuses available, **None, New article, Draft,** and **Published**. The **None** status would be the default selection which means no filter is applied.

#### d. Contributors

Filter the search results based on the article contributors. Click the **Contributors** dropdown and the list of contributors appear. Use the search by username field to search for the desired contributors.

#### e. Tags

Users can apply this filter to narrow down the article/category page associated with the specific tag(s). Use the search tags bar to find the tag required. Users can select multiple tags.

#### f. Updated on

Users can filter the results using the Updated date range. The selections available are **7 days, 30 days, 3 months, 1 year,** and **custom date** range selection.  
  
Select the desired filter and click **Apply.** The articles will be narrowed down based on the selection. To clear the existing filters, and reset the search, click the **Clear** button.

<a id="drive-full-portal-search"></a>

## Drive-portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Drive - Full portal search** acts as a dedicated space to search through the files from the entire Drive on the project.

---

## **Accessing the Drive - Full portal search page**

1. Click on the **Search** () icon to the right of the top navigation bar.

   > NOTE
   >
   > Press the **Escape** button to retract this screen.
2. From the **All** dropdown available to the left of the search bar, select **Drive**.
3. Type in the search keyword in the search bar.

   The result(s) matching the search keyword will be displayed in **List view**.

> NOTE
>
> **List view** can be changed to **Grid view** by clicking on the grid () icon available to the right of the **Filter** option below the navigation bar.

   The search results would display the following information about the file

* **Name**
* **Dependencies**
* **Updated on**
* **Updated by**
* **Size**
* **Tags**

4. Click on the file name or the eye () icon to the right to open the **File details** pane.

   In the **File details** pane**,** file location, size, type, uploaded date, uploaded by and tags (if any) will be displayed.
5. Click on **View** **dependencies** to view the instances where the particular file has been used in the article/category page.

   When you click on the dependent article/category page, you will be redirected to the article/category page in the Editor.

   ![Perform search through the files from the entire drive on the project.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Drive_full_portal_search.gif)

   ---

   ## Filters

   #### **a. Status**

   You can filter the file search results by selecting any one from **All files, Deleted files,** or **Starred files**. The default selection would be **All files.**

   #### **b. Type**

   Narrow down the search results based on the filter type selected. The filter options available are **Images, Word, Excel, PPT, PDF, ZIP, Video, Audio,** and **Others**. Team members can select more than one file type for the filter.

   #### **c. Uploaded by**

   Filter the search result by selecting the team member account(s) who have uploaded the files.

   #### **d. Tags**

   You can apply this filter to narrow down the files associated with the specific tag(s). Use the search tags bar to find the tag required and if needed, you can select multiple tags.

   #### **e. Uploaded**

   You can filter the results using the **Upload date** range. The selections available are **7 days, 30 days, 3 months, 1 year,** and **custom date** range selection.

   Once the filter selection is made, click **Apply**. To clear any existing filters and reset the search, click **Clear**.

<a id="users-groups-full-portal-search"></a>

## Users & groups-portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Users & Groups - Full portal search** page serves as a dedicated space to search team accounts, team account groups, readers, and reader groups in the knowledge base project.

---

## **Accessing the Users & Groups - Full portal search page**

1. Click on the **Search** () icon to the right of the top navigation bar.

   > NOTE
   >
   > Press the **Escape** button to retract this screen.
2. From the **All** dropdown available to the left of the search bar, select **Users & Groups**.
3. Type in the search keyword in the search bar.  
   The search results will display two tabs, **Team accounts & groups** and **Readers & groups**.  
   In the **Team accounts & groups** tab, you can find the Name, Portal role, and Login activity of the team accounts and groups relevant to your search term.

   **Team account**
4. Click on the desired team account to open the **View access permissions** panel to view the portal role and content role.
5. Click **Manage permissions** at the top to open the Team account page.

   **Team account groups**
6. Click on the desired team account group to open the **View access permissions** panel to view the portal role and content role.
7. Click **View associated team members** to open the Team account group page.

   ![To perform search for team accounts and groups and readers/groups.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenGif-Users&Groups_Search.gif)

   In the **Readers & groups** tab, you can find the Name and login activity of the reader and reader group relevant to your search term.  
     
   **Readers**
8. Click on the desired reader, and it will navigate to the **Readers** page.

   **Readers & groups**
9. To view and manage the readers associated with the reader group and the content access, click on the **View associated readers**.

   ![To perform search through readers and groups section in users and groups tab.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_ScreenGif-Readers&Groups_Search.gif)

---

## Filters

![Find the filter option available in users and groups module to filter your search.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-users-and-groups-filter.png)

#### 1. Type

You can filter your search based on the type of the team account. The options available are **All entity**, **Team account**, **Team account groups**, **Reader** and  **Reader Groups**. The default selection would be **All entity**.

#### **2. Last logged in**

You can filter your search based on the last login date. The options available are **All**, **7 days**, **30 days**, **3 months**, **1 year,** and **Custom date**. The default selection would be **All**.  
  
Once the filter selection is made, click **Apply**. To clear any existing filters and reset the search, click **Clear**.

<a id="tags-full-portal-search"></a>

## Tags-portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Tags - Full portal search** page serves as a dedicated space to search through and view the **Tags** page in the knowledge base project. Team members can also view the dependency information of the tags.

---

## **Accessing the Tags - Full portal search page**

1. Click on the **Search** () icon to the right of the top navigation bar.

   > NOTE
   >
   > Press the **Escape** button to retract this screen.
2. From the **All** dropdown available to the left of the search bar, select **Tags**.
3. Type the search keyword in the search bar.

    The results relevant to your search will be displayed showing the following information

* Tag name
* Dependency in articles
* Dependency in category pages
* Dependency in drive file

  4. To view the detailed breakdown of the dependency information, click on the intended tag to open the **Tag Dependency** panel.

    The articles/category page dependency shows the following information

* Article/category page name
* Version
* Language
* Contributor
* Current status indicator
* Publish date

5. Click on the article/page category to open the documentation editor.  
     
   The File dependency shows the following information

* File thumbnail (Only for image files)
* Filename and format

6. Click on the **Download** option to download the file onto the device’s local storage.
7. To remove dependencies from articles, category pages, and files in drive or from all of them, select the desired checkbox available to the left of the panel.
8. Once the selection is made, click on the **Remove dependencies** button available at the bottom of the panel.
9. To close the panel, click **Cancel**.

   ![To perform search to find tags in articles, category pages or files in drive.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenGif-Tags_Full_portal_search.gif)

<a id="settings-full-portal-search"></a>

## Settings-portal search

**Plans supporting portal search**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Settings - Full portal search** page serves as a dedicated space to search through various features and settings available on the knowledge base portal.

---

## **Accessing the Settings - Full portal search page**

1. Click on the **Search** () icon to the right of the top navigation bar.

   > **NOTE**
   >
   > Press the **Escape** button to retract this screen.
2. From the **All** dropdown available to the left of the search bar, select **Settings**.
3. All settings your team account can access will be displayed.

    The settings are grouped under

* Knowledge base portal
* Knowledge base site
* Users & Security

4. Type the search keyword in the search bar.  
   The results will be displayed in **Grid view**.  
     
   The search results will display the following information

* Setting/feature name
* Feature icon
* Short description of the setting/feature

5. Click on the intended setting and it will navigate to the respective settings page.

   ![To perform search through the settings panel in the portal.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_ScreenGif-Settings_search.gif)

<a id="custom-domain-mapping"></a>

## Custom domain mapping

**Plans supporting custom domain mapping**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you create a new project in Document360, the system automatically generates a default web address for your knowledge base, like `project-name.document360.com`. However, you can create a more personalized web address, that reflects your brand and preference by editing the default web address or setting up a custom domain, such as `help.yourcompany.com`, which makes it easier for users to find and remember your site.

To access the custom domain mapping option, navigate to **Settings()** > **Knowledge base site** > **Custom domain**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Custom_domain_mapping.png)

> NOTE
>
> A new Document360 project will use the project name as the domain. For example, if you have named your project as **Project Greenfield**, the autogenerated domain by Document360 will be **project-greenfield.document360.com**.

## Editing a default domain

To edit the default web address,

1. Navigate to the **Custom domain** page in Document360 settings.
2. Click the **Edit** icon next to the default web address.
3. Enter your preferred domain in the available field.

   * If your preferred domain is unavailable, the **Update** button will be disabled. You will need to try a different domain.
   * If your preferred domain is available, the **Update** button will be enabled.
4. Click **Update** to update the web address of your **Knowledge base site**.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729603511681.png)

---

## Creating a custom domain

To create a custom domain for your Knowledge base site instead of the default domain provided by Document360, you need to:

1. [**Adding custom domain in Document360**](/docs/custom-domain-mapping#add-domain-in-document360)
2. [**Configuring the CNAME in your domain registrar**](/docs/custom-domain-mapping#setting-up-your-cname)
3. [**Verifying the custom domain in Document360**](/docs/custom-domain-mapping#verify)

### Adding a custom domain in Document360

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729689317870.png)

1. Navigate to **Settings ()** > **Knowledge base site** > **Custom domain** > **Custom domain mapping**.
2. Enter the custom domain in the **Domain configuration** field.
3. Click **Add domain.**

![17_Screenshot-Domain_configuration_adding_domain](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729689397597.png)

4. Once the custom domain has finished setting up and configuration is complete, the records for the custom domain will be generated, and you will be notified in the Knowledge base portal.

### Configuring the CNAME record in your domain registrar

Once the domain is added in Document360, you'll need to configure a **CNAME** record within your **domain registrar** to link your custom domain to Document360’s servers.

To configure the CNAME record,

1. Log in to the domain registrar where you purchased your domain (e.g., GoDaddy, Namecheap, Google Domains).
2. In the domain management panel, navigate to DNS settings.
3. Add a new CNAME in the DNS settings.

   1. Enter your preferred custom domain in the Name/Host field (e.g., `help.yourcompany.com`).
   2. Enter the CNAME provided by Document360 in the Points to/Value field.
4. Enter the details for any other relevant fields and save the new CNAME.

#### Example for configuring a CNAME record

This is an example to demonstrate the CNAME mapping for domains registered with Hostinger.  
![11_Screenshot-Nameservers_example](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729715917903.png)

1. Go to Hostinger's domain manage page.
2. Open the Domains section and select your domain.
3. Now click on the **DNS/Nameservers** on the left and select the **DNS records** tab.
4. Choose the type of record from the dropdown (CNAME).
5. Paste the value copied from Document360 in the **Points to** field.
6. Add the TTL (Time-To-Live) value and click on the **Add record** button.

![12_Screenshot-DNS_record_mapping_in_hostinger](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729715957848.png)

#### Common domain registrars

Below is a list of some common domain registrars:

* **NameCheap** - [Support article](https://www.namecheap.com/support/knowledgebase/article.aspx/434/2237/how-do-i-set-up-host-records-for-a-domain/)
* **Domain.com** - [Support article](https://www.domain.com/help/article/dns-management-how-to-update-dns-records)
* **Google Domains** - [Support article](https://support.google.com/a/answer/47283)
* **Dreamhost** - [Support article](https://help.dreamhost.com/hc/en-us/articles/360035516812-Adding-custom-DNS-records)
* **Hover** - [Support article](https://help.hover.com/hc/en-us/articles/217282457-Managing-DNS-records-)
* **GoDaddy** - [Support article](https://in.godaddy.com/help/add-a-cname-record-19236)
* **Cloudflare** - [Support article](https://community.cloudflare.com/t/how-do-i-add-a-cname-record/59)
* **Bluehost** - [Support article](https://www.bluehost.com/hosting/help/cname)

---

### Verifying the custom domain in Document360

After you configure the CNAME, follow the below steps to complete the custom domain mapping configuration.

1. Go back to Document360’s **Custom domain** settings.
2. Select the checkbox that says, "**I've added the records**".
3. Click the **Verify** button, and the verification process is initiated.
4. If the verification is successful, you will get a success toast message.

NOTE

If there is any issue in configuring the custom domain, check the [**Troubleshooting**](/docs/custom-domain-mapping#troubleshooting) steps in the below section of this article.

After mapping the custom domain, click the **Go to your knowledge base site** icon to view the change in the site URL.

---

### Post mapping issues

**'Deceptive site ahead' message while accessing the site after successful custom domain mapping.**

![13_Screenshot-Deceptive_site_ahead_warning](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-Deceptive_site_ahead_warning.png)

This means that Google has flagged the custom domain you have mapped as unsafe for browsing.

* To **check the flagged status**, use the [Safe Browsing site status](https://transparencyreport.google.com/safe-browsing/search) by Google.
* Type in your mapped domain and check if there are any issues.
* Resolve and fix the issues detected (Phishing attacks, malware-infested, violating community guidelines, etc.).
* Submit a review request from Google Search Console. Google will update the status and remove the warning from your website.

Here is a help article from [**Google support**](https://support.google.com/chrome/answer/99020?hl=en&co=GENIE.Platform%3DDesktop).

![8_Screenshot-Troubleshooting_site_status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1730023063313.png)

---

## Load balancer

A **load balancer** distributes incoming traffic evenly across multiple servers, ensuring that your Knowledge base site remains fast and reliable, even during high traffic periods. This helps prevent any single server from being overloaded and enhances the overall performance and security of your site.

Upgrading the load balancer can provide additional benefits, such as improved security features and better traffic management.

### Upgrading the load balancer

1. Navigate to **Settings ()** > **Knowledge base site**> **Custom domain** > **Custom domain mapping**.
2. Click **Upgrade**.
3. Verify the custom domain mapping configuration in Document360.
4. Copy the CNAME record generated in Document360.
5. Set up the CNAME record in your domain registrar.
6. Verify the custom domain mapping configuration in Document360.

> NOTE
>
> * This upgrade does not cause any downtime. However, we recommend this upgrade during your off-business hours
> * This upgrade is entirely free of cost
>
> Please contact our [support team](mailto:support@document360.com) for assistance.

---

## Configuring a custom domain for Apex domains

When configuring a custom domain for Document360, you may want to use your Apex domain (root domain), such as **abc.com** without a subdomain like **www****.** While configuring subdomains is straightforward, configuring Apex domains requires some extra steps, especially regarding DNS records.

**DNS flattening** is a method that allows you to use a **CNAME record** at the Apex (root) domain level, which not all domain registrars support. If your registrar does not support DNS flattening, you won’t be able to add a CNAME record for your Apex domain.

### Configuring Apex Domains

If your domain registrar doesn't support DNS flattening (for example, GoDaddy), you can opt for a **DNS provider** that does, such as **Cloudflare**. Cloudflare offers free plans that include DNS flattening, enabling you to configure your custom domain for the Apex domain successfully.

For example, let’s say you're using GoDaddy, which does not support DNS flattening. In this case, switching to a DNS provider like Cloudflare will allow you to add a CNAME record for your Apex domain.

> NOTE
>
> For more information, read the article on [**CNAME Flatting**](CNAME flattening)from Cloudflare.

### Using a custom SSL certificate

Use the SSL certificate provided by Document360 for your domain to ensure secure connections, as it offers automatic and seamless renewal for a smooth experience. Provide the following details to process your request to install a custom SSL certificate:

* **Common Name (CN)**: The fully qualified domain name for the certificate.
* **Organization (O)**: The legal name of your organization.
* **Organizational Unit (OU)**: The department or division within your organization.

> NOTE
>
> The certificate is typically valid for 90 days. You will have to renew the certificate on time and provide us with the updated certificate so we can install it on your domain.

---

## Troubleshooting

### Domain verification failed

If you are having issues verifying your custom domain, ensure that the [**CNAME**](/docs/custom-domain-mapping#cname) matches the domain host.

![7_Screenshot-Troubleshooting_invalid_record](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729966781926.png)

There are chances for any other record to be mapped in the place of CNAME (such as AAAA records). This would also cause an error.

**Suggestion**: To view your domain's CNAME, and other DNS information, use [Digwebinterface](https://www.digwebinterface.com/) or [Google's DNS lookup](https://toolbox.googleapps.com/apps/dig/), or any other DNS lookup tool available on the web  
![9_Screenshot-Troubleshooting_digwebinterface](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1729967027700.png)

NOTE

For security reasons, some domain registrars can mask/restrict the DNS records from being discovered on the DNS lookup tools. One such example is **Cloudflare**.  
 In such cases, you can contact your domain registrar for more information.

Once the correct CNAME is mapped; it might take up to 24 hours for successful mapping.

---

### Wait time after DNS records are updated

If the CNAME match, and the domain verification issue persists, the TTL (Time-To-Live) can be a possible reason.

If you're updating an existing DNS Record value, it may take time for the configured TTL to reflect globally. If the TTL is set to 3600 for a DNS record; then, it may take up to 1 hour (3600 seconds) to reflect the DNS record value for the DNS Name server globally.

---

### CAA restriction set by the domain registrar

Some domain registrars set a restriction that the SSL certificate should be provisioned by the specific CAs (Certificate Authority).

For **example**, if a CAA DNS record has a value of 0 issues "letsencrypt.org", then only the Let's Encrypt (CA) will be able to generate a certificate for the particular custom domain. Other Certificate Authorities (DigiCert in our case) would see this configuration and would deny generating an SSL certificate.

Check if you have any CAA records configured in the DNS configuration for the custom domain.

---

### Resolving the “This site can’t be reached” error while accessing the Knowledge base site

While accessing the Knowledge base site, you might encounter errors such as “This site can’t be reached”. In such cases, follow the below troubleshooting steps:

1. Verify when the record was configured and confirm whether it was added immediately after receiving the required values.
2. Ensure propagation has been completed. (DNS records typically take 2-4 hours to propagate, but it is advisable to wait 24 hours for the changes to fully take effect.) If 24 hours have passed, move to the next step.
3. Use the Google Dig tool to verify the DNS records. Check for any duplicate entries associated with the same hostname.

   a. If duplicate records are found, remove them and test again.

   b. If no duplicates exist, proceed to the next step.
4. Check the CAA record entries in <https://dnschecker.org/>
5. If there are any CAA entries for the domain, ensure that CAA entries for our SSL providers are also added.
6. Our SSL providers are Lets Encrypt, Digicert, and Google.
7. Add the following CAA records for SSL providers:

   @ IN CAA 0 issue [digicert.com](http://digicert.com)

   @ IN CAA 0 issue [letsencrypt.org](http://letsencrypt.org)

   @ IN CAA 0 issue [pki.goog](http://pki.goog)

---

### Resolving errors such as “Your connection is not private” or “Your connection is not secure” while accessing the Knowledge base site

This error typically occurs due to the following reasons:

1. **Issue: SSL certificate expired**

1. Check if the SSL certificate has expired.
2. Visit the Knowledge base site and click the **View site information** option in the URL bar.
3. Click **Connection is secure** to view the SSL certificate details.

**B. If the SSL Certificate has not expired, then try the below troubleshooting steps:**

1. Try accessing the site from a different browser to rule out browser-specific issues.
2. Disable any website extensions in your browser and check again.
3. Verify if all users are experiencing the same issue to identify if it is user-specific or system-wide.
4. Clear your browser cache or switch to another browser, as this often resolves the problem.

**C. VPN connection**

1. Disable your VPN and try accessing the site again:
2. If disabling the VPN resolves the issue, the VPN might be causing the problem.
3. Contact your IT team for further assistance.

**D. DNS records issue**

There may be issues with the DNS resolver if the DNS records have not been updated successfully.

1. Use a DNS checker (e.g., [DNS Checker](https://dnschecker.org/)) to verify the DNS records.
2. Confirm if all the records have been updated successfully.
3. If the records are not properly synced, contact your DNS provider or domain registrar to ensure the DNS zone is correctly configured and synced for the domain.

If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

---

### FAQs

#### Do I need an SSL certificate to configure a custom domain?

Document360 automatically provides an SSL certificate for your custom domain when you map it to your project. You do not need to purchase an additional SSL certificate. However, if you prefer to use your own SSL certificate instead of the one provided by Document360, please reach out to our support team at [support@document360.com](mailto:support@document360.com).

#### Will the custom domain URL reflect in the invitation email sent to readers?

Yes, if the invitation email is sent to readers after the custom domain has been successfully mapped, the email links will point to the custom domain.

#### What do I do if the CNAME is not verified after updating the DNS?

If the CNAME is not verified after updating the DNS, you will have to reconfigure your custom domain.

* Remove the current custom domain configuration.
* Re-add the custom domain and update the CNAME on your DNS.
* Ensure the CNAME is verified to complete the setup.

#### Can I configure two custom domains for a single Knowledge base site?

No, it is not possible to configure two custom domains for a single KB site. However, you can set up a redirection from one domain to the other. This way, visitors to the first domain will be redirected to the second domain.

#### Can I set up multiple domains for a single project in Document360?

Currently, Document360 supports only one custom domain per project.

#### What is a Naked Domain?

A naked domain is a domain that does not include the "www" prefix. For example, if the domain is `example.com`, that's a naked domain, whereas `www.example.com` is not.

By default, most domains will have the "www" subdomain, but a naked domain like `yourcompany.com` doesn't include this subdomain.

#### What is a domain registrar?

A **domain registrar** is a company where you purchase and manage your website’s domain name (e.g., GoDaddy, Namecheap, or Google Domains). This is where you'll update the settings for your custom domain to connect it to Document360.

#### What is a CNAME record?

A **CNAME (Canonical Name) record** is a type of DNS setting (DNS, or Domain Name System, is like the internet’s address book, directing users to the right web server). The CNAME connects your custom domain (e.g., `help.yourcompany.com`) to another address, like the default domain provided by Document360. This ensures that when someone types your custom domain, they are taken to your Knowledge base sight.

#### Why do I need to upgrade to the new load balancer?

* It implements SSL offloading, reducing the load on servers, and improving security by handling SSL encryption/decryption at the load balancer level.
* It includes a web application firewall (WAF) for protection against common web attacks such as SQL injection and cross-site scripting.
* It utilizes dynamic traffic management algorithms for optimal traffic distribution and improved performance.

We strongly recommend upgrading to this advanced solution for improved security and reliability.

#### Is it possible to create a separate domain for each version of my project?

No, it is not currently possible to assign separate domains to individual versions. When you create a new version, you can only customize the path within the existing domain.

A Canonical Name record maps a subdomain to its main domain for hosting purposes.

A Canonical Name record maps a subdomain to its main domain for hosting purposes.

A Canonical Name record maps a subdomain to its main domain for hosting purposes.

The duration, specified in seconds, that a DNS record is cached before the server queries for an updated value. For example, a TTL of 600 seconds means the record will be cached for 10 minutes.

A server that stores information about a domain, such as its address, mail settings, and other DNS records, and responds to queries about this information.

A Certification Authority Authorization (CAA) is a DNS record that specifies authorized certificate authorities for a domain, enhancing security.

<a id="document360-on-a-sub-folder"></a>

## Hosting Document360 on a sub-directory

**Plans supporting hosting Document360 on a sub-directory**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## **What is subfolder hosting?**

Subfolder hosting is a type of website hierarchy under a root domain that uses folders to organize content on a website. A subfolder is the same as a subdirectory; the names can be used interchangeably.

The subfolder/subdirectory comes after the root directory or domain name in a URL.

> **For example**, Document360’s root domain is `document360.com`. So, a subfolder/subdirectory path URL might be `document360.com/docs/`.

Most companies host their documentation under a subfolder/subdirectory on their website domain.

> **For example**: `example.com/docs`, `example.com/support`, etc.

This is because hosting a knowledge base on a subdirectory/subfolder of a website (`example.com/docs`) rather than a subdomain (`docs.example.com`) is better for Search Engine Optimization (SEO).

> NOTE
>
> Subfolder/subdirectory hosting can be enabled for **Document360 provided domains** and mapped **custom domains**.

---

## Enabling Subfolder hosting

To enable the subfolder hosting for your project,

1. Navigate to **Settings** () > **Knowledge base site** > **Custom domain** > **Subfolder hosting** tab in the Knowledge base portal.
2. By default, the Subfolder path is set to **/docs**.
3. Turn on the toggle next to "This documentation is hosted on a sub folder."

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Subfolder_hosting_tab_in_settings.png)

### Custom Subfolder paths

You can also set up your knowledge base on subfolder/subdirectory paths other than `/docs`.

> **For example**, `/help`, `/support`, etc.

1. Navigate to **Settings** () > **Knowledge base site** > **Custom domain** > **Subfolder hosting** tab in the Knowledge base portal.

   By default, the **Subfolder path** is set to **/docs**.
2. Clear the **Subfolder path** field and enter your custom subfolder path (**For example,** `/help`).
3. Click on the **Update** button on the right.
4. This new custom subfolder will only work if the subfolder hosting setting is enabled in your project.

When setting up other paths, add the languages associated with each workspace in your project. This configuration varies depending on the different web servers.

> **NOTE**
>
> For projects configured with custom domain and subfolder hosting, the **Article preview** option is not supported yet.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Custom_domain_subfolder_path.png)

### Custom Site API paths

> For your information (FYI)
>
> The Custom Site API paths feature is available only in KB site 2.0 projects. To migrate from KB site 1.0 to KB site 2.0, read the article on [KB site 2.0 migration](/help/docs/kb-site-20-migration).

By default, the Site API path is set to `/api`. You can customize the **Site API path** as well from the **Subfolder hosting** tab in the custom domain settings.

For example, `/docs-api`, `/api-docs`, etc.

> CAUTION
>
> For **KB site 2.0** projects, subfolder hosting will work only when both the **Subfolder path** as well as the **Site API path** have been defined.

1. Navigate to **Settings** () > **Knowledge base site** > **Custom domain** > **Subfolder hosting** tab in the Knowledge base portal.
2. By default, the **Site API path** is set to **/api**.
3. Clear the **Site API path** field and enter your custom site API path (**For example,** `/docs-api`).
4. Click on the **Update** button on the right.
5. This new custom site API path will only work if the subfolder hosting setting is enabled in your project.

> NOTE
>
> The Custom **Site API path** is not the path for **API Documentation**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Custom_domain_site_api_path.png)

---

## Web servers

Here are some of the commonly used web servers

* **Apache HTTP server**
* **Nginx server**
* **ASP.NET Core server**
* **Microsoft - IIS server**
* **OpenResty server**
* **LiteSpeed server**
* **Cloudflare server**

> NOTE
>
> **What is a web server?**  
> A web server stores and delivers the content for a website – such as text, images, video, and application data – to clients that request it. The most common type of client is a web browser program.

---

## What happens next?

Once the web server is successfully configured, your knowledge base site will be live on your custom subfolder/subdirectory. However, the existing URL for your project will serve the requests.

> **For example,** `example.document360.io` and `example.com/docs` (if `/docs` is your folder path) will point to the Knowledge base site.

This will cause duplicate content in Search engines (Google, Bing, etc.). For this, you will need to enable a URL redirect.

> NOTE
>
> To enable the redirect from `example.document360.io` to `example.com/docs`, please contact us at [**support@document360.com**](mailto:support@document360.com).

---

### FAQs

#### What is a Canonical URL?

A canonical URL is the official link that tells search engines which version of a page to index and display in search results when there are multiple URLs for the same content. This helps prevent duplicate content issues and ensures the preferred URL is ranked properly in search results.

For example:

If your page is accessible through multiple URLs, such as:

* `https://example.com/page`
* `https://www.example.com/page`
* `https://example.com/page?utm=123`

You can set one of them (e.g., `https://www.example.com/page`) as the canonical URL to signal search engines to prioritize it.

#### How can I configure the canonical URL in Document360?

You can use the Canonical domain setting to globally replace the project subdomain with your specified domain for canonical URLs in all articles. This is particularly useful if you want to signal to search engines to index your custom domain (e.g., `www.yourdomain.com`) instead of the Document360 domain.

To change the canonical URL globally, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Custom domain** > **Subfolder hosting** tab in the Knowledge base portal.
2. Under **Subfolder hosting**tab, locate the **Canonical domain** option.
3. Enter your desired domain (e.g., `https://www.yourdomain.com`).
4. Click **Save**to save your changes.

<a id="nginx-server"></a>

## Nginx server - Subfolder hosting

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Nginx is an open-source web server. To know more, visit the [**Nginx documentation**](https://nginx.org/en/docs/)

---

## Setting up a subfolder/subdirectory

**Example:**

> NOTE
>
> Replace the example domain with your own document360 provided domain/custom domain.
>
> * Example domain represented using `example.document360.io`
> * Subfolder/subdirectory path (/docs) represented as `example.document360.io/docs`

1. Add the following location blocks in your Nginx configuration file (`/etc/nginx/default`).

```
location /docs {
    proxy_pass https://example.document360.io/docs;
    proxy_set_header Host example.document360.io;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header "requested-by" "proxy";
    proxy_ssl_server_name   on;
}
```

Plain text

Copy

2. Restart the Nginx web server
3. For example, if you are using Nginx on Linux, then use the command  
   `$ sudo systemctl restart nginx`

> NOTE
>
> If you are on KB Site 2.0 and wish to host your Knowledge base as a subfolder, you have to define the Subfolder path as well as the Site API path.

---

### To setup on other than '/docs' path

* You can set up your knowledge base on subdirectory paths other than `/docs`.  
  For example, `/help`, `/support`, etc.
* When setting up other paths, add the languages associated with each Workspace.
* A few more lines need to be added to achieve this. Restart the server once done.

**Example:**

> NOTE
>
> Replace the Document360 provided domain and the subdirectory domain with your own domains. Also, replace the workspace name, subfolder path, and language with your requirements.
>
> * Document360 provided domain represented as `example.document360.io`
> * Workspace name represented as `/v1/`
> * Subfolder path represented as `/help/`
> * Language represented as `/he` for Hebrew.

```
location /help {
    proxy_pass https://example.document360.io/docs;
    proxy_set_header Host example.document360.io;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header "requested-by" "proxy";
    proxy_ssl_server_name   on;

    sub_filter "v1/docs/" "v1/help/";
    sub_filter "docs/he/" "/help/he";
    sub_filter "/docs/" "/help/";
    sub_filter_once off;
}

```

Plain text

Copy

1. Restart the Nginx web server
2. For example, if you are using Nginx on Linux, then use the command  
   `$ sudo systemctl restart nginx`

---

### To enable the workspaces dropdown

If you want to enable the workspace dropdown navigation for your project when you host in a custom subdirectory and path, add the following codes for each of the workspaces available in your project.

**Example:**

Let's assume there are two workspaces available in your project, **v1** and **v2**. In that case, you must add two code blocks, one for each Workspace.

> NOTE
>
> Replace the Document360 provided domain and the subdirectory domain with your own domains. Also, replace the workspace name, subfolder path, and language with your requirements.
>
> * Document360 provided domain represented as `example.document360.io`
> * Workspace name represented as `/v1/`,`/v2/`
> * Subfolder path represented as `/help/`
> * Language represented as `/he` for Hebrew.

```
location /v2/help {
    proxy_pass https://example.document360.io/v2/docs;
    proxy_set_header Host example.document360.io;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header "requested-by" "proxy";
    proxy_ssl_server_name   on;

    sub_filter "v2/docs/" "v2/help/";
    sub_filter "docs/he/" "/help/he";
    sub_filter "/docs/" "/help/";
    sub_filter_once off;
}
-----------------------------------------------------
location /v1/help {
    proxy_pass https://example.document360.io/v1/docs;
    proxy_set_header Host example.document360.io;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header "requested-by" "proxy";
    proxy_ssl_server_name   on;

    sub_filter "v1/docs/" "v1/help/";
    sub_filter "docs/he/" "/help/he";
    sub_filter "/docs/" "/help/";
    sub_filter_once off;
}
-----------------------------------------------------
location = /v2/docs {
    return 301 /v2/help;
}
-----------------------------------------------------
location = /v1/docs {
    return 301 /v1/help;
}

```

Plain text

Copy

> NOTE
>
> If you want your readers to navigate between the different public workspaces of your project from the dropdown (on mouse click), add the location block for all available workspaces.

1. Restart the Nginx web server
2. For example, if you are using Nginx on Linux, then use the command  
   `$ sudo systemctl restart nginx`

---

## Helpful Links

Here are a few external links that may help you understand the Nginx server **location blocks** in detail:

* [NGINX Docs: Configuring NGINX and NGINX Plus as a Web Server](https://docs.nginx.com/nginx/admin-guide/web-server/web-server/)
* [DigitalOcean: Understanding Nginx Server and Location Block Selection Algorithms](https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms)

---

## Sitemap generation

**Example:**

> NOTE
>
> Replace the example domain with your own document360 provided domain/custom domain.
>
> * Example domain represented using `example.document360.io`
> * The sitemap prefix remains the same except for the language code (en, fr, de, etc.)  `example.document360.io/sitemap.xml.en`

```
location /sitemap.xml.en {
proxy_pass https://example.document360.io/sitemap.xml.en;
proxy_set_header Host example.document360.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header "requested-by" "proxy";
proxy_ssl_server_name   on;
```

Plain text

Copy

---

## Home page hosted on a subfolder

To host your project's home page on a custom subdirectory/subfolder path, add the following codes for each of the home page workspaces available in your project.

**Example:**

Let's assume there are two workspaces available in your project, **V1** and **V2**. In that case, you must add two code blocks, one for each Workspace.

> NOTE
>
> Replace the Document360 provided domain and the subdirectory domain with your own domains. Also, replace the workspace name, subfolder path, and language with your requirements.

* Document360 provided domain represented as `example.document360.io`
* Workspace name represented as `/v1/`,`/v2/`

```
location =/v1 {
proxy_pass https://example.document360.io/;
proxy_set_header Host example.document360.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header "requested-by" "proxy";
proxy_ssl_server_name   on;
}
location =/v2 {
proxy_pass https://example.document360.io/;
proxy_set_header Host example.document360.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header "requested-by" "proxy";
proxy_ssl_server_name   on;
}
location /v1/en {
  return 301 /v1;
}
location /v2/en {
  return 301 /v2;
}
```

Plain text

Copy

> PRO TIP
>
> The equal sign can be used if the location needs to match the exact request URI. When this modifier is matched, the search stops right here. For more information, [**click here**](https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#locations)**.**
>
> **Example:** `location =/help {`

2. Restart the Nginx web server
3. For example, if you are using Nginx on Linux, then use the command  
   `$ sudo systemctl restart nginx`

**Knowledge base site home page**

The default home page for a knowledge base site appears at the root directory (For example, `example.document360.io`). If the project contains a Workspace and language-specific home page, the slug following the root directory would be /<workspace\_name>/<language\_code>. (For example,`example.document360.io/v2/he`)

---

## What happens next?

Once you have successfully configured the web server, your knowledge base site is live on your custom subfolder/subdirectory. However, the existing URL for your project will serve the requests.

> **For example,** `example.document360.io` and `example.com/docs` (if `/docs` is your folder path) will point to the knowledge base site.

This may cause duplicate content in search engines (Google, Bing, etc.). A redirect from the Document360 project sub-domain to your custom domain will be required to prevent this.

> NOTE
>
> To enable the redirect from `example.document360.io` to `example.com/docs`, please contact us at [**support@document360.com**](mailto:support@document360.com).

---

## Troubleshooting

This section provides step-by-step guidance to troubleshoot common challenges you may face during the NGINX setup process. From subfolder hosting issues to failed configuration tests, each solution is designed to help you quickly identify and resolve potential roadblocks, ensuring a smooth and efficient server configuration.

### Resolving invalid location directive in NGINX

**Error:** nginx: [emerg] "location" directive is not allowed here

This error occurs when a location directive is placed outside its valid context, such as outside the server block. In NGINX, location blocks must be defined within a server block.

**Steps to resolve:**

1. Ensure that the location block is placed correctly within the server block. Refer to the below sample block:

   ```
   server {
       listen 80;
       server_name example.com;
       location /docs {
           proxy_pass https://example.document360.io/docs;
           proxy_set_header Host example.document360.io;
       }
   }
   ```

   nginx

   Copy
2. To avoid this issue, do not place location directives in the global `http` context or outside the `server` context.
3. If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

### Certbot package availability issue

**Error:** No package Certbot available

This issue often occurs when the EPEL repository (required for Certbot installation on RHEL-based distributions) is not enabled, or the package manager is unable to locate Certbot on RHEL-based distributions.

**Steps to resolve:**

1. Enable the EPEL repository by using the below code:

   ```
   sudo yum install epel-release
   ```

   nginx

   Copy
2. Update the repository cache and try installing Certbot again by using the below code:

   ```
   sudo yum install certbot
   ```

   nginx

   Copy
3. Ensure your instance has internet access to fetch the repository files. If the problem persists, verify the repository configuration files in `/etc/yum.repos.d/`.
4. If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

### NGINX configuration test issue

**Error:** NGINX configuration test failed

This issue occurs when there is a syntax error in the NGINX configuration file.

**Steps to resolv**e:

1. Run the configuration test command:

   ```
   sudo nginx -t
   ```

   nginx

   Copy
2. Review the error message and the line number like the example shown below:

   ```
   nginx: [emerg] invalid parameter "proxy_pas" in /etc/nginx/sites-enabled/example:22
   nginx: configuration file /etc/nginx/nginx.conf test failed
   ```

   nginx

   Copy
3. Open the specified file `/etc/nginx/sites-enabled/example` and fix the configuration issue. For example:

   ```
   # Incorrect
   proxy_pas https://example.com;

   # Correct
   proxy_pass https://example.com;
   ```

   nginx

   Copy
4. Once the configuration issue is fixed, restart NGINX:

   ```
   sudo systemctl restart nginx
   ```

   nginx

   Copy
5. If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

### SSL certificate issue

**Error:** SSL certificate not working

This issue may occur due to an incorrect NGINX SSL configuration or when there is an issue with the installed certificate. The certificate details such as domain and expiry date might not match the configuration details.

**Steps to resolve:**

1. Verify the certificate files by using the below code:

   ```
   openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout
   ```

   nginx

   Copy
2. Ensure that your configuration matches the certificate details, such as domain and expiry date.
3. Ensure the NGINX SSL configuration is correct. Refer to the below code as an example:

   ```
   server {
       listen 443 ssl;
       server_name yourdomain.com;
       
       ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
   }
   ```

   nginx

   Copy
4. Once done, restart NGINX using the below code:

   ```
   sudo systemctl restart nginx
   ```

   nginx

   Copy
5. If the issue persists after following these steps, please contact the Document360 support team for further assistance: [Contact Document360 Support](https://document360.com/support/)

---

### FAQ

**Why is my site home page not available?**

Once you have designed the project’s home page using the site builder, ensure that you have published it. Confirm the home page is live and accessible to the intended audience.

<a id="aspnet-core-server"></a>

## ASP.NET Core server

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Hosting a knowledge base in a subfolder offers a seamless way to integrate documentation into your existing website structure. For example, setting up a subfolder path like `/help` allows users to access your knowledge base directly within your domain, such as `example.document360.io/help`.

To get started, ensure you replace the example domain in the configurations with your own Document360 provided domain or your custom domain.

---

### Setting up a sub folder path

1. Install the [**ASP.Net Core package**](https://www.nuget.org/packages/Microsoft.AspNetCore.Proxy/)**.**
2. In the `Standard.cs` file, configure the `method` as follows:

```
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            /// ...
            app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/docs"),
                builder => builder.RunProxy(new ProxyOptions() {
                    Scheme = "https",
                    Host="example.document360.io"
            }));
            
           /// ...

```

Plain text

Copy

> NOTE
>
> If you are on KB Site 2.0, and wish to host your Knowledge base as a subfolder, you have to define the Subfolder path as well as the Site API path.

---

## What happens next?

Once you have successfully configured the web server, your knowledge base site is now live on your custom subfolder/subdirectory. However, the existing URL for your project will serve the requests.

> **For example,** `example.document360.io` and `example.com/docs` (if `/docs` is your folder path) will point to the knowledge base site.

This will cause duplicate content in Search engines (Google, Bing, etc.). For this, you will need to enable a URL redirect. Enabling a URL redirect prevents search engines like Google or Bing from indexing duplicate content, which can negatively impact your site's search rankings.

> NOTE
>
> To enable the redirect from `example.document360.io` to `example.com/docs`, please contact us at [**support@document360.com**](mailto:support@document360.com).

<a id="microsoft-iis-server"></a>

## Microsoft - IIS server

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Hosting a knowledge base in a subfolder offers a seamless way to integrate documentation into your existing website structure. For example, setting up a subfolder path like `/help` allows users to access your knowledge base directly within your domain, such as `example.document360.io/help`.

To get started, ensure you replace the example domain in the configurations with your own Document360 provided domain or your custom domain.

---

### Pre-requisites

* [**Application Request Routing module**](https://www.iis.net/downloads/microsoft/application-request-routing) for IIS
* [**URL Rewrite Module**](https://iis-umbraco.azurewebsites.net/downloads/microsoft/url-rewrite) for IIS

---

## Setting up a sub-folder path

1. Install the [**URL Rewrite module for IIS Server**](https://www.iis.net/downloads/microsoft/url-rewrite)
2. Install the Application Request Routing module, and ensure it is enabled.
3. Add the following rewrite rule in `web.config` to rewrite contents from your documentation at `/help`.

```
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxy_HomePage" enabled="true" stopProcessing="true">
                    <match url="^help$" />
                    <action type="Rewrite" url="https://example.document360.io/v1" />
                    <serverVariables>
                        <set name="HTTP_requested_by" value="proxy" />
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
        <rule name="ReverseProxy_DocsPage" enabled="true" stopProcessing="true">
                    <match url="^help/(.*)" />
                    <action type="Rewrite" url="https://example.document360.io/help/{R:1}" />
                    <serverVariables>
                        <set name="HTTP_requested_by" value="proxy" />
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="RestoreAcceptEncoding" preCondition="NeedsRestoringAcceptEncoding">
                    <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" />
                    <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
                </rule>
        <rule name="RewriteLinksToSourceDomain1" preCondition="ResponseIsHtml">
                    <match filterByTags="None" pattern="^https://example.document360.io/(.*)" />
                    <action type="Rewrite" value="https://example.com/{R:1}" />
                </rule>
        <rule name="RewriteLinksToSourceDomain2" preCondition="ResponseIsHtml">
                    <match filterByTags="None" pattern="&quot;/help&quot;" />
                    <action type="Rewrite" value="&quot;/help&quot;" />
                </rule>
        <rule name="RewriteLinksToSourceDomain3" preCondition="ResponseIsHtml" patternSyntax="ECMAScript">
                    <match filterByTags="A" pattern="(.*)/docs/(.*)" />
                    <action type="Rewrite" value="/help/{R:2}" />
                </rule>
                <preConditions>
        <preCondition name="ResponseIsHtml">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                    <preCondition name="NeedsRestoringAcceptEncoding">
                        <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=" .+" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>  
</configuration>

```

XML

Copy

The `web.config` file is located in your IIS root directory. Make sure to back up the file before making changes.

> NOTE
>
> If you are on KB Site 2.0, and wish to host your Knowledge base as a subfolder, you have to define the Subfolder path as well as the Site API path.

---

## What happens next?

Once you have successfully configured the web server, your knowledge base site is live on your custom subfolder/subdirectory.

However, the existing URL for your project will serve the requests.

> **For example,** `example.document360.io` and `example.com/help` (if `/help` is your folder path) will point to the Knowledge base site.
>
> Remember to replace `example.document360.io` and `example.com/help` with your domain. For example, `yourcompany.document360.io` and `yourcompany.com/help`.

This will cause duplicate content in Search engines (Google, Bing, and more.). For this, you will need to enable a URL redirect. Enabling a URL redirect prevents search engines like Google or Bing from indexing duplicate content, which can negatively impact your site's search rankings.

> NOTE
>
> To enable the redirect from `example.document360.io` to your custom subfolder `example.com/help`, please contact us at [**support@document360.com**](mailto:support@document360.com).

---

### FAQs

**What is Internet Information Services (IIS)?**

IIS is a flexible, secure web server created by Microsoft for hosting websites, applications, and services on Windows. It supports protocols like HTTP, HTTPS, FTP, and more, making it widely used for web hosting and application deployment in Windows environments.

**What is the Application Request Routing (ARR) module?**

The ARR module is an IIS extension that enables load balancing, routing requests to different servers based on rules, and improving application performance.

**What is the URL Rewrite module in IIS?**

This IIS module allows you to create rules for modifying URLs, enabling custom paths for accessing content or redirecting users seamlessly.

**What is the purpose of the** `web.config` **file in IIS?**

The `web.config` file stores configuration settings for applications running on IIS, such as URL rewrite rules, security settings, and server behavior.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="apache-http-server"></a>

## Apache HTTP server

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Apache HTTP** web server, also known as Apache server, is a free, open-source web server. Apache is highly flexible and customizable. You can easily enable or disable various functionalities.

> NOTE
>
> Replace the example domain with your document360 provided domain/custom domain.
>
> * Example domain represented using `example.document360.io`
> * Subfolder/subdirectory path (/v1) represented as `example.document360.io/v1`
> * Subfolder/subdirectory home page path (/help) represented as `example.document360.io/help`

### Setting up a sub folder path

Ensure the following Apache server modules are enabled. These modules are part of the Apache server installation.  
 • proxy  
 • proxy\_http  
 • headers  
 • substitute  
 • proxy\_html  
 Run the following bash command to enable the modules:

```
    sudo a2enmod proxy proxy_http headers substitute proxy_html
```

Bash

Copy

#### Home page

1. Configure the following Virtual Host configuration location blocks.

For example,

* **Location Block** - Proxy all requests where the path starts from "/help".

This block will proxy requests for the home page.

```
<Location /help>
   ProxyPreserveHost off
   RequestHeader set Host example.document360.io
   RequestHeader set requested-by proxy
   RequestHeader unset Accept-Encoding
   ProxyPass https://example.document360.io/v1
   ProxyPassReverse https://example.document360.io/v1



   AddOutputFilterByType SUBSTITUTE text/html
   substitute 's|href="/docs|href="/help|ni'
   substitute 's|href="/v1/docs|href="/help|ni'
   substitute 's|href="https://example.document360.io/docs|href="https://docs.example.com/help|ni'
</Location>
```

Plain text

Copy

**Redirect block to fix article preview links for sub folder hosting**

2. The article preview links in Document360 portal contain the workspace and language slug in the URL.

For example,

* **Article URL**: `docs.example.com/getting-started`
* **Preview links in the Knowledge base portal**: `docs.example.com/v1/en/getting-started`

You can either add one more location block to handle `/v1/en` path, (or) have a redirect set from `/v1/en` to `/`.

Please refer to the code snippet below for setting the redirect:

```
RewriteEngine on
RewriteRule ^v1/en$ / [R=301,L,NC]
```

Bash

Copy

You should install the `rewrite` module for the redirection to work. Use the following code to install the `rewrite` module.

> `sudo a2enmod rewrite`

#### Article/Category pages

3. Configure the following Virtual Host configuration location blocks.

For example,

* **Location Block** - Proxy all requests where path starts from "**/help/**"

This block will proxy requests for all the article/category pages.

```
<Location /help/>
   ProxyPreserveHost off
   RequestHeader set Host example.document360.io
   RequestHeader set requested-by proxy
   ProxyPass https://example.document360.io/docs/
   ProxyPassReverse https://example.document360.io/docs/



   AddOutputFilterByType SUBSTITUTE text/html
   substitute 's|href="/docs|href="/help|ni'
   substitute 's|href="/v1/docs|href="/help|ni'
   substitute 's|href="https://example.document360.io/docs|href="https://docs.example.com/help|ni'
</Location>
```

Plain text

Copy

4. Restart the Apache server

> **For example**, If you are using Nginx on Linux, then use the command  
> `$ sudo systemctl restart nginx`

> NOTE
>
> If you are on KB Site 2.0, and wish to host your Knowledge base as a subfolder, you have to define the Subfolder path as well as the Site API path.

---

## Sitemap generation

> NOTE
>
> Replace the example domain with your document360 provided domain/custom domain.
>
> * Example domain represented using `example.document360.io`
> * The sitemap prefix remains the same except for the language code (en, fr, de, etc.)  `example.document360.io/sitemap.xml.en`

```
<Location /sitemap.xml.en>
    RequestHeader set Host example.document360.io
    RequestHeader set requested-by proxy
    ProxyPass https://example.document360.io/sitemap.xml.en
    ProxyPassReverse https://example.document360.io/sitemap.xml.en
</Location>
```

Bash

Copy

---

## What happens next?

Once you have successfully configured the web server, your knowledge base site is live on your custom subfolder/subdirectory.

However, the existing URL for your project will serve the requests.

> **For example,** `example.document360.io` and `example.com/docs` (if `/docs` is your folder path) will point to the knowledge base site.

This will cause duplicate content in Search engines (Google, Bing, etc.). For this, you will need to enable a URL redirect.

> NOTE
>
> To enable the redirect from `example.document360.io` to `example.com/docs`, please contact us at [**support@document360.com**](mailto:support@document360.com).

<a id="reader-self-registration"></a>

## Readers self registration

**Plans supporting for Readers self-registration**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

NOTE

The **Self-registration** feature in Document360 is available only when the Knowledge base site access is set to **Private** or **Mixed**.

## Readers self-registration

Self-registration lets users create their own reader accounts without needing an invitation from a project team member. To enable self-registration, share your knowledge base URL with users, allowing them to create their accounts independently.

Once registered, readers are automatically added to the **Readers** list. Project members with access to **User & Security** settings can edit or remove these readers as needed.

### Self-register on a Knowledge base site

1. Go to your Knowledge base site.
2. Click **Sign up** at the bottom of the login screen.

   ![User self registration step](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/new%20account(1).png)
3. Enter your **First name**, **Last name**, and **Email**.
4. Click **Sign up**.

![10_Screenshot-Self_signup_site_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Self sign up.png)

You will get a confirmation message saying ‘*Account created successfully*’.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New account created.png)

You will receive an invitation email. Once verified, you can set a password and log in to the knowledge base site.

NOTE

An email only needs to be verified once. After that, it can be used across multiple projects.

---

## Accessing the Reader self-registration option

1. Navigate to Settings () **> Users & Security > Readers & groups** in the knowledge base portal.

   The **Readers & groups** overview page appears.
2. Select the **Reader self-registration** tab.

   ![User self registration step](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1731477666955.png)
3. If the **Enable Self-Registration** toggle is turned off, the page will be empty. You can have a private or mixed knowledge base without enabling the self-registration feature.
4. If the **Enable Self-Registration** toggle is turned on, you’ll see the following options:

   1. **Add to default reader group -** This is an optional field.

      Newly self-registered readers are automatically grouped under the selected default reader group(s). If a reader’s email domain is already mapped to an existing reader group, they will be assigned to that group.

      To assign a default reader group:

      1. On the **Domain Readers Self-Registration** page, click inside the **Default Reader Group** field to see the list of available reader groups.
      2. Select one or more reader groups as the default for new self-registered readers.
      3. The selected groups will appear in the field.
      4. To remove a reader group, click the cross ‘**X**’ icon next to the group name.
      5. Click **Save** when done.
   2. **Restrict registration by domain -** This is an optional field.

      You can configure your Document360 knowledge base to allow or block self-registrations based on a user’s email domain.

      * **Allow Self-Registration from Specific Domains:**  
        To restrict self-registration to employees of a specific organization, set up a domain restriction.  
        Example: Add the company’s email domain (e.g., `@examplecorp.com`) and set the status to **Allow**.
      * **Block Self-Registration from Specific Domains:**  
        To block unauthorized users, add specific domains to the block list.  
        Example: Add general email domains (e.g., `@genericmail.com`) and set the status to **Block**.

---

## Adding a domain restriction

1. Navigate to Settings () **> Users & Security > Readers & groups** > **Reader self-registration** tab in the knowledge base portal.
2. Scroll down to the **Domain Restriction** section.
3. In the **Domain Name** field, enter the domain you wish to allow or block (e.g., everything after the **@** symbol, like `@genericmail.com` or `@randomdomain.com`).
4. Select one of the following options:

   * **Allow (Whitelist)**: Permits users with the specified domain emails to self-register. All other users will be unable to register.
   * **Block (Blacklist)**: Prevents users with the specified domain emails from self-registering. If only blocked domains are listed, self-registration will be disabled for all users.
5. Assign **Added reader groups** to each domain by selecting one or more groups from the dropdown menu.

   * To remove a selected reader group, click the '🗙' icon next to it.
   * Click Save () to confirm. Alternatively, click () to clear the entries in the line.
   * Click Remove () to delete the line completely.
6. Click **Add domain** to include additional domain restrictions as needed.

> NOTE
>
> If both the Default Reader Group(s) and the domain-specific Reader Group(s) are enabled, the domain-specific settings will take precedence over the default reader groups.

---

## FAQs

**What happens if no default reader group is selected?**

If no default reader group is selected, self-registered readers will have unrestricted access to the entire knowledge base, without any group-specific restrictions.

**What access do readers with multiple group memberships get?**

When a reader is part of multiple groups, the highest level of access for each content item is granted.

For instance, if a reader belongs to Group A (which has access to all languages in workspace 'V1') and Group B (which has access to only English in 'V1'), the reader will receive access to all languages in workspace 'V1'.

**Does individual content access override reader group access?**

No, individual content access does not override group access. The reader always receives the highest privilege from both individual and group settings.

For example, if a reader is individually set to access only English in workspace 'V2' but is also part of a group that has access to all languages in 'V2', the reader will have access to all languages in 'V2'.

**How is reader access prioritized?**

Access is determined by the highest privilege assigned at each content level. Readers only gain access to the content they have been specifically granted.

**Why is self-registration not working for my project?**

Self-registration does not function as expected when SSO (Single Sign-On) is enabled because SSO bypasses the Document360 login page, where self-registration typically occurs. Self-registration with domain configuration is designed for use on the Document360 login page only.

<a id="managing-reviewer-accounts"></a>

## Managing reviewer accounts

**Plans supporting access to reviewer role settings in knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Reviewer** role in Document360 lets users review content without editing or making changes. This role is designed to streamline content review by granting specific permissions to Reviewers. The **Reviewer** role will only have access to the **Documentation** module, allowing access to view articles and categories, add comments to articles, and update the article's workflow status.

## Creating a Reviewer account

You can create a Reviewer account by assigning the Reviewer role during team account creation. Here's how:

1. Navigate to **Settings** ()> **Users & security** > **Team accounts & groups**.
2. Click **Create** > **Team account** to open the new team account creation window.
3. Enter the email address of the user to be added.
4. In the **Portal role** dropdown, select **Reviewer**. The content role will automatically be set to **Reviewer**.
5. Alternatively, if another portal role is selected (e.g., **Owner**, **Admin**), you can manually assign the **Reviewer** role in the content role dropdown.
6. Assign content access permissions based on the articles or categories the Reviewer needs to access.
7. Click **New team account** to finish adding the Reviewer account.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Create_new_revieiwer_account.png)

### Bulk Importing Reviewers

You can import multiple Reviewer accounts at once by using the bulk import feature:

1. Navigate to **Settings** () > **Users & security** > **Team accounts & groups** in the Knowledge base portal.
2. Select **Add > Import Team Accounts**.
3. Select the **Reviewer** account type.
4. Select the **SSO account** checkbox to include them as SSO reviewer accounts.
5. Download the sample import format by clicking **Download template**.
6. Prepare a CSV file with the email addresses of the users to be added.
7. Drag and drop the file or click **Click to upload** to upload the CSV file from your local storage.
8. Assign the desired portal and content roles.
9. Click **Import** to complete the process.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenGIF-Importing_reviewer_roles.gif)

---

## Reviewer permissions and access

Once a user is assigned the Reviewer role, they will have access to the **Documentation** module and can interact with articles and categories based on their permissions.

> NOTE
>
> Reviewers can only review one article at a time. When a Reviewer begins reviewing an article, other users will see a banner stating, "Reviewer [Name] is currently reviewing the article."

Reviewers can:

* View articles in **Draft mode** or in the state determined by the workflow.
* Add comments to the article, including inline comments.
* Update the workflow status of an article.
* Set due dates and manage workflow assignments.
* Bulk update workflow statuses and manage assignments across multiple articles from the Workflow assignments page.

> NOTE
>
> When a workflow status is set to **Read only**, no team accounts, including those with the Reviewer role, can add comments to an article.

---

## Managing Reviewer accounts

You can update or modify existing Reviewer accounts through the **Team accounts & groups** section. Reviewers can also be converted to **Readers** or **SSO Readers**, and vice versa.

### To edit or delete a Reviewer

1. Navigate to **Settings** ()> **Users & security** > **Team accounts & groups**.
2. Locate the user you wish to modify, then select **Edit** or **Delete** when you hover your cursor over the user.

### To convert a Reviewer to a reader account

1. Navigate to **Settings** () > **Users & security** > **Team accounts & groups**.
2. Select the checkbox next to the user you wish to modify.
3. Click **Convert to reader**.
4. Assign the desired content access permissions from the **Content access** dropdown.
5. As an optional step, map the user to any existing reader groups from the **Map with existing reader group** dropdown.
6. Click **Confirm** to convert the Reviewer to a reader account.

### Purchasing reviewer account as add-ons

To purchase reviewer accounts as add-on, follow the below steps:

1. Navigate to **Settings** ()> **Knowledge base portal** > **Billing** in the Knowledge base portal.
2. Click the **Purchase add-on** in the **My plan** tab.

   The **Purchase add-on** panel will appear.
3. In the **User management** section, add the number of **Reviewer account** you need.
4. Click **Confirm payment**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Adding_Reviewer_role_As_Add-ons_.png)

---

## Reviewer role functionality

The Reviewer role is meant to make the content review process easier by letting users give feedback on articles without changing the content. Reviewers can access articles in **Draft mode** to leave comments, suggest edits, and update the article's status in the workflow. This role is helpful for teams that want to include valuable input from experts or stakeholders while ensuring the content remains unchanged until it's ready for final approval.

### Reviewing an article

To start reviewing an article,

1. Navigate to the article from the **Category & article** pane.
2. Click the **Start Review** button at the top right of the editor.

To add a comment,

1. Highlight the desired text and click on the floating Comment (  ) icon.
2. Enter your comment, then either click Post or press **Ctrl+Enter** to submit.

When you’ve completed your review, click **Mark as Reviewed** at the top right.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Reviewing_an_article.gif)

To update the workflow status,

1. Click the Workflow status dropdown at the top of the editor.
2. Select the appropriate workflow status for the article.
3. To set a due date for the workflow status, click the **Set due date** icon and choose the desired date from the calendar.
4. To assign the workflow status to a user, click the **Assign** icon and search for the team account.
5. Once done, click **Set status** to apply the changes.

---

### FAQs

#### How many Reviewer accounts are included in each plan?

* Professional: 5 Reviewers
* Business: 10 Reviewers
* Enterprise: 20 Reviewers

#### Can Reviewers edit articles?

No, Reviewers can only leave comments and update workflow statuses. They do not have permissions to edit the content directly.

#### Can Reviewers access all articles in the knowledge base?

Reviewers can only access articles that they have been given permission to review. Their access is usually restricted to specific categories or articles.

<a id="account-locked"></a>

## Account locked

**Plans allowing users to change password**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you try to log in with an incorrect password five times in a row, your account will be temporarily locked for 30 minutes due to security reasons.

If this happens, you will see the following message: **Account locked due to multiple failed attempts! Please try again after 30 minutes.**

## Resetting your password

If you forgot your password, follow these steps to reset it:

1. On the Document360 login page, click **Forgot password?**
2. Enter your associated email address and click **Send**.
3. Check your inbox for a password reset email.
4. Click **Reset Password** in the email. You will be redirected to the password reset page.
5. Enter your new password in the **Password** field and confirm it by typing it again in the **Confirm password** field.
6. Click **Reset** to complete the process. Your password has now been successfully reset.

> NOTE
>
> Password changes apply to your entire account and are not project-specific.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Account_locked_forgot_password.png)

## New password requirements

Your new password must meet the following criteria:

* At least 8 characters long.
* Contains at least 1 uppercase letter.
* Contains at least 1 lowercase letter.
* Contains at least 1 number.
* Contains at least 1 special character.

## Changing your current password

If you know your current password and wish to change it, visit the [Change password article](https://docs.document360.com/v3/docs/change-password) for instructions.

<a id="block-inheritance"></a>

## Block inheritance

**Plans supporting block inheritance in the knowledge base portal**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

  

## Block inheritance

The **Block inheritance** feature allows you to restrict content access for team accounts, even if they have inherited permissions from a higher content level. With this, you can prevent users or teams from accessing certain content, regardless of their inherited access rights. This would allow only specific team accounts and team account groups to access a content level (workspace/language/category/article).

### Content access at Workspace level

For example, you have six inherited team accounts in workspace V1 and want to provide access only to one team account and yourself.

1. Navigate to **Settings** () > **Users & Security** > **Content access**.
2. Click on the respective workspace.
3. Turn on the **Block inherited account** toggle in the **Manage content access tab**.

   Now, all the other inherited team accounts that cannot access workspace V1, will not be displayed and only those team accounts that have content access will be displayed.

   ![Showing block inheritance at workspace level](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Block_inheritance.gif)

### Disable inheritance for a category or an article

1. Navigate to Documentation () and hover the mouse pointer over the desired category/article in the category manager.
2. Click on the **More** (•••) icon that appears next to the category/article name.
3. Click on **Security**, then choose **Knowledge base portal** Access control.
4. The **Assign control access : Knowledge base portal** blade appears with the list of team accounts and team account groups that have access to the selected content level.
5. Turn on the **Block inherited account** toggle and only the accounts which are not inherited will display.

   By default, the team account performing this action would be selected and cannot be removed.
6. Click on the **Assign article access** to provide content access to a specific team account.
7. Select the desired team account(s) and click **Apply.**
8. Once you have made changes, click **Close.**

   ![To block inheritance at content level](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Block_inheritence.gif)

#### What happens after removing inheritance?

After removing inheritance for a content level, only the team accounts and team account groups in the content access list can access that content level (workspace/language/category/article). Later, you can also provide access to the desired team accounts and team account groups.

---

## Allow inheritance

If you want to provide access to all the inherited team accounts and team account groups, turn off the **Block inherited account** toggle.

### Enable inheritance for a category or an article

1. Navigate to Documentation () and hover the mouse pointer over the desired category/article in the category manager.
2. Click on the **More** (•••) icon that appears next to the category/article name.
3. Click on **Security**, then choose **Knowledge base portal Access control**.
4. The **Assign control access : Knowledge base portal** blade appears with the list of team accounts and team account groups that have access to the selected content level.
5. Turn off the **Block inherited account** toggle and click **Yes** in the **Allow inheritance** prompt.
6. Once you have made changes, click **Close.**

   ![To enable inheritance for a category or a page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Block_inheritance.gif)

   ---

## FAQs

**What happens when I disable inheritance for a category or article?**

When you disable inheritance, only the team accounts and groups listed in the content access list can access that category or article.

**Is the team account performing the action automatically selected when blocking inheritance?**

Yes, the team account performing the action will be automatically selected and cannot be removed.

<a id="ip-restriction"></a>

## IP restriction

**Plans supporting access to IP restriction settings in Knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**IP restriction** provides additional security for the knowledge base by restricting or allowing access to user-designated IP addresses.

> NOTE
>
> This is a project-level setting. When a specific IP restriction is enabled, it applies across all the workspaces and languages available in that project.

Document360 supports both **IPv4** and **IPv6** (Unicast addresses) IP addresses.

---

## IP restriction page

1. From the Knowledge base portal, navigate to Settings () > **User & Security** > **IP restriction**.

   The IP restriction overview page will appear.
2. The following information about IP restrictions will be displayed

   * **Friendly name** - A name with which you can identify the IP restriction. This field does not have any character limit.
   * **IP address** - The individual IP address or an IP range added for restriction. (Supports **IPv4** and **IPv6**)
   * **Allow/Block** IP - The restriction applied to the respective IP address or range to allow or block the IP restrictions.
   * **Remove** - You can delete the IP restriction by using the Remove () icon.
   * **Save** - You can save the IP restriction using the Save () icon.

   ![Image showing IP restriction overview page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/54_ScreenShot-IP_restriction.png)

### Adding IP restriction

1. Click **Add IP address** on the IP restriction overview page.
2. Add a name for the IP restriction in the **Friendly name** field (mandatory).
3. Add an individual IP address or an IP address range in the **IP address** field.

   IP address range would involve the start-to-end range.  
   For example, 79.15.135.189 - 79.15.135.229
4. Click the Save () icon.
5. To reset the details entered, click on the Reset () icon.

   ![Image showing options and fields on IP restriction page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1725352385689.png)

The newly added IP restriction will be added to the list and will be available on the IP restriction overview page.

(or)

5. Click **Add my current IP address** to add saved IP restrictions.

Supported IPv6 formats:

Here are some examples of IPv6 formats that are supported

* 2001:0db8:85a3:0000:0000:8a2e:0370:7334  ✅
* 2001:0db8:85a3::8a2e:0370:7334  ❌
* 2001:db8:85a3:0:0:8a2e:370:7334  ✅

### Allow/Block IP address

You can find two options, **Allow** and **Block** on the IP restriction overview page.

1. Select **Allow** for the required IP addresses you wish to permit to access the Knowledge base site.
2. Select **Block** for the required IP address you wish to restrict the access to the Knowledge base site.

> NOTE
>
> If you enter the same IP address for both the permissions, **Allow** and **Block**, or if you try to add the same IP more than once, you will get a warning popup saying ‘*A restriction with this IP address already exists’*.

### Delete an IP restriction

The IP restrictions can be deleted by clicking on the **Delete** () icon to the right of the IP address field.

A popup saying **IP restriction deleted** will appear.

> NOTE
>
> You must be very careful when performing the **delete** action. The IP restriction record, once deleted, cannot be recovered.

---

## FAQ(s)

**What is an IP address?**

**IP** address stands for Internet protocol address. It is an identifying number associated with a specific computer or computer network. The IP address allows the computers to send and receive information when connected to the internet.

**What is an IPv4 format?**

An IPv4 address consists of four numbers, each containing one to three digits, with a single **dot** (.) separating each number or set of digits. The four numbers can range from **0** to **255**.

For example, 49.206.113.170

**What is an IPv6 format?**

An IPv6 offers a vastly expanded address space, using 128-bit addresses compared to IPv4's 32-bit, which means it can support an almost unlimited number of unique IP addresses. Usually shown as sequences of hexadecimal digits, separated by a colon ( : ). Each group is up to four hexadecimal digits long, and each address comprises up to eight groups (octet).

> For example, FE38:DCE3:124C:C1A2:BA03:6745:EF1C:683D
>
> * **Starting IPv6 Address**: The lowest possible IPv6 address is 0000:0000:0000:0000:0000:0000:0000:0000
> * **Ending IPv6 Address**: The highest possible IPv6 address is ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

**What is an IPv6 unicast address?**

A unicast address in IPv6 identifies a single network interface among a group of devices. When data is sent to a unicast address, it is explicitly delivered to that intended recipient, ensuring direct point-to-point communication on the network. This contrasts with multicast and anycast addresses, which serve different communication purposes in IPv6.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="single-sign-on-sso"></a>

## Single Sign-On (SSO)

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## What is SSO?

As the term suggests, **Single Sign-On** or **SSO** allows for user authentication and access to multiple applications or websites with a single login event. In simple terms, this feature can be referred to as One-time login.

A user logging into any application or website with the SSO feature enabled would be able to log on to other applications listed by the Service provider without the user having to key in their login credential every single time for each of the applications.

---

## Reasons to configure Single Sign-On (SSO) in your project

There are several reasons why SSO is considered an important feature:

1. **Improved security**: SSO can help improve security by reducing the number of places where user credentials are stored and making it more difficult for attackers to access sensitive information.
2. **Increased productivity**: SSO can help increase productivity by allowing users to access the systems and applications they need quickly and easily without remembering multiple usernames and passwords.
3. **Better user experience**: SSO can help improve the user experience by reducing the number of times users are prompted to enter their credentials, which can be frustrating and time-consuming.
4. **Simplified IT management**: SSO can help simplify IT management by reducing the number of places where user credentials are stored and making managing access to systems and applications more accessible.
5. **Compliance**: Some industries and sectors have regulations and compliance requirements that demand SSO implementation.
6. **Reduced IT costs**: SSO can help reduce IT costs by reducing the need for additional hardware, software, and support required to manage multiple authentication systems.

In summary, SSO can improve security, increase productivity, enhance the user experience, simplify IT management, support compliance, and reduce IT costs.

---

## How does SSO work?

Most websites or web applications like Document360, referred to as **Service providers**, have a dedicated, secure, and centralized database for user information and credentials.

To facilitate the Single Sign-On feature, an external entity, the **Identity Provider** or **IdP**, is brought in to ease the user experience in accessing the web application by authenticating the user's credentials and authorizing the access to the 'Service provider'.

Here’s a sequential rundown on how the Single Sign-on (SSO) feature works

1. The user visits the intended Service provider or application domain sign-in page
2. Redirection takes place to the Identity Provider (IdP) login page
3. The user signs in with the correct credentials
4. The IdP domain matches the user information and sends an **Access token** or **ID token** to the Service Provider
5. The validation of the Access/ID token with user information is thriving on the Service provider’s end
6. A trust relationship is established between the IdP and the Service provider

As the authentication is successful, the user is now authorized to access SSO-enabled applications within the service provider without the whole process of Signing in for each instance.

Document360 allows you to configure multiple SSO options simultaneously. This means you can set up single sign-on using various identity providers for your team and readers. For example, you might use one IdP for internal employees and another for external customers or partners. This gives your team and readers the flexibility to choose their preferred IdP for accessing both the knowledge base portal and site.

---

## What is an IdP?

Identity Provider (IdP) is an external entity that stores and manages the identity information of users; the IdP also authenticates the users by facilitating the Single Sign-On (SSO) feature. Identity Provider handles users' credentials to log in to web applications, file servers, systems, and other digital services. Any single entity the IdP stores is called a ‘**principal**.’

Here are some IdP you can configure with Document360

* **Okta**
* **Entra ID**
* **Google**
* **ADFS**
* **OneLogin**

---

## SSO Standards on Document360

Single Sign-On feature is established with two broad standard protocols adopted by Document360.

![sso_in_knowledge_base_Document360-1200x683](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/sso_in_knowledge_base_Document360-1200x683.jpg)

### **SAML 2.0**

* [**Enabling SAML SSO on Document360**](https://docs.document360.com/docs/enabling-saml-sso)
* [**Removing a configured SAML SSO**](https://docs.document360.com/docs/removing-a-configured-saml-sso)
* **Using Okta as IdP:** [**Configuring SAML SSO with Okta**](https://docs.document360.com/docs/saml-sso-with-okta)
* **Using Entra ID as IdP:** [**Configuring SAML SSO with Entra ID**](https://docs.document360.com/docs/saml-sso-with-entra)
* **Using Google as IdP:** [**Configuring SAML SSO with Google**](https://docs.document360.com/docs/google-sso-saml-configuration)
* **Using OneLogin as IdP:** [**Configuring SAML SSO with OneLogin**](https://docs.document360.com/docs/saml-sso-with-onelogin)
* **Using ADFS as IdP:** [**Configuring SAML SSO with ADFS**](https://docs.document360.com/docs/saml-sso-with-adfs)
* **Using other IdPs:** [**Configuring SAML SSO with Other IdPs**](https://docs.document360.com/docs/saml-sso-with-other-configurations)

---

### **OpenId Connect**

* [**Enabling OpenID SSO on Document360**](https://docs.document360.com/docs/enabling-openid-sso)
* [**Removing a configured OpenID SSO**](https://docs.document360.com/docs/removing-a-configured-openid-sso)
* **Using Okta as IdP:** [**Configuring OpenID SSO with Okta**](https://docs.document360.com/docs/okta-with-openid-sso)
* **Using Auth0 as IdP:** [**Configuring OpenID SSO with Auth0**](https://docs.document360.com/docs/auth0-with-openid-sso)
* **Using ADFS as IdP:** [**Configuring OpenID SSO with ADFS**](https://docs.document360.com/docs/adfs-with-openid-sso)
* **Using other IdPs:** [**Configuring OpenID SSO with Other IdPs**](https://docs.document360.com/docs/other-configurations-with-openid-sso)

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="login-using-sso-knowledge-base-portal"></a>

## Login using SSO - Knowledge base portal

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Single Sign-On (SSO)** allows you to access Document360's Knowledge base portal using your existing credentials from another identity provider (IdP). This eliminates the need to remember multiple passwords.

## Logging in using SSO

To log in to the Knowledge base portal using SSO:

1. Open your web browser and enter the **URL** of the Document360 **Knowledge base portal** you want to access.
2. In the **Email or Subdomain** field, enter your email address or domain name.
3. Once you've entered your email or domain, click the **Continue with SSO** button.
4. You will be redirected to your IdP's login page. Enter your credentials to authenticate.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-KBportal_login_using_SSO.png)

After successful authentication, you'll be automatically logged into Document360's Knowledge base portal.

## IdP initiated sign-in

If the **Allow IdP initiated sign-in** option was enabled during the SSO configuration process, you can also log in directly from your IdP's dashboard. This means you don't need to visit the Document360 Knowledge base portal first. Simply navigate to your IdP's dashboard and look for the Document360 application. Click on it to initiate the login process.

By following these steps, you can easily and securely access Document360's Knowledge base portal using your existing SSO credentials.

---

## Troubleshooting

If you encounter issues while logging in to the Knowledge base portal using SSO, refer to the following common errors and their solutions:

### User access not assigned in IdP

**Error:** Sorry, but we’re having trouble signing you in. Your administrator has configured the application Document360 to block users unless they are specifically granted (assigned) access to the application.

This error indicates that users are not assigned to the Document360 application in the Identity Provider (IdP).

![Error message indicating trouble signing into Document360 due to access restrictions.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Troubleshooting_user_access_not_assigned_idp.png)

**Steps to resolve:**

To resolve this issue,

1. Log in to the identity provider’s portal.
2. In the identity provider’s portal, navigate to **Applications,** and select the Document360 application.
3. Add the required users or groups to the Document360 application.

Once the users are added, they should be able to access Document360 without encountering the error.

### No projects associated with email address

**Error:** There are no projects associated with this email address. Please contact your Project administrator.

This error indicates that the user’s account is not linked to any project in Document360. This can happen if the user has not been added, or has been removed to Document360, but their account is linked to the Identity Provider (IdP).

![A user receives a message about no projects associated with their email address.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Troubleshooting_no_project_associated.png)

**Steps to resolve:**

To resolve this issue,

1. Log in to the ****Knowledge base portal**** as an administrator.
2. Select the project where the user needs access.
3. Navigate to ****Settings**** > ****Users & security**** > **Team accounts & groups**.
4. Check if you have added the user as an SSO account.

   * If the user's account exists but is not an SSO account, select the checkbox next to their account and click **Convert to SSO account** option.
   * If the user is not listed as an SSO account, click **Add** > **Team account** and select the **SSO user** checkbox while creating the account.

### Email address missing in SAML/ODIC response

**Error:** Email address is missing in SAML/ODIC response, please check your SSO configuration or contact support.

This error typically occurs when the **email** or **name** attributes in the SAML/ODIC response are not configured correctly in the Identity Provider (IdP). These attributes are case-sensitive, so it is important to ensure they match exactly as specified in the configuration.

![User receives an error message about missing email address for SSO login.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Troubleshooting_email_address_missing_in_saml_odic.png)

**Steps to resolve**:

To resolve this issue,

**Check attribute mapping in the Identity Provider (IdP)**

1. Log in to your Identity Provider (IdP) as an administrator.
2. Verify that the attributes for **email** and **name** are mapped correctly.
3. Confirm that the attribute names match exactly as specified in the Document360 documentation. For example,

   * Correct: “**email**” and “**name**”.
   * Incorrect: “**Email**”, “**EMAIL**”, “**Name**”, or “**NAME**”.

**Update SSO configuration in Document360**

1. Log in to the ****Knowledge base portal**** as an administrator.
2. Select the project where the SSO is configured.
3. Navigate to **Settings** > **Users & security** > SAML/OpenID.
4. Select **Edit** () for the existing configuration.
5. Navigate to the **IdP configurations** section and ensure the mapped attributes in Document360 correspond to those configured in the IdP.
6. Save the updated configuration.

Now, test the SSO login to confirm that the issue is resolved.

### Single sign-on is not enabled for this email

**Error**: An error occurred while handling the request and ‘Single sign-on isn’t enabled for this email’

This error indicates that the user's email is not correctly configured in the Identity Provider (IdP) or in Document360.

**Steps to resolve:**

To resolve this issue,

1. Log in to the identity provider’s portal.
2. In the identity provider’s portal, navigate to **Applications,** and select the Document360 application.
3. Check if the team accounts/readers are added to the Document360 application.
4. If the team account/reader is missing, add them and assign the necessary permissions.

Next, check if the SSO configuration has been completed correctly in Document360. To verify if the SSO configuration are correct, check the details from the [**SAML**](/help/docs/saml) and [**OpenID**](/help/docs/openid) articles.

If the issue persists, please contact the [Document360 support team](mailto:support@document360.com) with the screenshots of the IdP configuration and Document360 SSO configuration.

### Unable to login via SSO

**Error**: Single Sign-on is not enabled for this subdomain

This error occurs when the incorrect subdomain or knowledge base portal link is used during login. It commonly happens if the project is hosted on one domain (e.g., **US**) but is being accessed through a different domain (e.g., **EU**).

![Login screen for Document360 with SSO option and subdomain input field.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Troubleshooting_sso_not_enabled.png)

**Steps to resolve**:

**Verify Your Subdomain and Portal URL**

* Ensure you are using the **correct subdomain** and accessing the right Document360 portal.
* If your project is hosted in the **US domain**, use: [**https://portal.us.document360.io/**](https://portal.us.document360.io/)
* If your project is hosted in the **EU domain**, use: [**https://portal.document360.io/**](https://portal.document360.io/)

**Check Your Subdomain**

* Navigate to ****Settings**** > ****Knowledge base portal**** > ****Custom domain**.**
* In the Custom domain page, you can view your project link. If your project link is `https://test1.document360.io`, then your subdomain is **"test1"**.
* You can also find your subdomain on the **Configure the Service Provider (SP)** page under from your **SSO Configuration**.

### SSO login failure

**Error**: This page isn’t working - identity.us.document360.io is currently unable to handle this request. HTTP ERROR 500.

This issue occurs due to a change in the identity certificate. The signing certificate for authentication is rotated every three months, and if the updated certificate is not configured correctly in the Identity Provider (IDP), authentication may fail.

![Error message indicating the page is not working due to HTTP error 500.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Troubleshooting_sso_http_error_500.png)

**Steps to resolve**:

Follow these steps to resolve the issue:

1. Ensure that you configure the **metadata URL** correctly in the **Identity Provider (IdP)**. This URL is available on the **SSO page** in Document360 and reflects the latest signing certificate information.
2. If the issue persists, contact [**support@document360.com**](mailto:support@document360.com) for assistance.

---

### FAQs

#### Why can't I access a project despite being granted access?

If you're unable to access a project, it could be because you are added as an SSO user for some projects and a non-SSO user for others. Please ensure you are using the correct login credentials (non-SSO for non-SSO projects).

If the issue persists, contact our [support team](https://support.kovai.co/a/tickets/support@document360.com) for further assistance.

#### **Why am I encountering a 500 error when using SSO authentication to access my Knowledge base portal?**

If SSO authentication is causing a 500 error, it may be due to an outdated SAML certificate. First, check if your site is set to public, as SSO authentication is typically used for secure access. Updating the SAML certificate on your end should resolve the issue.

<a id="login-using-sso-knowledge-base-site"></a>

## Login using SSO - Knowledge base site

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Single Sign-On (SSO)** allows you to access Document360's Knowledge base site using your existing credentials from another identity provider (IdP). This eliminates the need to remember multiple passwords.

## Logging in using SSO

To log in to the Knowledge base site using SSO:

1. Open your web browser and enter the **URL** of the Document360 **Knowledge base site** you want to access.
2. You'll be presented with a list of available SSO login buttons (e.g., "Login using Google," "Login using Azure AD"). Choose the one that matches your IdP.
3. You will be redirected to your IdP's login page. Enter your credentials to authenticate.

> NOTE
>
> The specific SSO login buttons may vary depending on the available configurations.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-KBsite_login_using_SSO.png)

After successful authentication, you'll be automatically logged into Document360's Knowledge base site.

## IdP Initiated Sign-In

If the **Allow IdP initiated Sign-In** option was enabled during the SSO configuration process, you can also log in directly from your IdP's dashboard. This means you don't need to visit the Document360 Knowledge base site first. Simply navigate to your IdP's dashboard and look for the Document360 application. Click on it to initiate the login process.

By following these steps, you can easily and securely access Document360's Knowledge base site using your existing SSO credentials.

<a id="inviting-or-adding-sso-users"></a>

## Inviting or Adding SSO users

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Once you've successfully configured **Enterprise Single Sign-On** (**SSO**) using either **SAML** or **OpenID** for your project, you are ready to leverage the benefits of SSO for your users. This means that users can access your project using their existing credentials from a trusted identity provider (**IdP**), such as **Okta**, **Azure AD**, or **Google Workspace**. This eliminates the need for users to remember separate passwords for your project and simplifies the login process.

You can now:

* **Add new team accounts as SSO users**: If you have new users who want to join your project, you can directly add them as SSO users. This means they will be required to authenticate using their SSO credentials.
* **Invite existing users**: If you've already added users to your project, you can invite them to use SSO. This involves sending them an invitation.

## Adding a new team account as an SSO user

Adding a new team account as an SSO user follows the same process as [adding a new team account](/help/docs/managing-team-account) in Document360, with one extra step.

1. In the **Knowledge base portal**, navigate to **Settings** > **Users & security** > **Team accounts & groups**.
2. In the **Team account** tab, click **Create** > **Team account**.
3. In the **Create team account** window, in the **Basic details** section, add the email ID of the user you wish to add in the **Email** field.

   > NOTE
   >
   > The email address for a new team account must match the domain specified in the SSO configuration.
4. Click the **SSO user** checkbox.
5. In the **Select SSO** dropdown, select the SSO configuration you wish to assign to the user.
6. Select the **Skip invitation email** checkbox if you do not wish to send the invitation email to the user.

Once you select the desired SSO configuration for the user, follow the same steps as [adding a new team account](/help/docs/managing-team-account) to finish adding an SSO user.

> NOTE
>
> **Owner** and **Admin** are the only project roles that are allowed to add new team accounts to project.

---

## Inviting an existing user

Once you have configured single sign-on for your Document360 project, you can invite existing users to login to the project using SSO.

To invite an existing user,

1. Log in to your Document360 account and navigate to the project in which you want to invite users.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the **Edit** () icon which appears when you hover over the SSO configuration to which you want to invite users.
4. Navigate to the **More settings** tab in the SSO configuration window.
5. In the **Convert existing team and reader accounts to SSO** section, select either the **All users** or the **Selected users only** radio button.

   1. **All users**: Selecting this option will invite all the users added to the project.
   2. **Selected users only**: Selecting this option will open a list of users added to your project. To invite a user, select the checkbox next to the user’s name.
6. Once you have selected the users, click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Invite_users_to_SSO.png)

Once a team member has been added, they will receive an invitation email with their login details.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Invitation_email_sample.png)

NOTE

When you invite an existing Document360 user to become an SSO user in your project, an additional user account is added. The user’s team account will continue to exist along with a SSO user account.

---

## Deleting an SSO user

If an SSO user account is no longer required, you can delete it from the **Team accounts & groups** page.

1. Log in to your Document360 account and navigate to the project in which you want to delete users.
2. Navigate to **Settings** > **Users & security** > **Team accounts & groups.**
3. Click the **Delete** () icon which appears when you hover over the team account you wish to delete.

   > NOTE
   >
   > You can identify SSO user accounts using the SSO label next to their email ID.
4. Click **Yes** in the **Delete** confirmation popup.

> NOTE
>
> If an email ID was added as a team account and an SSO user, deleting the SSO user will not delete the team account associated with the email ID.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Delete_SSO_user.png)

---

## FAQ

**Why am I not able to create an SSO reader account?**

If a user has already been added to the project as an SSO reader account you will not be able to add the same user again. The **Create reader account** button will be disabled automatically when you check the SSO user checkbox.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="mapping-an-existing-sso-configuration-to-other-projects"></a>

## Mapping an existing SSO configuration to other projects

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you have created an SSO configuration (SAML or OpenID) for your project, you can map the same to other Document360 projects you manage from your account.

1. Log in to your Document360 account and navigate to the project in which you want to map the existing SSO configuration.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click **Create SSO.**
4. Select the appropriate identity provider in the **Choose your Identity Provider (IdP)** page.

   > NOTE
   >
   > The identity provider of the new SSO configuration should be the same as the identity provider of the existing SSO configuration.
5. Select either SAML or OpenID based on your existing configuration in the **Configure the Service Provider (SP)** page and click **Next**.

   > NOTE
   >
   > The SSO protocol (SAML/OpenID) of the new SSO configuration should be the same as the SSO protocol of the existing SSO configuration.
6. Select the existing configuration from the **Configure an existing connection** **(Optional)** dropdown and click **Next**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Select_existing_SSO_dropdown.png)

7. Finish setting up the SSO in the **More settings** page and click **Create**.

The new SSO configuration will be created based on the existing SSO configuration selected from the dropdown.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="disable-document360-login-page"></a>

## Disable Document360 login page

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you have only SSO users and no regular team accounts added to your Document360 project, you can choose to disable the Document360 common login page. This will redirect users directly to the SSO login page when they access Document360.

> CAUTION
>
> Do not disable the common login page if you have both SSO users and regular team accounts added to your project. Regular team accounts will not be able to log in to the Document360 accounts if this setting is toggled on.

## Disabling the Document360 login page

To disable the Document360 common login page,

1. Log in to your Document360 account and navigate to the project for which you wish to disable the common login page.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the  **Settings** button on the top right next to the **Create SSO** button.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-SSO_settings_page_settings_button.png)
4. In the Settings popup, turn the **Disable Document360 login page** toggle **ON**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Disable_D360_login_page_toggle.png)
5. Click **Save.**

The standard login page bypass can be enabled in the SSO settings page for both standards (SAML or OpenID).

## FAQs

**What will happen when I turn ON the Disable Document360 login page toggle?**

When the **Disable Document360 login page** toggle is turned **ON**, users will only see the single sign on (**SSO**) options in the login page. Users will not be able to login using their email and password combination.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="auto-assign-reader-group"></a>

## Auto assign reader group

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Make it easier for readers to join your knowledge base using the Auto assign reader group option. This automatically gives access to readers who have signed in with an identity provider, so you don't have to invite them manually.

---

## Automatically assigning SSO readers

To automatically assign SSO readers to your knowledge base,

1. Log in to your Document360 account and navigate to the project in which you want to automatically assign SSO readers.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the **Edit** () icon which appears when you hover over the SSO configuration for which you want to automatically assign reader groups.
4. Navigate to the **More settings** tab in the SSO configuration window.
5. Toggle **ON** the **Auto assign reader group** option.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Auto_assign_reader_groups_toggle.png)

6. Search and select the reader groups you want to automatically assign to your knowledge base.
7. Click **Save**.

> NOTE
>
> To use the Auto assign reader group feature, you need to have existing reader groups. If you have not created any reader groups, you can create them from **Settings** > **Users & security** > **Reader & groups** > **Reader groups**.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="convert-to-sso-account"></a>

## Convert to SSO account

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

## Convert Document360 account to SSO account

Single Sign-On or SSO allows user authentication and access to multiple applications or websites with a single login event. You can login to your SSO account with your SSO credentials to access the portal/site. You can easily convert your Document360 account(s) to SSO account(s) without altering the roles and access. This option simplifies and speeds up the conversion process for team accounts and readers.

> NOTE
>
> User type conversion is applicable only in SAML and OpenID configured projects.

---

### Converting regular Document360 team account(s) to SSO account(s)

1. Go to **Settings** > **Users & Security** > **Team accounts & groups** > **Team account** in your Document360 knowledge base portal.
2. Select the checkbox of the desired team account(s).
3. Click the **Convert to SSO account** option above the list of team accounts.

   ![Image showing the way to access Convert to SSO account option in Documnet360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/39_ScreenShot-SSO_conversion.png)

   An **Account convert** confirmation popup appears.
4. Select the checkbox and click the **Yes** button.

   ![Image showing Account convert popup for converting to SSO account](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/40_ScreenShot-SSO_conversion.png)

> NOTE
>
> * When a team account is converted to an SSO account, all their contributions will be retained. However, the previous contributions of the team account will appear as **Anonymous**.
> * The Team account that performs the conversion cannot convert their own Document360 account to SSO account.
> * If you convert a Document360 owner account to SSO account, both the regular Document360 account and the SSO account will be available to that owner account. As a result, there will be two accounts for the same user.

---

### Converting regular Document360 reader(s) to SSO reader(s)

1. Navigate to **Settings** > **Users & Security** > **Readers & groups** > **Readers** in your Document360 knowledge base portal.
2. Select the checkbox of the desired reader(s).
3. Click the **Convert to SSO account** option above the list of readers.

   ![Image showing the way to access Convert to SSO account option in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/41_ScreenShot-SSO_conversion.png)

   An **Account convert** confirmation popup appears.
4. Select the checkbox and click the **Proceed** button.

   ![Image showing Account convert popup in Document360](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/42_ScreenShot-SSO_conversion.png)

> NOTE
>
> SSO account cannot be converted to Document360 account.

---

## FAQ(s)

**Who can perform the conversion of a Document360 account to an SSO account?**

The Owner(s) and Admin(s) can perform this conversion of the Document360 account to an SSO account. Team accounts with the **Manage team accounts** can also perform this action.

**Can we perform user-type conversion in JWT configured projects?**

No, you cannot perform user-type conversion in JWT configured projects. This conversion is applicable only in SAML and OpenID configured projects.

**I mistakenly converted one or more Document360 team accounts or readers to SSO accounts. How can I fix this?**

There is no straightforward workaround for this scenario. However, you can rectify this by deleting the SSO account and adding the regular Document360 account manually. Ensure that you replicate the roles and access correctly.

<a id="team-account-idle-timeout"></a>

## Sign out idle SSO team account

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The **Sign out idle SSO team account** feature is designed to enhance security within Document360 projects by automatically logging out Single Sign-On (SSO) team accounts are idle. A team account is considered to be idle when the account has not performed any action inside the Knowledge base portal for a predefined time interval. This proactive measure mitigates the risk of unauthorized access and ensures the confidentiality of sensitive information. This setting is applicable only for SAML and OpenID configurations.

#### Key Benefits:

• **Enhanced Security**: Prevent unauthorized access to your project by automatically logging out idle SSO team accounts.  
 • **Effortless Management**: Streamline account management by setting idle timeout durations tailored to your project's needs.

## How to enable the 'Sign out idle SSO team account' option?

You can enable the **Sign out idle SSO team account** option on the SSO settings page.

1. From the Knowledge base portal, navigate to **Settings > Users & Security** > **SAML/OpenID**.
2. Click the **Edit** () icon which appears when you hover over an existing SSO configuration.
3. Navigate to the **More settings** tab in the SSO configuration window.
4. Turn **ON** the **Sign out idle SSO team account** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Sign_out_idle_SSO_team_account(1).png)

5. Enter the desired idle timeout duration in the **Timeout duration** field in the **hours:minutes** format.
6. Once you have made changes, click **Save**.

> NOTE
>
> This setting is applicable only for SSO team accounts. Document360 team accounts will not get affected.

---

## FAQs

#### What happens if a user is logged out due to inactivity?

Idle SSO team accounts will be required to log in again to access the Knowledge Base portal.

#### Is there a default idle timeout duration?

Yes, the default duration is 2 hours, but it can be adjusted to suit your project's requirements.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="saml"></a>

## SAML

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**SAML 2.0** is an open standard protocol that allows users to access multiple web-based applications with a single set of credentials. This provides a more secure and convenient way for users to access **Document360**. With **SAML 2.0** enabled, Document360 users can log in to the platform using their existing credentials from an identity provider (IdP). Document360 supports the configuration of multiple single sign-on (SSO) endpoints, allowing both team accounts and readers to log in using their preferred identity provider.

## Supported identity providers

Document360 supports the following identity providers (**IdP**):

* **Okta**
* **Entra ID**
* **Google**
* **Auth0**
* **ADFS**
* **OneLogin**
* **Others**

---

## Configuring SSO using SAML

1. Log in to your Document360 account and navigate to your desired project.
2. Navigate to ****Settings** (****)** > ****Users & security**** > **SAML/OpenID.**
3. Click **Create SSO.**
4. Select an identity provider from the **Choose your Identity Provider (IdP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Create_SSO_Choose_idp_page.png)
5. Select SAML from the **Configure the Service Provider (SP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-SSO_configuration_configure_sp.png)
6. Using the details provided in the **Configure the Service Provider (SP)** page, configure the Document360 application with the previously selected identity provider.
7. Using the details provided by the identity provider, setup the SSO configuration in Document360 on the **Configure the Identity Provider (IdP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-SSO_configuration_configure_idp.png)

Once you have successfully completed the SSO configuration based on the SAML protocol, you can invite members from your project to the configured SSO application.

Now, users can login to Document360 either using their email and password or using **SSO**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-SSO_configuration_document360_login_page.png)

## Troubleshooting

If you encounter issues during the SAML SSO setup or login, refer to the following common errors and their solutions:

### Invalid SAML request (Untrusted key)

**Error:** An error was encountered while handling the remote login - Invalid SAML Request SAML signature is valid but uses an untrusted key. This error occurs when the SAML certificate uploaded to Document360 is inactive.

![A person falls while riding a bicycle, indicating a login error message.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Troubleshooting_issue_untrusted_key.png)

**Steps to resolve:**

To resolve this issue,

**Download the active SAML certificate**

1. Access your IdP.
2. Download the currently active SAML certificate.

**Re-upload the certificate in Document360**

1. In Document360, navigate to ****Settings** (****)** > ****Users & security**** > **SAML/OpenID.**
2. Click **Edit** for the relevant SSO configuration.
3. Under **Configure the Identity Provider (IdP)** section, locate the **SAML Certificate** field.
4. Click **Browse** to upload the new, active certificate.

Uploading the active certificate should resolve the issue.

### SAML message signature is invalid

**Error**:

* SignatureInvalid: SAML message signature is invalid.
* AssertionSignatureInvalid: SAML Assertion signature is invalid.
* Invalid SAML Request: SAML signature is valid but uses an untrusted key.

This error occurs when an incorrect or expired SAML certificate is uploaded to Document360.

**Steps to resolve**:

**Ensure the certificate is valid**:

1. Check if the uploaded certificate is **active and not expired**.
2. If needed, generate a new certificate in the **Identity Provider (IdP)**.

**Re-upload the correct certificate in Document360**:

1. In Document360, navigate to ****Settings** (****)** > ****Users & security**** > **SAML/OpenID.**
2. Click **Edit** for the relevant SSO configuration.
3. Under **Configure the Identity Provider (IdP)** section, locate the **SAML Certificate** field.
4. Click **Browse** to upload the new, active certificate.

**Capture Logs for Further Analysis (if issue persists)**

1. Add the [**SAML Tracer**](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) extension to your browser.
2. Open **SAML Tracer** before starting the SSO login flow.
3. Perform the action that triggers the SSO process (e.g., clicking **Continue with SSO**).
4. SAML Tracer will record all network requests.
5. **Right-click** in the **SAML Tracer** window.
6. Select **Export** or save the logs in a suitable format.

For further assistance, contact the [**Document360 support team**](mailto:support@document360.io) with:

* **Screenshots** of your IdP configuration.
* **The uploaded SAML certificate details**.
* **SAML Tracer logs**.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="saml-sso-with-okta"></a>

## SAML SSO with Okta

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**Okta** is an **Identity Provider (IdP)** that simplifies user access management by allowing users to sign in to multiple applications with a single set of credentials. This article demonstrates how to configure SSO between Okta and Document360, enabling your users to access Document360 using their Okta credentials. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **Okta** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Sign up for Okta

Access to an Okta account is a pre-requisite for configuring single sign-on in Document360 with Okta. To sign up for Okta,

1. Navigate to <https://developer.okta.com/signup/> and complete the signup process.
2. After signing up, you would receive an email with your **login credentials** and an **account****activation link** on your registered email.
3. Once you click on the activation link, you will be redirected to the **Okta Domain** login page.
4. Login with your credentials.
5. Once you login, you will be redirected to the Okta developer console.

## Adding an application

To create a **Document360 SSO configuration** using **Okta**, you must create a new application on Okta. To create a new application ok Okta,

1. Log in to Okta using the credentials used while creating an Okta account.
2. Switch to the admin user role by clicking on **Admin** at the top right next to your profile name.
3. From the left navigation list page, expand the **Applications** dropdown, and click **Applications**.
4. In the **Applications** page, click the **Create App Integration** button.
5. In the **Create a new app integration** popup, select **SAML 2.0** as the **Sign-in method** and click **Next**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_GIF-Okta_create_app_integration.gif)

### Creating a SAML integration

Next, you will be redirected to the **Create SAML Integration** page.

#### General Settings

1. In the **General Settings** tab, enter the name of your new application in the **App name** field.
2. Browse and upload a logo for your application in the **Add logo** field if required.
3. Next, you can check the App visibility checkbox if required.
4. Click on the **Next** button to navigate to the **Configure SAML** tab.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Okta_general_settings.png)

#### Configure SAML

In the Configure SAML tab, you will require the parameters provided on the **Configure the Service Provider (SP)** page in Document360.

1. To access the **Configure the Service Provider (SP)** page, navigate to **Settings** > **Users & security** > **SAML/OpenID** in Document360.
2. Click the **Create SSO** button, select **Okta** in the **Choose your Identity Provider (IdP)** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Choose_idp_okta.png)

3. This will redirect you to the **Configure the Service Provider (SP)** page, which will display the parameters required to complete the SAML configuration on **Okta**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Okta_document360_parameters.png)

| Document360 | Okta |
| --- | --- |
| Callback path | Single sign-on URL |
| Service provider entity id | Audience URI (SP Entity ID) |

4. Enter the parameters from **Document360** to **Okta** based on the above table.
5. Select **EmailAddress** from the **Name ID format** dropdown menu.
6. Select **Email** from the **Application username** dropdown menu.
7. Update the **Attribute Statements** field based on the below table. You will have to add two additional rows to enter all the details from the below table.

   | **Name** | **Name format** | **Value** |
   | --- | --- | --- |
   | urn:oasis:names:tc:SAML:2.0:nameid | URI Reference | user.email |
   | name | Unspecified | user.email |
   | email | Unspecified | user.email |

   > NOTE
   >
   > Email and name parameters are case sensitive.
8. Click **Next** to navigate to the **Feedback** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Okta_configure_saml.png)

#### Feedback

The feedback page is for providing information to Okta about how you configure the application. Select the **This is an internal app that we have created** checkbox and click **Finish**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Okta_feedback.png)

You have now successfully configured your application on Okta. Next, you will complete the configuration on **Document360** using the information from the application on Okta.

---

## Okta to Document360 SAML SSO configuration

### SAML setup instructions on Okta

1. On the Okta dashboard, click on the **Applications** dropdown and select **Applications**.
2. On the **Applications** page, select the active application you want to configure on Document360.
3. Click the **Sign On** tab.
4. Click the **View SAML setup instructions** button

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_GIF-Okta_app_signon_setup_instructions.gif)

The parameters needed to be configured will open in a new webpage.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Okta_setup_instructions_page.png)

### SSO configuration on Document360

1. Switch to the Document360 page you had opened, displaying the **Configure the Service Provider (SP) page.**
2. Click **Next** to Navigate to the **Configure the Identity Provider (IdP)** page.
3. Complete the fields in the **Configure the Identity Provider (IdP)** page using the setup instructions from Okta.

| Document360 | Okta |
| --- | --- |
| Sign on URL | Identity Provider Single Sign-On URL |
| Entity ID | Identity Provider Issuer |
| SAML certificate | X.509 Certificate |

4. Download the **X.509 Certificate** from Okta and attach the downloaded **okta.cert** file in the **SAML certificate** field on Document360.
5. Next, turn on/off the **Allow IdP initiated sign in** toggle as per your project requirements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Okta_document360_configuration.png)

6. Once done, click the **Next** button to navigate to the **More settings** page.
7. In the **More settings** page, enter the desired name for the SSO configuration in the **SSO name** field.
8. Enter the text you would like to show users for the login button in the **Customize login button** text.
9. Toggle on/off the **Auto assign reader group** and **Sign out idle SSO team account** toggles based on your requirements.
10. Invite all your users or selected users using the **Convert existing team and reader accounts to SSO** radio buttons.
11. Click **Create** to complete the SSO configuration setup.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Okta_document360_configuration_save.png)

The **SSO configuration based on the SAML** protocol will be configured using **Okta** successfully.

<a id="saml-sso-with-entra"></a>

## SAML SSO with Entra

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can configure Document360's **SAML Single Sign-On** (SSO) with the **Microsoft Entra** as the Identity provider. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **Entra** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an application in the Azure portal

### Accessing the Azure AD portal

![Accessing the azure Active Directory portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image_2-ScreenGIF-Azure_Active_Directory_Portal_access.gif)

1. Log in to your Microsoft Azure account.
2. Click on **Portal** available on the top-right of the window.
3. You would be redirected to the portal (**Link**: <https://portal.azure.com/#home>).

### Adding your application

The 'Own application' is called 'Customer application' in this document.

1. Log in to your Azure account and visit the Azure portal page.
2. From here click on the **+ New application** option and select **Non-gallery application.**
3. Type in the name of your application and click on the **Add** button at the bottom.
4. Now you would get a window with the **Project name**, **Application ID**, and the **Project ID.**
5. In the **Getting started** section, select the **Set up single on** option.

   > These are the three selections provided
   >
   > * SAML
   > * Password-based
   > * Linked SSO
6. Select the **SAML** option, and you can find the five segregated SAML configurations.
7. You can read a detailed walkthrough of the process in the [**Azure AD configuration guide**](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/add-application-portal-setup-sso)**.**

![Adding new application in the Azure Active Directory portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image_3-ScreenGIF-Azure_Active_Directory_adding_new_application.gif)

### Configuring SAML in your identity provider

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings > Users & security > SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(2).png)

4. Select **Entra ID** as your Identity Provider (IdP) to navigate to the **Configure the Service Provider (SP)** page automatically.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Choose_idp_entra.png)

5. In the **Configure the Service Provider (SP)** page, you'll find the required parameters to configure your SAML integration in the Identity Provider.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_saml_generic.png)

| Azure AD fields | Document360 portal |
| --- | --- |
| Identifier (Entity ID) | Service provider entity id |
| Reply URL (Assertion Consumer Service URL) | Callback path |
| Sign on URL | https://identity.document360.io (the login page) |
| Logout URL | Signed out callback path |

5. Copy these from Document360, switch to the Azure AD portal.
6. On the **Set up Sign-On with SAML** page, click the **Edit** icon on the right and paste the data in the corresponding fields defined in the above table.

![Image_4-Screenshot-Azure_AD_SAML_configurations](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image_4-Screenshot-Azure_AD_SAML_configurations.jpg)

5. Click on the **Save** icon at the top after you've entered all the mandatory fields

---

### Document360 SSO configuration

Finally, complete the SSO configuration in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click **Next** to navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter the corresponding values from your Identity Provider:

| Document360 portal fields | Azure AD portal values |
| --- | --- |
| Sign On URL | Login URL |
| Entity ID | Azure AD identifier |
| Sign Out URL | Logout URL |
| SAML certificate | Download Certificate (Base64) from Azure AD side and upload in Document360 |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_saml_generic.png)

3. Toggle on/off the **Allow IdP initiated sign in** option based on your project requirements.
4. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(2).png)

6. Click **Create** to complete the SSO configuration.

## Other configuration settings in the Azure AD portal

1. You can always edit the **User Attributes & Claims** section
2. You can either **Add a new claim** or **Add a group claim** as well
3. In the **SAML signing certificate** section, you can add **New certificates** or even **Import certificates**
4. Multiple notification email addresses can also be added
5. Once all the fields have been configured, click on the **Test** option and Log to Document360 using the credentials the user has added to the registered application

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="google-sso-saml-configuration"></a>

## SAML SSO with Google

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Log in to your Document360 account and select the project for which you wish to configure **Google SAML Single Sign-On** with your **Google Workspace** account. Next, log in to your Google Workspace account. If you don’t have a Google Workspace account, you can create one at <https://workspace.google.com/.> Once you have logged in to your Google workplace account, navigate to the admin console using the **Admin** button at the top right. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **Google Workspace** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

---

## Adding a custom SAML app on Google

1. On the admin console home page, click on the **Apps** option and select the **SAML apps** option.
2. Click on **Add app** and in the dropdown, select **Add custom SAML app.**
3. In the **App details**, enter any name for your app and click on **Continue.**
4. Next, you will find the **SSO URL, Entity ID details**, and the **Certificate.**
5. Make a note of these details, since you will need them while accessing the **Configure the Identity Provider (IdP)** page on Document360.
6. In the Certificate section, click on the Download icon to save the certificate (.pem format) in your computer's local storage.
7. You will have to upload this certificate later in the **Configure the Identity Provider (IdP)** page in Document360.

![41_Screenshot-Google-user-access-service-status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/41_Screenshot-Google-user-access-service-status.jpg)

8. In **User access**, the **Service status** will by default be **OFF for everyone**.  You must manually change it to **ON for everyone** to work.

![42_Screenshot-Google-user-access-changing-service-status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/42_Screenshot-Google-user-access-changing-service-status.jpg)

After configuring it on the Google side, here's how your SAML app would look.

![44-Screenshot_Replace_file_Google_SSO_SAML](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/44-Screenshot_Replace_file_Google_SSO_SAML.jpg)

---

## Service Provider configuration

To configure Single Sign-On (SSO), you need **Service Provider (SP)** details such as ACS URL and entity ID. These details will be available in the **Create SSO** window on **Document360**. To navigate to the **Create SSO** window,

1. Go to **Settings** > **Users & Security** > **SAML/OpenID.**
2. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(2).png)

3. In the **Choose your Identity Provider (IdP)** page, select **Google** as the identity provider.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Choose_idp_google.png)

4. Next, from the **Configure the Service Provider (SP)** page, copy the following parameters.

| Google custom SAML app | Document360 SSO SAML settings |
| --- | --- |
| ACS URL | Callback path |
| Entity ID | Service provider entity Id |
| Start URL (optional) |  |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_saml_generic.png)

5. Switch to the **Google workspace tab** and paste the parameters onto the Google custom SAML app page.
6. In **Name ID format** select **EMAIL** from the dropdown
7. In **Name ID** select **Basic Information > Primary email**
8. Click on the **Continue** button

### Attributes

Add and select user fields in Google Directory, then map them to service provider attributes. Add the following attributes.

| Google Directory attributes | App attributes |
| --- | --- |
| Primary email | name |
| Primary email | email |
| Primary email | urn:oasis:names:tc:SAML:2.0:nameid |

Click on the **Add Mapping** button each time you add an attribute, and when you're done, click on the **Finish** button.

---

## Identity Provider configuration

1. Switch back to the Document360 window, to the **Configure the Service Provider (SP)** page, and click **Next** to navigate to the **Configure the Identity Provider (IdP)** page.
2. In the **Configure the Identity Provider (IdP)** page, add the information you had noted down earlier from the **Google custom SAML app** page.

| Document360 SSO settings | Info from Google custom SAML app |
| --- | --- |
| Sign on URL | SSO URL |
| Entity id | Entity ID |
| Sign Out URL (Optional) | NA |
| SAML Certificate | Certificate (Upload the recent .pem file you downloaded from Google) |

3. Next, turn on/off the **Allow IdP initiated sign in** toggle as per your project requirements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Okta_document360_configuration.png)

4. Once done, click the **Next** button to navigate to the **More settings** page.
5. In the **More settings** page, enter the desired name for the SSO configuration in the **SSO name** field.
6. Enter the text you would like to show users for the login button in the **Customize login button** text.
7. Toggle on/off the **Auto assign reader group** and **Sign out idle SSO team account** toggles based on your requirements.
8. Invite all your users or selected users using the **Convert existing team and reader accounts to SSO** radio buttons.
9. Click **Create** to complete the SSO configuration setup.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Create_SSO_more_settings_generic.png)

The **SSO configuration based on the SAML** protocol will be configured using **Okta** successfully.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="saml-sso-with-onelogin"></a>

## SAML SSO with OneLogin

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

This guide will walk you through the steps to configure Single Sign-On (SSO) in Document360 using OneLogin as the Identity Provider (IdP) based on the SAML protocol. Access to a OneLogin account is required. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **OneLogin** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an Application in OneLogin

To create a Document360 SSO configuration using OneLogin, follow these steps:

1. Log in to your OneLogin Admin Portal using your credentials.
2. On the top menu, select **Applications**.
3. Click **Add App**.
4. In the search bar, type "SAML" and select **SAML Custom Connector (Advanced)** from the list.
5. Name your application (e.g., "Document360 SSO") and click **Save**.

## Configuring SAML in OneLogin

Next, you will need to configure SAML settings in OneLogin using parameters from Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(2).png)
4. Select **OneLogin** as your identity provider in the **Choose your Identity Provider (IdP)** page to navigate to the **Configure the Service Provider (SP)** page automatically.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Choose_idp_onelogin.png)
5. In the **Configure the Service Provider (SP)** page, you'll find the required parameters to configure your SAML integration in the Identity Provider.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_saml_generic.png)
6. Switch to the **OneLogin** tab/window and navigate to the **Configuration** tab of your new application.
7. In the **Configuration** tab, enter the following values from Document360, and click **Save**.

   | OneLogin | Document360 |
   | --- | --- |
   | Audience (EntityID) | Service provider entity id |
   | Recipient | Callback path |
   | ACS (Consumer) URL Validator | Callback path |
   | ACS (Consumer) URL | Callback path |

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Configuration_tab.png)
8. Next, navigate to the **Parameters** tab, and click on the + icon to configure the following parameters:

   | Field Name | Value |
   | --- | --- |
   | urn:oasis:names:tc:SAML:2.0:nameid | Email |
   | email | Email |
   | name | Email |

   > NOTE
   >
   > While creating the parameters, check the **Include in SAML assertion** checkbox.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Parameters_tab.png)
9. Once you’re done configuring the parameters, click **Save**.
10. Navigate to the **SSO** tab and click on **View Details** to download the **X.509 Certificate**. Also, copy the values of the **Issuer URL** and **SAML 2.0 Endpoint (HTTP)**.

    > NOTE
    >
    > Before downloading the X.509 Certificate, select **SHA256** from the **SHA fingerprint** dropdown, and select the download format as **X.509.PEM**.

    ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-SSO_tab.png)

## Document360 SSO Configuration

Finally, complete the SSO configuration in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click **Next** to navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter the corresponding values from your Identity Provider:

| **Identity Provider** | **Document360** |
| --- | --- |
| Issuer URL | Entity id |
| SAML 2.0 Endpoint (HTTP) | Sign on URL |
| Downloaded SAML Certificate (X.509) | SAML Certificate |

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_saml_generic.png)

3. Toggle on/off the **Allow IdP initiated sign in** option based on your project requirements.
4. Click **Next** to proceed to the More Settings page.

## More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(2).png)

5. Click **Create** to complete the SSO configuration.

<a id="saml-sso-with-adfs"></a>

## SAML SSO with ADFS

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Before setting up Single Sign-On (SSO) between Document360 and ADFS using the SAML protocol, ensure you have administrative access to both Document360 and the ADFS server. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **ADFS** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an Application in ADFS

You'll need to create a new SAML application in ADFS:

1. Log in to the ADFS Management console on your ADFS server.
2. In the **ADFS Management** console, navigate to **Relying Party Trusts**.
3. Right-click **Relying Party Trusts** and select **Add Relying Party Trust**.
4. In the **Add Relying Party Trust Wizard**, choose **Claims aware** and click **Start**.
5. Select **Enter data about the relying party manually** and click **Next**.
6. Provide a display name (e.g., "Document360 SAML SSO") and click **Next**.
7. In the **Configure Certificate** step, click **Next** (you can skip this if not using a certificate).
8. Under **Configure URL**, select **Enable support for the SAML 2.0 WebSSO protocol**.

## Document360 Service Provider (SP) Configuration

Next, you will need to configure ADFS with the Service Provider (SP) details provided by Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings > Users & security > SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(2).png)

4. Select **ADFS** as your Identity Provider (IdP) to navigate to the **Configure the Service Provider (SP)** page automatically.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Choose_idp_adfs(1).png)

5. On the **Configure the Service Provider (SP) page,** choose **SAML** as the protocol.
6. You will be directed to the **Configure the Service Provider (SP)** page, which contains the following values:

   * **Subdomain name**: The unique subdomain of your Document360 instance (e.g., yourcompany.document360.io).
   * **Callback path**: The URI where users will be redirected after signing in.
   * **Signed out callback path**: The URI where users will be redirected after signing out.
   * **Metadata path**: The URL where the SAML metadata for Document360 can be retrieved.
   * **Service provider entity ID**: The unique identifier for the Document360 service provider.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_saml_generic.png)

7. Enter these values into the corresponding fields in the **Configure URL** and **Identifiers** steps in ADFS:

   * **Relying Party Identifier**: Use the **Service provider entity ID** provided by Document360.
   * **Sign-On URL**: Enter the **Callback path**.
   * **Sign-Out URL**: Enter the **Signed out callback path**.
   * **Relying Party Trust Identifier**: Use the **Subdomain name**.
   * **Metadata URL**: Enter the **Metadata path** to configure ADFS to retrieve the SAML metadata from Document360 automatically.
8. Click **Next** and complete the remaining steps in the wizard, such as setting up multi-factor authentication if required and permitting all users to access the application.
9. Review your settings and click **Next** to add the relying party trust.
10. On the final screen, check the box for **Open the Edit Claim Rules dialog** and click **Close**.

## Configuring Claim Rules

1. In the **Edit Claim Rules** dialog, click **Add Rule**.
2. Select **Send LDAP Attributes as Claims** as the rule template and click **Next**.
3. Provide a name for the claim rule (e.g., "Send LDAP Attributes").
4. Configure the following:

   * **Attribute Store**: Select **Active Directory**.
   * **Mapping**:

     + **LDAP Attribute**: User-Principal-Name | **Outgoing Claim Type**: Name ID
     + **LDAP Attribute**: E-Mail-Addresses | **Outgoing Claim Type**: Email
     + **LDAP Attribute**: Display-Name | **Outgoing Claim Type**: Name
5. Click **Finish** to add the rule.
6. Click **Apply** to save your changes and close the dialog.

## Document360 SAML SSO Configuration

Now, configure the SSO settings in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click **Next** to navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter the corresponding values from your ADFS configuration:

| **ADFS** | **Document360** |
| --- | --- |
| SAML Sign-On URL | Identity Provider Single Sign-On URL |
| Identifier (Entity ID) | Identity Provider Issuer |
| X.509 Certificate | SAML Certificate |

3. Download the X.509 Certificate from ADFS and upload it to Document360 in the **SAML Certificate** field.
4. Toggle on/off the **Allow IdP initiated sign in** option based on your project needs.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_saml_generic.png)

5. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(2).png)

6. Click **Create** to complete the SAML SSO configuration.

<a id="saml-sso-with-other-configurations"></a>

## SAML SSO with other configurations

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To configure Single Sign-On (SSO) between Document360 and any Identity Provider (IdP) not listed explicitly in Document360, ensure you have the necessary credentials and access to both Document360 and your chosen IdP. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and your **Identity Provider (IdP)** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an Application in your Identity Provider

You must create a new SAML application in your Identity Provider:

1. Log in to your Identity Provider's admin console using your credentials.
2. Locate the section where you can create or manage applications (often labeled as **Applications**, **Enterprise Applications**, or similar).
3. Select the option to create a new application.
4. Configure the basic settings for the new application:

   * **Application Name**: Enter a name, e.g., "Document360 SSO".
   * **Application Type**: Select **SAML 2.0** as the sign-in method.
5. Save your application settings.

## Configuring SAML in your Identity Provider

Next, you will need to configure SAML settings in your Identity Provider using parameters from Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings > Users & security > SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(2).png)

4. Select **Others** as your Identity Provider (IdP) to navigate to the **Configure the Service Provider (SP)** page automatically.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Choose_idp_others(1).png)

5. In the **Configure the Service Provider (SP)** page, you'll find the required parameters to configure your SAML integration in the Identity Provider.

In your Identity Provider's SAML configuration:

* **Single Sign-On URL**: Enter the **Callback path** from Document360.
* **Entity ID**: Enter the **Service provider entity ID** from Document360.
* **Audience URI**: This is typically the **Service provider entity ID** or **Single Sign-On URL** provided by Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_saml_generic.png)

### Attribute Mapping

You may need to configure attribute statements for your Identity Provider:

| **Attribute Name** | **Value** |
| --- | --- |
| **NameID** | [user.email](http://user.email) or user ID |
| **email** | [user.email](http://user.email) |
| **name** | [user.name](http://user.name) |

Configure these values as required by your Identity Provider. Note that the case of attribute names may be important.

### Feedback and Additional Configuration

Some Identity Providers may ask for feedback or additional information:

1. Provide any additional configuration details as required by your Identity Provider.
2. Review your settings and save the SAML configuration.

## Document360 SSO Configuration

Finally, complete the SSO configuration in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click **Next** to navigate to the **Configure the Identity Provider (IdP)** page.
2. Enter the corresponding values from your Identity Provider:

| **Identity Provider** | **Document360** |
| --- | --- |
| Single Sign-On URL | Identity Provider Single Sign-On URL |
| Entity ID | Identity Provider Issuer |
| SAML Certificate (X.509) | SAML Certificate |

3. Download the X.509 Certificate from your Identity Provider and upload it to Document360.
4. Toggle on/off the **Allow IdP initiated sign in** option based on your project requirements.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_saml_generic.png)

5. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(2).png)

6. Click **Create** to complete the SSO configuration.

The SSO configuration will now be set up in Document360 using your selected Identity Provider.

<a id="idp-initiated-login"></a>

## Identity Provider (IdP) initiated sign in

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Identity Provider (IdP) initiated sign in is now available for the SSO conigured based on the SAML protocol in Document360. Following are the Identity Providers (IdPs) that support this feature:

* **Okta**
* **Entra ID**
* **Google Workspace**
* **OneLogin**
* **ADFS**

---

## Enabling the IdP-initiated sign in

1. Choose your desired project and go to the Knowledge base portal.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the **Edit** () icon which appears when you hover over an existing SSO configuration.
4. Navigate to the **IdP configurations** page in the SSO configuration window.
5. Turn **ON** the **Allow IdP initiated sign in** toggle.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Idp-initiated_sign_in_toggle.png)

> NOTE
>
> You can also enable the **Allow IdP initiated sign in** toggle while setting up a new SSO configuration on the **Configure the Identity Provider (IdP)** page.

---

### How does IdP-initiated sign in work?

1. Once the "**Allow IdP initiated sign in**" is switched on, an exclusive IdP-initiated sign-on URL is obtained from the IdP and shared with the SSO users.
2. The SSO users can use the link to log in to the Identity Provider's dashboard.
3. The SSO user then selects the configured projects and access Document360 directly.

---

## FAQs

**What are the identity providers supported by Document360?**

The following is the list of most commonly supported identity providers supported by Document360:

* Okta
* Microsoft Entra
* Google Workspaces
* OneLogin
* ADFS

Please note that the above list is not exhaustive.

**Why am I receiving an error when trying to access Document360 from the Okta dashboard?**

This error occurs because the option "Allow IdP initiated sign in" is not enabled in Document360. You need to enable this option to allow users to log in from the Okta dashboard.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="removing-a-configured-saml-sso"></a>

## Removing a configured SAML SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

SSO configurations can be deleted easily with a single click from Document360 settings.

1. Choose your desired project and go to the Knowledge base portal.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the **Delete** () icon which appears when you hover over an existing SSO configuration.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-SSO_configuration_delete_icon.png)

4. Once you click **Delete,** a **Delete SSO confirmation** popup will appear.
5. Click **Proceed** to successfully delete the SSO configuration.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-SSO_configuration_delete_confimation_popup.png)

> NOTE
>
> When you delete an existing SSO configuration, any users associated with the SSO configuration will also be deleted.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="openid"></a>

## OpenID

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

**OpenID Connect (OIDC)** is an open standard authentication protocol that allows users to log in to multiple web-based applications using a single set of credentials. It's built on top of the OAuth 2.0 authorization framework. With **OpenID** enabled, Document360 users can log in to the platform using their existing credentials from an identity provider (IdP). This eliminates the need for users to remember multiple passwords and reduces the risk of unauthorized access. Document360 supports the configuration of multiple single sign-on (SSO) endpoints, allowing both team accounts and readers to log in using their preferred identity provider.

## Supported identity providers

Document360 supports the following identity providers (**IdP**):

* **Okta**
* **Entra ID**
* **Google**
* **Auth0**
* **ADFS**
* **OneLogin**
* **Others**

---

## Configuring SSO using OpenID

1. Log in to your Document360 account and navigate to your desired project.
2. Navigate to ****Settings** (****)** > ****Users & security**** > **SAML/OpenID.**
3. Click **Create SSO.**
4. Select an identity provider from the **Choose your Identity Provider (IdP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Create_SSO_Choose_idp_page.png)
5. Select **OpenID** from the **Configure the Service Provider (SP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_openid_generic.png)
6. Using the details provided in the **Configure the Service Provider (SP)** page, configure the Document360 application with the previously selected identity provider.
7. Using the details provided by the identity provider, setup the SSO configuration in Document360 on the **Configure the Identity Provider (IdP)** page.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_openid_generic.png)

Once you have successfully completed the SSO configuration based on the **OpenID** protocol, you can invite members from your project to the configured SSO application.

Now, users can login to Document360 either using their email and password or using **SSO**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-SSO_configuration_document360_login_page.png)

## Troubleshooting

If you encounter issues during the OpenID SSO setup or login, refer to the following common errors and their solutions:

### Authority URL configuration error

**Error:** IDX20803: Unable to obtain configuration from: 'System.String'

This error typically occurs due to an incorrect or misconfigured Authority URL in the OpenID SSO configuration.

**Steps to resolve:**

To resolve this issue,

**Identify the Correct Authority URL**

1. Access the discovery document specific to your Identity Provider (IdP) by using the following URL format: `https://<domain>/.well-known/openid-configuration`
2. For example, if you're using Auth0, it might look like: `https://your-domain.auth0.com/.well-known/openid-configuration`
3. Open this URL in a web browser to view the discovery document.

![OpenID configuration JSON showing issuer and supported response modes.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Troubleshooting_authority_url_configuration_error.png)

**Retrieve and update the Authority URL in Document360**

1. In the discovery document, locate the field labeled `"issuer"`.
2. Copy the value of this field; this is your correct Authority URL.
3. Log in to your Document360 project.
4. Navigate to ****Settings** (****)** > ****Users & security**** > **SAML/OpenID.**
5. Click **Edit** on your existing OpenID SSO configuration and navigate to the **Configure the Identity Provider (IdP)** page.
6. In the **Authority** field, paste the copied URL.

![Configuration settings for SSO with highlighted authority field and steps for Okta setup.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Troubleshooting_authority_url_field.png)

**Verify and test the configuration**

* Ensure there are no trailing spaces or incorrect characters in the Authority URL.
* Save the configuration.
* Attempt to log in using SSO to verify that the issue is resolved.

If the problem persists after following these steps, consider checking for network issues or firewall settings that might block access to the Identity Provider's configuration endpoint. Additionally, ensure that your Identity Provider's SSL certificates are valid and not expired, as this can also cause connectivity issues.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="okta-with-openid-sso"></a>

## Okta with OpenID SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Before setting up Single Sign-On (SSO) between Document360 and Okta using the OpenID protocol, ensure you have administrative access to Okta. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **Okta** in two separate tabs/browser windows since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Sign up for Okta

Access to an Okta account is required for configuring SSO with Document360. If you don't have an account:

1. Navigate to [Okta Developer Sign-Up](https://developer.okta.com/signup/) and complete the sign-up process.

## Adding an Application in Okta

To create a Document360 SSO configuration using Okta, follow these steps:

1. Log in to Okta using your account credentials.
2. Switch to the admin user role by clicking on **Admin** at the top right next to your profile name.
3. From the left navigation list, expand the **Applications** dropdown and click **Applications**.
4. On the **Applications** page, click the **Create App Integration** button.
5. In the **Create a new app integration** popup, select **OIDC - OpenID Connect** as the **Sign-in method** and choose **Web Application** as the **Application type**, then click **Next**.

## Document360 Service Provider (SP) Configuration

Next, you will need to configure Okta with the Service Provider (SP) details provided by Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(1).png)

4. Select **Okta** as your identity provider to automatically navigate to the **Configure the Service Provider (SP)** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Choose_idp_okta.png)

5. In the **Configure the Service Provider (SP)**, select the **OpenID** radio button.
6. The **Configure the Service Provider (SP)** page contains the following values:

   * **Subdomain name**
   * **Sign in redirect URI**
   * **Sign out redirect URI**
7. In the **New Web App Integration** page onOkta:

   * **Sign-in redirect URIs**: Enter the **Sign in redirect URI** provided by Document360.
   * **Sign-out redirect URIs**: Enter the **Sign out redirect URI** provided by Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Okta_new_web_app_integration.png)

## Document360 OpenID SSO Configuration

Now, configure the SSO settings in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page.
2. Click **Next** to navigate to the **Configure the Identity Provider (IdP)** page and enter the corresponding values from your Okta configuration:

| **Okta** | **Document360** |
| --- | --- |
| Client ID | Client ID |
| Client Secret | Client Secret |
| Issuer URI | Authority |

> NOTE
>
> To find the Issuer URI in Okta, navigate to **Security** > **API.**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Okta_client_id_secret.png)

3. Ensure that the **Client ID** and **Client Secret** match the values generated in Okta.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_openid_generic(1).png)

4. Toggle on/off the **Allow IdP initiated sign in** option based on your project needs.
5. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(1).png)

6. Click **Create** to complete the OpenID SSO configuration.

<a id="auth0-with-openid-sso"></a>

## Auth0 with OpenID SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Access to a Auth0 account is required for configuring single sign-on in Document360 with Auth0. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **Auth0** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

To sign up for Microsoft Entra:

1. Navigate to the <https://auth0.com/signup> and sign in.
2. If you don't have an account, follow the prompts to create one.

## Creating an application in Auth0

![12_ScreenGIF-Auth0-sign-in-and-create-application-min](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_ScreenGIF-Auth0-sign-in-and-create-application-min.gif)

1. After successful Login with Auth0, you can find the Applications menu on the left-hand side menus
2. Click on **Application** > **Create application**
3. Type in your **Application name** and choose an application type as **Regular Web Applications** and click on the **Create** button

## Configure Auth0 OpenID with Document360

Next, you will need to configure ADFS with the Service Provider (SP) details provided by Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(1).png)

4. Select **Others** as your Identity Provider (IdP) on the **Choose your Identity Provider (IdP)** page to navigate to the **Configure the Service Provider (SP)** page in Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Choose_idp_others.png)

5. Choose **OpenID** as the protocol in the **Configure the Service Provider (SP)** page in Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_openid_generic.png)

This page will provide the required parameters for configuring OpenID in your Identity Provider. In your Identity Provider's OpenID configuration:

* **Sign in redirect URI**: Paste this in the **Application Login URI** and **Allowed Callback URLs** fields.
* **Sign out redirect URI**: Paste this this in the **Allowed Logout URLs** field.

![17_Screenshot-Auth0-configurations-Login-URI-Logout-URI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_Screenshot-Auth0-configurations-Login-URI-Logout-URI.jpg)

Once you have entered all the required fields, click the **Save changes** button at the end of the page.

## Document360 OpenID SSO Configuration

Now, configure the SSO settings in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click Next to navigate to the **Configure the Identity Provider (IdP)** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_openid_generic.png)

2. Enter the corresponding values from your Identity Provider:

| Document360 | Identity provider |
| --- | --- |
| Client ID | Client ID |
| Client Secret | Client Secret |
| Authority | Domain |

![39_Screenshot-OpenID_with-Auth0_basic_information](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/39_Screenshot-OpenID_with-Auth0_basic_information.jpg)

3. Toggle on/off the **Allow IdP initiated sign in** option based on your project needs.
4. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic.png)

6. Click **Create** to complete the OpenID SSO configuration.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="adfs-with-openid-sso"></a>

## ADFS with OpenID SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Before setting up Single Sign-On (SSO) between Document360 and ADFS using the OpenID protocol, ensure you have administrative access to both Document360 and the ADFS server. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and **ADFS** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an Application in ADFS

You'll need to create a new OpenID application in ADFS:

1. Log in to the ADFS Management console on your ADFS server.
2. In the **ADFS Management** console, navigate to **Relying Party Trusts**.
3. Right-click **Relying Party Trusts** and select **Add Relying Party Trust**.
4. In the **Add Relying Party Trust Wizard**, choose **Claims aware** and click **Start**.
5. Select **Enter data about the relying party manually** and click **Next**.
6. Provide a display name (e.g., "Document360 OpenID SSO") and click **Next**.
7. In the **Configure Certificate** step, click **Next** (you can skip this if not using a certificate).

## Document360 Service Provider (SP) Configuration

Next, you will need to configure ADFS with the Service Provider (SP) details provided by Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso(1).png)

4. Select **ADFS** as your identity provider to automatically navigate to the **Configure the Service Provider (SP)** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Choose_idp_adfs.png)

5. In the **Configure the Service Provider (SP)**, select the **OpenID** radio button.
6. The **Configure the Service Provider (SP)** page contains the following values:

   * Choose **OpenID** as the protocol.
   * **Subdomain name**
   * **Sign in redirect URI**
   * **Sign out redirect URI**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_openid_generic(1).png)

7. Switch to the **ADFS Management console tab/window** and enter these values into the corresponding fields in the **Configure URL** step:

   * **Relying Party Identifier**: Use the **Subdomain name** provided by Document360.
   * **Sign-On URL**: Enter the **Sign in redirect URI**.
   * **Sign-Out URL**: Enter the **Sign out redirect URI**.
8. Click **Next** and complete the remaining steps in the wizard, such as setting up multi-factor authentication if required and permitting all users to access the application.
9. Review your settings and click **Next** to add the relying party trust.
10. On the final screen, check the box for **Open the Edit Claim Rules dialog** and click **Close**.

## Configuring Claim Rules

1. In the **Edit Claim Rules** dialog, click **Add Rule**.
2. Select **Send LDAP Attributes as Claims** as the rule template and click **Next**.
3. Provide a name for the claim rule (e.g., "Send LDAP Attributes").
4. Configure the following:

   * **Attribute Store**: Select **Active Directory**.
   * **Mapping**:

     + **LDAP Attribute**: User-Principal-Name | **Outgoing Claim Type**: Name ID
     + **LDAP Attribute**: E-Mail-Addresses | **Outgoing Claim Type**: Email
     + **LDAP Attribute**: Display-Name | **Outgoing Claim Type**: Name
5. Click **Finish** to add the rule.
6. Click **Apply** to save your changes and close the dialog.

## Document360 OpenID SSO Configuration

Now, configure the SSO settings in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page.
2. Click **Next** to navigate to the **Configure the Identity Provider (IdP)** page and enter the corresponding values from your ADFS configuration:

| **ADFS** | **Document360** |
| --- | --- |
| Client Identifier (Client ID) | Client ID |
| Client Secret | Client Secret |
| Issuer URL | Authority (Authorization URL or Endpoint) |

3. Ensure that the **Client Identifier** matches the **Relying Party Identifier** configured in ADFS.
4. Toggle on/off the **Allow IdP initiated sign in** option based on your project needs.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_openid_generic(1).png)

3. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic(1).png)

6. Click **Create** to complete the OpenID SSO configuration.

<a id="other-configurations-with-openid-sso"></a>

## Other configurations with OpenID SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Before setting up Single Sign-On (SSO) between Document360 and an OpenID Identity Provider (IdP) not explicitly listed in Document360, ensure you have access to both Document360 and your chosen IdP. Please note that only users with **Owner** or **Admin** as **Project role** can configure SSO in Document360.

> PRO TIP
>
> It is recommended to open **Document360** and the **Identity Provider (IdP)** in two separate tabs/browser windows, since configuring SSO in Document360 will require you to switch between Okta and Document360 multiple times.

## Adding an Application in Your Identity Provider

You'll need to create a new OpenID application in your Identity Provider:

1. Log in to your Identity Provider's admin console using your credentials.
2. Navigate to the section where you can create or manage applications (often labeled as **Applications**, **Enterprise Applications**, or similar).
3. Select the option to create a new application.
4. Set up the basic settings for your new application:

   * **Application Name**: Enter a name, e.g., "Document360 OpenID SSO".
   * **Application Type**: Select **OpenID Connect** as the sign-in method.
5. Save your application settings.

## Configuring OpenID in Your Identity Provider

You will need to configure OpenID settings in your Identity Provider using parameters from Document360:

1. Open Document360 in a separate tab or window.
2. Navigate to **Settings > Users & security > SAML/OpenID** in Document360.
3. Click the **Create SSO** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Settings_create_sso.png)

4. Select **Others** as your Identity Provider (IdP) on the **Choose your Identity Provider (IdP)** page to navigate to the **Configure the Service Provider (SP)** page in Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Choose_idp_others.png)

5. Choose **OpenID** as the protocol in the **Configure the Service Provider (SP)** page in Document360.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Configure_sp_openid_generic.png)

This page will provide the required parameters for configuring OpenID in your Identity Provider. In your Identity Provider's OpenID configuration:

* **Subdomain name**: Enter the **Subdomain name** provided by Document360.
* **Redirect URI**: Enter the **Sign in redirect URI** and **Sign out redirect URI** provided by Document360.

### Scope and Claims

Ensure that the following scopes and claims are included:

| **Scope** | **Description** |
| --- | --- |
| **openid** | Required for OpenID authentication |
| **email** | Access to the user's email |
| **profile** | Access to the user's basic profile info |

Map the required claims in your Identity Provider:

| **Claim** | **Value** |
| --- | --- |
| **sub** | user ID or identifier |
| **email** | [user.email](http://user.email) |
| **name** | [user.name](http://user.name) |

Review the settings and save your configuration.

## Document360 OpenID SSO Configuration

Now, configure the SSO settings in Document360:

1. Return to the Document360 tab/window displaying the **Configure the Service Provider (SP)** page and click Next to navigate to the **Configure the Identity Provider (IdP)** page.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Configure_idp_openid_generic.png)

2. Enter the corresponding values from your Identity Provider:

| Document360 | Identity provider |
| --- | --- |
| Client ID | Client ID |
| Client Secret | Client Secret |
| Authority | Authorization URL or Endpoint |

3. Enter the requested details in Document360 and upload the necessary certificates or keys, if required.
4. Toggle on/off the **Allow IdP initiated sign in** option based on your project needs.
5. Click **Next** to proceed to the **More settings** page.

### More Settings

In the **More settings** page, configure the following:

* **SSO name**: Enter a name for the SSO configuration.
* **Customize login button**: Enter the text for the login button displayed to users.
* **Auto assign reader group**: Toggle on/off as needed.
* **Sign out idle SSO team account**: Toggle on/off based on your requirements.
* Choose whether to invite existing team and reader accounts to SSO.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Create_SSO_more_settings_generic.png)

6. Click **Create** to complete the OpenID SSO configuration.

<a id="removing-a-configured-openid-sso"></a>

## Removing a configured OpenID SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

SSO configurations can be deleted easily with a single click from Document360 settings.

1. Choose your desired project and go to the Knowledge base portal.
2. Navigate to **Settings** > **Users & security** > **SAML/OpenID.**
3. Click the **Delete** () icon which appears when you hover over an existing SSO configuration.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-SSO_configuration_delete_icon.png)

4. Once you click **Delete,** a **Delete SSO confirmation** popup will appear.
5. Click **Proceed** to successfully delete the SSO configuration.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-SSO_configuration_delete_confimation_popup.png)

> NOTE
>
> When you delete an existing SSO configuration, any users associated with the SSO configuration will also be deleted.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="configuring-the-jwt-sso"></a>

## Setting up JWT SSO

**Plans supporting single sign on (SSO)**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

### What is a ****JWT****?

A **JSON Web Token (JWT)** is an encrypted token format that securely transfers data such as credentials (authentication and authorization) between two applications. ****JWT**** is specifically used to authenticate reader logins in Document360. Click here to [**read about JWT**](https://en.wikipedia.org/wiki/JSON_Web_Token)**.**

---

## Enterprise SSO using ****JWT****

Document360 uses an approach similar to **PKCE** (*Proof Key for Code Exchange*, a secure OAuth method) to generate the ****JWT**** token.

The high-level diagram below shows how to achieve ****JWT**** authentication flow in Document360.

![Picture1.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Picture1.png)

### Steps in the ****JWT**** authentication flow

1. When the end-user tries to access the knowledge base configured with ****JWT****, the Document360 knowledge base will redirect the end-user to the login URL that the team account has configured in **Document360 **JWT** settings.**

   Assuming that the configured login URL resides inside the customer application, which will require authentication.
2. By calling the login endpoint in the customer application, it will invoke the login logic, which will send a request with:

   * User details
   * Client ID and client secret to the identity server code generation URL to get the authentication code

     This process is done through the backchannel.
3. The code generation URL will accept the POST requests with the JSON payload shown below:

   The client ID and secret must be sent as a basic authorization header.

Follow this [**link**](https://swagger.io/docs/specification/authentication/basic-authentication/) to find out how the header needs to be formed for basic authentication.

#### JSON payload

```
{
"username": "firstname + lastname",
"firstName": "firstname",
"lastName": "lastname",
"emailId": "user emailId",
"readerGroupIds": ["Obtain from Reader groups overview page in the Document360 portal (Optional)"],
"tokenValidity": 15 //minutes *()*
}
```

JSON

Copy

> NOTE
>
> Ensure correct JSON syntax to avoid configuration errors.

4. The identity server will generate the code based on the user details, client ID, and client secret and return the generated code to the customer application.

   This is done via the backchannel.
5. Once the customer application receives the auth code from the identity server,

   * The customer app will append the code to the callback URL found in the ****JWT** settings** and redirect the user to the callback URL with the code.
   * **For example:** `HTTPS://{project_name}.document360.io/jwt/authorize?code={code}`

> NOTE
>
> The authentication code is a one-time use code and cannot be reused.

4. Once the knowledge base receives the authentication code in the query parameter, it will send the code to the identity server via backchannel for the ID token and access token.
5. Once the knowledge base has received the ID token, it will create a session on behalf of the user mentioned in the earlier user details.

   * By default, this session will be valid for **15 minutes**. Once the session cookie expires, the end-user will be redirected to the login URL (hosted within the customer application) to get a new code, and the flow will repeat.
   * The session renewal will be seamless since the user is already authenticated to the customer application

#### Token validity

The **minimum value** that can be set is **5 minutes**, and the **maximum value** that can be set is **1440 minutes** (1 day).

#### cURL

To test the JWT configuration, you can use the cURL command with the following specifications. The HTTP version should be specified (**HTTP2** over **TLS** and version of **SSL** to **TLS 1.2**. Without this, the cURL would fail.

> NOTE
>
> Unlike other IdP options available (Okta, Azure AD, etc.), the user does not need a separate reader account on Document360. An account on the client application is sufficient.

After enabling the JWT login, the reader can use the client application to log in as a reader account on the Document360 knowledge base site.

NOTE

Currently, Document360 provides an either-or functionality for the SSO standards. Once the IdP is configured using an SSO standard (SAML, OpenID, or JWT) for a project, the user cannot create another simultaneous session.

**For Ex.** If a project is configured in the OpenID standard with Okta as IdP, the SAML and the JWT options would be disabled.

---

## SSO configuration

### Creating a ****JWT****

To create a **JSON Web Token (JWT)**,

1. Log in to the Document360 portal.
2. Go to ****Settings** ()**> ****Users & security**** > ****JWT****.
3. Create a JWT (Client secret) from here by clicking on the **Create JWT** button.
4. Copy the generated client secret by clicking on the **copy** icon and clicking on **Close**.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-JWT_client_secret.png)

> NOTE
>
> The same generated Client secret will not be available when you revisit this section. If required, the client's secret must be regenerated.

The JWT configuration page with all the data will be available now.

---

### JWT configuration

After a JWT is created, the **JWT configuration page** will be visible.

* **Set up your application:** Copy the **Client ID, Callback URL, Code generation URL, Client secret** and paste it into the appropriate fields in the client application

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-JWT_setup_your_application.png)

* **JWT status**:Turn the **JWT SSO login for readers** on or off using this toggle. If the toggle is set to **off**, readers will not be able to log in to the knowledge base site using their client app credentials.
* **Delete JWT**:Click the **Delete** button to remove the configured JWT. You cannot undo this action.
* **JWT basic configuration**: Paste the login URL obtained from the client's application.

  + Readers will land on the dedicated logout page for JWT SSO readers if a custom logout link is not provided.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-JWT_basic_configuration.png)

---

### Redirection to other pages instead of the home page

By default, after logging in, users are redirected to the **Home page** of your knowledge base.

* If your **Home page** is unpublished, users will be redirected to the **/docs** page.
* To redirect users to a different page in your knowledge base (other than the **Home** or **/docs** pages), configure the redirection during JWT setup using the following code.

#### URL pattern

```
https://<Knowledge base URL>/jwt/authorize?code=<code>&redirectUrl=<redirect path>
```

Plain text

Copy

#### Parameters

* **Knowledge base URL**: The main URL of your knowledge base site.
* **Code**: The client ID.
* **Redirect URL**: The new URL where you want users to land after login.

#### Example

```
https://example.document360.io/jwt/authorize?code=FOTaS_SW6dLGytQXvrG_rRFGhyPvrDDrgxJAZzYvJcY&redirectUrl=/docs/5-basic-things-to-get-started

```

Plain text

Copy

> NOTE
>
> Document360 will send the **Redirection URL** as `RedirectPath` to the login endpoint. When the login endpoint redirects back to the knowledge base with the authentication code, it should return the **Redirection URL** as a `RedirectUrl` parameter.

---

## Troubleshooting

If you encounter issues during the JWT SSO setup, refer to the following common error and its solution:

### 401-unauthorized error when testing JWT in Postman

**Error**: 401 Unauthorized error

If you encounter a **401 Unauthorized error** while testing JWT (JSON Web Token) using Postman, this typically occurs because the authorization settings are not configured correctly.

**Steps to resolve**:

To resolve this error,

1. In Postman, open the request you are testing.
2. Navigate to the **Authorization** tab.
3. Set the authorization type to **Basic Auth**.
4. In the **Username** field, enter the **Client ID**.
5. In the **Password** field, enter the **Client Secret**.
6. Go to the **Body** tab.
7. Select the **raw** option from the dropdown and ensure the format is set to **JSON**.
8. Add the required JSON payload for the API request.
9. Click **Send** to execute the request.

Check the response for the expected results. If the request is successful, you should receive an **auth code** or token in the response.

---

### FAQs

#### Can I use a single JWT login to support multiple instances of my application on the same Document360 Knowledge base site?

No, currently, Document360 supports a single JWT login configuration per project.

* A common JWT login cannot be shared across multiple instances of your application for the same Document360 knowledge base.
* Each project can only authenticate one JWT application instance at a time.

#### If a configured JWT user logs out of the client application, does that mean they would also be logged out of Document360?

No, the session on Document360 is independent after the initial Single Sign-On. Users can continue using Document360 until the token validity expires, even after logging out of the client application.

**Example:** If the token validity is set to 1 day, the Document360 session will remain active until the token expires. Once it does, the user will be logged out.

#### What are the minimum and the maximum token validity bands?

The **minimum value** that can be set is **5 minutes**, and the **maximum value** that can be set is **1440 minutes** (1 day).

#### Can I provide a value that exceeds the allowed token validity band?

No, if a value outside the range is provided, the system will automatically assign the nearest allowed value:

* **5 minutes** for values below the minimum.
* **1440 minutes** for values above the maximum.

#### What is the difference between JWT and SSO?

You can view a comparison between JWT (JSON Web Token) and SSO (Single Sign-On) in the table below:

| **Aspect** | **JWT** | **SSO** |
| --- | --- | --- |
| **Authentication** | Tokens generated per session/user request. | Centralized authentication across apps. |
| **Token Expiry** | Tokens typically expire after a set period. | No token, session handled by identity provider. |
| **Security** | Requires secure token storage. | More secure, centralized credential storage. |
| **Usage** | Used for stateless, single-use authentication. | Used for multiple applications with single login. |
| **Integration** | Easier to implement in custom apps. | Requires integration with an identity provider. |

#### Can readers log in with OpenID or SAML if JWT is configured for the project?

No, readers cannot log in with OpenID or SAML if JWT is configured for the project. Document360 allows only one SSO standard (JWT, OpenID, or SAML) to be active per project at a time.

#### What features are not supported when JWT is configured for the project?

The following functions are not supported when JWT is configured for the project:

1. **Advanced Settings**: Auto-register SSO and skip the Document360 common sign-in page.
2. **Readers**: Self-registration.

Security Assertion Markup Language (SAML) is a widely used Single Sign-On (SSO) standard that enables secure authentication and authorization by allowing users to log in to multiple applications with a single set of credentials.

<a id="jwt-reader-groups"></a>

## JWT reader groups

**Plans supporting single sign on (SSO)**

| Free | Professional | Business | Enterprise |
| --- | --- | --- | --- |
|  |  |  |  |

**JWT reader accounts** can be associated with any existing reader groups on the Document360 project, and the [**group restrictions**](https://docs.document360.com/docs/managing-reader-groups#creating-a-new-reader-group) can be applied to access specific content in the knowledge base. A JWT reader group is identical to a regular Document360 reader group, inheriting the same restriction settings.

---

## Reader groups in Document360

Reader groups act as assignable permissions that define what users can access in any private **knowledge base**.Readers must log in with their credentials to view private knowledge bases on Document360.

### Example use case

**Scenario**: The sales team needs access to pricing and billing articles but should not have access to API documentation or core technical articles.

**Solution**:

1. Create a reader group in the Document360 private project, granting access only to the pricing category.
2. Assign the sales team members to this reader group.

---

## Reader group IDs

For JWT SSO-enabled projects, users can view and obtain **Reader** **group ID** from **Settings** > **Users and Security** > **Readers & groups** > **Reader groups** tab.

* The **Group Id** is displayed below each reader group.
* A **copy** icon is available on the right to quickly copy the required **Group Id**.
* Paste the copied **Group Id** into the payload to configure it.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%28109%29.png)

> NOTE
>
> The **reader** **group ID** is only available for JWT-configured projects and not regular private knowledge base projects.

---

## Enabling JWT reader groups

1. Obtain and copy the **Reader group ID** by following the steps mentioned above.
2. Use the following JSON format to configure the relevant reader group IDs:

```
{
  "username": "firstname + lastname",
  "firstName": "firstname",
  "lastName": "lastname",
  "emailId": "user emailId",
  "readerGroupIds": [
    "26b3812e-7879-4407-b1c9-5755c32b886a",
    "674eadcd-793f-4131-b1e0-c1f055cc83b7"
  ],
  "tokenValidity": 15 //minutes
}
```

JSON

Copy

The **token validity** *(in minutes)* for the JWT reader can also be set in the payload. The **minimum value** that can be set is **5 minutes**, and the **maximum value** that can be set is **1440 minutes** (1 day).

To add multiple group IDs, separate them with commas (`,`).

**Example:**

```
"readerGroupIds": ["26b3812e-7879-4407-b1c9-5755c32b886a", "674eadcd-793f-4131-b1e0-c1f055cc83b7"]
```

JSON

Copy

When a JWT reader authenticates and accesses the private knowledge base, the restrictions defined in their assigned reader group will automatically apply. This ensures the reader can access only the specific project versions, languages, categories, or articles permitted by the reader group's settings.

### Timing of changes to reader group IDs

Changes to Reader Group IDs (additions or deletions) in the payload will take effect only after the current session (token validity) expires.

**Example**: If the token validity is set to 30 minutes and a new Group ID is added, the change will apply only after 30 minutes. The same applies when removing a group ID.

<a id="how-to-enlarge-the-pdf-preview-in-the-article"></a>

## How to enlarge the pdf preview in the article?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Preview size of the PDF files in the article would vary for browsers. However, you can configure the desired width of the PDF file.

> NOTE
>
> This workaround is useful only for articles created using the WYSIWYG editor.

### Solution

To enlarge the pdf preview:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.

   The **CSS** tab is the default selection.
2. Paste the below CSS snippet in the window.

KB Site 1.0

KB Site 2.0

```
.content_block .content_container .content_block_text p * {width: 100%;}
```

CSS

Copy

```
article p object {
    width: 100% !important;
}
```

CSS

Copy

3. Click **Save**.

![Enlarge PDF preview in article GIF](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Enlarge%20PDF%20preview%20in%20article%20GIF.gif)

---

### Outcome

![2_Screenshot-Outcome.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Outcome.png)

<a id="how-to-change-the-color-of-the-hyperlinks-in-dark-mode"></a>

## How to change the color of the hyperlinks in Dark mode?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When using a dark primary color and viewing the Knowledge Base site in Dark mode, hyperlinks may appear partially visible. The primary color remains consistent across Light and Dark modes. To address this, consider changing the hyperlink color.

### Solution

You can change the color of hyperlinks in the Dark mode. This helps to avoid partially visible hyperlinks in this mode.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB Site 1.0

KB Site 2.0

```
body.dark_theme .content_block .content_container .content_block_text a {color: red !important;}
```

CSS

Copy

```
html[data-bs-theme=dark] d360-article-content a {
    color: red !important;
}
```

CSS

Copy

3. Update the desired color in the above snippet.

> In the above sample snippet, it is red. You can customize it with your desired color.

4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Update_hyperlink_color_dark_mode.png)

### Outcome

![2_Screenshot_HyperLink_Color_Changes.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_HyperLink_Color_Changes%281%29.png)

<a id="how-to-change-the-highlighted-search-result-color-in-articles"></a>

## How to change the highlighted search result color in articles?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When 'Highlight Matching Search Keywords in Articles' is enabled, search keywords within articles are automatically highlighted. By default, the highlight color is yellow. You have the flexibility to customize this color according to your preferences. The following steps will allow you to change the highlight color for search keywords in articles, applicable to both light and dark modes.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below CSS snippet in the **CSS** tab.

**For KB Site 1.0,**

```
mark { 
background-color: green; 
color: white; 
}
```

CSS

Copy

**For KB Site 2.0,**

```
.fp-search-content em, .search-content em {
    background-color: #4E1E66;
    color: white;
}
```

CSS

Copy

3. Update the desired color in the above snippet.

> In the above sample snippets, green and purple colors are used with white font. You can customize it with your desired color.

4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Change%20highlighted%20search%20result%20color%20GIF.gif)

### Outcome

#### Before

Highlighted font with the standard colors offered by Document360 (before customization).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Highlighted%20search%20result%20-%20Before.png)

#### After

Highlighted font after customization with the background color `#4E1E66` and font color `white`.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Highlighted%20search%20result%20-%20After.png)

<a id="how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site"></a>

## How to hide the project's workspace dropdown in the Knowledge base site?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you have access to multiple project workspaces, the workspace dropdown appears at the top left of the knowledge base site. If you want to turn off the workspace selection dropdown option, you can use the below solution.

> NOTE
>
> **How will you navigate between project workspaces without the dropdown?**  
> If you implement the below solution, the user must know the exact URL of the workspace page to access it.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
header .header_bottom .header_bottom_nav ul li.versions-selection {
    display: none;
}
```

CSS

Copy

3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-Hifing_project_workspaces_dropdown.png)

### Outcome

![2_Screenshot-hidden_workspace.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-hidden_workspace%281%29.png)

<a id="how-to-add-a-vertical-scrollbar-to-the-code-blocks"></a>

## How to add a vertical scrollbar to the code blocks?

**Plans supporting the use of custom CSS and JS**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you have long codes inside the code blocks, the code block consumes more space and increases the article length. It is good to have a vertical scrollbar for the code blocks when their size increases more than a specific pixel. Check the solution below to implement this on your knowledge base site.

---

### Solution

#### To apply vertical scrollbar in specific articles within KB Site 1.0 projects

1. Add the below tag in your article for which you want a scrollbar in code blocks.

   ```
   <div class="scroll">
   ```

   XML

   Copy

2. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
3. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

   ```
   .scroll div.code-toolbar {
   height: 280px;
   overflow-x: hidden !important;
   overflow-y: auto !important;
   }
   ```

   CSS

   Copy

4. Enter the desired pixel size.
5. Click **Save** on the top right.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_ScreenShot-Customization.png)

### Outcome

![3_Screenshot-vertical_scrollbar_outcome.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1727784856290.png)

---

#### To apply vertical scrollbar in all articles

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
.code-toolbar pre {
max-height: 300px;
}
```

CSS

Copy

```
article .code-toolbar {
    height: 280px;
    overflow-x: hidden !important;
    overflow-y: auto !important;
}
```

CSS

Copy

1. Enter the desired pixel size.
2. Click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_ScreenShot-Customization.png)

   > NOTE
   >
   > When you use the above snippet, the top icon of the vertical scrollbar in the code block would be hidden.

### Outcome

![3_Screenshot-vertical_scrollbar_outcome.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-vertical_scrollbar_outcome%281%29.png)

<a id="how-to-set-the-default-height-and-width-of-the-embedded-pdf"></a>

## How to set the default height and width of the embedded PDF?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Preview size of the PDF files in the article would vary for browsers. However, you can configure the desired height and width of the PDF file.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
object {
height: 500px !important;
width: 500px !important;
}
```

CSS

Copy

3. Update the desired height and weight as per your requirement.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-setting%20the%20default%20height%20and%20width%20of%20the%20embedded%20PDF.png)

### Outcome

![2_Screenshot-outcome_set_of_height_&_width.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-outcome_set_of_height_&_width.png)

<a id="how-to-make-the-table-border-bold-in-knowledge-base"></a>

## How to make the table border bold in knowledge base?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you wish to make the border of the tables in your knowledge base thicker, you can use the below solution to change the thickness and color of your table border across your knowledge base.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below CSS snippet in the CSS tab.

```
table td, table th, table tr {
border: 3px solid #000000 !important;
}
```

CSS

Copy

3. Update the desired thickness and color in the snippet. In the provided example, thickness is **3px** and color code is **000000**.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Make table border bold in KB GIF.gif)

### Outcome

#### Before

By default, the table appears as below  
![2_Screenshot-before_table_border.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-before_table_border.png)

#### After

After updating the Custom CSS, the table appears as below.

![3_Screenshot-after_table_border.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-after_table_border.png)

<a id="how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base"></a>

## How to vertically align table contents at the top in the Knowledge base?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you want to vertically align the table content to the top of your Knowledge base, follow the steps below to easily achieve this using a custom CSS solution.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
table td, table th, table tr 
{  
vertical-align: top !important;
}
```

CSS

Copy

3. Update the alignment as needed. In this example, the content is set to align vertically at the top.
4. Click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_ScreenShot-Customization.png)

### Outcome

#### Before

By default, the table appears as below.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Before_adding_code.png)

#### After

After updating the Custom CSS, the table appears as below.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-After_adding_code.png)

<a id="how-to-restrict-the-readers-from-copying-the-content"></a>

## How to restrict the readers from copying the content?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In general, you can copy the contents of the Knowledge base site easily with the mouse selection and Ctrl+C (or) alternative copy action. In confidential documentation, you would want to restrict the readers from copying the content. You can implement the below solution to restrict readers from copying the content.

By implementing the below solution, the readers can still select the content and perform a copy action (i.e., they can perform mouse selection and press Ctrl+C or perform any copy action). However, the **content will not be copied**.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below snippet in the JavaScript window.

KB Site 1.0

KB Site 2.0

```
$(document).ready(function(){
$('.content_block').bind("cut copy paste",function(e) {
e.preventDefault();
});
});
```

JavaScript

Copy

```
$(document).ready(function(){
$('d360-article-content').bind("cut copy paste",function(e) {
e.preventDefault();
});
});
```

JavaScript

Copy

3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Restrict readers from copying content GIF.gif)

<a id="how-to-keep-dark-mode-for-the-knowledge-base-site-by-default"></a>

## How to keep dark mode for the Knowledge base site by default?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can use the Light or Dark option at the top of the article to change the theme.  If you want to enable the Dark by default, you can use the below solution.

> NOTE
>
> By default, all articles would be in Light mode.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **JavaScript** tab and paste the following Javascript snippet:

```
$(document).ready(function() {
setTimeout(function() { document.getElementById('darkTheme').click(); }, 100); 
});
```

JavaScript

Copy

3. Click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGif-Customization.gif)
4. Now, all the articles on your site appear in dark mode by default.

   However, the user can switch to light mode with the **Light** option at the top of the article.
5. If you want the user to view only in dark mode, you can turn off the **theme option** in Article settings.

   a. Navigate to Settings () icon > **Knowledge base site** > **Customize site**.

   b. Under the **Site theme** section, select the **Dark only** option and click **Save** at the top.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_ScreenShot-Customization.png)

<a id="how-to-center-align-the-text-in-markdown"></a>

## How to center align the text in Markdown?

**Plans supporting customization of text in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Achieving center alignment in your article is simple with the 'Align center' option in the toolbar of the WYSIWYG editor. However, in the Markdown editor, all text defaults to **left alignment**.

To center align text in the Markdown editor, follow the workaround below.

### Center align text in Markdown

1. Go to the desired article in the Knowledge base portal.
2. Paste the below code in the desired location where you want the text to appear.

```
<p style="text-align:center;">Text_content</p>
```

Plain text

Copy

3. Replace the 'Text\_content' with your desired text.

> **For example:**
>
> ```
> <p style="text-align:center;">Sample text with center alignment</p>
> ```
>
> Plain text
>
> Copy

4. The output would be as below

Sample text with center alignment

> NOTE
>
> You can add the basic text formatting such as bold, italic, and strikethrough using the usual syntax for the entire code.
>
> > **For example**,
> >
> > ```
> > ***<p style="text-align:center;">Text with basic formatting applied</p>***
> > ```
> >
> > Plain text
> >
> > Copy
> >
> > **Output**:
> >
> > ***Text with basic formatting applied***

If you want the text to be right aligned, use the following code.

```
<p style="text-align:right;">Text_content</p>
```

Plain text

Copy

---

## Center align Headings in Markdown

You can also center-align Headings in your article by slightly altering the HTML code snippet.  
 Replace the `<p>...</p>` with `<h2>...</h2>`, `<h3>...</h3>`, or `<h4>...</h4>`.

> **For example**, to center align a H3
>
> ```
> <h3 style="text-align:center;">H3 that is center aligned</h3>
> ```
>
> Plain text
>
> Copy
>
> **Output**:
>
> ### H3 that is center aligned

> NOTE
>
> Markdown doesn't have a built-in way to center align text. You can use the HTML tags provided in this article as a workaround within Markdown to achieve this effect.

One of the three editors in Document360, WYSIWYG (What You See Is What You Get) is a content editing tool that shows the final output as writers create and format content.

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="how-to-change-the-color-of-the-text-in-markdown"></a>

## How to change the color of the text in Markdown?

**Plans supporting customization of text in articles**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To change the color of specific text in your articles using Markdown, follow the steps outlined below:

### Solution

1. Navigate to the desired article in the Knowledge base portal (Markdown editor).
2. Paste the below code in the desired location where you want the text to appear in the article.

```
<span style="color:red">
Text content
</span>
```

HTML

Copy

> NOTE
>
> The `<span>` tag is an HTML element, and the `style` attribute is used to apply inline CSS for styling, in this case, setting the text color to red. Markdown does not natively support custom inline styles (like text color) without extensions.

3. Replace “*Text content”* with your desired text.
4. Replace the color with your desired color.

NOTE

The above sample code mentions the color as 'red.'

#### Outcome

Text content

NOTE

If you wish to change the color of specific text in your articles in the WYSIWYG editor, use the 'Text color' option in the toolbar.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

One of the three editors in Document360, WYSIWYG (What You See Is What You Get) is a content editing tool that shows the final output as writers create and format content.

<a id="how-to-change-the-language-name-text-in-code-blocks"></a>

## How to change the language name text in code blocks?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To maintain consistency and enable ease of use, designate a standard name such as "Example" or "Sample code" for code blocks. By default, the language name is displayed within these blocks. To modify the language name within code blocks, utilize the following workaround:

> NOTE
>
> This action would change the language name in all the code blocks in your knowledge base.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
div.code-toolbar>.toolbar .toolbar-item:first-child {
    visibility: hidden;
}
div.code-toolbar>.toolbar .toolbar-item:first-child span:before {
    visibility: visible;
    content: "Example" !important;
}
```

CSS

Copy

3. Replace the text '**Example**' with your desired text.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-Changing_the_language_name_text_in_code_blocks.png)

<a id="how-to-change-the-callouts-color-in-dark-mode"></a>

## How to change the callouts color in dark mode?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can change the callout color in dark mode. Follow the below workaround to change the callout color in dark mode.

#### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

   ```
   html[data-bs-theme=dark] .infoBox {
     background-color: #ddf7ff !important;   /* Here you can change info box background color (!important is mandatory)*/
     color: #006a8a !important; /* Here you can change info box font color (!important is mandatory)*/
     border-left: 4px solid #006a8a !important; /* Here you can change info box border color (!important is mandatory)*/
   }
   html[data-bs-theme=dark] .errorBox {
     background: #f9e2e4 !important; /* Here you can change error box background color (!important is mandatory)*/
     color: #7e1115 !important; /* Here you can change error box font color (!important is mandatory)*/
     border-left: 4px solid #7e1115 !important; /* Here you can change info box border color (!important is mandatory)*/
   }
   html[data-bs-theme=dark] .warningBox {
     background: #fdf2ce !important; /* Here you can change warning box background color (!important is mandatory)*/
     color: #7f6416 !important; /* Here you can change warning box font color (!important is mandatory)*/
     border-left: 4px solid #7f6416 !important; /* Here you can change info box border color (!important is mandatory)*/
   }
   ```

   CSS

   Copy
3. Update the desired color for the callouts.

> NOTE
>
> color > Text color  
> background-color > Callout box color

4. Click **Save**.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_ScreenShot-Customisation.png)

<a id="how-to-center-align-the-heading-in-the-articles"></a>

## How to center align the heading in the articles?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, with the help of Custom CSS, you can center-align the headings in the articles.

> NOTE
>
> This action will change the alignment of all the headings (H2, H3, and H4) to center alignment.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
H2,H3,H4{
text-align:center;
}
```

CSS

Copy

3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-Center_align_heading_in_articles.png)

<a id="how-to-change-the-color-of-the-table-header"></a>

## How to change the color of the table header?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can change the table header color to improve the visibility of the header row. Follow the below steps to change the table header color across the knowledge base.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
table th{
background: #70db70; 
}

```

CSS

Copy

```
.editor360-table th {
  background-color: green!important; /*Change the color based on your requirement.*/
}
```

CSS

Copy

3. Update the color as per your requirement.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_screenshot-Changing_the_color_of_table_header.png)

### Outcome

#### Before

By default, the table header appears as below.

![2_Screenshot-Before_table header_color.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Before_table%20header_color.png)

---

#### After

After configuring a custom CSS, the table header color is changed to green (`#70db70`).

![3_Screenshot-After_table header_color.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-After_table%20header_color.png)

<a id="how-to-add-accordion-in-markdown"></a>

## How to add accordion in Markdown?

**Plans supporting customizing text in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

If you want your content to appear as an accordion in Markdown editor based articles, there is no option to add it using a conventional tool from the menu bar or a straightforward Markdown syntax.

Use the below workaround to add an accordion effortlessly in Markdown editor.

### Solution

1. Go to the desired article and open it in the Markdown editor.
2. Paste the below code in the desired location where you want the accordion to appear

```
<details>
    <summary>Accordion_name</summary>
    <p>Accordion_content</p>
    </details>
```

HTML

Copy

3. Replace the `Accordion_name` text with the desired accordion title/name
4. Replace the `Accordion_content` text with the desired content

If you want to add headings inside the accordian you can use the Heading HTML tags (`<h2>..</h2>, <h3>..</h3>, <h4>..</h4>`) in the `Accordion_content` sections

CAUTION

Heading tags can be used in the summary section of the accordian "`Accordion_name`", but the text alignment might be affected.

### Example

#### Code

```
<details>
    <summary><strong>What is Document360?</strong></summary>
    <p>A well-structured product to create a world-class knowledge base for your customers and employees. Content producers get the power, whereas content consumers get the simplicity.</p>
    <h4>Core parts</h4>
    <ul>
        <li>Knowledge base portal</li>
        <li>Knowledge base site</li>
        <li>Knowledge base widget</li>
        <li>API documentation</li>
    </ul>
</details>
```

HTML

Copy

### Outcome

**What is Document360**

A well-structured product to create a world class knowledge base for your customers and employees. Content producers get the power whereas the Content consumers get the simplicity.

#### Core parts

* Knowledge base portal
* Knowledge base site
* Knowledge base widget
* API documentation

---

## Advanced customizations for accordions

You can enhance the accordion by adding colors, dotted borders, and icons, and setting it to always open. Here’s how to apply these customizations:

### Adding header color to the accordion

To add header color to the accordion in the articles, follow the steps below:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
.details-wrapper details[open] summary {
    background-color: yellow !important;
    border-radius: 0.75rem 0.75rem 0rem 0rem !important;
}
.details-wrapper summary {
    background-color: yellow !important;
    border-radius: 0.75rem 0.75rem 0.75rem 0.75rem !important;
}
.details-wrapper details:not([open]) summary {
    background-color: yellow !important;
    border-radius: 0.75rem 0.75rem 0.75rem 0.75rem !important;
}
```

CSS

Copy

3. Click **Save**.

---

### Applying a border color and dotted lines

To apply a border color and dotted lines on hover:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
.details-arrow {
    left: 16px !important;
    top: 42% !important;
    transition: revert;
    transform: rotate(317deg);
}
.details-wrapper details {
    border: 1px dotted var(--e360-base-light-gray) !important;
    transition: border 0.3s ease;
}
.details-wrapper details: hover {
    border: 1px solid var(--e360-base-light-gray) !important;
}
.details-wrapper_rendered summary {
    left: 19px;
    position: relative;
}
.details-wrapper details[open]+.details-arrow {
    transform: rotate(45deg);
}
```

CSS

Copy

3. Customize the code above based on your needs.
4. Once done, click **Save**.

---

### Setting an accordion to always open

To keep an accordion always open, modify the `open` attribute directly in the HTML:

```
<details open>
    <summary>Always Open Accordion</summary>
    <p>Content remains visible without user interaction.</p>
</details>
```

XML

Copy

This ensures the content is visible by default.

---

### Adding a plus icon to the accordion header

To add a plus icon that rotates upon opening:

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

   ```
   .details-wrapper details summary::before {
       content: "+";
       display: inline-block;
       margin-right: 10px;
       transition: transform 0.3s ease;
   }
   .details-wrapper details[open] summary::before {
       content: "-";
       transform: rotate(45deg);
   }
   ```

   CSS

   Copy
3. Adjust icons or transitions as preferred.
4. Click **Save**.

---

### FAQs

#### **Can I style an accordion using only Markdown?**

Markdown by itself does not support advanced styling or interactivity like you would find with HTML and CSS. However, you can achieve a simple accordion effect using Markdown’s built-in features, particularly with platforms that support it, such as Document360.

#### **What are the limitations of using Markdown for accordions?**

* **Browser Support:** The `<details>` and `<summary>` elements work in most modern browsers but may not render correctly in all Markdown environments.
* **Styling:** You won’t be able to style the accordion (e.g., colors, borders) beyond the default browser styles.
* **Interactivity:** The interactivity is limited to collapsing and expanding the text without additional animations or design options.

#### **How can I create an accordion using Markdown?**

Using the `<details>` and `<summary>` tags within Markdown is the best way to create a basic accordion without additional CSS or JavaScript. For enhanced styling or features, you would need to resort to HTML and CSS or use a Markdown processor that allows for custom styles.

<a id="how-to-add-extra-space-in-markdown"></a>

## How to add extra space in Markdown?

**Plans supporting customizing text in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Markdown, you can add space between two lines by pressing Enter/Return key. However, this action would add only one empty line. If you want to add extra space between two lines, you can follow the below workaround steps.

### Solution

#### **1. Using HTML Tags**

For more precise control over spacing, you can use HTML tags directly within your Markdown document. For example, you can use the `<br>` tag to insert a line break and create space:

1. Go to the desired Markdown article in the editor.
2. Paste the below code in the location where you want extra space.

```
<br>

```

Plain text

Copy

NOTE

Markdown doesn't have a built-in way to add extra space. You can use the HTML tags provided in this article as a workaround within Markdown to achieve this effect.

3. If you want to add more space, you can add the same code multiple times as per your requirement.

**Input**

```
Line 1
<br>
<br>
Line 2

```

Plain text

Copy

**Outcome**  
Line 1  
  
  
  
  
Line 2

---

#### **2. Adding Non-Breaking Space**

If you want to add extra spaces within a line or between words, you can use the HTML non-breaking space character `&nbsp;`

**Input**

This sentence has extra `&nbsp;` `&nbsp;` `&nbsp;`spaces between some words.

**Outcome**

This sentence has extra         spaces between some words.

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

<a id="how-to-align-the-image-in-markdown"></a>

## How to align the image in Markdown?

**Plans supporting customizing text in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

By default, images are aligned to the left. You would want to change the alignment of certain images in your articles. You can easily perform this action in the WYSIWYG editor with the 'Align' options in the toolbar.  
However, there is no option to align the image in Markdown. However, it is possible using the quick workaround.

Follow the below workaround to keep the image in the desired alignment in Markdown.

## Solution

1. Go to the desired article in the Knowledge base portal.
2. Paste the below code in the desired location in the editor where you want the image to appear.

```
<p style="text-align: center"><img src="https://files.document360.io/filename/folder/subfolder/imagename.png"></p>

```

Plain text

Copy

3. The above code is for center alignment. If you want to keep the alignment as **left** or **right**, replace the term 'center' in the code with 'left' or 'right' as per your requirement.

> * **Right** → `"text-align: right"`
> * **Left** → `"text-align: left"`

4. Replace the URL '`https://files.document360.io/filename/folder/subfolder/imagename.png`' with your desired image URL.

#### Where can I find the URL of an image in Drive?

![1_Screenshot-Updated_align_the_image_in Markdown_drive_screenshot](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Updated_align_the_image_in%20Markdown_drive_screenshot.png)

1. Go to **Drive** and navigate to the folder in which the desired image is available.
2. Click the desired image (or) click ••• (next to the desired image name) > **View details**.
3. **File details** blade appears on the right, and you can find the image URL below the **Size** information.
4. Click the **Copy** icon, and the image URL would be copied.

### Outcome

#### Left alignment

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/doc360.jpg)

#### Center alignment

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/doc360.jpg)

#### Right alignment

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/doc360.jpg)

---

#### Can I add a button, logo, or a clipart and align it in Markdown?

Yes, as long as it is an allowed image file type, you can align it in the Markdown editor.

One of the three editors in Document360, WYSIWYG (What You See Is What You Get) is a content editing tool that shows the final output as writers create and format content.

<a id="how-to-add-a-background-image-for-a-text-content"></a>

## How to add a background image for a text content?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

To add more essence to your text content, you can add a background image. The background image you want to add must be available on the web. If the background image is on your local device, you can upload it to the Drive and utilize the image URL.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. In the Custom CSS tab, paste the below CSS snippet in the window.

```
.bgimg 
{ 
background-image: url("IMAGE_URL"); 
} 
```

CSS

Copy

3. In the above snippet:

   * **Class name** is `.bgimg`. You can replace it as per the requirement.
   * **IMAGE\_URL** - Add your desired background image URL.
4. Click **Save**.
5. Navigate to the desired article and add the following snippet in the editor:

```
<p class="bgimg">Text_content</p> 
```

Markdown

Copy

* **Text\_content** - Add the desired text content.
* **bgimg** - If you change the class name, replicate the same changes in this field.

> NOTE
>
> To add a background image for text in the WYSIWYG or Advanced WYSIWYG editor, simply use the above HTML code in the **Code view ()** of the editor. Replace *Text\_content* with your desired text and click on **Preview** to view the output.

6. The desired background image appears for the text content in your knowledge base.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Add%20background%20image%20to%20text%20GIF.gif)

<a id="how-to-change-the-color-of-the-table-of-contents"></a>

## How to change the color of the table of contents?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You would want to change the color of the table of contents to showcase it better. Follow the below steps to change the color of the table of contents.

### Solution

KB Site 1.0

KB Site 2.0

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below code snippet in the **Custom CSS** tab.

```
.content_block .content_container .page-action .article_action_links ul li a
{
color: red !important;
}
```

CSS

Copy

3. In the above snippet, you can replace the color red with any other color of your choice.
4. Click **Save**.

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below code snippet in the **Custom CSS** tab to change the color of the table of contents.

```
d360-table-of-content .toc-item .toc-toggle-icon,
d360-table-of-content .toc-item a {
    color: red !important;
}
```

CSS

Copy

3. Paste the below code snippet in the **Custom CSS** tab to change the color of the selected heading in the table of contents.

```
d360-table-of-content .toc-item.selected a {
    color: blue !important;
}
```

CSS

Copy

3. In the above snippets, you can replace the colors with any other color of your choice.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Change color of the ToC GIF.gif)

---

### Outcome

#### Before

The default color of the table of contents is greyand the content actively open will be highlighted in blue color.

![2_Screenshot_Before_color_of_table_of_Content.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Before_color_of_table_of_Content.png)

#### After

After updating the code snippet in **Custom CSS**, the color of the table of contents other than the actively open content will be changed to red.

![3_Screenshot_After_color_of_table_of_Content.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_After_color_of_table_of_Content.png)

<a id="how-to-sort-the-contents-of-a-table"></a>

## How to sort the contents of a table?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Sorting is a great option to have when you provide data artifacts in the table. Follow the below solution to have a sort option for all the tables in your knowledge base.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

```
table th {
    cursor: pointer;
}

table .th-sort-asc::after {
    content: "\25b4";
}

table .th-sort-desc::after {
    content: "\25be";
}

table .th-sort-asc::after,
table .th-sort-desc::after {
    margin-left: 5px;
}

table .th-sort-asc,
table .th-sort-desc {
    background: rgba(0, 0, 0, 0.1);
}
```

CSS

Copy

3. ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGif-Customization.gif)

   Click **Save**.
4. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
5. From the left navigation pane click **JavaScript**.
6. Paste the below code snippet:

```
$( "table" ).addClass("table-sortable");

/**
 * Sorts a HTML table.
 * 
 * @param {HTMLTableElement} table The table to sort
 * @param {number} column The index of the column to sort
 * @param {boolean} asc Determines if the sorting will be in ascending
 */
function sortTableByColumn(table, column, asc = true) {
    const dirModifier = asc ? 1 : -1;
    const tBody = table.tBodies[0];
    const rows = Array.from(tBody.querySelectorAll("tr"));

    // Sort each row
    const sortedRows = rows.sort((a, b) => {
        const aColText = a.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();
        const bColText = b.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();

        return aColText > bColText ? (1 * dirModifier) : (-1 * dirModifier);
    });

    // Remove all existing TRs from the table
    while (tBody.firstChild) {
        tBody.removeChild(tBody.firstChild);
    }

    // Re-add the newly sorted rows
    tBody.append(...sortedRows);

    // Remember how the column is currently sorted
    table.querySelectorAll("th").forEach(th => th.classList.remove("th-sort-asc", "th-sort-desc"));
    table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-asc", asc);
    table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-desc", !asc);
}

document.querySelectorAll(".table-sortable th").forEach(headerCell => {
    headerCell.addEventListener("click", () => {
        const tableElement = headerCell.parentElement.parentElement.parentElement;
        const headerIndex = Array.prototype.indexOf.call(headerCell.parentElement.children, headerCell);
        const currentIsAscending = headerCell.classList.contains("th-sort-asc");

        sortTableByColumn(tableElement, headerIndex, !currentIsAscending);
    });
});
```

JavaScript

Copy

6. Click **Save**.

> NOTE
>
> To sort the column of the table, the reader should click the column header, and the sorting is applied. The sort icon in the column header shows the sort type (ascending or descending).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_ScreenGif-Customization.gif)

### Outcome

![1_Screenshot-sort_the_contents_of_a_table.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-sort_the_contents_of_a_table.png)

<a id="how-to-customize-the-hyperlink"></a>

## How to customize the hyperlink size?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can customize the appearance of some hyperlinks to make them stand out. With the below solution, you can customize the font size of the hyperlink.

---

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

   ```
   .CustomLink
   {
   font-size:25px;
   }
   ```

   CSS

   Copy
3. Update the desired font size in the above snippet. The font size is mentioned as `25px` in the above snippet.
4. Click **Save**.
5. ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_ScreenShot-Customization.png)Navigate to the desired article and type in the below code in the desired instance.

   ```
   <a class="CustomLink" href="https://www.document360.com/">Document360</a>
   ```

   XML

   Copy

> NOTE
>
> Hyperlink - https://www.document360.com  
> Hyperlink text - Document360

6. Update the hyperlink and hyperlink text in the code.

<a id="how-to-make-all-links-open-in-new-tab"></a>

## How to make all links open in new tab?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you insert a hyperlink in the article, an option is available to open the hyperlink in a new tab. There is no option in the Knowledge base portal to open all hyperlinks in knowledge base articles in a new tab. Follow the workaround below to open all the hyperlinks in a new tab.

### Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **JavaScript** tab and paste the following JavaScript snippet:

KB site 1.0

KB site 2.0

```
jQuery(".content_block_text a").attr("target", "_blank");
```

JavaScript

Copy

```
jQuery(".block-article a").attr("target", "_blank");
```

JavaScript

Copy

3. Click **Save**.

> NOTE
>
> All hyperlinks in your article will open in a new tab now.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-Make_all_links_open_in_new_tab.png)

<a id="how-to-set-a-default-featured-image-in-knowledge-base"></a>

## How to set a default featured image in knowledge base?

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In Document360, you can add a specific [featured image](/docs/article-seo#how-to-add-a-featured-image) for each article. Sometimes you could have missed adding a featured image. However, if you share the article on social media (such as Facebook, Twitter, LinkedIn, etc.,) without a featured image, then it may pick a random image available in the article. These random images do not make a good thumbnail for your articles often.

If you set a default featured image, it will be shared as the thumbnail for any articles that do not have a featured image. The featured image you want to add must be available on the web. If it is available on your local device, you can upload it to the Drive and utilize the image URL. Follow the below steps to set a default featured image for the articles in your knowledge base project.

---

## Solution

1. Navigate to the Settings () > **Knowledge base site** > **Integrations** in the Knowledge base portal.
2. Go to **Custom HTML** and click **Add**.

   The **Add new integration** panel will appear.
3. Type in a description for the integration and ensure that **In the Header (above</head>)** is selected.
4. Paste the below snippet in the code editor:

```
<meta property="og:image" content="Image_URL" /> 
<meta property="og:image:secure_url" content="Image_URL" /> 
```

XML

Copy

5. In the above snippet, replace the text "Image\_URL" with the URL of your default featured image.

> Sample URL from the Document360 drive: https://cdn.document360.io/8\*\*\*\*\*dd1/Images/Documentation/default\_fi.png

6. Click **Add**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/New_Screenshot-Updated_How_to_det_a_default_feature_image_in_knowledge_base.png)

A centralized, cloud-based storage repository in Document360 for storing and managing all files.

<a id="how-to-add-shadows-to-an-image-in-markdown"></a>

## How to add shadows to an image in Markdown?

**Plans supporting customizing images in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Markdown doesn't have a built-in way to add shadows to images, but you can use HTML tags within Markdown to achieve this effect.

### Workaround

#### Sample code

```
<img src="image.jpg" alt="Alt text" style="box-shadow: 3px 3px 3px gray;">

```

HTML

Copy

> Replace the `image.jpg` with your image URL and add the alt text for your image in place of "your-image-description".

In this sample, we're using the `box-shadow` CSS property to add a shadow effect to the image. The `box-shadow` property takes three values: the horizontal offset, vertical offset, and blur radius of the shadow.

In the above sample code, we use a

* Horizontal and vertical offset of **3 pixels**
* Blur radius of **3 pixels**
* Color of the shadow set to **grey**

NOTE

You can also change the shadow color. Just replace "**grey**" with your desired color name.

> Grey has been used in the example because it is the most commonly used shadow color.

### Outcome

#### Without shadow

![1_Screenshot-without_shadow_Featured_image-Health_check_metrics.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-without_shadow_Featured_image-Health_check_metrics.png)

#### With shadow

![Alt text](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-with_shadow_Featured_image-Health_check_metrics.png)

<a id="how-to-add-borders-to-an-image-in-markdown"></a>

## How to add borders to an image in Markdown?

**Plans supporting customizing images in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Markdown doesn't have a built-in way to add borders to images, but you can use HTML tags within Markdown to achieve this effect.

### Workaround

#### Sample code

```
<img src= "image.jpg" alt="your-image-description" style="border: 2px solid grey;">

```

HTML

Copy

> Replace the `image.jpg` with your image URL and add the alt text for your image in place of "your-image-description".

You can adjust the border width, style, and color by modifying the style attribute as desired.

In the above sample code, we use the `style` attribute to add the following:

* Border width is **2-pixel**.
* Border style is **solid**.
* Color of the border is set to **grey**.

NOTE

You can change the shadow color of images. Just replace **grey** with your desired color name. For example, blue, green, yellow, and more.  
Grey has been used in the example because it is the most commonly used border color next to **black**.

### Outcome

#### Without border

![1_Screenshot-without_shadow_Featured_image-Health_check_metrics.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-without_shadow_Featured_image-Health_check_metrics%281%29.png)

#### With border

![your-image-description](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-with_shadow_Featured_image-Health_check_metrics%281%29.png)

NOTE

You can also add a shadow to the image using HTML code snippets. Check this article for more information: [How to add shadows to an image in Markdown?](/help/docs/how-to-add-shadows-to-an-image-in-markdown)

<a id="embed-youtube-shorts"></a>

## How to embed YouTube Shorts?

**Plans supporting customizing videos in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Using the quick workaround using the iframe (Inline frame) HTML tag, you can embed any YouTube Shorts in your page or article.

NOTE

Paste the following code in your editor and replace the field mentioned below.

* **Video URL**
* **Optimal size** for a Shorts video is **315px x 560px**, but you can change the frame size based on your need. Ensure the aspect ratio is maintained.
* **Frame border** in pixels (px)

### iFrame code

```
<iframe width="315" height="560"
src="https://www.youtube.com/embed/<Shorts_video_code>"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen></iframe>


```

HTML

Copy

### Steps to follow

1. Go to [YouTube](https://www.youtube.com/) and click on the desired Shorts video.
2. Copy the video link found in the address bar of your web browser.  
   (or)  
   Click **Share** > **Copy**.
3. Paste the copied video link in the iFrame code mentioned above.
4. Replace the `/shorts/` with `/embed/` in the video URL.

NOTE

At present, YouTube doesn't offer a direct embedding option for Shorts. To embed a Short, simply **replace "shorts" with "embed" in the video URL** after pasting it.  
![ScreenGIF-Replacing_shorts_with_embed](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/ScreenGIF-Replacing_shorts_with_embed.gif)

5. The Shorts video is now embedded in your page or article.

### Code view

```
<iframe width="315" height="560" 
src="https://www.youtube.com/embed/QPOLrbKI5oQ" 
title="YouTube video player" frameborder="0" 
allow="accelerometer; autoplay; clipboard-write; encrypted-media;
gyroscope; picture-in-picture;
web-share"
allowfullscreen></iframe>

```

Plain text

Copy

### Output

<a id="how-to-embed-loom-video"></a>

## How to embed a Loom video?

**Plans supporting customizing videos in the markdown editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You can embed any Loom video in your page or article using the following quick workaround.

### Loom video embedding

1. Go to **Loom** and access your desired video.
2. Click **Share** > **Embed**.
3. Select the **Fixed size** checkbox and choose the desired video size.
4. Click **Copy** embed code, and the video's embed code is copied.
5. Navigate to the Document360 editor.
6. **Paste** the copied embed code.

NOTE

This step can vary with the editors.

* **Markdown editor**: Paste the code in the editor.
* **WYSIWYG editor**: Click **Insert video** > **Embedded code**. Paste the code and click Insert.
* **Advanced WYSIWYG editor**: Click **Insert** > **Video** > **Embed code**. Paste the code and click **Add embed**.

7. The Loom video is now embedded in your article.

### Sample video embed code

```
<iframe width="640" height="339" src="https://www.loom.com/embed/518d972833434cd5af03c13623338fd3" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

```

HTML

Copy

<a id="how-to-embed-an-excel-file"></a>

## How to embed an Excel file?

**Plans supporting embedding Excel file in the editor**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In today’s digital age, visual aids like charts and tables are crucial for conveying complex data effectively. Document360 helps you to embedding Excel files directly into your articles which can enhance clarity and provide readers with interactive data.

Through the process of embedding Excel spreadsheets into your Document360 articles, your documentation becomes more engaging and informative.

---

## Embedding an Excel file

In **Excel,**

1. Open the desired Excel file.
2. Navigate to **File** > **Share** > **Embed**.

   The Embed page appears.
3. Scroll down to **Embed code** and copy the generated HTML code.

![1_ScreenGIF_Copying_the_embed_code](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF_Copying_the_embed_code.gif)

In the **Document360 Knowledge base portal**,

1. Go to the desired article.

   a. If using Markdown: You can paste the copied embed code directly into the editor.

   b. If using Advanced WYSIWYG editor: Switch to **Code view** and paste the copied embed code in the desired editor.
2. The Excel file is now embedded in your article.

---

### Sample code

```
 <iframe width="402" height="346" frameborder="0" scrolling="no" src="https://kovailtd-my.sharepoint.com/personal/manoharan_soundarraj_kovai_co/_layouts/15/Doc.aspx?sourcedoc={39f3b8e9-01f6-4c7c-a3d0-f257a8d43dd7}&action=embedview&wdAllowInteractivity=False&wdHideGridlines=True&wdHideHeaders=True&wdDownloadButton=True&wdInConfigurator=True&wdInConfigurator=True"></iframe>
```

Embedcode

Copy

### Outcome

**Markdown**

![embedding the excel file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Embedding_coed_in_markdown.png)

**Advanced WYSIWYG editor**

![embedding the excel file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGID-Embedding_code_in_Advanced_WYSIWYG.gif)

A lightweight text-to-HTML conversion tool used to format content such as lists, headers, images, videos, and links. Document360 includes a powerful markdown editor as one of its two basic editors.

A powerful Document360 editor with rich text editing and Markdown support, offering a visual, flexible experience compared to the Markdown and basic WYSIWYG editors.

<a id="how-to-change-the-color-of-feedback-buttons"></a>

## How to change the color of Feedback buttons?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

The color of the feedback buttons at the article bottom remains grey when you do not hover them. You wish to change and customize the feedback buttons' default color. Perform the following steps to configure the default color of the feedback buttons.

---

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
.article-vote-container .actions .btn.yes i {
    background-color: #5ebf83;
    color: white;
}
.article-vote-container .actions .btn.no i {
    background-color: #e67367;
    color: white;
}
.article-vote-container .actions .btn.yes {
    color: #5ebf83;
}
.article-vote-container .actions .btn.no {
    color: #e67367;
}
```

CSS

Copy

> NOTE
>
> * **.btn.yes i** - Background color of the "Yes" (Thumbs up) button.
> * **.btn.yes i** - Color for the word "Yes".
> * **.btn.no i** background color - Background color of the "No" (Thumbs down) button.
> * **.btn.no** - Color for the word "No".
> * **color** - Border color of the button.

```
.article-feedback-action{
  button[aria-label="Yes"]{
    background-color: #5ebf83;
    color: white;
  }
  button[aria-label="No"]{
    background-color: #e67367;
    color: white;
  }
}
```

CSS

Copy

3. Update the color codes as per your requirements.

4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-CHanging_the_color_of_feedback_buttons.png)

---

### Outcome

#### Before

The color of the feedback buttons appears grey when you aren't hovering over them.

![Overview of Document360 with applied CSS code for the like and dislike buttons in the knowledge base site.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Color_of_feedback_button_before_applying_CSS.png)

---

#### After

After applying the provided CSS code, the feedback buttons will display in the specified color.

![Overview of Document360 with related articles and helpful resources displayed on the page.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Color_of_feedback_button_after_applying_CSS.png)

<a id="how-to-hide-footer-in-mobile-view"></a>

## How to hide footer in mobile view?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you have a detailed footer, it appears better only on large screens. In this case, the footer would not feel appealing on smaller screens. So, you would want to remove the knowledge base footer in the mobile view for a better reader experience.

> NOTE
>
> This is applicable only for **custom footer**. For more information, read the article on [Custom footer](/help/docs/custom-footer).

---

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
@media screen and (max-width: 469px) {.custom-footer {display: none;}}
```

CSS

Copy

```
@media only screen and (max-width: 767px) {
    site-footer-section {
        display: none;
    }
}
```

CSS

Copy

3. Click **Save** on the top right.

   ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1727778020937.png)

### Outcome

![Image showing before and after images of knowledge base site of hiding footer.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-Customization_hidden_footer.png)

<a id="how-to-change-the-hover-color-of-the-header-options"></a>

## How to change the hover color of the header options?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You may want to customize the hover color for the header options at the top of the article to suit your preferences. Follow the below steps to customize your header options while hovering them.

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
header .header_top .header_top_nav ul li a:hover {
color: red !important;
text-decoration: none;
}
```

CSS

Copy

```
a[role="menuitem"]:hover {
    color: red !important;
    text-decoration: none;
}
```

CSS

Copy

3. Update the hover color as per your requirement.
4. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/new_screenshot-Changing_the_hover_color_of_the_article_header_options.png)

### Outcome

#### Before

When you hover over the header menu options, there is no color change.

![Overview of Document360 Knowledge base site's header menu.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Header_Color_before_hovering.png)

---

#### After

When you hover over the header menu options, the color changes to red. This will enhance the user experience.

![Overview of Document360 Knowledge base site's header menu.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Header_Color_while_hovering.png)

<a id="how-to-move-the-related-articles-above-the-feedback-section"></a>

## How to move the related articles above the feedback section?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

When you configured the related articles section to appear at the article bottom, it appears below the feedback section by default. You would want to move the related articles above the feedback section to enhance the user experience. Follow the below steps to move the related articles above the feedback section.

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **JavaScript** tab and paste the following JavaScript snippet:

```
window.onload = function () {
$(".content_block_text" ).append("<div class=\"sperator\"><hr></div>");
$('.related-articles-container').appendTo('.content_block_text') ;
}
```

JavaScript

Copy

3. Click **Save**.

> NOTE
>
> The above JavaScript code is only applicable for KB site 1.0.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-moving_related_articles_above_feedback_section_.png)

### Outcome

![1_Screenshot-Related_articles_location_change](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Related_articles_location_change.png)

<a id="how-to-hide-the-change-password-option-for-readers"></a>

## How to hide the change password option for readers?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

In some cases, you would want to restrict the readers from changing the password. Utilize the below workaround in such scenarios.

---

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. Paste the below code snippet in the **CSS** tab.

KB Site 1.0

KB Site 2.0

```
header .header_top .user-dropdown-content .user-detail .portal-link a, header .header_top .user-dropdown-content .user-detail .portal-link .changePassword{ 
   display:none; 
 } 
```

CSS

Copy

```
.nav-bar-profile button.dropdown-item:nth-of-type(2) {
    display: none !important;
}
```

CSS

Copy

3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Change password option for readers GIF.gif)

NOTE

This change applies to all the readers.

---

### Outcome

#### Before

The change password option was available for the readers.  
![13_Screenshot-Before_change_password](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-Before_change_password.png)

#### After

The change password option has been removed for the readers.  
![12_Screenshot-After_change_password](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-After_change_password.png)

<a id="how-to-hide-the-category-manager"></a>

## How to hide the category manager?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You would want your readers to access only specific articles in some projects. By implementing the below solution, the readers can access the article only when they have the exact URL. The category manager will be hidden.

NOTE

This is a project-specific implementation. All the workspaces will be impacted.

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. In the CSS tab, paste the below code snippet:

**For KB Site 1.0,**

```
.left_sidebar{
  display:none !important;
}
.left-sidebar-toggle{
   display:none !important;
}
```

CSS

Copy

**For KB Site 2.0,**

```
site-docs-left-panel-container{
  display:none !important;
}
```

CSS

Copy

3. Click **Save**.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Hide%20category%20manager%20-%20Custom%20CSS%20GIF.gif)

---

### Outcome

#### Before

The category manager was available to the readers.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Hide%20category%20manager%20-%20Before.png)

#### After

The category manager is hidden with the help of the above snippet.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Hide%20category%20manager%20-%20After.png)

<a id="how-to-configure-a-custom-font-in-the-knowledge-base"></a>

## How to configure a custom font in the knowledge base?

**Plans supporting the integration of third party tools in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Document360 provides a list of standard fonts used in documentation. However, you can configure your desired font in the knowledge base. Get the font details and add the font link to the header section in Custom HTML. Then, add the font family details in the Custom CSS.

As a use case, check out the below solution to configure a Google font in Document360.

---

## Solution

The below three steps are involved in configuring the desired Google font in Document360:  
 Step 1: [Get the Google font code details](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base#get-the-google-font-code-details)  
 Step 2: [Append the code in custom HTML](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base#append-the-code-in-custom-html)  
 Step 3: [Append the code in custom CSS](/help/docs/how-to-configure-a-custom-font-in-the-knowledge-base#append-the-code-in-custom-css)

> NOTE
>
> You can also configure custom fonts other than the Google Fonts by utilizing the appropriate HTML and CSS code.

### Get the Google font code details

1. Go to [Google fonts](https://fonts.google.com/) webpage.

![3_ScreenGIF-Google_font_custom_header_font](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_ScreenGIF-Google_font_custom_header_font.gif)

2. Select the desired font, and the font page appears with the available styles.
3. At the top right corner, click **Get font** and select **Get embed code**.
4. In the **Web** section, you'll find the embed code specific to your chosen font.
5. **Copy** the code and head back to Document360.

### Append the code in custom HTML

![2_Screenshot-Append_the_code_in_custom_HTML](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Append_the_code_in_custom_HTML.png)

6. In the Document360 portal, go to **Settings** > **Knowledge base site** > **Integrations**.
7. Navigate to **Custom HTML** and click **Add**.
8. Select the `Header (above </head>)` option which will be the default selection.
9. Paste the link in the **Header** section copied in step 5.
10. Once done, click **Add**.

### Append the code in custom CSS

![4_Screenshot-Body_Append_the_code_in_custom_CSSUpdated](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Body_Append_the_code_in_custom_CSS%28Updated%29.gif)

11. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
12. From the left navigation pane, click on the **CSS** tab.
13. Click **Add code snippets** on the top right of the code space.
14. Select the **Change body text font** option, and the below code appears.

```
body, article {
  font-family: "Source Sans Pro", sans-serif;    /*Replace your body font family*/ 
  color: #222222;    /*Font color*/ 
}
```

CSS

Copy

14. In addition to the **body** selector, include the **article** selector in the provided code snippet.
15. Replace the `font-family: "Source Sans Pro", sans-serif;` with the font details copied in step 5. *(CSS rules to specify families)*.
16. Add the desired font color.
17. Click **Save** on the top right.

    ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_ScreenShot-Customization.png)

---

### Outcome

![7_Screenshot-Custom_font_outcome](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Custom_font_outcome.png)

<a id="how-to-hide-the-left-navigation-bar-in-knowledge-base-site"></a>

## How to hide the left navigation bar in the knowledge base site?

**Plans supporting the use of custom CSS and JS in knowledge base site**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

You wish to hide the left navigation bar or category manager by default in the Knowledge base site. You can hide this to enhance the readers' experience.  However, readers can enable it by clicking the **Show category** icon adjacent to the article title.

---

## Solution

1. Navigate to **Settings** () > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript** in the Knowledge base portal.
2. From the left navigation pane, click on the **CSS** tab and paste the following CSS snippet:

KB site 1.0

KB site 2.0

```
.left_sidebar {
 display : none;
} 
```

CSS

Copy

```
site-docs-left-panel-container{
display: none !important;
}
```

CSS

Copy

3. Click **Save** on the top right.

1. ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_ScreenShot-Customization.png)

---

### Outcome

#### Before

The left navigation bar or category manager is shown by default.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_ScreenShot-Customization.png)

#### After

The left navigation bar or category manager is hidden by default.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_ScreenShot-Customization.png)

The public-facing website where end-users can access articles and find answers to their questions.

<a id="plans-and-pricing"></a>

## Plans and pricing

## Plans available in Document360

Document360 offers five unique subscription plans for you to choose from.

* **Professional**
* **Business**
* **Enterprise**
* **Enterprise +**
* **Startup program**

Expand each section to view the features supported by the **Professional**, **Business** and **Enterprise** plans.

#### Knowledge base management

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Editors (Markdown, Advanced WYSIWYG)** | ✔️ | ✔️ | ✔️ |
| **Articles revision history** | ✔️ | ✔️ | ✔️ |
| **Category management** | ✔️ | ✔️ | ✔️ |
| **Workspace** | 1 | 1 | 2 |
| **Sandbox** | ❌ | ❌ | ✔️ |
| **Languages** | 2 | 3 | 5 |
| **Translation credits** | 1 million characters | 2 million characters | 5 million characters |
| **Reusable content snippet** | ✔️ | ✔️ | ✔️ |
| **Glossary management** | ✔️ | ✔️ | ✔️ |
| **Global find and replace** | ✔️ | ✔️ | ✔️ |
| **Tag management** | ✔️ | ✔️ | ✔️ |
| **Public API access** | ❌ | ✔️ | ✔️ |
| **Team accounts** | 5 | 10 | 20 |
| **Reader accounts** | 1000 | 10000 | 10000 |

#### Article management tools

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Article template** | ✔️ | ✔️ | ✔️ |
| **Article bulk actions** | ✔️ | ✔️ | ✔️ |
| **Media dependency viewer** | ✔️ | ✔️ | ✔️ |
| **Review reminders** | ✔️ | ✔️ | ✔️ |
| **Export to PDF** | ✔️ | ✔️ | ✔️ |
| **Import articles** | ✔️ | ✔️ | ✔️ |
| **Feedback manager** | ✔️ | ✔️ | ✔️ |
| **Approval and publishing workflow** | ❌ | ✔️ | ✔️ |

#### AI suite

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **AI writer suite** | ✔️ | ✔️ | ✔️ |
| **AI search suite** | ❌ | ✔️ | ✔️ |
| **AI premium suite** | ❌ | ❌ | ✔️ |

#### Infrastructure and compliance

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **SSL** | ✔️ | ✔️ | ✔️ |
| **SOC 2 compliance** | ✔️ | ✔️ | ✔️ |
| **Alter notifications** | ✔️ | ✔️ | ✔️ |
| **Datacenter location** | ✔️ | ✔️ | ✔️ |
| **Backup & Restore** | ❌ | ✔️ | ✔️ |
| **Custom email domain** | ❌ | ❌ | ✔️ |
| **Audit logging** | ❌ | ❌ | ✔️ |

#### Self-service knowledge center

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Customize site** | ✔️ | ✔️ | ✔️ |
| **Related articles** | ✔️ | ✔️ | ✔️ |
| **Error pages & Login page** | ✔️ | ✔️ | ✔️ |
| **Article status indicator** | ✔️ | ✔️ | ✔️ |
| **Custom domain** | ✔️ | ✔️ | ✔️ |
| **Custom CSS & JavaScript** | ✔️ | ✔️ | ✔️ |
| **Smart bars** | ✔️ | ✔️ | ✔️ |

#### Reduce customer support

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Knowledge base widget** | ❌ | ✔️ | ✔️ |
| **URL mapping** | ❌ | ✔️ | ✔️ |
| **Ticket deflector** | ❌ | ✔️ | ✔️ |

#### Search

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Advanced search** | ✔️ | ✔️ | ✔️ |
| **Search within attachments** | ❌ | ❌ | ✔️ |

#### Analytics

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Articles & Categories performance metrics** | ✔️ | ✔️ | ✔️ |
| **Country specific visibility** | ✔️ | ✔️ | ✔️ |
| **Search analytics** | ✔️ | ✔️ | ✔️ |
| **User analytics** | ✔️ | ✔️ | ✔️ |
| **Reader analytics** | ✔️ | ✔️ | ✔️ |
| **Feedback analytics** | ✔️ | ✔️ | ✔️ |
| **Eddy analytics** | ❌ | ✔️ | ✔️ |
| **Page not found analytics** | ❌ | ✔️ | ✔️ |
| **Hyperlinks health analytics** | ❌ | ✔️ | ✔️ |

#### Security

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Security groups and roles** | ✔️ | ✔️ | ✔️ |
| **IP restriction** | ❌ | ❌ | ✔️ |
| **Single sign-on (SAML, JWT, OpenID)** | ❌ | ❌ | ✔️ |

#### SEO

| Features | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Meta title and description** | ✔️ | ✔️ | ✔️ |
| **Article redirect rules** | ✔️ | ✔️ | ✔️ |
| **Robots.txt** | ✔️ | ✔️ | ✔️ |
| **Automatic sitemap generation** | ✔️ | ✔️ | ✔️ |

#### Storage

| Feature | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Drive Storage** | 50GB | 100GB | 500GB |

#### Onboarding and Support

| Feature | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Onboarding** | ✔️ | ✔️ | ✔️ |
| **Dedicated CSM** | ❌ | ✔️ | ✔️ |
| **Training & Best Practices** | **add-on** | **add-on** | ✔️ |
| **Support** | 24/5 Support | 24/5 Support | 24/5 Priority support |

#### Extensions

| Feature | **Professional** | **Business** | **Enterprise** |
| --- | --- | --- | --- |
| **Zendesk** | ❌ | ✔️ | ✔️ |
| **Freshdesk** | ❌ | ✔️ | ✔️ |
| **Freshservice** | ❌ | ✔️ | ✔️ |
| **Intercom** | ❌ | ✔️ | ✔️ |
| **Slack** | ❌ | ✔️ | ✔️ |
| **Microsoft teams** | ❌ | ✔️ | ✔️ |
| **Drift** | ❌ | ✔️ | ✔️ |
| **Zapier** | ❌ | ✔️ | ✔️ |
| **Make** | ❌ | ✔️ | ✔️ |
| **GitHub** | ❌ | ✔️ | ✔️ |
| **Crowdin** | ❌ | **add-on** | ✔️ |
| **Phrase** | ❌ | **add-on** | ✔️ |
| **Salesforce** | ❌ | ❌ | **add-on** |

> NOTE
>
> You can purchase additional projects, workspaces, languages, translation credits (1 million characters), storage, team accounts, and readers in any Document360 plan.

### Enterprise+

The **Enterprise +** plan offers dedicated servers for improved performance, enhanced security, and faster load times. It is designed to support scalable operations with high reliability and provides customization options to meet the requirements of larger teams and organizations.

### Startup program

As part of the **Startup program**, you will receive six months of free access to Document360's Business or Enterprise plan. This includes a personalized public site, mentorship, and access to essential resources. After the six-month period, you will be charged 50% of the original plan price for the next six months, based on your selected plan.

---

## Accessing Billing overview page

From the Knowledge base portal, navigate to **Settings** ()> **Knowledge base portal** > **Billing**.

In the Billing section, you can access the following tabs,

* **My plan**: View details of your current plan. You can change your plan by clicking **Change plan** or purchase add-ons by selecting **Purchase add-on**. Use the context menu () to cancel your subscription if needed.
* **Payment information**: Update your credit card and billing address details.
* **Invoice history**: Access your previous invoices, add or remove invoice recipients, and download invoices.

![Billing page - My plan tab](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Billing_page_overview.png)

### How do I change my plan?

> NOTE
>
> Only users with the **Owner** portal role or team accounts assigned **View and Update** permissions for **Billing & invoice** can access and make changes to the plan.

1. From the Knowledge base portal, navigate to **Settings** ()> **Knowledge base portal** > **Billing**, where the **My plan** tab is selected by default.
2. Click **Change plan** to upgrade or downgrade your subscription.

   The available plans in Document360 are:

   * **Professional**
   * **Business**
   * **Enterprise**
3. Select a subscription plan that suits your company's needs and click the **Let’s talk** button. The Document360 support team will contact you to assist with updating your plan.

To read more about changing plans, see [Upgrading your subscription plan](/v3/docs/changing-plans) (or) [Downgrading your subscription plan](/v3/docs/downgrade-your-subscription-plan).

> NOTE
>
> * As of **September 2024**, we have revised our pricing structure. If you are on a legacy pricing plan—meaning you subscribed before this date—you will not be able to change your plan directly through the portal. Upgrading requires assistance from our support team. Please contact the [Document360 support](https://document360.com/support/) to switch to the new pricing plan.
> * As of **November 2024**, support for the Free plan has been discontinued. Existing users on the Free plan will retain access; however, new users can only sign up for the **Professional**, **Business**, or **Enterprise** plans.

---

### FAQs

#### **What happens after my Document360 trial expires?**

Once your Document360 trial expires, you can upgrade to a desired plan. If you do not upgrade your plan, your Document360 project will be put on hold and marked for deletion.

#### **What are the pricing details for each plan in different currencies?**

Depending on where you're located, your subscription pricing may vary. Below is a simple breakdown of how the pricing works in different currencies for each plan. For more information, see <https://document360.com/pricing/>.

---

IMPORTANT

The screenshots used in this article are for illustration purposes, and the pricing figures are recorded as of September 2024. Please check the Document360 [**Pricing page**](https://document360.com/pricing/) for the latest information.

<a id="upgrading-your-plan"></a>

## Upgrading your subscription plan

As your documentation needs grow, upgrading your Document360 plan can provide you with more tools and capabilities to enhance your knowledge base. This article will help you understand the benefits of each upgrade path, allowing you to choose the best plan for your needs.

> NOTE
>
> Only users with the **Owner** portal role or team accounts assigned **View and Update** permissions for **Billing & invoice** can access and make changes to the plan.

You can upgrade your plan from

* [Professional to Business](/help/docs/upgrading-your-plan#professional-to-business)
* [Business to Enterprise](/help/docs/upgrading-your-plan#business-to-enterprise)
* [Professional to Enterprise](/help/docs/upgrading-your-plan#professional-to-enterprise)
* [Legacy plan](/help/docs/upgrading-your-plan#upgrading-for-users-on-legacy-pricing-plans)
* [Legacy free plan](/help/docs/upgrading-your-plan#upgrading-for-users-on-legacy-free-plan)

> NOTE
>
> When you upgrade your subscription, a prorated cost for the remainder of your current billing cycle will be charged. For legacy plans, any applicable prorated cost of the current plan will be added as credits. Upon renewal, your invoice will reflect the new subscription price.

---

## Pricing page

To upgrade your subscription plan,

1. From the Knowledge base portal, navigate to **Settings () > Knowledge base portal > Billing**, where the **My plan** tab is selected by default.
2. Click **Change plan** to view the various plans available in Document360.

   The available plans in Document360 are:

   * **Professional**
   * **Business**
   * **Enterprise**

> NOTE
>
> When you upgrade from the trial version, you will be taken to Pricing page after clicking on Billing. To upgrade from trial version, see [upgrading from trial version](/help/docs/upgrading-from-trial-version).

3. Scroll down to the **Compare plans and features** section to view a detailed comparison of all plans and features.
4. Once you’ve selected your preferred plan, click the **Let’s talk** button.

![Upgrade-downgrade-Pricing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Change_plan_screen.png)

The Document360 sales team will contact you to assist with upgrading your plan.

---

## Plan comparison

The comparison of features and extra benefits you receive while upgrading your plan are detailed in this section.

### Professional to Business

The Business plan offers more advanced features to improve your workflow, get deeper insights, and enhance the user experience.

#### Enhanced storage and team collaboration

| **Feature** | **Professional** | **Business** | **Benefits of Business Plan** |
| --- | --- | --- | --- |
| **Storage** | 50 GB | 100 GB | Double your storage capacity, allowing for more extensive documentation. |
| **Team Access** | 5 team accounts, 1,000 readers, 5 reviewers | 10 team accounts, 10,000 readers, 10 reviewers | Gain expanded team access, supporting larger collaboration efforts. |

#### Advanced workflow and content management

| **Feature** | **Professional** | **Business** | **Benefits of Business Plan** |
| --- | --- | --- | --- |
| **Workflow Designer** |  |  | Use custom workflows to manage documentation from creation to publishing. |
| **Ticket Deflector** |  |  | Improve customer support by directing users to relevant documentation. |
| **Backup & Restore** |  |  | Gain easy data backup and recovery options to keep your content safe. |

#### Deeper insights and integration

| **Feature** | **Professional** | **Business** | **Benefits of Business Plan** |
| --- | --- | --- | --- |
| **Advanced Analytics** | Basic analytics | Advanced analytics | Unlock deeper insights into content usage and performance with advanced analytics. |
| **Public API** |  |  | Leverage easier integration of Document360 with other tools via public API. |

#### Enhanced AI and search capabilities

| **Feature** | **Professional** | **Business** | **Benefits of Business Plan** |
| --- | --- | --- | --- |
| **AI Credits** |  | 2000 Eddy AI Search credits | Enhanced content discovery with more AI search credits for better accuracy. |

#### Premium features

| **Feature** | **Professional** | **Business** | **Benefits of Business Plan** |
| --- | --- | --- | --- |
| **Custom Branding** |  |  | Personalize your knowledge base to align with your brand's guidelines and identity. |
| **Premium Support** |  |  | Receive faster and more dedicated support from the Document360 team when needed. |
| **Security & Audit logs** |  |  | Ensure the safety of your data with regular security checks and audits. |
| **Custom Email Domain** |  |  | Use your own email domain for all communications, enhancing professionalism and trust. |

### Business to Enterprise

The Enterprise plan is for large organizations with complex documentation needs. It offers the most comprehensive tools and support.

#### Maximum storage and team access

| **Feature** | **Business** | **Enterprise** | **Benefits of Enterprise Plan** |
| --- | --- | --- | --- |
| **Maximum Storage** | 100 GB | 500 GB | Increased storage for extensive documentation and media. |
| **Team Collaboration** | 10 team accounts, 10,000 readers, 10 reviewers | 20 team accounts, 10,000 readers, 20 reviewers | Enhanced collaboration capabilities for larger teams. |

#### Exclusive advanced features

| **Feature** | **Business** | **Enterprise** | **Benefits of Enterprise Plan** |
| --- | --- | --- | --- |
| **Sandbox Environment** |  |  | Test new ideas in a secure environment without impacting your live knowledge base. |
| **IP Restrictions** |  |  | Control access to your knowledge base based on user location for enhanced security. |
| **Regular Health Checks** |  |  | Routine performance checks to ensure your system operates smoothly. |

#### Comprehensive AI tools

| **Feature** | **Business** | **Enterprise** | **Benefits of Enterprise Plan** |
| --- | --- | --- | --- |
| **AI Capabilities** | Limited | Full suite | Access all Eddy AI features, including premium support for AI Writer and Search. |
| **AI Credits** | 2000 Eddy AI Search credits per month | 5000 Eddy AI Search credits credits per month | Enhanced content discovery with more AI search credits for better accuracy. |

Each upgrade gives you more tools to manage your documentation as your needs grow. For a comprehensive list of features available, check out the [Document360 pricing page](https://document360.com/pricing/). If you're not sure which plan is right for you, our support team is always here to help. You can contact us via email, live chat, or phone for prompt assistance.

### Professional to Enterprise

You will receive all the features available in the [Business](/help/docs/upgrading-your-plan#professional-to-business) as well as the [Enterprise](/help/docs/upgrading-your-plan#business-to-enterprise) plans when you upgrade from Professional to Enterprise plan.

---

## Upgrading for users on legacy pricing plans

As of 31st August 2024, we have revised our pricing structure. If you are on a legacy pricing plan—meaning you subscribed before this date—you will not be able to change your plan directly through the portal. Upgrading requires assistance from our support team.

Here’s how you can proceed:

1. Navigate to the **Billing** page.
2. Select **Change plan**.
3. On the **Change plan** page, click the **Let’s talk** button next to the required plan.
4. Click **Raise Request** on the confirmatory pop-up.

   This will trigger an email request to our support team. They will review your request and guide you through the upgrade process within two working days. They will also handle the transition to the new plan, ensuring a smooth experience.

> NOTE
>
> If you need further assistance or have specific questions about your legacy plan, you can always reach out to our support team via email, live chat, or phone.

## Upgrading for users on legacy free plan

As of November 2024, the Free plan for Document360 has been discontinued. If you were on the Free plan prior to November 2024, you will continue to have access to the Free plan. If you wish to upgrade to one of Document360’s higher tier plans, follow the below steps:

1. From the Knowledge base portal, navigate to **Settings () > Knowledge base portal > Billing**, where the **My plan** tab is selected by default.
2. Click **Change plan** to view the various plans available in Document360.
3. Scroll down to the **Compare plans and features** section to view a detailed comparison of all plans and features.
4. Once you’ve selected your preferred plan, click the **Let’s talk** button.

The Document360 sales team will contact you to assist with upgrading your plan.

---

## FAQs

**What benefits do I get when upgrading to a higher plan?**

Upgrading to a higher plan provides access to additional features, increased storage, enhanced support, and other premium benefits. You can view the full list of features available in each plan on our [pricing page](https://document360.com/pricing/).

**How will my billing change if I upgrade my plan?**

When you upgrade, your billing will adjust to reflect the new plan’s pricing. You’ll be charged either immediately or at the end of your current billing cycle, depending on your billing preferences and company policy.

**Can I try out the higher plan before committing to an upgrade?**

Yes, we offer a trial period for all plans. This allows you to experience the features of the new plan before making a long-term commitment. Check our website or contact support for more details on trial availability.

**What happens to my current data and settings when I upgrade?**

Your current data and settings will be preserved during the upgrade. You will retain access to all existing projects and configurations, and any new features of the upgraded plan will be seamlessly integrated.

**Are there any setup steps required after upgrading?**

Generally, no additional setup is required after upgrading. However, some advanced features may need configuration. We provide guidance and support to help you set up and utilize the new features effectively.

**Will I receive a prorated credit for my current plan if I upgrade mid-cycle?**

Yes, you will receive a prorated credit for the unused portion of your current plan. This credit will be applied to your new plan’s billing, reducing the amount you need to pay.

**Can I upgrade to a higher plan at any time during my billing cycle?**

Yes, you can upgrade to a higher plan at any time during your billing cycle. Your new plan’s features will be available immediately, and the billing adjustment will be made according to your current billing cycle.

**What if I decide to downgrade after upgrading?**

If you decide to downgrade after upgrading, you can do so through your account settings. Keep in mind that downgrading may result in losing access to certain features, and you may be subject to different billing terms. For more information, read the extensive article on downgrade your plan.

<a id="downgrading-your-plan"></a>

## Downgrading your subscription plan

Choosing a lower-tier plan may mean that some key features will no longer be included. This guide will help you understand what happens when you downgrade your Document360 plan. You can downgrade your existing plan or subscription at any point.

> NOTE
>
> Only users with the **Owner** portal role or team accounts assigned **View and Update** permissions for **Billing & invoice** can access and make changes to the plan.

You can downgrade from

* [Enterprise to Business](/help/docs/downgrading-your-plan#enterprise-to-business)
* [Business to Professional](/help/docs/downgrading-your-plan#business-to-professional)
* [Enterprise to Professional](/help/docs/downgrading-your-plan#enterprise-to-professional)

## Pricing page

To downgrade from your current plan,

1. From the Knowledge base portal, navigate to **Settings () > Knowledge base portal > Billing**, where the **My plan** tab is selected by default.
2. Click **Change plan** to view the various plans available in Document360.

   The available plans in Document360 are:

   * **Professional**
   * **Business**
   * **Enterprise**
3. Scroll down to the **Compare plans and features** section to view a detailed comparison of all plans and features.
4. Once you’ve selected your preferred plan, click the **Let’s talk** button.

![Upgrade-downgrade-Pricing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Change_plan_screen.png)

The Document360 sales team will contact you to assist with downgrading your plan.

> NOTE
>
> If any features from your current plan are not included in a lower-tier plan, the Document360 sales team will inform you about the option to purchase them as add-ons, if available. If these features are not available as add-ons, you will be notified that they will no longer be accessible after the downgrade.

Each subscription plan has different limits on project versions and team accounts. Before downgrading, make sure your current project configuration and usage fit within the limits and features of the new plan. Keep in mind that certain features are only available in higher-tier subscriptions. For details on how a downgrade may affect your limits and features, please refer to our [pricing page](https://document360.com/pricing/).

## Plan comparison

The comparison of features and benefits you may lose while downgrading your plan are detailed in this section.

### Enterprise to Business

When moving from the Enterprise plan to the Business plan, you will need to adapt to some changes in available features and capacities. Here are the changes that will take place:

#### Storage and user access

| Features | Enterprise plan | Business plan | Impact |
| --- | --- | --- | --- |
| **Storage reduction** | 500 GB | 100GB | You will retain your current file storage, but you will not be able to add more files if you've exceeded the new limit. |
| **Team access changes** | 20 | 10 | You will be prompted to choose which team accounts to retain. You can purchase additional accounts to keep all existing ones. |
| **Reader capacity** | Unlimited | 10000 | Any purchased add-on reader count will carry forward. |
| **Reviewers** | 20 | 10 | You will be prompted to choose which reviewers to retain. You can purchase additional reviewer accounts to keep all existing ones. |

#### Feature adjustments

| Feature | Enterprise Plan | Business Plan | Impact |
| --- | --- | --- | --- |
| **AI tools** | All AI features | AI Search (2,000 Credits) | You will retain access to AI features, but with reduced credits. Eddy AI Search will reset to 2,000 credits for the upcoming month. Add-ons will carry forward. |
| **Exclusive features** | Sandbox, IP Restriction | No access | You will lose access to decision trees, the sandbox environment, and IP restrictions. |
| **Security changes** | SSO, Health check, Security and audits logs | Security and audits logs | SSO (SAML/OpenID, JWT) will no longer be available. Health check and migration support services might be limited. |

#### Content and Add-ons

| Feature | Enterprise Plan | Business Plan | Impact |
| --- | --- | --- | --- |
| **Workspace retention** | 2 | 1 | You will be prompted to choose which workspaces to keep. |
| **Language options** | 5 Languages | 3 Languages | You will need to select which languages to retain. |
| **Translation credits** | 5 million Characters | 2 million Characters | Machine Translation credits will carry forward along with language selection. |
| **Extensions** | Salesforce, Crowdin, Phrase included | Salesforce not available | Salesforce extension will no longer be available. Crowdin and Phrase will be available as add-ons. |

### Business to Professional

When downgrading from the Business plan to the Professional plan, you will need to adjust to a more streamlined set of features.

#### Storage and user management

| Features | Business plan | Professional plan | Impact |
| --- | --- | --- | --- |
| **Storage reduction** | 100 GB | 50 GB | You will retain your current file storage, but you will not be able to add more files if you've exceeded the new limit. |
| **Team access changes** | 10 | 5 | You will be prompted to choose which team accounts to retain. You can purchase additional accounts to keep all existing ones. |
| **Reader capacity** | 10000 | 5000 | Top 5,000 or recently logged in will be retained |
| **Reviewers** | 10 | 5 | You will be prompted to choose which reviewers to retain. You can purchase additional reviewer accounts to keep all existing ones. |

#### Features removed

| **Features** | **Business Plan** | **Professional Plan** | **Impact** |
| --- | --- | --- | --- |
| **Workflow Tools** | Workflow designer and assignments available | No workflow designer and assignments | Workflow tools will be removed. You will no longer have access to create or manage workflows. |
| **Analytics** | Advanced analytics features | Basic analytics features only | Advanced analytics will be removed. Only basic metrics will be available. |
| **Integrations** | API tokens and integrations (e.g., Freshdesk, Zendesk) | Limited or no API tokens and fewer integrations | API tokens and certain integrations will be disabled, reducing your ability to connect with third-party tools. |

#### AI and search capabilities

| **Features** | **Business Plan** | **Professional Plan** | **Impact** |
| --- | --- | --- | --- |
| **AI Credits** | 2,000 Eddy AI Search credits | Not supported | Your AI Search credits will be removed, impacting the ability to perform AI-powered search. |
| **Search Features** | Full Eddy AI Assistive Search and article summarizer | Basic search without Eddy AI and summarizer | You will lose access to Eddy AI Assistive Search and article summarization, reducing the search experience. |

### Enterprise to Professional

When you downgrade from Enterprise to Professional plan, you will lose the advanced features from the [Enterprise](/help/docs/downgrading-your-plan#enterprise-to-business) as well as the [Business](/help/docs/downgrading-your-plan#business-to-professional) plans.

## Downgrading for users on legacy pricing plans

As of 31st August 2024, we have revised our pricing structure. If you are on a legacy pricing plan—meaning you subscribed before this date—you will not be able to change your plan directly through the portal. Downgrading requires assistance from our support team.

Here’s how you can proceed:

1. Navigate to the **Billing** page.
2. Select **Change plan**.
3. On the **Change plan** page, click the **Let’s talk** button below the required plan.
4. Click **Raise Request** on the confirmatory pop-up.

   This will trigger a request to our support team. They will review your request and guide you through the downgrade process within two working days. They will also handle the transition to the new plan, ensuring a smooth experience.

> NOTE
>
> If you need further assistance or have specific questions about your legacy plan, you can always reach out to our support team via email, live chat, or phone.

## Important considerations for all downgrades

1. **Data retention**: Your existing data will be retained where possible, but you may lose access to it if it exceeds the lower plan's limits.
2. **Feature access**: You will lose access to features not included in the lower plan immediately upon downgrade.
3. **Add-ons**: Any add-ons you've purchased will be carried forward if they're compatible with the lower plan.
4. **Article Count**: All existing articles will be retained, but you will not be able to create new ones if you've exceeded the limit.
5. **Tags**: Existing tags can be edited/updated/deleted, but you cannot create new tags.
6. **Feedback Manager**: Received feedback will be retained, but the feedback option will be disabled in Article settings & SEO.
7. **PDF Export**: You can continue using the previously created PDF templates for article downloads but cannot create new ones.
8. **Widget**: Only Business and Enterprise plans support up to 10 widgets.
9. **Custom JS/CSS**: Existing code will be retained but cannot be edited or saved.

## Post-downgrade tips

1. **Review your content**: After downgrading, review your knowledge base to ensure your most important content is accessible and properly organized.
2. **Update your workflows**: Adjust your team's processes to work effectively within the new plan's capabilities.
3. **Communicate changes**: Inform your team and users about any changes in features or access that might affect them.
4. **Monitor usage**: Keep an eye on your storage and user limits to ensure you're staying within the new plan's boundaries.
5. **Consider future needs**: If you find the new plan too limiting, remember you can always upgrade again in the future.

Downgrading your plan does not mean a reduction in the quality or performance of the product. By carefully managing your resources and focusing on the most critical content and features, you can continue to maintain an effective knowledge base. If you need help downgrading your Document360 plan or have any questions, our support team is always here to assist you.

---

## FAQs

**What happens to my data if I downgrade my plan?**

When you downgrade your plan, your existing data remains intact. However, you may lose access to certain features or storage limits associated with the higher plan. We recommend reviewing your data and feature usage to ensure compatibility with the new plan.

**Will I lose access to any features after downgrading?**

Yes, downgrading may result in losing access to features specific to the higher plan. We provide a list of features included in each plan so you can understand what you’ll have access to before making the change. For more information, see [Document360 pricing](https://document360.com/pricing/).

**Can I revert to my previous plan if I downgrade and later decide I want the higher plan again?**

Yes, you can upgrade back to your previous plan at any time. However, please note that any features or data limitations of the downgraded plan will apply until you upgrade again.

**How does downgrading affect my billing and payments?**

Upon downgrading, your billing will be adjusted according to the new plan’s pricing. You’ll receive a prorated credit for the unused portion of your previous plan, depending on your billing cycle and company policy.

**Will I lose access to my current projects or articles during the downgrade process?**

No, you will not lose access to your current projects or articles. However, certain features tied to the higher plan may become inaccessible, but your data will remain secure.

**What steps should I take before downgrading to ensure a smooth transition?**

Review the feature list of your new plan, back up any critical data, and assess if you need to adjust your workflows. It’s also helpful to consult our support team if you have any specific concerns about the downgrade.

**Can I downgrade my plan immediately, or is there a waiting period?**

Downgrades are typically processed immediately. When you downgrade a subscription, the prorated cost of the current plan for the remainder of your current billing cycle will be added as credits if applicable. On renewal, your invoice will reflect the new subscription price.

**Will there be any changes to my account settings or configurations after downgrading?**

Your account settings and configurations will remain the same, but you may lose access to certain customization options or integrations available in your previous plan.

**What if I exceed the limits of the new plan after downgrading?**

If you exceed the limits of your new plan, you’ll receive notifications and options to either upgrade back to your previous plan or adjust your usage to comply with the new limits.

**How do I delete my Document360 account?**

If you wish to delete your Document360 account, please reach out to our support team at [support@document360.com](mailto:support@document360.com).

<a id="add-ons"></a>

## Purchasing add-ons

### Available add-ons by plan

Document360 is designed to scale with your projects, offering a range of add-ons to enhance your documentation efforts. Across the **Professional**, **Business**, and **Enterprise** plans, you can purchase additional:

* **Workspaces**
* **Languages**
* **Translation credits (1 million characters)**
* **Storage (1 unit = 50 GB)**
* **Team accounts**
* **Readers (1 unit = 5000 readers)**
* **Limit for PDF export (1 unit = 2GB)**

For **Business** plan users, optional add-ons include:

* **Crowdin extension**
* **Phrase extension**

**Enterprise** plan users can also purchase

* **Salesforce extension**
* **Additional sandbox environment**

These add-ons ensure enhanced flexibility and robustness in your knowledge base setup.

> NOTE
>
> To purchase add-ons, you must have a saved card on your Document360 account. To add a card, go to **Settings ()** > **Knowledge base portal** > **Billing**, and select the **Payment information** tab.

---

### Purchasing add-ons

To purchase add-ons,

1. From the knowledge base portal, go to **Settings ()** > **Knowledge base portal** > **Billing**.

![Billing page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Billing_page_purchase_addon_button.png)

2. On the **My plan** tab, select **Purchase add-on**.

![Purchase add-ons](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Billing_page_purchase_addon_details.png)

3. Select the required add-ons using the + and - buttons.
4. Click **Confirm payment** to make payment.

> NOTE
>
> Customers on the legacy plan can only purchase the following add-ons: Projects, Workspaces, Languages, Translation Credits, Storage, Team Accounts, and Readers. This is available exclusively for online customers. Offline customers can contact our dedicated customer support team for further assistance.

<a id="upgrading-from-trial-version"></a>

## Upgrading from trial version

Document360 offers a 14-day trial period, allowing you to explore all features from every plan. During the trial, you can switch between plans to experience the features available in each tier. You can upgrade to your desired subscription plan at any time during the trial or once the trial ends.

> NOTE
>
> Only **Owner(s)** of the project can access **Billing** features.

---

## Changing your plan during the trial period

During the 14-day trial period, Document360 allows you to switch between plans to explore the features offered in each tier. This flexibility helps you evaluate how different plans align with your requirements.

For example, you can start with the **Enterprise** plan to explore all advanced features and then switch to a lower-tier plan to understand the capabilities available in a more cost-effective option. By simulating the experience of using various plans, you can make an informed decision about which subscription plan best suits your needs. All changes made during the trial are free of charge, and you can upgrade to your desired plan at any point during or after the trial.

From the Knowledge base portal, navigate to ****Settings** ()** > ****Knowledge base portal**** > ****Billing****. On the ****Billing**** page,you can view your current plan, remaining trial duration, and a summary of available features.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Trial_plan_billing_screen.png)

To change your plan during the trial period,

1. On the header menu bar, click the dropdown on the **TRIAL ENDS IN N DAYS** button.
2. Select the **Try other plans** button to open the **Change plan** page. The **Change plan** page will show the available plans.
3. Click **Try now** under the desired plan.

> NOTE
>
> If you select a lower-tier plan, you will be directed to a page that lists the features you will lose access to.

4. If you’re moving to

   * **A lower tier plan**: Select the checkbox to proceed with downgrading and deleting any configurations that are not available in the lower tier plan and click the **Change plan** button.
   * **A higher tier plan**: You will see a success message once your plan is upgraded successfully.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_GIF-Trial_plan_try_other_plans.gif)

Following these steps will successfully change your plan during the trial period.

> NOTE
>
> Alternatively, from the dropdown:
>
> * Click **Buy now** to proceed with a subscription.
> * Click **Book a demo** to schedule a demonstration.
> * Click **Chat with us** to talk to the customer support team.

---

## Subscribing to a Document360 plan

To subscribe to a paid plan during the trial period or after the trial period ends,

1. From the Knowledge base portal, navigate to **Settings () > Knowledge base portal > Billing.**

   On the Billing page, you can view a summary of the features included in your plan and the number of days remaining in your trial.
2. Click **Buy now** to go to the **Upgrade** page, where you can view the available Document360 plans and their costs. Scroll down to the **Compare plans & features** section for a detailed list of all features and their availability in each plan.
3. Once you’ve selected your preferred plan, click the **Let’s talk** button.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_GIF-Trial_plan_buy_plans.gif)

The Document360 sales team will contact you to assist with purchasing a new plan.

## FAQs

**What features are available during the trial period?**

During the trial, you can explore all features and plans offered by Document360 to help you decide which plan best suits your needs.

**Will I lose my data if I downgrade to a lower plan during the trial?**

No, your data will remain intact, but certain features and limits (e.g., workspaces, readers, storage) will be adjusted based on the lower plan.

**Can I extend my trial period?**

In some cases, you may be eligible for an extension. Contact our support team to discuss options for extending your trial.

**What happens when my trial period ends?**

To continue using advanced features after your trial ends, you will need to subscribe to a plan. If you choose not to subscribe, your project will be placed on hold and scheduled for deletion, but you will have time to take action before it's permanently removed.

**Are there any limitations during the trial compared to a paid plan?**

No, the trial offers full access to all features, just like a paid plan, so you can experience the platform's capabilities without restrictions.

**What if I need help during my trial?**

You can access support via the chat option, book a demo, or reach out to our customer support team directly for assistance.

**Will I be charged automatically after the trial ends?**

No, you won’t be charged automatically. You must manually subscribe to a plan before the trial ends to continue using the advanced features.

**Does the pricing vary for subscription plans based on currency?**

Yes, the pricing of subscription plans changes for each currency. Select the desired currency, and the respective pricing for the subscription plans appears.

**Does the pricing vary with the exchange/conversion rate?**

The pricing that appears on the page is fixed. We do not change the pricing for exchange/conversion rates regularly. When there is a pricing change in the future, you will get notified through mail communication well before the new pricing implementation.

<a id="changing-payment-information"></a>

## Changing payment information

## How to change the payment information?

![1_Screenshot-changing_the_payment_information](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Payment information - new.png)

NOTE

The team account that has owner access can access the billing section.

1. From the Knowledge base portal, go to Settings and then click **Billing**.
2. The **My plan** section will be open by default. Navigate to **Payment information** tab.
3. Below the **Credit card** tile, you can change the payment and billing address.

   Here, you can view the primary card.
4. Click **Add another card**, to add a second card for billing.

NOTE

The primary card is used for billing purposes. If the primary card runs out of funds or expires, the second card will be used for renewal.

---

## FAQs

**How can I delete my primary payment card in the billing section?**

You cannot delete your primary card, but you can edit it. Secondary cards can also be edited and deleted.

**How can I delete my secondary card in the billing section?**

To delete a secondary card:

1. Navigate to **Settings > Billing > Payment information**.
2. Hover over your secondary card.
3. Click the **Delete** icon, then confirm by clicking **Delete** in the confirmation popup.

**How can I set my secondary card as my primary card?**

To set a secondary card as your primary card:

1. Go to **Settings > Billing > Payment information**.
2. Hover over your secondary card.
3. Select the **Set as primary** radio button. A confirmation popup will appear.
4. Click **Make Primary** to switch your secondary card to the primary card.

**How do I edit my primary card?**

To edit your primary card:

1. Navigate to **Settings > Billing > Payment information**.
2. Hover over your primary card.
3. Click the **Edit** icon to update the card details.
4. After making the changes, click **Update** to save them.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="february-2025-1112"></a>

## February 2025 - 11.1.2

Document360 version 11.1.2 is now live, introducing an enhanced image viewing experience in the knowledge base site, offering improved usability with zoom, pan, and download options.

---

## Features/Enhancements

### Intuitive image viewer in the Knowledge base site

**Category: Knowledge base site | Enhancement**

The image viewer in the Knowledge base site has been upgraded to provide a more intuitive experience. Now, when you click an image, it opens in a viewer that fits to your screen size, along with zoom in/zoom out and pan functionality. The title bar offers easy access to download the image or follow any embedded URLs.

> For more information, read the article on [**Knowledge base site**](https://docs.document360.com/docs/knowledge-base-site-20).

![Document360 interface showing the enhanced image viewer with highlighted options.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enhanced_image_viewer_details.png "11_Screenshot-Enhanced_image_viewer.png")

---

> **NOTE**
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="january-2025-1111"></a>

## January 2025 - 11.01.1

Document360 version 11.01.1 has been deployed, bringing enhancements to our knowledge management platform. This release introduces automatic unlocking for locked articles, quicker renaming of articles and categories, additional language support for Eddy AI, and improvements to label management and image organization in Document360 Drive.

---

## Enhancements

### Auto-unlock articles when navigating to a different page

**Category: Knowledge base portal | Enhancement**

Articles will now automatically unlock when a user navigates to another page or article. Previously, idle articles remained locked for 15 minutes, requiring others to either wait or request manual unlocking, leading to delays and disrupted collaboration. This improvement ensures editing access is more seamless, reducing wait times and improving workflow efficiency.

---

### Rename articles and categories from the Document tree view

**Category: Content management | Enhancement**

You can now rename your articles and categories directly from the context menu in the Document tree view, without needing to open each item. This improvement makes it quicker and easier to update your content titles.

> To learn more about renaming articles & categories from the context menu, read the articles on [**Managing articles**](https://docs.document360.com/docs/managing-articles#renaming-an-article) & [**Managing categories**](https://docs.document360.com/docs/managing-categories#renaming-a-category).

![Menu options displaying the new 'Rename' option for articles and categories.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Rename_option_context_menu.png)

---

## Other updates

* The AI writer suite and AI search suite now support Brazilian Portuguese (pt-br) along with existing 15 languages.
* The Recent folder in Document360 Drive now displays images in the order of recent uploads, making it easier to find and insert images into articles.
* You can now add labels to articles and page categories individually, and in bulk from the Document list view.

---

> **NOTE**
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="december-2024-10121"></a>

## December 2024 - 10.12.1

Document360 version 10.12.1 is now live, bringing new features and enhancements to improve your content management and accessibility. This update includes **Custom pages**, **Tabs in the Advanced WYSIWYG editor**, **AI-generated alt-text for images**, and **Internal labels**. It also introduces **content retention when switching editors** and other improvements to streamline workflows and enhance user experience.

## Features/Enhancements

### Custom pages

**Category: Site builder | Enhancement**

You can now create and manage custom pages within your knowledge base using the new Custom pages feature. A custom page is a standalone page that you can use for various purposes, including informational content, legal and compliance information, and company policies. You can easily add the links to custom pages in your site's header or footer for quick access. Additionally, you can translate these pages into multiple languages using machine translation, making them accessible to a broader audience.

> For more information, read the article on [**Custom pages**](https://docs.document360.com/docs/custom-pages).

---

### Improved article version comparison with color-coded highlights

**Category: Knowledge base portal | Enhancement**

The article version comparison feature in Document360 is now more intuitive and user-friendly. You can easily identify changes with color-coded highlights: added content is marked in **green**, removed content appears in **red with a strikethrough**, and formatting changes are highlighted in **blue**. The new **Swap** button lets you instantly reverse the order of versions being compared, making it easier to focus on specific changes.

> For more information, read the article on [**Revision history**](https://docs.document360.com/docs/revision-history).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-Article_version_comparison.gif)

---

### Switch to the Advanced WYSIWYG editor without content loss

**Category: Editor | Enhancement**

When you switch from the Markdown or WYSIWYG editor to the Advanced WYSIWYG editor, Document360 now automatically detects unsupported HTML tags and attributes that might affect your content. Unsupported elements are highlighted in the editor, making it easy for you to review and adjust your content without losing any details during conversion.

> For more information, read the article on [**Editor choices in Document360**](https://docs.document360.com/docs/using-the-text-editor#handling-unsupported-html-tags-and-attributes-in-the-advanced-wysiwyg-editor).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_GIF-Unsupported_html_tags.gif)

---

### Ability to label articles for better article management

**Category: Knowledge base portal | Feature**

You can now add labels to articles internally in Document360 to help organize, filter, review, and perform bulk actions within your content library. Labels allow you to mark articles for various purposes, such as assigning them to writers, tracking their status (e.g., "In Progress," "Needs Review"), identifying content for release notes, or categorizing topics, making article management easy.

> For more information, read the article on [**Adding article labels**](https://docs.document360.com/docs/adding-article-labels).

### 

---

### Tabs in the Advanced WYWIWYG editor

**Category**: **Advanced WYSIWYG editor | Enhancement**

The Advanced WYSIWYG editor now includes the tabs feature to help writers organize and present complex information more clearly. This feature adds a row of tabs in the editor, so writers can group related content into sections that readers can easily switch between. This provides a more structured and user-friendly approach for presenting complex or lengthy content, enabling readers to access specific sections without needing to scroll extensively.

> For more information, read the article on [**Tabs in the Advanced WYSIWYG editor**](https://docs.document360.com/docs/tabs-in-the-advanced-wysiwyg-editor).

---

### Citations with source articles for Ask Eddy AI

**Category: Ask Eddy AI | Enhancement**

The Ask Eddy AI feature now includes citations with its responses, linking users to source articles for quick validation of information and further investigation into the topic. Numbered references are supported across internal and external sources, that display titles and short summaries when you hover over the citation. This feature is available in the Knowledge base site, widgets, APIs, and extensions, working in all Eddy AI-supported languages.

> For more information, read the article on [**AI assistive search (Ask Eddy AI)**](https://docs.document360.com/docs/ai-assistive-search-ask-eddy).

![Eddy AI search result highlighting the citations feature, showing the source article for the search results.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Eddy_ai_citations.png "Citations.png")

---

### Generate alt-text for images using Eddy AI

**Category: Eddy AI | Enhancement**

This enhancement automatically generates alt text for images in your articles using Eddy AI. When you upload or insert images, the system provides a suggested alt text, which you can accept, edit, or regenerate. This ensures that your articles are SEO-friendly and meet accessibility standards, saving time and effort in manual alt text creation.

> For more information, read the article on the [**AI alt-text generator**](https://docs.document360.com/docs/ai-alt-text-generator).

---

### Enhancement to Knowledge base site search - Global search

**Category: Knowledge base site | Enhancement**

Experience a significant upgrade with KB Site 2.0, featuring unified search capabilities that now include results from API workspaces. You can seamlessly switch between global and individual workspaces, with search filters displaying **All Workspaces** when in global mode.

> For more information, read the article on [**Search in Knowledge base site**](https://docs.document360.com/docs/search-in-knowledge-base-site).

![Dropdown menu showing workspace and language options in Document360 interface, along with the API docs tab in the search results.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Unified_search_and_filters.png)

> NOTE
>
> This update is available only in **KB Site 2.0.** To preview your knowledge base in KB Site 2.0, go to **Settings** > **Customize site**.

---

### Restrict Eddy AI for selected workspaces, languages, and categories

**Category: Eddy AI | Enhancement**

You can now configure Eddy AI assistive search to focus on specific workspaces, languages, and categories. This update lets you enable Eddy AI responses only for selected content sources, ensuring better control over what Eddy AI uses as source. These changes streamline search results and ensure they reflect only the most relevant content.

> For more information, read the article on [**Adding external sources for AI Assistive search**](https://docs.document360.com/docs/eddy-ai-federated-search).

![Manage AI sources with content access settings and external source options displayed.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Restrict_eddy_ai.png)

---

### Ability to undo feedback submissions on the Knowledge base site

**Category: Knowledge base site | Enhancement**

You can now undo feedback or toggle between likes and dislikes for greater flexibility in sharing your input. To ensure actionable insights, mandatory comments are required for dislikes. Additionally, users are limited to one feedback entry per article, providing clearer and more consistent content insights.

> For more information, read the article on [**Liking or disliking an article**](https://docs.document360.com/docs/liking-or-disliking-an-article).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_GIF-Undo-feedback.gif)

---

## UI updates

* The Document360 Advanced WYSIWYG editor now includes consistent **8-pixel** block-level spacing for improved readability and organization. Font sizes and top margins for headings adjust dynamically based on viewport size, ensuring a responsive and clean layout. These updates are applied by default and can be easily customized with custom CSS for flexibility across devices and export formats.
* You can now view page categories in the **All articles** list in Document360.
* The left navigation bar has been revamped with new icons for **Dashboard** (), **Documentation** (), **API documentation** (), **Analytics** (), **Widget** (), **Drive** (), and **Settings** ().

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734648003603.png)

* In the Documentation tab, **All articles** (), **Workflow assignments** (), **Starred** (), and **Recycle bin** () have been converted to static icons at the top of the Categories & Articles pane. For API documentation workspaces, **All articles** (), **Recycle bin** (), and **API docs reference** () have been converted to static icons at the top of the Categories & Articles pane.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1734795786548.png)

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="november-2024-10111"></a>

## November 2024 - 10.11.1

Document360 version 10.11.1 has been deployed, introducing enhancements to our knowledge management platform. Key highlights include the ability to retrieve information from external sources while using Ask Eddy AI and purchasing the Reviewer role as an add-on.

## Features/Enhancements

### Include external sources in Eddy AI search

**Category: Knowledge base site | Enhancement**

You can now index external sources like webpages and sitemaps, allowing Eddy AI to retrieve information beyond your knowledge base. This enhancement provides more comprehensive answers to your queries by including relevant information from multiple sources, improving the overall search experience.

> For more information, read the article on [**Adding external sources for AI Assistive search**](/help/docs/eddy-ai-federated-search).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Manage_external_sources.png)

---

### Reviewer role purchase as add-on

**Category: Reviewer | Enhancement**

Teams can now purchase additional Reviewer roles directly through the Document360 portal, providing large teams the flexibility to scale review processes without upgrading to a higher plan. Additionally, when importing team accounts, Reviewer roles will be automatically recognized and assigned.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Reviewer_role_as_addon.png)

> For more information, read the article on [**Managing Reviewer accounts**](https://docs.document360.com/docs/managing-reviewer-accounts).

---

### Article URLs included in article CSV exports

**Category: Knowledge base portal | Enhancement**

Exporting articles as a CSV file now includes URLs from both the Knowledge base portal and site. This enhancement simplifies navigation by enabling direct access to articles and makes sharing links with your team easier than ever.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Export_article_url.png)

---

### Other updates

* The new **Fit table to page width ()** option automatically resizes tables to fit the width of your window while keeping columns equal.
* The language names in the language selection dropdown menu in the Knowledge base site and Knowledge base portal will now be available in their native scripts.
* Page categories can now be accessed directly from the Document360 Chrome extension.
* If you switch an article to the Advanced WYSIWYG editor, you cannot revert the editor type for that article. However, if you have the **Project Settings - Update** permission, you can set the default editor for future articles from **Settings** > **Knowledge base** **portal** > **General** > **Editor**. For more information, read the article on [**Editor choices in Document360**](/help/docs/using-the-text-editor#switching-between-markdown-wysiwyg-advanced-wysiwyg-editor).

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="october-2024-10101"></a>

## October 2024 - 10.10.1

Document360 version 10.10.1 has been deployed, introducing enhancements to our knowledge management platform. This update focuses on improving productivity with features like chart generation using Eddy AI and enhancing accessibility with the new text-to-voice feature. Additionally, we've introduced Conversational Eddy AI as chatbot and provided more customization options in the site builder.

## Features/Enhancements

### Conditional content blocks

**Category: Editor | Enhancement**

This feature allows you to customize content visibility based on factors like country, device type, date, IP address, and reader groups. The available conditions will vary depending on the project type, enabling precise content targeting within a single article and enhancing the reader experience without the need for multiple versions.

> For more information, read the article on [**Conditional content blocks**](https://docs.document360.com/docs/conditional-content-blocks).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Conditional_content_blocks.png)

> NOTE
>
> This feature is available only in **KB Site 2.0**. To preview your knowledge base in KB Site 2.0, go to **Settings** > **Customize site**. If you do not see the preview option, please contact the Document360 support team for assistance.

---

### Generate charts from text and tables using Eddy AI

**Category: Editor | Feature**

The AI chart generator allows you to instantly convert selected text or table data into visual charts, such as pie charts or flowcharts, directly within the editor. This feature eliminates the need for third-party tools, streamlining the process of creating visual aids and improving productivity.

> For more information, read the article on [**AI chart generator**](https://docs.document360.com/docs/ai-chart-generator).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_GIF-AI_chart_generator.gif "AI Chart Generator.png")

---

### Listen to articles on the Knowledge base site

**Category: Knowledge base site | Feature**

The Listen feature (Read out loud) allows you to listen to article content, enhancing accessibility for users who prefer listening over reading. It also helps save time by enabling you to consume content while multitasking.

> For more information, read the article on the [**read out loud feature**](https://docs.document360.com/docs/text-to-voice-functionality).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Text_to_voice.png "Text to Voice.png")

> NOTE
>
> This feature is available only in **KB Site 2.0**. To preview your knowledge base in KB Site 2.0, go to **Settings** > **Customize site**. If you do not see the preview option, please contact the Document360 support team for assistance.

---

### Conversational Eddy AI chatbot

**Category: Knowledge base widgets | Enhancement**

This update extends the [Conversational Eddy AI](/help/docs/september-2024-1091#conversational-eddy-ai) feature to chatbots on the Knowledge base site. Previously, Eddy AI did not handle contextual follow-up questions in widgets. With this enhancement, users can now enjoy seamless, context-aware interactions, improving the overall experience.

> For more information, read the article on [**Eddy AI chatbot**](https://docs.document360.com/docs/ai-chatbot).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-AI_chatbot.png "Conversational Eddy AI in widgets.png")

> NOTE
>
> This feature is available only in **KB Site 2.0**. To preview your knowledge base in KB Site 2.0, go to **Settings** > **Customize site**. If you do not see the preview option, please contact the Document360 support team for assistance.

---

### Site builder customization enhancement

**Category: Site builder | Enhancement**

* The Customize site section in KB site 2.0 now provides details on the recommended size, format, and optimal resolution for logos and fav icons. These changes won’t affect your existing logos or fav icons unless you choose to update them.
* You can now customize the Header background color Site builder, allowing you to align your knowledge base with your brand’s visual identity. The foreground color will automatically adjust to ensure readability.

---

### Search for all settings and article content in Portal search

**Category: Portal search | Enhancement**

You can now search for all Document360 content tools, such as the Workflow designer, Templates, Import and export project, and more, directly from the search bar in the knowledge base portal. Previously, you could search across Articles, Drive, Users & Groups, Tags, and Settings, and now, Content tools are included in your search results. This enhancement streamlines your access to all the essential tools and settings within the portal.

> For more information, read the article on [**Full portal search**](https://docs.document360.com/docs/full-portal-search).

---

## UI Updates

* While cloning a category, the category drop-down will be populated with its parent category or sub-category.

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="september-2024-1091"></a>

## September 2024 - 10.9.1

We’re excited to bring you Document360 version 10.9.1, packed with new features. This update introduces several enhancements, including the ability to preview your knowledge base before migrating to Knowledge base site 2.0, enhanced Conversational Eddy AI, and the introduction of the Reviewer role.

## Features/Enhancements

### Move to the improved Knowledge base site 2.0

**Category: Knowledge base site| Enhancement**

Document360's **Knowledge base site 2.0** is now available for all customers in Standard plan. The new site offers a more user-friendly experience with advanced features and customization options. You can enhance your site with a redesigned content navigator, improved search and filtering, status badges for quick updates, and more. Customers on Knowledge base site 1.0, can now try and migrate to the new knowledge base site. Experience the new version without affecting your existing setup by navigating to **Settings** > **Knowledge base site** > **Customize site**.

> For more information, read the article on [**Knowledge base 2.0 migration**](https://docs.document360.com/docs/kb-site-20-migration).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-KB_Site_Migration_2_0.png)

> For your information (FYI)
>
> Only **Standard plan users** can currently migrate to **KB site 2.0**. Migration plans for other customers are in progress and will be communicated soon.

---

### Conversational Eddy AI

**Category: Eddy AI | Enhancement**

Eddy AI now maintains context from your interactions, to give appropriate responses to your queries. You can converse with Eddy AI to get the information you need faster with lesser effort. By continuously learning from interactions, conversational Eddy can improve its responses, making it an invaluable tool for enhanced user experiences and streamlining communication. You can converse in multiple languages supported by Eddy AI.

> For more information, read the article on [**AI assistive search**](https://docs.document360.com/docs/ai-assistive-search-ask-eddy).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Conversational_eddy_ai.png)

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. Navigate to **Settings** > **Customize site** to experience KB Site 2.0, without affecting your existing knowledge base.

---

### Automatically display related articles with Eddy AI

**Category: Editor | Enhancement**

Eddy AI now automatically displays related article suggestions in the KB site based on the contents of the current article and knowledge base. Any manually added related articles will still appear above the related articles suggested by Eddy AI. You can enable the **Dynamic related articles recommendations** toggle from **Settings** > **AI Features** > **Eddy AI**.

> For more information, read the article on [**AI related articles recommender**](https://docs.document360.com/docs/ai-related-articles-recommender).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Dynamic_related_articles.png "Dynamic related articles.png")

---

### **Movable content blocks**

**Category: Editor | Enhancement**

You can now rearrange content blocks in the Advanced WYSIWYG editor by clicking the arrows next to each block. You can also hold and drag the icon to move the content quickly. This will help you rearrange your content flexibly and more intuitively.

> For more information, read the article on [**Movable content blocks**](https://docs.document360.com/docs/movable-blocks-in-advanced-wysiwyg-editor).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Movable_content_blocks.png)

---

### Enhanced analytics for conversational Eddy AI

**Category: Analytics | Enhancement**

Following the support for conversations in Eddy AI, we've enhanced the Analytics module to provide deeper insights into these AI-powered interactions. To have a deeper understanding of Eddy AI conversation, you can filter the conversations by query topic, response status, application, and feedback type. We have also added a new Conversations table, allowing you to analyze query patterns and user feedback across your knowledge base in multiple languages and workspaces.

> For more information, read the article on [**Eddy AI search analytics**](https://docs.document360.com/docs/eddy-ai-search-analytics).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Conversational_eddy_AI_analytivs.png)

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. Navigate to **Settings** > **Customize site** to experience KB Site 2.0, without affecting your existing knowledge base.

---

### Introducing Reviewer role with dedicated Reviewer license

**Category: Knowledge base portal | Feature**

You can now add users as Reviewers to the knowledge base portal along with the existing team accounts. Reviewers will have access to add comments to articles and update workflow statuses. This role ensures that users can participate in content review without making any changes to the articles.

> For more information, read the article on [**Managing reviewer accounts**](https://docs.document360.com/docs/managing-reviewer-accounts).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Create_revieiwer_account.png)

---

### Convert reader accounts to team accounts

**Category: Settings | Enhancement**

You can easily convert reader accounts to team accounts with customized permissions in the knowledge base portal, or convert team accounts to reader accounts, restricting access to the knowledge base site only. This enhancement allows for role updates without the need to delete accounts, preserving all original role data. Additionally, you can also perform bulk updates to roles for efficient management. You can also export reader/team account groups as an Excel/CSV file.

> For more information, read the article on [**Managing reader accounts**](https://docs.document360.com/docs/reader-accounts).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Convert_reader_to_team_account.png "Promote reader to team account(1).png")

---

### Enhanced Insert menu

**Category: Editor | Enhancement**

The Insert menu in the advanced WYSIWYG editor now supports search for specific block types. It has also been simplified with the removal of descriptions, making it easier to navigate. These updates are available in both the pinned and unpinned views of the Insert menu.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Updated_insert_menu.png "10_Screenshot-Updated_insert_menu.png")

---

### **Expand & collapse table of content in the Knowledge base site**

**Category: Knowledge base site | Enhancement**

You can now use the expand and collapse the table of contents (ToC) in the Knowledge base site to make it easier to read and navigate large documents. This feature lets you open or close sections of the TOC based on hierarchy, helping you focus on what’s important. You can also pin your most-used sections, so they stay easy to find as you browse.![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Expand_collapse_toc.png "10_Screenshot-Updated_insert_menu.png")

---

## UI Updates

* If you collapse the left navigation category pane, it will persist even when you navigate to a different module and switch back to Documentation tab.
* When saving an article as a template, we have introduced a popup message to rename the template and add a description.
* The **Custom CSS & JavaScript** option has been relocated to the **Customize site** page in Document360 settings. To access this option, navigate to **Settings** > **Knowledge base site** > **Customize site** > **Custom CSS & JavaScript**.

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="september-2024-1082"></a>

## September 2024 - 10.8.2

Document360 version 10.8.2 has been deployed, introducing enhancements to our knowledge management platform. This update focuses on providing greater flexibility in personalizing Eddy AI. and improving search capabilities within the knowledge base portal

## Features

### Customize Eddy AI

**Category: Eddy AI | Feature**

You now have customization options available for Eddy AI to set the response tone and length to match your brand's voice and style. Choose from various tone options such as professional, friendly, or confident, and select your preferred response length. Enterprise customershave the additional ability to customize Eddy AI's name, allowing for seamless integration with your brand identity. These customizations will be reflected across all Eddy AI features, including assistive search and the AI content suite.

Access these new options in **Settings** > **AI features** > **Customize Eddy AI** to enhance your AI assistant experience.

> For more information, read the article on [**Eddy AI customization**](https://docs.document360.com/docs/ai-customization).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Eddy_customization.png)

---

## Enhancements

Users in team account groups/reader groups will be arranged alphabetically based on their email IDs.

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="august-2024-1081"></a>

## August 2024 - 10.8.1

Document360 version 10.8.1 has been deployed, introducing enhancements to our knowledge management platform. This update focuses on content organization, AI-powered productivity features, and authentication flexibility.

---

## Features/Enhancements

### Insert FAQs as content blocks

**Category: Editor | Feature**

You can now easily add FAQs to your articles as content blocks from the Insert menu in the Advanced WYSIWYG editor. FAQs will be automatically formatted into an accordion style, helping to distinguish them from regular content. You can customize the FAQ content blocks as per your requirements, by setting the FAQs to be in expanded or collapsed state, customize the border styles, as well as the position of the expand/collapse icon.

> For more information, read the article on [**Advanced WYSIWYG editor**](https://docs.document360.com/docs/advanced-wysiwyg-editor).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-AI_FAQ_generator.png)

---

### Generate FAQs using Eddy AI

**Category: Editor | Feature**

You can now easily generate FAQs for your articles using the FAQ generator. With the click of a button, you can create up to 10 FAQs based on your article content. These FAQs will be automatically formatted using the FAQ content blocks. This feature is available as part of AI writer in the Eddy AI content suite. Users can still manually add/update FAQs.

> For more information, read the article on [**AI FAQ generator**](https://docs.document360.com/docs/ai-faq-generator).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-FAQ_content_blocks.png)

---

### Translate snippets, variables, and glossaries

**Category: Content tools | Feature**

You can now extend Document360's machine translation capabilities to your Variables, Snippets, and Glossary terms. You can seamlessly translate these elements across different languages, ensuring accurate translations throughout your documentation for content reuse elements as well.

> For more information, read the articles on [**Snippets**](https://docs.document360.com/docs/snippets), [**Variables**](https://docs.document360.com/docs/variables) and [**Glossaries**](https://docs.document360.com/docs/editing-and-deleting-glossary-term).

![1_multilingual_translation.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Translation_of_content_reuse_elements.png)

---

### Log in using multiple Single Sign-On (SSO) options

**Category: Authentication | Feature**

![Multiple SSO Endpoints 2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Create_SSO_Choose_idp_page.png)

You can configure and use multiple SSO options simultaneously, providing greater flexibility in managing access to your knowledge base portal. This feature offers you more control over authentication methods for your team members. You can configure multiple Single Sign-On (SSO) options, including Okta, One-Login, Azure AD, Google Workspace, Auth0, AWS SSO, and any other custom SSO.

> For more information, check the category about [**Single Sign-On features**](https://docs.document360.com/docs/single-sign-on-sso).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1725205525164.png)

---

### Revamped table interactions

**Category: Editor | Feature**

The tables in the Document360 editor have received a visual update. While maintaining the same functionality, the new look and feel include updated bubble menus which immediately show table formatting options along with a visually appealing interface.

> For more information, read the article on [**Tables in the Advanced WYSIWYG editor**](https://docs.document360.com/docs/tables-in-advanced-wysiwyg-editor).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Revamped_tables_in_editor.png "image(161).png")

---

### Enhanced read receipts

**Category: Knowledge base site | Enhancement**

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. We're working on migration plans for existing customers and will communicate them soon.

You can now set up read receipt rules in Document360 settings, dynamically controlling reader acknowledgment capabilities for workspaces, categories, and user roles. Additionally, you can also perform bulk operations, managing read receipts for multiple articles at once. These powerful tools are available for all paid plans.

> For more information, read the article on [**Read receipts**](https://docs.document360.com/docs/read-receipt).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Read_receipts_phase_ii.png)

---

### Find unused files to free up Drive storage

**Category: Drive | Enhancement**

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Drive_dependencies_column.png)

Easily identify files stored in your Document360 drive that are not associated with any article, knowledge base customization features (Branding, Main pages, and Error pages), or content reuse features. This can assist you in removing unnecessary files, optimizing storage space, and keeping your drive organized.

> For more information, read the article on [**File dependency viewer**](https://docs.document360.com/help/docs/file-dependency-viewer).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Drive_dependencies_popup.png)

---

### Customize the workspace display name for different languages

**Category: Workspace | Enhancement**

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. We're working on migration plans for existing customers and will communicate them soon.

If you have a workspace with multiple languages, you can now manually customize the display name of your workspace for each language. Previously, the default workspace name would appear for all languages. Now, you can ensure that the workspace name is displayed based on the knowledge base site language selection.

> For more information, read the article on [**Setting up a multi-lingual knowledge base**](https://docs.document360.com/docs/setting-up-a-multi-lingual-knowledge-base).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Edit_workspace_display_name.png)

---

### Customize CTA button colors for dark theme

**Category: Site builder | Enhancement**

You can now customize the colour of the Call to action (CTA) button in the site builder separately for both light and dark themes. This will help you visualize the CTA button in both light and dark themes, ensuring a better user experience for your readers.

---

### Autosave for template editing

**Category: Knowledge base portal | Enhancement**

You can now edit templates with greater convenience thanks to the new autosave feature. As you modify templates, your changes are automatically saved in real-time, eliminating the need for manual saves. This feature ensures all your edits are preserved, preventing unexpected content loss.

---

## UI Updates

* We have streamlined comment notification settings by moving them from **General** to **Notifications** along with other notification settings in the knowledge base portal.
* In the Knowledge base site widget, if you choose to display selected categories, only the workspaces from which those categories are selected will appear in the workspace dropdown.

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the knowledge base portal and knowledge base site.

<a id="july-2024-1071"></a>

## July 2024 - 10.7.1

Document360 version 10.7.1 has been deployed, introducing enhancements to our knowledge management platform. This update focuses on search customization and content editing capabilities.

---

## Features/Enhancements

### Control article visibility in Ask Eddy AI search

**Category: Eddy AI | Enhancement**

You can now exclude specific articles from **Ask Eddy AI** searches. To access these new options, navigate to the article settings and look for the new **Search visibility** tab. Enabling this feature will restrict Ask Eddy AI from referencing this article in its responses, but this article can still be accessed from the category manager. For example - You might have both highly technical articles and simplified user guides on the same topic. You could exclude the technical ones from general Eddy AI searches to simplify the responses to user queries.

> NOTE
>
> The Exclude from Knowledge base search checkbox has been moved from the **SEO** tab to the new **Search visibility** tab.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Eddy_restrict_articles.png)

> For more information, read the article on [**excluding articles from search engines**](https://docs.document360.com/docs/excluding-articles-from-searches).

---

### Enhancement to the paste functionality

**Category: Editor | Enhancement**

You can now choose to retain or clear formatting when pasting content from Microsoft Word, including lists, tables, indentations, and fonts. This enhancement saves you time and effort by ensuring consistency in the format and indentation, and automated list management.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Copy_paste_formatting.png)

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

The practice of optimizing content to improve its visibility in search engine results and attract organic traffic. In Document360, Search Engine Optimization (SEO) elements can be added for each article through the article settings.

<a id="july-2024-1062"></a>

## July 2024 - 10.6.2

Document360 version 10.6.2 has been deployed, bringing refinements to our knowledge management platform. This update introduces two key features that enhance user engagement and content management. The new **Follow articles and categories** feature allows users to stay informed about updates to the documentation, while **schedule publishing** enables documentation teams to synchronize their documentation with product release cycles.

### Follow articles and categories

**Category: Knowledge base site | Feature**

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. We're working on migration plans for existing customers and will communicate them soon.

Readers can now subscribe to receive email notifications for specific categories or articles they choose to follow. This ensures readers stay informed about new articles and updates to existing content, enhancing engagement and overall experience.

> For more information, read the article on [**Follow articles and categories**](/help/docs/follow-articles-and-categories).

![6_Screenshot-Reader_notification_figma_Screenshot](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Reader_notification_figma_screenshot.png)

---

### Schedule publishing

**Category: Article management | Feature**

You can now schedule the publication date and time for your content in advance. You have the flexibility to schedule a single article or perform bulk scheduling operations for multiple articles at once. This will allow you to effectively plan your publishing schedule for new/updated articles based on your product’s release cycle.

> For more information, read the article on [**Schedule Publishing**](/help/docs/schedule-publishing).

![Schedule_publish.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Schedule_publishing.png)

---

### UI updates

Documentation360’s Gen AI model **Eddy** has been renamed to **Eddy AI**. This change is reflected on the knowledge base site and **Ask Eddy** has been updated to **Ask Eddy AI**.

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="june-2024-1061"></a>

## June 2024 - 10.6.1

The Document360 team is excited to introduce version 10.6.1. This release enhances the knowledge base experience with several new features and improvements, including the ability to download all articles in a category as PDF in the knowledge base site, share private links to unpublished articles with SMEs for review, enhanced translation capabilities through Phrase integration, and the integration of Eddy AI in the Document360 widget. These updates, along with various other improvements, aim to enhance content creation and management, boost productivity, improve accessibility and user experience, strengthen security measures, and provide more robust analytics across the platform.

---

## Features/Enhancements

### Download specific article categories as PDF

**Category: Content tools | Enhancement**

> For your information (FYI)
>
> This feature is available exclusively in private and mixed projects in **KB Site 2.0**, which is accessible for projects created after June 10th. We're working on migration plans for existing customers and will communicate them soon.

You can now download multiple articles from one or more categories on your knowledge base site as PDFs at the same time in private projects. This update helps you save time, allowing you to download PDFs in bulk, instead of downloading them one at a time. You can also create an offline version of the knowledge base site for easy access.

> For more information, read the article on [**downloading articles from the knowledge base site**](http://docs.document360.com/help/docs/downloading-category-and-article-in-kb-site).

![1_download_category1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Export_categories_as_PDF.png)

---

### Share a private link to an article

**Category: Categories & article | Enhancement**

> For your information (FYI)
>
> This feature is available exclusively in **KB Site 2.0**, which is accessible for projects created after June 10th. We're working on migration plans for existing customers and will communicate them soon.

You can now share articles using a private link even before publishing the content. This feature allows you to generate a unique link for any article, granting access to the content without associating it with the knowledge base site. This will allow you to send your articles for review to users not associated with the knowledge base portal before you publish them. You can share these private links with external users and regenerate the links at any time to manage access as per your preferences.

> For more information, read the article on [**Share articles via private link**](https://docs.document360.com/help/docs/share-articles-via-private-link).

![shareprivatelink.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Share_link_for_review_kbportal.png)

---

### Enhanced translation with Phrase integration

**Category: Extensions | Feature**

Document360 now integrates with Phrase, a leading translation service platform. With this integration, you can translate and localize your knowledge base into multiple languages, achieving higher translation accuracy and faster turnaround times with less manual effort. Translate individual articles, multiple articles in a category, or even entire workspaces to your desired language, all with just a few clicks.

> For more information, read the article on [**Phrase Translation**](/help/docs/phrase).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image(129).png "image(129).png")

---

### Integration of Eddy AI in the knowledge base site widget

**Category: Knowledge base widgets | Enhancement**

Eddy AI is now available as a Document360 widget on your knowledge base site. The widget will allow you to access support in multiple languages, such as English (en), French (fr), Spanish (es), German (de), Norwegian (no), and Dutch (nl).

> For more information, read the article on [**knowledge base widgets**](/help/docs/knowledge-base-widget-getting-started).

![1_Screenshot-Eddy_widget_with_multi_lingual_support](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Eddy_integration_in_widget.png)

---

### Eddy AI’s improved symbol recognition capabilities

**Category: Eddy AI | Enhancement**

Eddy AI can now identify and understand tick () and cross () symbols within tables, significantly improving its ability to interpret structured data. This update enhances Eddy AI's accuracy in analyzing yes/no, true/false, or pass/fail data points in tables.

---

### JWT analytics for KB widget

**Category: Knowledge base widget | Enhancement**

You can now track user interactions and engagement within private and mixed projects secured via JSON Web Token (JWT) authentication. The integration of JWT authentication analytics into the existing analytics framework provides insights into user behavior, content effectiveness, and security compliance when interacting with the knowledge base.

> For more information, read the article on [**Articles analytics**](/help/docs/articles-geography-and-performance).

---

### Effortless content authoring with enhanced slash menu

**Category: Editor | Enhancement**

Use the slash command to boost your productivity with keyboard-only interactions in the Advanced WYSIWYG editor. The enhanced slash menu, which is now organized under the Format, Insert, and Content Reuse tabs, provides a more intuitive user experience. You can also easily access Eddy AI right from the top of the slash menu.

> For more information, read the article on [**Advanced WYSIWYG editor**](/help/docs/advanced-wysiwyg-editor).

![slashcommand.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Enhanced_slash_menu.png)

---

### Add tags and alt-text during file upload

**Category: File management | Enhancement**

You can now add tags and alt-text descriptions to files right when you upload files to Drive on Document360. This new functionality allows you to organize files with relevant tags and provide accessibility-friendly alt-texts during the upload process itself. You can also apply common tags to multiple files and common alt-texts to multiple images simultaneously.

> For more information, read the article on [**adding folders and files**](/help/docs/adding-folders-and-files).

![tags and alt texts.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Bulk_add_tags_alt_text.png)

---

### Display user initials as default avatar

**Category: Knowledge base portal | Enhancement**

If you haven't uploaded a display picture to your user profile, you will now see your initials as the default avatar. This change also applies if you decide to remove your existing profile picture. By displaying your initials, we've made it easier for you to identify your presence in the portal.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-User_initails_default_avatar.png "image(145).png")

---

### Display user first and last name for JWT login

**Category: Knowledge base site | Enhancement**

Users logging in to the knowledge base site using JSON Web Token (JWT) authentication will now be able to see their first and last name in their user profile.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-JWT_user_first_last_name.png)

---

### Real-time network connectivity status notification

**Category: Knowledge base portal | Enhancement**

You will now receive a notification at the bottom of your screen on the knowledge base portal if your system is disconnected from the internet. This real-time alert allows you to take immediate action, ensuring no loss of data or interruption to your documentation process. You will also not be able to make any updates to your article until connectivity is restored.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot-Network_connectivity_notification_color.png)

---

> NOTE
>
> Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

<a id="june-2024-1052"></a>

## June 2024 - 10.5.2

The Document360 team is excited to introduce version 10.5.2 with the addition of a keyboard shortcuts overview page in the Advanced WYSIWYG editor, along with minor bug fixes and performance & security enhancements.

---

## Features & Enhancements

### Keyboard shortcuts overview

**Category: Editor | Enhancement**

Document360 offers a wide variety of keyboard shortcuts for the Advanced WYSIWYG editor, to streamline your editing process, making it faster and efficient. You can now view the keyboard shortcuts with a single click. Simply click on the **More** icon () next to the Publish button in the top-right corner of the editor to view the list of all keyboard shortcuts. The keyboard shortcuts will be displayed based on your operating system (Windows or Mac).

For more information, read the article on [**Advanced WYSIWYG Editor basics**](https://docs.document360.com/docs/advanced-wysiwyg-editor-basics).

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Keyboard_shortcuts_overview_details.png "3_Screenshot-Keyboard shortcuts.png")

---

## Performance improvements & bug fixes

This release includes backend optimizations and bug fixes to provide you with a smoother and more responsive experience. Benefit from improved overall performance, faster response times, improved search performance and a smoother editor experience.

### Security updates

Document360 now provides enhanced security with bot detection and blocking for the knowledge base portal and site, operating in Block mode to prevent unwanted traffic and protect data integrity. Please note that this security enhancement may impact custom automation scripts like URL links or site crawling. Implementing these measures is critical for safeguarding against malicious bot activity.

For more information, read the article on [**Bot management**](/help/docs/bot-management).

<a id="may-2024-1051"></a>

## May 2024 - 10.5.1

The Document360 team is thrilled to introduce Document360 version 10.5.1. This release contains exciting new features such as advanced AI functionalities, optimized search engine, improved PDF template customization, and enhanced comment notifications, alongside several other enhancements and associated UI updates.

---

## Features & Enhancements

### Ask Eddy AI in multiple languages

**Category: AI Features | Feature**

The Ask Eddy AI's search capabilities now extend beyond English to include multiple languages such as French (fr), Spanish (es), German (de), Norwegian (no), and Dutch (nl). Explore content in your preferred language effortlessly. In addition, the Ask Eddy AI API also supports these languages.

> For more information, read the articles on [**AI assistive search**](/help/docs/ai-assistive-search-ask-Eddy AI) and [**Ask Eddy AI API**](/help/docs/ask-Eddy AI-api).

![Portal_Screenshot-Eddy_in_multiple_languages_](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Eddy_in_multiple_languages_.png)

---

### Eddy AI processes tables, code blocks, and LaTeX

**Category: AI Features | Enhancement**

In addition to the textual content, Ask Eddy AI can now comprehensively extract information from articles, encompassing code blocks, tables, and LaTeX. This enhancement enables Eddy AI to deliver optimized responses to your queries, offering a comprehensive understanding of the article content, helping you access a wider range of information efficiently.

> For more information, read the article on [**AI assistive search**](/help/docs/ai-assistive-search-ask-Eddy AI).

![Portal_Screenshot-Eddy_fetches_more_than_text_](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Eddy_fetches_more_than_text_.png)

---

### Convert to active/passive voice with AI writer

**Category: AI features | Feature**

Seamlessly transition between active and passive voice using the AI writer while creating content in Document360. This enhancement provides you with more flexibility in crafting content by enhancing the readability metrics and adhering to your style guide.

> For more information, read the article on [**AI writer**](/help/docs/ai-writer).

![Portal_Screenshot-AI_Writer_Split_Sentences](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-AI_Writer_Split_Sentences.png)

---

### Split sentences with AI writer

**Category: AI features | Feature**

The new split sentence feature of the AI writer enhances content readability by intelligently splitting your complex sentences into smaller, more readable segments. This makes your content clearer and more engaging for readers, enhancing their reading experience.

> For more information, read the article on [**AI Writer**](/help/docs/ai-writer).

---

### Optimize search results

**Category:** Site Management **| Enhancement**

Improved search functionalities are introduced that offer more accurate and relevant search results. Enhancements include advanced search operators such as `" "`(double quotes) and `-` (hyphen), synonym support, and inclusion of stop words. These improvements help you to find the exact information you need, saving time and increasing productivity.

> For more information, read the article on [**Search functionality**](/help/docs/dedicated-search-page).

![Portal_Screenshot-Updated_Advanced_Search_enhancement](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal_Screenshot-Updated_Advanced_Search_enhancement.png)

---

### Customize PDF templates

**Category: Content tools | Feature**

Explore the updated PDF template features with extended character limits for titles and descriptions. Additionally, there are no character limits for Terms & conditions, offering greater flexibility in document creation. You can choose to display the path to the article/category as breadcrumbs in your PDF’s table of contents. You can also add a background image to the cover page, making your document look more personalized and professional when downloaded as a PDF.

> For more information, read the article on [**Designing a PDF template**](/help/docs/pdf-design-templates).

![1_advancedPDFtemplate](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_advancedPDFtemplate.png)

---

### Include page breaks in PDFs

**Category: Editor | Enhancement**

You can now insert page breaks between content elements in the knowledge base portal with the advanced WYSIWYG editor. With this feature, you can precisely control where content begins and ends on each page when exporting content in PDF format. These page breaks are only reflected in the exported PDF and not on the knowledge base site.

> For more information, read the article on [**Advanced WYSIWYG editor**](/help/docs/advanced-wysiwyg-editor).

![1_pagebreak](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_pagebreak.png)

---

### Receive notification for all comments

**Category: Editor | Enhancement**

Previously, contributors of an article in the Knowledge Base portal received notifications only when they were tagged in an inline comment on their article. With this enhancement, all contributors of the article will receive notifications for all inline comments on that specific article. This streamlines the review process, ensures prompt responses, and fosters collaboration by keeping the contributors informed.

> For more information, read the article on [**Reviewing an article using in-line comments**](/help/docs/reviewing-an-article-inline-comments).

![Portal-Screenshot-Enhanced_Comment_notification_system](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Portal-Screenshot-Enhanced_Comment_notification_system.png)

---

Note

Minor security updates, bug fixes, and performance improvements have also been implemented across the Knowledge base portal and Knowledge base site.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="may-2024-1042"></a>

## May 2024 - 10.4.2

The Document360 team is thrilled to introduce Document360 version 10.4.2. This release note showcases the details of the enhancements and the associated UI changes.

---

## Features/Enhancements

### Enhanced search relevance

**Category: Portal Management | Enhancement**

The search functionality has been enhanced to ensure more accurate and relevant search results. Inspired by extensive research, we've redesigned search to prioritize what matters most to you. The search results are now ranked based on title, tags, slug, breadcrumb, and content, delivering precise responses to your queries.

> For more information, read the article on [**Search in Knowledge base site**](/help/docs/dedicated-search-page).

---

### Inline code

**Category: Editor | UI/UX improvement**

Add code snippets to your article using the **Inline code** function by selecting the Inline Code icon (  ) in the Format section. Alternatively, you can perform this by using slash command or the keyboard shortcut **Ctrl + E**. In addition to the existing code block feature, you can now seamlessly integrate code within your content for better readability and comprehension.

> For more information, read the article on [**Advanced WYSIWYG editor**](/help/docs/advanced-wysiwyg-editor).

![3_Screenshot-inline_code_new_tool](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-inline_code_new_tool.png)

---

### Streamlined editing without emoji interruptions

**Category: Editor | UI/UX improvement**

We've enhanced the editing experience by eliminating interruptions caused by the emoji list that previously appeared when you pressed colon (:) while editing the article. You can still effortlessly insert emojis via the **Insert** (  ) > **Emoji** option located conveniently in the right menu of the Advanced WYSIWYG editor.

<a id="1041-release-note"></a>

## April 2024 - 10.4.1

The Document360 team is thrilled to introduce Document360 v10.4.1. This point release note showcases the details of the new feature and the associated UI changes.

---

## Features/Enhancements

### Eddy AI search analytics

**Category: Analytics | Feature**

Monitor and visualize user queries in Document360 including successful and unsuccessful searches with our new feature, Eddy AI search analytics. This insight enables you to refine and optimize your knowledge base, enhancing user support and satisfaction.

> For more information, read an extensive article on [Eddy AI search analytics](/help/docs/eddy-ai-search-analytics).

![1_Screenshot-New_feature_Eddy_search_analytics_](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-New_feature_Eddy_search_analytics_.png)

---

### Ask Eddy AI API

**Category: AI Features | Feature**

The Ask Eddy AI API is now open for public. You can use this API to seamlessly integrate the Ask Eddy AI functionality into your own applications, customize it to suit your needs, and ensure scalability to accommodate multiple users and systems simultaneously. You can access it from the project version as one of the API endpoints.

> For more information, read the article on [Perform AI assistive search within project version](https://apidocs.document360.com/v2-api/apidocs/perform-ai-assistive-search-ask-eddy-within-project-version).

---

Note

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

<a id="april-2024-minor-release"></a>

## April 2024 - Minor release

Document360 is back with another minor release this April 2024. Let's look at some enhancements and improvements to the Document360 knowledge base.

---

## New Feature(s)

### Multilingual support in the Document360 portal

Now you can explore Document360 not only in English but also in Spanish(es-ES) and Portuguese(pt-BR) as a beta release.

> Read the extensive article on [managing your language preferences](/help/docs/manage-your-language-preferences).

![1_Screenshot-Portal_Localization_mini_release](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Portal_Localization_mini_release.png)

---

<a id="march-2024"></a>

## March 2024

Document360 is back with another monthly release this March 2024. Let's look at some enhancements and improvements to the Document360 knowledge base.

---

## New feature(s)

### 1. Automated Business Glossary

The Automated Business Glossary is one of the Artificial Intelligence (AI) powered features in Document360. It fosters communication and collaboration by clarifying ambiguous terminology. It enables you to compile a list of business terms utilized within your organization, providing clarity and a shared understanding of potentially confusing terms.

![2_Screenshot-Automated_Business_glossary](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Automated_Business_glossary.png)

> Read the extensive article: Using the [Automated Business Glossary](/help/docs/automated-business-glossary)

---

## Enhancement

### UI Enhancement

Document360 2.0 introduces few minor tweaks to the Knowledge base portal with some significant User Interface (UI) enhancements. The latest design exhibits fluidic interactions, a simplified interface, and enhanced user experience.

> Read the extensive article: [UI Enhancement in Knowledge base portal](/help/docs/ui-enhancements)

---

### Feature enhancement

#### 1. Spell Checker:

We've implemented a spell checker in the markdown editor. Simply right-click on a word, and suggestions for corrections will be displayed through your browser's native functions. Click on the suggested correction to apply it as needed.

![5_Screenshot-Markdown_Spell_checker](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Markdown_Spell_checker.png)

---

#### 2. Customize site highlighter:

We've added a feature to highlight elements in the customize site as you click on them, enhancing user experience and making navigation easier.

![4_Screenshot-KB_customize_site_highlighting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-KB_customize_site_highlighting.gif)

---

#### 3. JWT Filter in Analytics

We've introduced JWT Filters in the analytics section, allowing you to filter JWT readers for better insights and analysis.

![1_Screenshot-Adding_JWT_filters](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Adding_JWT_filters.png)

---

#### 4. Introducing second card payment

Now, you can add a second card in the payment billing section. The primary card is still used for billing, but if it runs out of funds or expires, the system will automatically use the second card for renewal.

> To read more, [Introducing second card payment](/help/docs/changing-payment-information)  
> ![3_Screenshot-Adding_secondary_card](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Adding_secondary_card.png)

---

#### 5. API Documentation

You can now allow your end users to choose multiple Content-type in the GET requests.

![6_Screenshot-API_Documentation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-API_Documentation.png)

#### 6. Supporting the image percentage

In the Advance WYSIWYG editor, you can provide the inputs of the image in percentage for width and height.

![7_Screenshot-UpdatedImage_percentage](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-%28Updated%29Image_percentage.png)

---

## Improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="february-2024"></a>

## February 2024

Document360 is back with another monthly release this February 2024. Let's look at some enhancements and improvements to the Document360 knowledge base.

## Enhancements

### 1. Clone or move the articles/category across workspaces.

Now you can clone or move the articles and categories across workspaces.

#### **Clone the article and category**

All cloned articles are considered as New articles.

To experience this, from the Knowledge base portal → Click **•••** (more) option on the desired **category/article**, click the **Clone category**.

A **clone category** window pop-up appears.

1. **Category name:** Desired category name
2. **Workspace:** Select the desired workspace to clone
3. **Category:** Select the desired category or click **Reset** to assign it to the root category

Once done, click **Clone**.

![1_Screenshot-Cloning_the_category](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Cloning_the_category.png)

Security restrictions will be applied based on the destination workspaces / categories.

#### **Moving the article and Category**

1. From the Knowledge base portal, select any desired article, click ••• and **Move to**
2. The **Move article** window appears. Select the desired **workspace** and **category**.
3. Once done, click **Move**.

Security restrictions will be applied based on the destination workspaces / categories.

![2_Screenshot-moving_an_article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-moving_an_article.png)

While moving, the article status will be the same. Similarly, you can move the category too.

### 2. AI Writer (Eddy AI) - Convert into table

Harness the power of Document360's AI Eddy AI to convert the text into table form.  
Go to the Advanced WYSIWYG editor, select the desired texts, and click **Eddy AI → Convert into table**. Click **Replace** to implement the generated tabular data.

![3_Screen_GIF-AI_Writer_Convert_into_table](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screen_GIF-AI_Writer_Convert_into_table.gif)

### 3. Securing Knowledge base widget authentication using JWT

Now, you can implement an authentication configuration for the widget using JWT, ensuring a secure environment for private and mixed projects.

Navigate to the **Knowledge Base widget**. Select the desired **widget** and configure JWT for your project.

![4_Screenshot-JWT_for_the_Knowledge_base_widget_authentication](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-JWT_for_the_Knowledge_base_widget_authentication.png)

### 4. API Documentation

We added new endpoints in our customer API Drive operations in Document360. These endpoints empower you to perform various actions seamlessly within your Document360 account. The summary of the newly added endpoints is

| Action | Endpoint |
| --- | --- |
| GET | Gets folder information by folder ID |
| GET | Gets file information |
| GET | Drive search - files and folders |
| GET | Get status of the delete file operation |
| GET | Get all media files inserted in the article |
| GET | Gets folders information |
| POST | Add new folder in drive |
| POST | Add file in to drive |
| POST | Add tags in a file using file ID |
| POST | Delete tags from files |
| POST | Copy file from one folder to another |
| PUT | Move a file with file ID |
| PUT | Update a folder with ID |
| DELETE | Delete a folder |
| DELETE | Delete file using file ID |

File size limit for import

You can import the maximum file size is **40MB** per file.

## Improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and site.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

A feature in Document360 that enables users to create independent environments for managing different sets of documentation, such as separate versions or product iterations.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

<a id="january-2024"></a>

## January 2024

Document360 is back with another monthly release this January 2024. Let's look at some enhancements and improvements to the Document360 Knowledge base.

---

## Enhancements

### 1. AI writer (Eddy AI)

#### Convert speech

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%28111%29.png)

Harness the power of Document360's AI Eddy AI to change the selected text from

* **Direct speech to Indirect speech**  
  (or)
* **Indirect speech to Direct speech**  
  Select the intended text in the Advanced WYSIWYG editor, click **"Eddy AI" > "Convert speech"** in the floating menu, and choose the speech conversion required.

#### Improve it

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%28112%29.png)

This AI option enhances the quality of the selected content and improves attributes such as

* Grammar
* Semantics
* Clarity
* Phrase structuring
* and more

Select the intended text in the Advanced WYSIWYG editor, click **"Eddy AI" > "Improve it"** in the floating menu.

### 2. Unified search across regular and API workspaces

Now Knowledge base site readers can use the search option to search across multiple available workspaces and API workspaces. You can find a tab "API endpoints" in the same search result window.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%28114%29.png)

To enable this feature in "Advanced search," navigate to **Settings > Knowledge base portal > Article settings & SEO > Article settings > Search settings**. Turn on the "Enable advanced search" toggle and check the "Include all workspaces in search" checkbox.

### 3. Quick product support - Issues/Clarifications

A new way to seek Document360's support from your Knowledge base portal. Click on the "Help" icon at the top-left and select "Issue/Clarification" to launch the support request widget in one click.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%28117%29.png)

---

## Improvements

* One of the most requested "Insert link" keyboard shortcut is added to the Advanced WYSIWYG editor. Press "**Ctrl + K**" to launch the Insert link pop-up

* Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and site.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

The public-facing website where end-users can access articles and find answers to their questions.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="december-2023"></a>

## December 2023

Document360 is back with another monthly release this December 2023. Due to the holiday season, we have moved up our release date from the last week. Let's look at some enhancements and improvements to the Document360 Knowledge base.

---

## Enhancements

### 1. AI Writer -Outline creation

When the author types in a prompt to create a content outline on a specific topic, the "Eddy AI" AI acts similar to other AI content generation platforms and creates an elaborate outline on the mentioned topic with headings and brief abstracts. " You can use the Keyboard shortcut "**Ctrl + Spacebar**" to launch the Eddy AI input.

![1_Screenshot-AI_writer_outline_creation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-AI_writer_outline_creation.png)

### 2. Reintroducing "Advanced WYSIWYG editor"

We have renamed the "Block editor" to "Advanced WYSIWYG editor" (What You See Is What You Get). The change can be observed in the Knowledge base portal.

![2_Screenshot-Advanced_WYSIWYG_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Advanced_WYSIWYG_editor.png)

---

## Improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and site.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="november-2023"></a>

## November 2023

Document360 is back with another monthly release this November 2023. Let's look at some enhancements and improvements to the Document360 Knowledge base.

---

## Enhancements

### 1. API Documentation

* API documentation is available as an option in the Backup & Restore section of your project
* Recycle bin is now added for the API documentation project, where users can restore deleted categories and articles
* Earlier, the "Try it" module was only when the server variable was defined "Globally" (Specified next to the "Info" object in the specification file). With the recent enhancement, the "Try it" module is available even if the server variable is mentioned at an endpoint level

### 2. Image formatting - Block editor

We have enhanced the image formatting functionality in the Block editor tool. You can now crop the image with ease using the crop option.  
![1_Screenshot-Block_editor_image_controls](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Block_editor_image_controls.png)

### 3. Custom domain mapping - TXT record no longer required

In the earlier implementation, when you map your custom domain to the Document360 project, CNAME and TXT records will be necessary. As an enhancement, any new domain mapping or editing of an existing mapping only requires CNAME.  
 Read our [**Custom domain mapping**](/help/docs/custom-domain) help article to know more.

### 4. Introduction of Premium support for Document360

All new Document360 customer can avail of Document360's premium support for their project at a nominal price. You can purchase this support addon from the Knowledge base portal's Billing section or by clicking on the promotional banners that appear within the product.

With this offering, you’ll enjoy priority access to expedited support service and response times, ensuring your issues are addressed promptly. Document360 will allocate a dedicated support expert to work closely with you to provide personalized guidance.

For more information on the Premium support, please go through the [**Document360's pricing page**.](https://document360.com/support/#d360-support)

### 5. Other improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and site.

Application Programming Interface - A set of rules that allows one software application to communicate with another.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="august-3"></a>

## August 2023

## Enhancements

### 1. API Documentation

Earlier, the Document360 API documentation tool supported just OpenAPI specification files. From this release, Document360 supports OpenAPI and Postman specification files.

#### Postman specification file

* The Postman specification file should be less than 15 MB
* Only "Basic auth" and "Bearer token" are the supported authorizations in the specification file
* You can upload other authorization files, but then you cannot send requests or use the "Try it" feature

#### OpenAPI specification file

* Document360 now supports anyOf and oneOf in the OpenAPI specification files

---

### 2. Zendesk extension

We have enhanced the Document360 integration on Zendesk with a new look, feel, and more options.

#### What's new

Here is the list of new enhancements compared with the previous integration (Document360 app in the Zendesk window)

* Project workspace and language selection are available at the top
* The Project name is displayed in full and not truncated
* Document360's brand color and styling is observed
* The "Open in Knowledge base" option is moved next to the article title
* Users can create root-level categories and subcategories on the Knowledge base from Zendesk
* If the search did not bring up any results, the "Create a new article" option is displayed
* The article creation module is similar to the Document360 portal interface
* When you link an article in a response chat, a "Linked" label appears next to the article
* The "last updated date" information is now visible in the article
* The Document360 quick-access icon is available in the Zendesk reply section's toolbar

---

### 3. New Document360 (2.0 Design)

Here are some enhancements in the new Document360

#### Analytics

* The "Export as CSV" option is now available on all the "Analytics" modules

#### Editor

* A new look and feel to the menus and tools in the Block editor
* Article settings menus (right side of the window) are now moved to the top of the editor
* Discussions are available at the top next to the "Settings" icon
* Article information such as contributors, attributes, and word count is available when you click on the "i" (Article information) icon next to the article title
* Adding article description is moved next to the article title
* Article analytics, Health check metrics, and Revision history moved inside the "More options" next to the Publish/Edit button at the top

#### Others

* The "Export to PDF" option is now available on articles
* "Configure article settings" added to the publish module. The options available when you expand this section are Tags, SEO description, Related articles, and Status indicator

---

## Improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

<a id="july-2"></a>

## July 2023

## Enhancements

### Import & Export project

We have enhanced the Import and Export functionality by optimizing the project file export. All the new project exports generated can be seamlessly imported to Document360.  If you need to import old project ZIP files exported before **August 12, 2023**, our Document360 support team is here to assist you.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%2849%29.png)

Another notable update is that if your Drive capacity utilization exceeds **1 GB**, the "Include media files" option in your export is deactivated. Should you wish to export files larger than 1 GB, please get in touch with Document360 support.

> Kindly contact the [**Document360 support**](mailto:support@document360.com) for further assistance.

  

NOTE

Read the [**Import & Export project**](/help/docs/export-as-zip) help article for more information.

---

## Announcement

### 🎉 Exciting news: Introducing Document360's fresh new look!

We are thrilled to reveal our revamped design and UI for Document360. Get ready for an optimized user experience, sleek navigation flow, and a fresh portal feel.

![1_Screenshot-New_UI_mockup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-New_UI_mockup.png)

Currently available for customers in all pricing tiers (Standard, Professional, Business, Enterprise and above). Switch between the old and new UI using the toggle at the top of your screen. We invite you to explore the new UI, provide feedback, and shape the Document360 platform.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%2850%29.png)

Enjoy the sneak peek into the beta testing phase as we fine-tune the new UI based on your valuable input. Stay tuned for the official launch of the new Document360 in the upcoming months.

### Analytics UI - Enhancement

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%2851%29.png)

We have introduced a new interface to view and manage your Knowledge base analytics. You can enjoy the updated design with a small catch. Data older than **July 8, 2023,** is not accessible in the New Document360 Analytics, and the option to export data is temporarily unavailable.

![image.png](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image%2852%29.png)

#### What's new!

* You can observe a slight difference in the "**Reads**" and "**Views**" metrics when you switch between the old and the new UI. We have recalibrated the calculation logic for these metrics
* The "**Geography**" and "**Performance**" metrics have been merged and enhanced as a new section called "**Articles**"
* A redefined and elaborate "**Feedback**" section which redirects you to the "Feedback manager" to respond to feedback
* A simplified redesign of the "**Ticket deflector**" tabs
* Overall enhancement of design elements like charts, graphs, and colors

---

### 🚀 Introducing the Document360 "Startup program!" 🚀

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/StartUpWithUsGIF.gif)

Unlock incredible discounts with our all-new Startup Program! If your company

* Is **under three years old**
* Has **fewer than 20 employees**
* Not a past or existing customer

Exclusive pricing discount available for Document360's "**Standard**, **Professional**, and **Business**" plans. This offer is valid for your first-year subscription

[![2_Screenshot-New_startup_plan](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-New_startup_plan.png)](https://document360.com/pricing/)

Reach out to our team today to see if you qualify and grab this fantastic opportunity!

[**Explore the "Startup program" ->**](https://document360.com/pricing/)

---

## Improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

<a id="june-3"></a>

## June 2023

## Enhancement

### API Documentation: New API hub command

We have added a new command `apihub:validate` to the existing `apihub` and `apihub:resync` in the D360 NPM package. With the new '**apidocs:validate**' command, you can validate your OAS (OpenAPI Specification) file.

---

## Improvements

#### 1. Insert multiple images in one go

Earlier, you could select and insert one image at a time using the **Insert images > From file picker**. With the new improvement, you can pick and add multiple images using the 'Insert image' tool. This improvement is available in Markdown and Block editor in the article and template module.

#### 2. Other improvements

Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

<a id="may-1"></a>

## May 2023

## New Features

### 1. Article title recommender (AI-powered)

The Article title recommender is one of the Artificial Intelligence (AI) powered features in Document360. You can use the title recommender feature when naming or renaming your articles. The feature suggests three titles by assessing the article content and consumes one credit for one article title generation. The **Suggest title** option can be found in the article title section in the editor.

![Screenshot_1-AI_title_recommender_button](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot_1-AI_title_recommender_button.png)

The title recommendation feature is available across all subscription tiers with specific credit limits.  As a prerequisite this feature requires a preprocessed word count of 50 words in the article to generate and recommend titles.

> Read the extensive article: [Using the 'Article title recommender'](/help/docs/ai-title-recommender-for-articles)

---

### 2. Article summarizer (AI-powered)

The Article summarizer is also one of the Artificial Intelligence (AI) powered features in Document360. This feature is useful when the reader does not want to read through a lengthy article. This feature consumes one credit for one article summary.

![Screenshot_2-Article_summarizer_KB_site_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot_2-Article_summarizer_KB_site_view.png)

The article summarizer assesses the article content and creates a relative summary of the article in the article's top section for readers. The article summarizer is available across all subscription tiers with specific credit limits. As a prerequisite this feature requires a preprocessed word count of 250 words in the article to generate a summary.

> Read the extensive article: [Understanding the 'Article summarizer'](/help/docs/article-summarizer)

  

NOTE

The **credits** used for article title recommender and article summarizer are two different standalone limits.

---

## Enhancements

### 1. IPv6 supported in IP restrictions

Earlier, only Internet Protocol version 4 (IPv4) was supported in IP restrictions in Document360. From this release Document360  supports **IPv4** and **IPv6** in two modules of the Knowledge base portal

* **Exclude in Analytics**

  > (Settings > Knowledge base portal > General > Analytics (tab) > New IP restriction)
* **Site access IP restriction**

  > (Settings > Users & security > IP restriction > New IP restriction).

---

### 2. SSO login with subdomain

Earlier SSO users in your Document360 could only log in using their Email domains. From this release, SSO users can use their subdomain (default choice) or email domain to single sign on to the Document360 projects.

![Screenshot_1-SSO_updated_login _screen](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Screenshot_1-SSO_updated_login%20_screen.png)

This change is visible in the SSO login screens, where you can use the subdomain or email credentials for authentication. The 'Email domain' field in the **SAML/OpenID basic configuration** section is now optional.

This restriction removal allows a single email domain to be configured for SSO in multiple Document360 projects. However, if you want to be able to view all your project associations as an SSO team account/reader, you have to 'Allow' the domain

> **Note**: The subdomain can also be used to log in for the projects using a custom domain configuration.

---

### 3. Spec file import in the API documentation

Import of 'Specification file' is now supported in the Document360 API documentation tool. Earlier, you could not directly import a spec file; you could only use the URL method.

---

## Improvements

### 1. Extensions - Multi-region support

The following extension is now available for US data center projects. Earlier, this extension was available only for EU data center projects.

* [**Intercom**](/help/docs/intercom-integration)

### 2. Other improvements

* **Mangolian** (**mn**) is now available in the list of languages for Document360 localization
* Minor security updates, bug fixes, and performance improvements can also be observed in the Knowledge base portal and Knowledge base site.

<a id="april-3"></a>

## April 2023

## New feature

### Block editor

We are introducing an all-new editor apart from the two existing editors available (Markdown and WYSIWYG) .

NOTE

The new 'Block editor' is available for all **new customers** and all **new projects** (existing customers). For existing customers/projects, you can expect a rollout of the new editor at the earliest.

The 'Block editor' is hybrid, lightweight, and powerful, with rich text editing capabilities and supports Markdown syntax. It provides a more visual and intuitive experience than the Markdown editor while still being more flexible than the WYSIWYG editor.

You can switch to the new editor from the right-side menu,  **Article settings > Editor**

> Read the extensive article: [**Block editor - Getting started**](/help/docs/block-editor)

---

## UI/UX updates

### "Version"  renamed as "Workspace"

The project "**Version**" has now been renamed as "**Workspace**". This change can be observed in the Knowledge base portal modules.

### "Assistant" renamed as "Widget"

The "**Knowledge base assistant**" has now been renamed as "**Knowledge base widget**". This change can be observed in the 'Settings' and few other modules in the Knowledge base portal.

---

## Enhancement

### 1. API Documentation

#### CI/CD flow in the API documentation

We have added CI/CD flow as a source type in the API documentation. This helps you to resync the spec file without manual effort seamlessly.

> Read the extensive article: [**Generate API documentation with CI/CD flow**](/help/docs/how-to-upload-api-specification-file#how-to-generate-api-documentation-with-cicd-flow)

#### API reference endpoints

API Reference endpoints can now be accessed to perform basic API Documentation functionalities.

---

### 2. Localization

#### Default language selection

Earlier, 'English' was the default language in a workspace, and you cannot change this setting. Now we have introduced the option to set any language as a default language. In your Document360 project's Knowledge base portal go to **Settings > Knowledge base portal > Localization & Workspaces**, and click on the edit icon next to the Workspace. In the available languages, click the ••• option and select "**Set as default**".

#### New languages added

We have added four more languages to the localization and translation feature of Document360.

| Language | Code |
| --- | --- |
| Bulgarian | bg |
| Hungarian | hu |
| Lithuanian | lt |
| Slovenian | sl |
| Turkish | tr |

---

### 3. IdP initiated Single Sign-On (SSO)

Identity Provider (IdP) initiated login is now available for the SAML configuration on Document360. You can enable the "Allow IdP initiated login" toggle from the Knowledge base portal on **Settings > Users & Security > SAML / OpenID > SAML > SAML basic configuration**.

The IdP supported by Document360 for SAML configurations is **Okta**, **Auth0**, and **Azure AD**.  
 An exclusive **IdP initiated sign-on URL** is obtained from the IdP and shared with the SSO users. The SSO users can use the link to log in to the Identity Provider's dashboard, select the configured projects, and access Document360 directly.

> Read the extensive article: [**IdP initiated login**](/help/docs/idp-initiated-login)

---

## Improvements

### 1. Extensions - Multi-region support

The following extension is now available for US data center projects. Earlier, this extension was available only for EU data center projects.

* [**Drift**](/help/docs/drift)

### 2. Other improvements

Minor performance updates, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

<a id="march-4"></a>

## March 2023

## Improvements

### 1. Version slug

Now you can update the slug of a project version. This field was previously limited to updates, but now you have complete control. You can also set a redirect rule for the slug changes, as the version slug is an essential element for SEO.

[**Read more →**](/docs/versioning-getting-started#how-to-update-the-version-slug)

---

### 2. URL mapping

We have added a new option, **Settings - URL mapping** in the "Installation & setup" of the Knowledge base assistant settings. This option allows you to define the Knowledge base assistant behavior for URLs that do not have mapping configured. You can display the last opened article/category (or) Page help/Knowledge base tabs in the assistant.  
![6_Screenshot-KB_assistant_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-KB_assistant_settings.png)[**Read more →**](/docs/url-mapping#settings-url-mapping)

---

### 3. Localization languages

We have added the following languages in the localization module:

* Afrikaans [af]
* Arabic (Egypt) [ar-eg]
* Chinese (Simplified, People's Republic of China) [zh-cn]
* Chinese (Traditional, Taiwan) [zh-tw]
* Filipino [fil]
* Georgian [ka]
* Portuguese (Brazil) [pt-br]

---

### Other improvements

Minor performance, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

The practice of optimizing content to improve its visibility in search engine results and attract organic traffic. In Document360, Search Engine Optimization (SEO) elements can be added for each article through the article settings.

A widget that allows users to search for and find answers from your knowledge base directly within your site or application, without navigating away.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="february-3"></a>

## February 2023

## New features

### 1. API documentation

Document360 now offers the **API documentation** feature, which provides a complete solution for creating and managing your **API references**. This feature makes your API documentation comprehensive, well-structured, and easy to navigate.

The all-important "Try it" option is also available to perform the actions within the Knowledge base site. Check our [supported authorization techniques](https://docs.document360.com/help/docs/try-it#supported-authorization-techniques).  
![1_Screenshot-API_documentation_module](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-API_documentation_module.png)

Dedicated versions of your API documentation can be easily created and managed. This feature provides an intuitive interface for uploading API specification files as URLs, JSON files, and YAML files. You can generate code samples with the available programming languages to help users understand how to use the API. The users can view the responses in a most organized way.

[**Read more →**](/docs/api-documentation-getting-started)

### 2. AI Tag recommender

The AI-powered Tag recommender is now available in Document360. With this feature, you can generate relevant Tags based on the article content. This feature helps to categorize the articles more accurately and improve the searchability of the relevant articles in the Knowledge base. It will also save time for Team accounts who needs assistance in figuring out appropriate tags for the article content.  
![1_Screenshot-AI_tag_recommender](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-AI_tag_recommender.png)

* Go to the desired article in the Knowledge base portal
* Click **Article settings** and expand **Tags**
* You can find the **Tags recommended** section

[**Read more →**](/help/docs/ai-tag-recommender)

### 3. Content Security Policy (CSP)

We have added the CSP (Content Security Policy) to enhance the security of your Knowledge base. CSP helps to manage and prevent the external CSS, scripts, and frames embedded in your Knowledge base.

This feature uses the `Content-Security-Policy` response header to restrict the resource loading from external domains and allow resources only from the configured list of domains for each source.  
![1_Screenshot_Content_security_policy](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Content_security_policy.png)

* Go to **Settings** → **Users & Security** → **Security**
* Turn on the **Enable content security policy** toggle
* You can find the following source fields:

  + Style source
  + Script source
  + Frame source
* Type in the desired domain URLs in the respective fields
* Click **Save**

[**Read more →**](/help/docs/content-security-policy)

---

## Improvements

### 1. 'Installed domains' in the Knowledge base assistant

Now you can view the domains in which your Knowledge base assistant has been embedded. This information helps you track and manage the embedded assistants effectively.  
 To view the installed domains:

* Go to **Settings** → **Knowledge base assistant** → **Setup configuration**
* Hover over the desired Knowledge base assistant and click **Edit**
* In the **Installation & Setup** tab, expand the **Installed domains**
* You can find the domains in which the respective Knowledge base assistant has been embedded

### 2. Cache mechanism

The cache mechanism has been implemented for the Knowledge base site of the public projects. With this improvement, the changes made in the Knowledge base portal can take up to 15 minutes to reflect on the Knowledge base site of the public projects.

### 3. Make extension

Make extension is now available for US data center projects. Earlier, it was available only for EU data center projects.

### 4. Custom language in code blocks

We have added a new option, "Custom" in the language list of code blocks. With this option, you can add the desired language title for the code block. This option is available only in the WYSIWYG editor.

[**Read more →**](/docs/code-blocks#creating-code-blocks-in-wysiwyghtml)

### 5. Other improvements

Minor performance, bug fixes, and security improvements can also be observed in the knowledge base portal and site.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="january-2"></a>

## January 2023

## New features

### 1. Sandbox

Now you can create a Sandbox project to test and experiment with the features, configurations, and integrations without affecting your live projects.

The Sandbox project comes with a 14 days trial period. Team accounts associated with a paid project can create the Sandbox project.  
![1_Screenshot-New_Sandbox_button](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-New_Sandbox_button.png)

1. Go to the [project dashboard](https://portal.document360.io/)
2. Click **New Sandbox** at the top right
3. Follow the instructions that appear in the window

[**Read more →**](/docs/creating-a-sandbox-project)

### 2. X-Frame options

The X-Frame feature allows you to control whether your Knowledge base can be embedded in an iframe on other domains. This feature provides an additional layer of security by preventing malicious websites from embedding your Knowledge base in an iframe.  
![1_Screenshot-XFrame_options](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-XFrame_options.png)

1. Go to **Settings** → **Users & Security** → **Security**
2. Turn on the **Enable X-Frame options** toggle

NOTE

The toggle is disabled for projects created before January 28, 2023. It is enabled for projects created after January 28, 2023. You can change the setting as needed.

[**Read more →**](/docs/x-frame-options)

---

## Enhancement

### Single Sign-On

The Enterprise SSO module has been split to provide more flexibility in your configuration. Now you can have one of the SAML and OpenID configurations and also configure JWT at the same time. This enhancement allows for separate SSO configurations for your team accounts and readers.  Earlier, you could only configure one of the three available SSO configurations (SAML, OpenID, or JWT).

> **For example**, you can configure SAML for your SSO team accounts and JWT for SSO readers.

[**Read more →**](/docs/enterprise-sso)

---

## Improvements

### 1. Team account idle timeout

Now you can set the desired time duration in the Team account idle timeout section of SSO configuration. The default value is 2 hours.

[**Read more →**](/docs/team-account-idle-timeout)

### 2. Export - Performance Analytics

The export to CSV option is now available for Performance analytics data. The following data can be exported as a CSV file:

* Leading Contributors
* Leading Articles
* Leading Categories
* Countries

[**Read more →**](/docs/analytics-performance#export-data)

### 3. Knowledge base assistant

The Knowledge base assistant will now open in the language of your browser by default. Earlier, it would open in the default language of your Knowledge base. This improvement will enhance the user experience.

---

### UI/UX improvements

* A new module "Security" has been added in the Users & Security (Settings). The X-Frame options section is now available in Security. You can find more settings related to the Knowledge base site in the upcoming releases  
  ![2_Screenshot-Security_X_Frame_options](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Security_X_Frame_options.png)
* The Enterprise SSO is split into two modules: SAML/OpenID and JWT. You can find this module in the Users & Security (Settings)  
  ![1_Screenshot-Enterprise_SSO_Split](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enterprise_SSO_Split.png)

---

### Other improvements

Minor performance, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

An online library where users can find information about a product, service, department, or topic. It helps users self-serve by providing answers and guidance.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="december-2022-release-note"></a>

## December 2022

## New feature

### Multiple Knowledge base assistants

Earlier, you can configure only one Knowledge base assistant in a project. Now you can have up to **10** Knowledge base assistants in a project. We have made the UI simpler to configure the following settings in one place:

* Installation & setup
* Custom CSS
* Custom JavaScript
* URL mapping

The autosave option is available for navigation between the tabs. You can also clone an existing assistant and create a new Knowledge base assistant.

![1_Screenshot-Multiple_KB_assistant](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Multiple_KB_assistant.png)

[**Read more →**](/docs/knowledge-base-assistant-getting-started)

---

## Enhancements

### 1. No search results feedback

A search that does not return an article within the Knowledge base or Knowledge base assistant will return a feedback form. This option enables the readers to provide detailed feedback on their search. Team accounts can view the feedback data in the **Search analytics** module.

#### To enable the feedback form:

![12_Screenshot-No_search_feedback_setting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-No_search_feedback_setting.png)

1. Go to **Settings** → **Knowledge base site** → **Article settings & SEO** → **Article settings**
2. Under **Search settings**, you can find the **No search result feedback** toggle
3. Switch it to **On**

[**Read more →**](/docs/dedicated-search-page#no-search-result)

---

### 2. Custom configuration for Analytics Integrations

**Custom configuration** section is added in Integrations related to Analytics. With this section, you can customize your Knowledge base integration with an external analytics platform in one window. Previously, you would have used Custom HTML integration to configure code-specific settings. The following integrations will have the custom configuration section:

* [Mixpanel](/docs/mixpanel)
* [Segment](/docs/segment-integration)
* [Hotjar](/docs/hotjar)
* [Google Analytics](/docs/google-analytics-integration)
* [Google Analytics (GA4)](/docs/google-analytics-new)
* [Heap](/docs/heap)
* [FullStory](/docs/fullstory)
* [Amplitude](/docs/amplitude)
* [Google Tag Manager](/docs/google-tag-manager)

![1_Screenshot-Custom_configuration_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Custom_configuration_UI.png)

---

## Improvements

### 1. Auto register for SSO readers

Earlier, Single Sign-On (SSO) readers had to be registered with both identity providers and Document360. Now, readers that are registered with the identity provider don't need to register in Document360. They can directly access the Knowledge base with the identity provider credentials. You can enable/disable this option in SSO settings. This setting is applicable only for SAML and OpenID configurations.

When you have multiple projects and wish to have the same configuration, you can import the logged-in SSO readers from one project to the other with this option.

[**Read more →**](/docs/auto-register-for-sso-readers)

---

### 2. Team account idle timeout

Enable the 'Team account idle timeout' option in your project to log out the SSO team accounts that are idle for two hours. This setting is applicable only for SAML and OpenID configurations.  
[**Read more →**](/docs/team-account-idle-timeout)

---

### Other improvements

Minor performance upgrades, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

A widget that allows users to search for and find answers from your knowledge base directly within your site or application, without navigating away.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="november-2022-release-note"></a>

## November 2022

## New feature

### Find and replace

Now you can search for any text/phrase and replace it across the Knowledge base project in one place. Use this feature when you update any keyword/phrase in multiple instances (articles/category pages) in your knowledge base.

> **Note**: This feature applies only to the article and category page content.

![1_Screenshot-Accessing_Find_and_replace](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_Find_and_replace.png)

1. Go to **Content tools** → **Documentation** → **Find and replace**
2. Enter the search keyword/phrase in the **Find** field
3. **Select** the articles and category pages in which you want to replace
4. Enter the desired keyword/phrase you want to replace in the **Replace with** field
5. Click **Replace**
6. Select the desired article status after replace and click **Proceed**

You can also utilize the Match whole words and below filter options to narrow down the search results:

* Version/Language
* Visibility
* Status
* Contributors
* Tags
* Updated on

[**Read more →**](/docs/find-and-replace)

---

## Improvements

### UI/UX improvements

#### Context menu consistency

Consistency across the context menus in the **Documentation** module is addressed. The context menus of the article, category, starred, and category manager is made consistent now.

---

#### Open the article/category in a new tab

Now you can open articles and categories in a new tab from the Knowledge base portal. This improvement helps you open the articles/categories in multiple browser tabs and perform a comparison, copy, and paste of the content effectively. Earlier, this option was unavailable for the articles and categories.

---

### Other improvements

Minor performance, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

An online library where users can find information about a product, service, department, or topic. It helps users self-serve by providing answers and guidance.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="october-2022-release-note"></a>

## October 2022

## New feature

### Health check metrics

There are some great insights in this feature about the article's health. This feature is available only for articles and category pages of the English language.  
![2_Screenshot-Health_check_metrics_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Health_check_metrics_UI.png)

1. Go to the desired article in the Documentation
2. Click **Health check metrics**  
    It has two sections: SEO metrics and Readability metrics.

NOTE

If you update any parameter with the 'Health check metrics blade' open, click **Check now** to view the insights of the latest changes.

* **SEO metrics** shows the insights of the article's SEO metrics. This metric help assess the parameters such as

  + Meta title length
  + Meta description length
  + External links
  + Internal links
  + Featured image.
* **Readability metrics** shows the insights on the article's readability. This metric help assess the parameters such as

  + Readability score
  + Paragraph length
  + Sentence length
  + Sub-heading distribution.

Based on the optimal condition, each parameter will be narrowed down under one of the following sections:

* **Problems**
* **Suggestions**
* **Good work**

Every writer would love this feature as it saves time checking the article metrics. Not just writers but the SEO team in your organization can also benefit from the SEO metrics. With the easy navigation for adding/updating meta titles, meta descriptions, and featured images, you can swiftly jump into the respective sections.

[**Read more →**](/docs/health-check-metrics)

---

## Improvement

### Bulk operations

Earlier, you could view only 200 articles on the bulk operations page. Now, you can view all the articles available in the selected version/language. This improvement helps you perform actions in the desired articles without hassle.

![1_Screenshot-Bulk_operations_UI_change](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Bulk_operations_UI_change.png)

---

### Other improvements

Minor performance, bug fixes, and security improvements can also be observed in the Knowledge base portal and Knowledge base site.

The platform where project members manage and create content for the knowledge base. It allows users to create categories, articles, and templates; manage files, team accounts, and readers; and configure site settings such as branding, domain, and security.

The public-facing website where end-users can access articles and find answers to their questions.

<a id="september-2022-release-note"></a>

## September 2022

## New feature

### Bubble up status

Earlier, readers had to open the category to view the articles with the New, Updated, Custom, or Deprecated article status. To view the latest articles in the knowledge base, readers would go to the 'What's New' page. However, there is no article status indicator on that page which leads the users to navigate to the article to find its status (New/Updated/Custom/Deprecated).

With the Bubble up status, readers can view which categories have been updated with the latest articles. The count of the articles with New, Updated, Custom, and Deprecated article status appears next to the category name. This feature helps you to notify the readers about new and updated articles in each category.

To enable the Bubble up status indicator:

> * Go to **Settings** → **Knowledge base site** → **Article settings & SEO** → **Article settings**
> * Under the **Category manager** section, enable the **Show bubble up status** to On

[**Read more →**](https://docs.document360.com/docs/knowledge-base-category-manager#bubble-up-status)

---

## New extension

### Make

The integration tool **Make** is available as an extension on your Document360 knowledge base portal. This integration allows you to connect and integrate multiple cloud apps and services. The Scenarios help automate your tasks in the background and automate certain workflows. You can easily create a Scenario (workflows that connect your app): choose a trigger for the workflow to activate and then choose a response action. This opens new possibilities and hundreds of possible use cases.

> Go to **Settings** → **Knowledge base portal** → **Extensions** → **Team collaboration**

[**Read more →**](https://docs.document360.com/docs/make-setup-guide)

---

## Enhancements

### 1. Glossary

* [**Export glossary**](/v3/docs/exporting-glossary) option has been added. So you can export the glossary data as a CSV file that contains the following information: Term name, Definition, Dependencies, Updated on, and Updated by.
* Earlier glossary terms were not highlighted in the Knowledge base assistant. Now users can experience the glossary terms in **knowledge base assistant** just like you do in the knowledge base site.
* **Importing images** in the definition is made available. Add image tag URLs in the definition field and import the glossary.

[**Read more →**](https://docs.document360.com/docs/import-glossary)

### 2. Convert regular Document360 account to SSO account

Previously, there was no option to convert a regular Document360 account to an SSO account directly. You must replicate the roles and access permissions correctly, even if you take a tricky workaround of deleting the Document360 account and adding a new SSO account.

With the **Convert to SSO** option, you can seamlessly convert the Document360 account(s) to SSO account(s) without changing the roles and access. This option would reduce your efforts in team account/reader conversion.

[**Read more →**](https://docs.document360.com/docs/convert-to-sso-account)

### 3. Translation in bulk operations for published articles

Earlier translation in bulk operations was available only for articles in New article and Draft status. You would spend considerable time in manual translation to perform translation for the published.

Now you can perform translation for the published articles in just a few clicks. So there is no restriction for translation in bulk operations concerning article status.

[**Read more →**](https://docs.document360.com/docs/translation-option-with-bulk-operations)

---

## Improvements

### 1. Team auditing

* Now, you can export the team auditing data as a CSV file
* A new section 'Users & security' has been added on the Audit configuration page
* The filters available on the Team auditing page have been revamped to enhance the user experience
* Now, you can search for the desired events, which have been placed in alphabetical order.

### 2. SEO description generator

* SEO description generator clicks have been renamed as **credits**. The credits available on your billing page are not to be confused with the SEO description generator credits
* Meta management tab available in 'Settings → Knowledge base site → SEO' has been renamed and moved into Content tools → Documentation as **SEO description**
* 'Article settings' & 'SEO' has been merged under **Article settings & SEO**. It has two tabs:

  + **Article settings**: Settings related to individual articles will be available here
  + **SEO**: SEO settings such as **Robots.txt** and **Sitemap** will be available here

### Other improvements

Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site.

<a id="august-2022-release-note"></a>

## August 2022

## New features

### 1. Glossary

Enhance your knowledge base by adding the glossary to help readers understand the terms(word/phrase/acronym/abbreviation) frequently used in articles. A dotted line highlights glossary terms so readers can hover over them with their mouse pointer to view their definitions. You can effortlessly import glossary terms in bulk with the Import glossary option.

> Go to **Content tools** → **Content reuse** → **Glossary**

![1_Screenshot-Glossary_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Glossary_overview.png)

In addition, the dedicated glossary terms page can also be added to the home page, header, footer, menu, and anywhere on the web using the glossary overview page link.

[**Read more →**](https://docs.document360.com/v3/docs/glossary-getting-started)

### 2. Feedback manager

Now you can manage and respond to your article and category page feedback in one place. You can also view all the past feedback in the Feedback manager.

To access reader feedback, earlier you would go to  **Analytics** → **Feedback**, but you can only view the feedback of a specific date range(last 30/90 days). There was no option to respond to the feedback in the same window. To respond, you would have to draft an email manually.

With the feedback manager, we have reduced your efforts in managing the feedback by tracking the actions in each feedback, and you can respond to the users in the same window.

> Go to **Content tools** → **Documentation** → **Feedback manager**

![2_Screenshot-Feedback_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Feedback_overview.png)

[**Read more**](https://docs.document360.com/v3/docs/getting-started-feedback-manager) **→**

---

## Improvements

### 1. Article feedback

Now, you can add multiple feedbacks for an article/category page as a team account or reader. Earlier, you could add only one feedback for an article/category page.  
 As a way to improve feedback, we have added standard predefined feedback options to choose from when you click the dislike button. Users can also select the **Notify me about change** checkbox to receive information about updates to the article/category page they have provided feedback.

![3_Screenshot-Article_Feedback_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Article_Feedback_overview.png)

### 2. GA4 integration with Document360

Previously, we only provided a direct integration option for the old Google Analytics version GA3 (Universal Analytics). You would use the custom HTML integration as a workaround to integrate the latest version of Google Analytics (GA4).

We have added a new integration, **Google Analytics (New)** to bypass the custom HTML workaround. All you need is just the Measurement ID to integrate GA4 in your knowledge base. It's that easy to integrate your knowledge base with GA4 now.

> * Go to **Settings** → **Knowledge base site** → **Integrations** → **Add new integration**
> * Select **Google Analytics (New)** → Add the **Measurement ID** in the Google Analytics field and click **Add**

![4_Screenshot-GA4_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-GA4_overview.png)

[**Read more →**](https://docs.document360.com/docs/google-analytics-new)

### 3. Date consistency

A standard date format is implemented in the knowledge base portal. The date format would appear in one of the below formats:

* Just now
* 30 seconds ago
* 1 minute ago
* 1 hour ago
* This Monday
* Aug 08, 2021

Hover your mouse pointer over the time/date details to view the exact date and time. The time details would be in your system local time.  
![5_Screenshot-Date_consitency](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Date_consitency.png)

---

### Other improvements

Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site.

<a id="july-2022-release-note"></a>

## July 2022

## New feature

### Advanced search in knowledge base site

Use the advanced search to find anything (titles, slugs, tags, text content inside the articles and categories) within your knowledge base site. This would help the readers find the desired search results with the available filter options. You can filter the search results based on version, language, category, contributor, tag, and updated date range.  
![1_Screenshot-Advanced_search_setting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Advanced_search_setting.jpg)

a. Go to **Settings** → **Article settings** → **Search settings**  
 b. Toggle **On** the **Enable advanced search** option

> **For example**, you want the search results for the keyword "login" in the FAQ and Troubleshooting versions that have been updated in the last four months.
>
> * Search the keyword "login" on the knowledge base site and click **Go to advanced search**
> * Apply filters in the 'Version / Language' and 'Updated on' dropdowns
> * The desired search results are populated immediately

[**Read more →**](/v3/docs/advanced-search-in-knowledge-base-site)

---

## Enhancements

### 1. Markdown option for snippets

Earlier, you can only create the content of the snippets using the WYSIWYG editor. Now you can also create the content of the snippets using the Markdown editor.  
![12_Screenshot-Markdown_option_snippets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Markdown_option_snippets.png)

a. Go to **Content tools** → **Content reuse** → **Snippet** → **Add snippet**  
 b. Enable the **Markdown** toggle and click **Yes** in the confirmation prompt

[**Read more →**](/v3/docs/snippets)

### 2. Custom link color

By default, hyperlinks appear in blue. Now you can customize the below link colors:

* Link color - Color of the hyperlink
* Link hover color - Color of the mouseover hyperlink (under the mouse pointer)
* Visited link color - Color of the hyperlink that has been visited recently  
   ![1_Screenshot-Link_color_custom](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Link_color_custom.png)

> Go to **Settings** → **Knowledge base site** → **Design** → Update the desired colors under **Color** → **Save**

[**Read more →**](/help/docs/customize-site)

### 3. Updating team accounts profile image

Previously, only the respective team account could update their profile image. Additionally, the Owner(s) and Admin(s) of the project are now able to update any team account's profile image.

[**Read more →**](/v3/docs/managing-team-account)

### Other improvements

Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site.

<a id="june-2022-release-notes"></a>

## June 2022

## New features

### 1. SEO description generator

Use the SEO description generator to generate the meta descriptions for your articles and category pages effortlessly. This AI-powered feature will generate the best meta description for your articles and category pages based on the content. This is an addon feature and is available only for the English language.

**For an article/category page**:

> Go to the desired article/category page → **Article settings**/**Category settings** → **SEO** → **Generate meta description** → **Save**

**For multiple articles/category pages**:

> Go to **Settings** → **Knowledge base site** → **SEO settings** → **Meta management**  
>  Select the desired articles and category pages  
>  Click **Generate meta description** → **Save**

![1_Screenshot-Meta_description_article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Meta_description_article.png)

[**Read more →**](/v3/docs/seo-description-generator)

---

### 2. Custom pages

**Custom pages** feature allows you to customize and style the static web pages in your Knowledge base. Both the basic and custom style (CSS/HTML) options are available.

> Go to **Settings** → **Knowledge base site** → **Custom pages**  
> ![1_Screenshot-Accessing_Custom_pages](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_Custom_pages.png)

You can customize the below static pages in Document360:

* [**404 page**](/v3/docs/404-page)
* [**Access denied page**](/v3/docs/access-denied-page)
* [**Unauthorized page**](/v3/docs/unauthorized-page)
* [**Login page**](/v3/docs/login-page)
* [**IP restriction page**](/v3/docs/ip-restriction-page)

[**Read more**](/v3/docs/custom-pages) **→**

---

### 3. Block inheritance

Earlier, if you want to restrict the content level access of inherited team accounts, you would be adding them to the denied list manually in the respective content level. With the **Block inheritance** option, you can restrict the content access of team accounts irrespective of the inheritance. This allows you to configure the access of any content level (version/language/category/article) to only the desired team accounts and team account groups.

> **For example**, you have six inherited team accounts in version 'V1', and you want to provide access only to two team accounts.

![2_Screeshot-Block_inheritance](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screeshot-Block_inheritance.png)

[**Read more →**](/v3/docs/block-inheritance)

---

## Enhancements

### 1. Dual linking

When dual linking is enabled, if Article-A is added as a related article in Article-B, then Article-B will appear as a related article in Article-A. Save time by using dual linking for adding related articles. With this option, you can avoid adding the related articles in both articles; instead, you can add one article and enable dual linking.  
![3_Screeshot-Dual_linking](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screeshot-Dual_linking.png)

NOTE

Dual linking is disabled by default for projects created before July 09, 2022, and enabled by default for projects created after that.

> Go to **Settings** → **Knowledge base site** → **Article settings** → **Article right or bottom**

[**Read more →**](https://docs.document360.com/docs/adding-related-articles#dual-linking)

---

### 2. Image cropping in WYSIWYG editor

The image cropping option is available now in the WYSIWYG editor. This option allows you to crop the image inside the editor. You can also add text and rotate the image.

1. Click the desired image in the editor, and you find the **Advanced edit** option in the image formatting popup
2. Click **Advanced edit** and an editing window appears with various options
3. Click **Crop** / **Text** / **Rotate**
4. Perform the desired actions and click **Save**

[**Read more →**](https://docs.document360.com/docs/adding-images-to-articles#formatting-images-in-html-wysiwyg-editor)

---

### 3. SSO login for Support page

SSO login has been enabled for the [support page](https://support.document360.com/support/login). All Document360 users can access the support page with the portal credentials. Previously only particular users with support page credentials could access the support page. You can track the support tickets raised through the email support (or) support page.  
![6_Screenshot-Support_ticket_page(1)](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Support_ticket_page%281%29.png)

[**Read more →**](https://docs.document360.com/docs/support-ticket)

---

### 4. Remember state

Remember state feature is enhanced to store the UI state of the below elements:

* Filter
* Accordion
* Grid sort
* Category manager slider
* Language dropdown
* Version dropdown

This functionality works when you navigate between different modules (Documentation/Drive/Analytics/Content tools/Settings).

[**Read more →**](/v3/docs/remember-state)

---

### 5. Export PDF

Previously, the export content size limit was 2 MB. Now it has been increased to 15 MB. This enhancement allows you to export large PDF files.

[**Read more →**](https://docs.document360.com/docs/pdf-content-templates#content-template-actions)

---

### 6. Ticket deflector localization

Localization for various elements in the ticket deflector has been added. You can localize the ticket deflector elements and enhance the user experience.

> * Go to **Settings** → **Knowledge base portal** → **Localization & Versions** → **Localization variables**
> * Select the desired language under the **Select language** section
> * Expand the **Ticket deflector** section and update the desired elements
> * Click **Save**

[**Read more →**](https://docs.document360.com/docs/adding-a-new-ticket-deflector#how-to-localize-the-variables-text-that-appears-in-the-ticket-deflector)

---

## Improvements

### UI/UX improvements

* **Help** icon is added in the left menu bar. Tutorial videos, Get assistance, Chat with us, Documentation, System status, and Feedback are moved into this section
* Slug change confirmation prompts of articles and tags have been updated to add individual fields for redirection and confirmation
* In the article/category pages, team accounts that contributed to the updates are listed at the top in the **Manage contributors** dropdown. This improvement makes it easier to identify who is responsible for updating content

---

### Resolution

#### Snippets in Markdown articles

Previously, snippets with spaces in their names were not rendered in Markdown articles. This issue has been fixed now. For existing articles, you can resolve the problem by republishing them.

---

#### What's new

What's new page slug `/whats-new` is changed to `/whats-newx`  
 All the recent articles published (new and forked) in the selected version would be displayed on this page.

<a id="may-2022-release-note"></a>

## May 2022

## New features

### 1. Starred articles and categories

With the Starred feature, you can mark your favorite or frequently used [articles](/v3/docs/starred-articles) and [categories](/v3/docs/starred-categories) as **starred**. This is similar to 'Starred' section in Drive.

![10_Screenshot-starring_an_category_method4](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-starring_an_category_method4.png)

Go to **Documentation** → **Starred**. The list of articles and categories that are starred appears here. You can use the **Entity** dropdown to filter the articles and categories.

![1_Screenshot-Starred_section_portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Starred_section_portal.png)

[**Read more →**](/v3/docs/starred-articles)

### 2. Open in portal

**Open in portal** allows team accounts to edit the content instantly. Clicking on this option would take you to the editor in the Knowledge base portal. It is available only for logged-in team accounts. It would reduce your efforts in navigating the article in the Knowledge base portal for editing.  
![7_Screenshot-Open_in_portal_site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Open_in_portal_site.png)

[**Read more →**](/v3/docs/editing-an-article#open-in-portal)

---

## New plan

### Freemium

A new plan called Freemium is available now and completely free. We don't charge any fee or collect credit card details for this plan. Features such as Customization and Branding, Home page builder, Article templates, Tag management, and more are available in the Freemium plan. Check our [pricing page](https://document360.com/pricing/) for more information.

---

## Enhancements

### 1. SSO login for feedback portal

Earlier, users had to enter credentials to access the Document360 [feedback portal](https://feedback.document360.com/). Now, if the user clicks on the profile image and selects **Feedback**, it takes them directly to the feedback portal instead of a login page. Only Document360 authenticated users can access the feedback portal.  
![1_Screenshot-Accessing_the_feedback_option](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_the_feedback_option.png)

[**Read more →**](/v3/docs/portal-feedback)

### 2. Tag description

Now you can add a description for the Tags on the Tag Manager page. This helps you to identify the desired tags quickly.

![2_Screenshot-Tag_description_hover](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Tag_description_hover.png)

1. Go to **Content tools** → **Documentation** → **Tags** → **Add tag**
2. Add the desired **Tag name** and **Description** and click **Add**

You can now add Descriptions for the existing Tags.  
[**Read more→**](/v3/docs/adding-a-new-tag#method-1-from-the-tag-manager-overview-page)

### 3. Remember state

Enable the 'Remember state' option to retain the last done activity in the Document360 portal. It preserves and restores an activity's UI state.

![1_Screenshot-Remember_state](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Remember_state.png)

1. Click **Settings** → **Knowledge base portal** → **General**  
    and the **General** tab would be the default selection
2. Enable the status toggle bar on the **Remember state** section

> **For example**:  If a team member enables the 'Remember state', navigates to an article in the documentation section, navigates to another section, and again navigates back (Back button or relevant keyboard shortcut), the system remembers and retrieves the last activity in the documentation section.

[**Read more→**](/v3/docs/remember-state)

### 4. Notification for liked and disliked articles/category pages

Enable/Disable notifications for likes and dislikes on your knowledge base site. This helps you to engage with end-user feedback and expectations.  
![3_Screenshot-Notification_for_likes_dislikes](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Notification_for_likes_dislikes.png)

1. Go to **Settings** → **Knowledge base portal** → **Notifications** → **Notification mapping**
2. Expand **Knowledge base site** section and you can find the toggles to enable/disable notifications for likes and dislikes  
   [**Read more →**](/v3/docs/notification-mapping)

---

## Improvements

### UI/UX improvements

* **Create new version** option is added to all portal project version dropdown menus. This helps you to create new versions instantly
* Tag description appears when you hover any Tag across the Knowledge base portal and site

### Other improvements

Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site.

<a id="april-2022-release-note"></a>

## April 2022

## Enhancements

### 1. Version as menu

Add public versions as a menu on your knowledge base articles page. This helps showcase the available versions in your knowledge base and provides easy navigation for your end-users.

To access the version display setting in the knowledge base portal, go to  
**Settings → Knowledge base portal → Localization & Versions → Localization & Versions (tab) → Display versions as a menu (toggle) → ON**

![1_Screenshot-Version_as_menu_UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Version_as_menu_UI.png)

> **For example**, you have multiple public versions such as FAQ, Troubleshooting, Sales, and Customer support in your knowledge base. When the 'Display versions as a menu' toggle is on, versions are displayed as a menu. When the toggle is off, versions are displayed as a dropdown.

![9_Screenshot-Version_as_menu_kb_site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Version_as_menu_kb_site.png)

[Read more →](/v3/docs/adding-a-new-project-version#public-versions-as-a-menu)

### 2. Readers self registration

* The **Export** option has been added to the domain restriction(s) section. The option can be seen at the top-right of this section on the Readers self registration page. The entire list can be exported as a CSV file to your local device storage
* Now, you can sort the **Domain** column by clicking the column header

![6_Screenshot-Reader_self_registration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Reader_self_registration.png)

[Read more →](/v3/docs/reader-self-registration#adding-a-domain-restriction)

### 3. Team accounts and readers

* A new option to skip sending invitation mail when team accounts and readers are added has been introduced. The **Skip invitation mail** checkbox is available in the user addition module on the **Set up the basics** stage
* The invitation email can be disabled for bulk team accounts and readers import as well
* Earlier, this option was available only for SSO users. Now, this option is available for all users

![4_Screenshot-Team_accounts_skip_invmail](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Team_accounts_skip_invmail.png)

[Read more →](/v3/docs/managing-team-account#a-set-up-the-basics)

### 4. Find and replace option in WYSIWYG editor

The find and replace option is added in the WYSIWYG editor. This allows you to search any text within your article and replace it with another text. You can also use this to find the article's text content occurrences.

![2_Screenshot-Find_and_replace_html](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Find_and_replace_html.png)

[Read more →](/the-wysiwyg-editor#4-insert-options)

### 5. Backup & Restore

We had made a few enhancements to the Backup and Restore feature. The backup type and validity for the subscription plans are changed. Check our [pricing page](https://document360.com/pricing/) for more details.

The restore option has been enhanced to accommodate granular-level restoring. Below are the restore options available now:

* Documentation - You can restore any particular article/category/language/version. Earlier, you could only restore the complete documentation
* Home page builder - You can restore any particular home page. This includes the home page configured with custom CSS
* Custom CSS - You can compare the custom CSS of the backup and the current version. The changes made in the current version are highlighted
* Custom JavaScript - You can compare the custom JavaScript of the backup and the current version. The changes made in the current version are highlighted

![3_Screenshot-Restore_option](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Restore_option.png)

[Read more →](/v3/docs/backup-restore)

### 6. Variables (Content reuse)

Formatting options are added for the variable. Previously the variables' text would appear as normal text. This helps you to have formatted text as in-line content in your articles. The following formatting options are available now:

* Bold
* Italic
* Underline
* Strikethrough
* Font-size
* Font family
* Text color
* Background color
* Subscript
* Superscript
* Insert links

![8_Screenshot-Formatting_option_variable](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Formatting_option_variable.png)

[Read more →](/v3/docs/variables#adding-a-variable)

### 7. Export to PDF

**Cancel** option has been added in the export to PDF option. This allows you to cancel the ongoing export process.

If you want to cancel the export process, click the '✖' **Cancel** icon, and the '🚫' **Last export canceled** icon appears next to the last modified date.

![7_Screenshot-Content_pdf_template](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Content_pdf_template.png)

[Read more →](/v3/docs/pdf-content-templates#content-template-actions)

---

## Improvements

### UI/UX improvements

* **Copy link** icon is added to the published articles in the editor
* **+New** (New folder) icon is added on the bottom left of the Drive, similar to Documentation

### Other improvements

Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site.

<a id="march-2022-release-note"></a>

## March 2022

## New features

### 1. Shared articles

This feature is added to Document360 based on popular customer requests. The **Shared article** feature lets you display one article in multiple categories. The shared articles are termed as **References**.

* Use the ••• **More option** next to the article, select **Also display in**, choose the category/subcategory, and click on the **Share** button. You can choose multiple categories when you share an article. (This is one of four ways you can access the 'Also display in' option)  
  ![1_Screenshot-Accessing_also_display_in_method_1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Accessing_also_display_in_method_1.png)
* The shared article feature can also be accessed when creating a new article. Select the **Link existing** in the **Add article** module. Select an article from the **Select article** search bar, and click on the **Create** button.

![8_Screenshot-Add_article_module_Link_existing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Add_article_module_Link_existing.png)

The article would be referenced in the selected category/subcategory and can be identified with the shared icon displayed next to it.

#### Original article & Referenced article

* The original article serves as a primary copy, and all the changes to content and settings would reflect across all the shared copies(references).
* Click on the **View references** icon on the right in the editor to view the linked instances.
* You can navigate to the shared article or remove the reference(stop sharing) in the selected category
* This referenced article does not have any edit capabilities. Except for the article slug, all the other elements are linked to the original article.

![6_Screenshot-Shared_article_POV](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Shared_article_POV.png)

[**Read more →**](/v3/docs/shared-articles)

### 2. Cloning articles

Create a **clone article** of an existing article from your project's respective version and language.

Select the **Copy existing** in the **Add article** module. Select an article from the **Select article** search bar, edit the title, and click on the **Create** button.

![7_Screenshot-Add_article_module_Copy_existing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Add_article_module_Copy_existing.png)

Your clone article will be added to the respective category/subcategory with a new article indicator (light-blue dot) to show that it has not been published.

[**Read more →**](/v3/docs/creating-an-article)

---

## Enhancements

### 1. Intercom extension

There are two notable enhancements to the Intercom extension feature.

* When you share an article link to the customer in the chat response, the customer can open and read the Document360 article inside their messenger window. Earlier, the article would navigate and open in the knowledge base site
* Create an article from the Intercom, and the article is added to the selected category as a draft

[**Read more →**](/v3/docs/intercom-integration)

### 2. Internal links in the new version

When you create a new version in your project using an existing version as a base version, you can find a new selection, **Internal links** - New(default) or Existing.

![14_Screenshot-Internal_links_in_new_version](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-Internal_links_in_new_version.png)

* If you select **New**, all the internal article links would be altered to point to the newly created version of the article

> **For example**, */****v2****/docs/Installation* would be changed to ***v3****/docs/Installation*)

* If you select **Existing**, all the internal article links in the new version would still point to the base version's article

[**Read more →**](/v3/docs/getting-started-with-project-version)

### 3. Knowledge base assistant

Now, you can add a category page and category index in **Single** and **List** actions for a URL mapping in the Knowledge base assistant. Previously, you could add only articles in these actions. This improvement allows you to display categories in your knowledge base assistant.

[**Read more →**](/v3/docs/url-mapping)

### 4. Analytics

* We are now capturing the analytics data of category pages and category index under the **Leading categories** metric in the **Performance** analytics page. The index and pages can be identified with the **View in knowledge base** icon next to them
* Link validation at a Category page level has been introduced with this release
* In the **Team accounts** page in Analytics, we have included the category pages in the **Most viewed articles** and **Articles created** sections. The pages can be identified by a folder icon next to them
* We have added a new column **Feedback status** on Analytics's **Feedback** page. This section displays a percentage bar for each article/category page comparing the **likes** (green) to **dislikes** (red).

[**Read more →**](/v3/docs/analytics)

### 5. Users & Security

* Bulk select and add is now available while adding team accounts or readers to their respective groups. Earlier, only one account could be selected and added at a time
* For new or invited SSO team accounts and readers (also applies for regular Document360 users), the invited by and date/time information can be viewed. Click on the respective accounts in the Team accounts or Readers page in User & Security

[**Read more →**](/v3/docs/users-and-security)

---

## Improvements

### UI/UX improvements

* The **Add article** module in the documentation editor has been redesigned to accommodate the clone article and shared article feature
* We have added two new fields in the **mobile version of the Sign up** page. The subdomain and project access type(Public/Private/Mixed) can be added at the time of sign up
* Similar to articles, the likes, dislikes, and feedback option is now available on the **Category page**

### Other improvements

* Project version name's character limit has been extended from 20 to **30 characters**
* **Previous** and **Next** buttons at the article bottom can now be localized in the selected languages *(Settings → Localization & versions → Localization variables → Article bottom)*
* In the header section of the **Home page builder**, we have extended the ability to add article slugs in the Custom URL selection
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

<a id="february-2022-release-note"></a>

## February 2022

## New features

### 1. Feature explorer 2.0

We have given the **Feature explorer** a brand new facelift and optimized the user learning experience. This page can be accessed by clicking on the trophy icon on the left menu bar (Only for **trial** accounts). There are two levels, **Basic quick start** and **Advanced quick start**. The phases are tracked, and each level of achievement is recognized with a virtual trophy. Complete the exploration list on the Basic quick start to unlock the Advanced quick start. The module also contains supporting materials such as a link to the feature document and tutorial videos(If available).

Even when using the knowledge base portal, if the user tries out a feature for the first time, this would be recognized and recorded in the feature explorer. You can choose to hide the automatic initiation of the 'Quick start' module for 24 hours by clicking on the checkbox below.

[**Read more →**](/v3/docs/feature-explorer)

### 2. Insert LaTeX in editor

We have added the **Insert LaTeX** tool in the Markdown and WYSIWYG editor. We can use LaTeX to write mathematical equations in Markdown. To write the inline LaTeX formula, use a single $ before and after the equation.

To add the LaTeX expression click on **Insert latex** option and a sample latex syntax () appears. You can add more equations and expressions using the free or paid LaTeX expression generator tools available on the web.  
 The frequently used LaTeX expressions can be saved as a Variable or Snippet for a quick insert.

[**Read more →**](/v3/docs/the-markdown-editor#insert-latex)

---

## Enhancements

### 1. Article redirect rules

* #### Redirection types

We have added two types of article redirect

* **Ends with** - To set redirection rule for URL text next to the domain name in the article URL

  > **For example**,  
  > **Source**: /docs/Installation-guide  
  >  to  
  > **Destination**: /docs/Support-guide
* **Replace with** - To set redirection rule for the URL text between the domain name and article slug

  > **For example**,  
  > **Source**: /v1/Installation-guide  
  >  to  
  > **Destination**: /v3/Installation-guide

To access the redirect types, go to **Settings → Knowledge base site → Article redirect rules → New redirect rule**(button). Select from either one of the types (Ends with or Replace with).

* #### Import redirect rules

You can now import redirect rules in bulk on the Article redirect rules page. To access the Import redirect rule, go to **Settings → Knowledge base site → Article redirect rules → Import redirect rule**(button). Choose and add the CSV file with all the sources, destinations, and redirection types.

The **CSV file** (less than or equal to 1MB) should follow the **Document360 standard import template**, which can be downloaded from the blade window by clicking on the **standard template**. The redirection rules (Source path, Destination path, and Redirection type) would be validated and reported in the blade with the valid and invalid rules available.

A **download** icon can be observed next to Invalid rules, which downloads a spreadsheet with the reason for the Invalid rule.

* #### Filter option

A **Search**, **Modified date**, and **Type** filter have been added to the redirect rule page. This helps you narrow down the rules you are looking for. This option comes in handy for bulk operations such as **Remove** or **Export**.

* #### Export redirect rules

The **Export** option has been added to the article redirect rules page. The option can be seen at the top-right of the page. The article redirect rules can be filtered using the **Type**(Ends with, Replace with, or Both), **Modified date**, and the **Search** keyword filter. The entire list or the filtered list can be exported as a CSV file onto your local device storage.

* #### Bulk redirect rule remove

The pagination display 50 redirect rules on a single page. If you click on the **Select all** button, the 50 records available on that page will be selected. If you wish to choose multiple other page records, navigate to the next page and click on the 'Select all' button. Click the **Remove** button at the top.

As an improvement, we have added more context to the auditing events captured for actions on individual redirect rules. The rule itself would be shown in the redirect rule record.

[**Read more →**](/v3/docs/redirecting-article-urls)

### 2. Localization

There are a couple of enhancements to the localization feature.

* When performing bulk or individual article translate, the content from the latest published article in default language would be translated and overwritten on the selected languages
* If you have linked any articles in the default language article or any internal article heading link, after translation, the link would be referenced to the selected language article rather than the original link.

  > **For example**, If the article '**Getting started**' in **English** language is linked in another English language article '**Installation support**'. When you translate the article '**Installation support**' to **French**, the hyperlink used to link the '**Getting started**' article would be altered to point to a similar article in the French language.

[**Read more →**](/v3/docs/bulk-operations#12-machine-translate)

### 3. Portal search - Articles

We have added two additional filters in the Full portal search for articles. The filters are **Status** (New, Draft, Published) and **Contributor**.  When you select any filter and click on the **Apply** button, the article will be narrowed down based on the selection.

[**Read more →**](/v3/docs/full-portal-search)

---

## Improvements

### 1. Users & Security

There are multiple enhancements in the Reader feature.

* A new option to skip sending Invitation mail when SSO users (Team accounts and Readers) are added has been introduced. The **Skip invitation mail** checkbox is available in the user addition module on the **Set up the basics** stage
* The Invitation email can be disabled for bulk SSO team account and reader import as well
* Reader can now customize their profile information such as first name, last name, and profile image. Previously, there was an option to change just the reader email.
* For reader email change, password verification has been added for added security

[**Read more →**](/v3/docs/managing-readers#how-to-change-my-profile-details-on-the-knowledge-base-site)

### 2. Knowledge base site

* On the knowledge base site, a clickable **breadcrumb** has been added below the menu section from the second-level category. For first-level categories and articles, this will not be applicable
* The navigation of **Next** and **Previous** articles have been added at the bottom of the article. This can be turned off on the **Settings → Knowledge base site → Article settings & SEO → Article bottom** page

[**Read more →**](/v3/docs/article-bottom)

### Other improvements

* The UI has been improved for the **Insert links** option on the Markdown and WYSIWYG editors
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

<a id="january-2022-release-note"></a>

## January 2022

## New Features

### 1. Bookmark link in an article

Interlinking inside the article content was not directly available in the Document360 editors. With this release portal, users can search for and add links to the heading from the same article.

![1_Screenshot-Bookmarking_heading_links_in_article](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Bookmarking_heading_links_in_article.png)

Just click on the hyperlink tool in either of the editors (Markdown or WYSIWYG) and scroll down the overlay to find **link to current article heading**. Click on the dropdown and select from the Heading tags available in the article. The slug URL would be added to the Destination URL at the top, type in the **Link text** and click on **Ok**.

[**Read more →**](/v3/docs/linking-to-other-articles)

### 2. Home page builder Themes

Earlier users must choose the default home page builder template or write their custom CSS to customize the home page for their Document360 knowledge base. We have added three new pre-built home page themes that can be applied and customized easily.

![2_Screenshot-Home_page_builder_themes_1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Home_page_builder_themes_1.png)

You can preview the home page theme on its look and feel. If you are unsatisfied with the theme, click the discard button, and the home page will be reverted to the previously published version.

![3_Screenshot-Home_page_builder_themes_2](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Home_page_builder_themes_2.png)

[**Read more →**](/v3/docs/themes)

### 3. Full portal search for Tags, Users, and Settings.

![4_Screenshot-Full_portal_search_tab_addition_and_improvements](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Full_portal_search_tab_addition_and_improvements.png)

We have introduced a full portal search across **All, Tags, Users & Groups**, and **Settings** in addition to the existing **Article** and **Drive** tabs. This page can be accessed by clicking on the 'search' icon on the left main menu bar or the top bar search in the knowledge base portal. Another major update to this feature is that items from the recycle bin also appear in the search results.

![5_Screenshot-Full_portal_search_tab_addition_top-bar-search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Full_portal_search_tab_addition_top-bar-search.png)

If you use the top bar search from anywhere in the knowledge base portal, a maximum of five results would be displayed in the dropdown.

[**Read more →**](/v3/docs/full-portal-search-1)

---

## Enhancement

### 1. Billing

#### Multicurrency support

We have introduced the multicurrency payment option to help customers avoid additional international transaction fees and currency conversion charges. Choose your convenient currency to pay for your Document360 subscriptions. You can pay your subscription bills in **USD** (United States dollar), **GBP** (Pound sterling), **EUR** (Euro), or **AUD** (Australian dollar).

![3_Screenshot-Pricing_page_trial](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Pricing_page_trial.jpg)

> **For example**, say you own a UK-based credit card, and you want to pay in **USD** instead of **GBP** because it's cheaper based on the currency conversion rate. You can choose USD as your currency, but the bank might impose an additional transaction fee for currency conversion on your credit card.

[**Read more →**](/v3/docs/upgrading-from-trial-version)

#### Best practices Add-on

We have introduced a one-time add-on that provides expert help setting up and managing your knowledge base. Our experts will assist you in configuring your knowledge base and guide you in best practices.  
[**Read more →**](/v3/docs/best-practice-setup-addon)

### 2. Links status

The link limit has been defined for each pricing tier (For example, the Business tier gets 5000 links). If the limit is exceeded, the validation would only be performed for the available limit (old links would be prioritized, and newer links would be excluded). The extra links that exceed the limit are not validated. Article level validation is also not possible for those links.

> **For example**, your total link limit is 10000, but the total links count in your project is 10500. Only the first 10000 links are validated when you perform the links validation. The recently added 500 links are not validated.

To validate all the links in your project, contact our support team [**support team**](https://document360.com/contact-us/) to increase the limit.

[**Read more →**](/v3/docs/links-status)

### 3. Zapier integration

Users can now choose to publish the articles created with the integration. Earlier, only the main version could be selected to add or append an article. With the latest update, users can choose any available version and language to manage articles.  
[**Read more →**](/v3/docs/zapier)

### 4. Export to PDF

#### Design template

Users can now disable hyperlinks in the exported PDF in the design template. Also, you can now choose the table of contents(TOC) to display the Heading (H2, H3, H4) tags in the exported PDF.

![6_Screenshot-Export_to_PDF_improvement_TOC_Heading_1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Export_to_PDF_improvement_TOC_Heading_1.png)

[**Read more →**](/v3/docs/pdf-design-templates)

#### Article/category page export

Earlier, only published articles/category pages could be exported. With the new update, new and draft articles/category pages would be exported as individual articles.

![7_Screenshot-Export_to_PDF_improvement_individual_draft_article_export](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Export_to_PDF_improvement_individual_draft_article_export.png)

### 5. Custom article status indicator

Now you can add a custom status indicator for your article. This status is visible on the knowledge base site.

> **For example**, you want to show the reader that an article is for a feature in your product that is still in beta-testing. You can add the custom status indicator as **Beta**.

![8_Screenshot-Enabling_custom_status_indicator_1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Enabling_custom_status_indicator_1.png)

The custom status indicator is enabled by default. You can enable/disable it as per your requirements. Go to **Settings** → **Knowledge base site** → **Article settings & SEO** → **Article settings** (tab) → **Category manager** → **Custom status indicator**.

Use the toggle switch to enable or disable the custom status indicator. Use the background color picker or HEX code to choose any custom color.

![9_Screenshot-Enabling_custom_status_indicator_Localization_variable](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Enabling_custom_status_indicator_Localization_variable.png)

To change the custom status indicator text in the available languages, go to **Setting → Localization & versions → Localization variables → Category manager**. Type the text for each available article status indicator in the respective language.

To set the custom status indicator in individual articles/category pages, go to **article/category page settings** in the documentation editor or via bulk operations.

[**Read more →**](https://docs.document360.com/docs/knowledge-base-category-manager#custom-status-indicator)

---

## Improvements

* '**Text**' has been added to code blocks in both the Markdown and the WYSIWYG editors
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

<a id="december-2021-release-note"></a>

## December 2021

## New Features

### Full portal search

A dedicated space to search the entire project content is now available on the knowledge base portal. Perform a combined search across all the versions and languages at the same time.  Click on the **search** icon on the left-side main menu to access the **Full portal search**.

![1_Screenshot-Full_portal_search_in_portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Full_portal_search_in_portal.png)

The search engine work similar to the other search functionalities in the portal. Type in the keyword and narrow down the results using the filters (version, language, visibility, tags, date range). Users can preview the article/category page. Users can then preview the article or navigate to the article in the editor.

![2_Screenshot-Full_portal_search_article_preview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Full_portal_search_article_preview.png)

As the search is performed universally in the project, the search also covers files in the Drive as well. Users can switch between the article and Drive search using the tabs available below the search bar.

[**Read more →**](/v3/docs/full-portal-search)  
![3_Screenshot-Full_portal_search_file_preview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Full_portal_search_file_preview.png)

---

## Enhancement

### 1. Signup page

Earlier in the [**Document360 signup page**](https://document360.com/signup/), new users would provide a password on the initial form page. With this new update, the set password module has been moved to the post-activation stage. As a new user you would sign up for Document360, and an activation mail would be sent to the registered email address.

You can access the portal for the next 24 hours, but it is recommended that you activate your account. Post the 24 hours the activation link sent in the mail should be used and a password should be set to use the portal for the next 14 days. Also, the activation mail earlier had a 24-hour validity which has been removed.

### 2. JWT logout page

Earlier when JWT SSO reader logs out from KB, they would land on the regular Document360 identity logout page. With this new enhancement, any webpage can be set as a logout landing page. This option can be configured on the JWT setup page (\*\*Settings→ Security→ Enterprise SSO → JWT→ JWT Basic configuration). Add the custom page link in the **Logout URL**(optional).

![4_Screenshot-JWT_Logout_url_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-JWT_Logout_url_page.png)

If the custom logout link is not provided, they would land on the new logout page designated for the JWT SSO readers.  
[**Read more →**](/v3/docs/configuring-the-jwt-sso)

### 3. Export to PDF – Design template updates

Go to **Content tools → Import & Export → Export to PDF → Design template**

[**Read more →**](/v3/docs/pdf-design-templates)

#### a. Custom sizes for the Logo on the Cover  page

Earlier users can upload their logo on the cover page, but the size was predefined. Now with this enhancement, users can select the three standard square sizes available Small(100px), Medium(150px), Large(200px), or choose a custom size in pixels. The canvas size can be between 20 and 300 pixels in both width and height.

![5_Screenshot-Export_to_pdf_design_template_header_image_size](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Export_to_pdf_design_template_header_image_size.png)

#### b. Custom sizes for the watermark image

Earlier users can either add a watermark text (For ex. ‘Confidential’) or upload any image as a watermark, but the size was predefined. Now with this enhancement, users can select the three standard square sizes available Small(150px), Medium(200px), Large(250px) or choose a custom size in pixels. The canvas size can be between 20 and 350 pixels in both width and height.

![6_Screenshot-Export_to_pdf_design_template_waetrmark_sizes](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Export_to_pdf_design_template_waetrmark_sizes.png)

#### c. Footer text

Along with the page numbers in the footer section, users can add custom footer text to the PDF document. The footer text does not have a character limit, the font size can be customized based on the requirement. As the footer space in the PDF page is dynamic based on the text, and font size, the text would not appear truncated in the final document.

![7_Screenshot-Export_to_pdf_design_template_footer_text](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Export_to_pdf_design_template_footer_text.png)

---

## Improvements

* **Greek** has been added to the language list available for knowledge base localization
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

<a id="november-2021-release-note"></a>

## November 2021

## New features

### 1. Recycle bin for categories and articles

One of the most requested features by our customers, the **Recycle bin** for deleted categories and articles is now available in Document360. Now users don’t have to worry about accidental article/category deletions, as the item would be available in the recycle bin.

Users can restore the deleted item anytime in the next 30 days unless the article/category has been manually deleted from the recycle bin as well.

![1_Screenshot-Recycle_bin_in_Documentation_editor](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Recycle_bin_in_Documentation_editor.png)

The **Recycle bin** can be found above the category manager (left navigation pane). Users can find the deleted article/category along with the information like **Name, category path, deleted by, date modified,** and **date deleted**. The deleted items can be restored in a matter of seconds by clicking on the **••• More → Restore** option.

![2_Screenshot-Recycle_bin_overview_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Recycle_bin_overview_page.png)

For easy access users can also use the **Delete forever** to remove specific articles/categories (or) use the **Empty recycle bin** option to remove all the items in the bin.

[**Read more →**](https://docs.document360.com/docs/recycle-bin-for-articles-and-categories)

### 2. Custom email domain authentication

By default, notification emails sent to the Document360 team members and readers are sent from **support@document360.com**.  Now users can configure their **custom email domain** on Document360, so the notification emails are sent from the configured custom email domain.

![3_Screenshot-Email_domain_authentication_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Email_domain_authentication_overview.png)

Users can access this new feature in the **Settings → Knowledge base portal → Notifications → Email domain** tab. To enable this feature users must first point **DNS entries** from their **DNS provider** (like GoDaddy, Rackspace, Cloudflare, etc.) to **Document360**. It may take up to **24 hours** after configuration for a custom email domain to be recognized.

[**Read more →**](https://docs.document360.com/docs/send-notifications-from-custom-email-domain)

---

## Enhancements

### 1. Drive file search

We have enhanced the file search capabilities in the Document360 Drive. We have also added an Empty recycle bin option to the Drive's bin folder.

#### a. Folder specific search

Earlier when the users perform a search on the Drive, the search would be spread across all the files on the Drive. Now with this update, users can search in the files specific to the folder or subfolder they are in at that moment.

#### b. Extended Search bar access

![4_Screenshot-Drive_enhancements_search_bar_extended_in_Recent_folder](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Drive_enhancements_search_bar_extended_in_Recent_folder.png)

Earlier search capabilities were only limited to the ‘All content’ page and overview pages of folder and subfolder on the Drive. Now with this update, the **search functionality has been added** to the **Recent, Starred,** and **Recycle bin** folders on the Drive. The search would be spread across the respective folder selected.

#### c. Empty recycle bin

![5_Screenshot-Drive_enhancements_empty_recycle_bin](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Drive_enhancements_empty_recycle_bin.png)

Another handy update to the Recycle bin on the Drive is the addition of the **Empty recycle bin** option. Earlier users had to manually select all the files in the recycle bin one page at a time and use the **Delete forever** option. Now with just the click of the **Empty recycle bin** button, the entire recycle bin can be emptied.

### 2. Export to PDF

#### a. Header image customization

![6_Screenshot-Export_to_PDF_enhancements_Header_image](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Export_to_PDF_enhancements_Header_image.png)

Earlier, in the PDF design template (**Content tools → Import & Export → Export to PDF → Design template**) the **Header image** was predefined and cannot be changed. With the latest update users can choose the **Image size** dropdown and select from small, medium, large, or any custom size in pixels (Height - 20px to 85px and Width - 20px to 150px).

#### b. Quick navigation in the Preview window

![7_Screenshot-Export_to_PDF_enhancements_quick_navigation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Export_to_PDF_enhancements_quick_navigation.png)

Users can easily click on the quick navigation options (Cover page, Table of content, Content) found on the preview window on the right. The preview jumps to the selected option in the generated PDF.

#### c. Live preview

We have added the live preview option to the design template page. As the user edits the different aspects of the template (For ex. Cover page title) the preview window on the right would also display the changes live.

#### d. Team audit and notifications

Earlier, only the export event was captured in the **Team auditing** section. With this latest update, all the activities such as creating, updating, or deleting the content and design templates. The same applies to the notification sent for these events in the Export to PDF feature.

---

## Improvements

* We have introduced the option to input **Dart** language codes using the **Insert codeblocks** option in both the editors (Markdown and WYSIWYG)
* The **Search in PDF attachments** on-demand service can be activated by contacting support directly from the smart bar seen below the search bar in the Drive folder
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

---

### Announcement

As a major pricing revision is being rolled out effective from **October 30, 2021**, some noticable changes can be observed in the **Billing** section and the [**Pricing page**](https://document360.com/pricing/)

<a id="october-2021-release-note"></a>

## October 2021

## New Feature

## Search in attachments

### Search inside attachments – Knowledge base portal

Project team members can perform keyword search for the content inside PDF files on the Drive. This comes in handy when a particular file needs to be chosen, but the file name does not clearly specify the search term. Earlier the same operation would involve manually downloading the PDF, opening it in a viewer, and then searching for the keyword.

This functionality can be used in the Drive menu option and the accessing Drive through ‘Insert file’’ from the documentation editor.

![1_Screenshot-Search_in_attachments_Drive_indexed_PDFs](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Search_in_attachments_Drive_indexed_PDFs.png)

Only a PDF file less than 10MB in size would get indexed for search and the cap for indexed files is 1GB. An indexed icon can be found next to the PDF files on the Drive.

[**Read more →**](https://docs.document360.com/docs/searching-files-and-filters#search-in-attachments)

### Enable attachment search filter - Knowledge base site

Readers of your knowledge base can now search for content inside PDF attachments. This search functionality is an **add-on** feature in the knowledge base portal and would be activated for customers **on-request** basis.

![2_Screenshot-Enabling_search_in_attachments_for _kb_readers](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Enabling_search_in_attachments_for%20_kb_readers.png)

Once activated, users can enable or disable the **search in attachment** option from the knowledge base portal *(Settings → Article settings & SEO → Article settings → Search setting → Show attachment tab in search)*. If the toggle is enabled, readers on the knowledge base using the search bar have the option to choose keyword search results from articles and attachments.

[**Read more →**](https://docs.document360.com/docs/dedicated-search-page#search-in-attachments-filter)

![3_Screenshot-Enabling_search_in_attachments_on_knowledge_base_site](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Enabling_search_in_attachments_on_knowledge_base_site.png)

Try out this feature!

Please contact customer support (**support@document360.com**) to activate this **add-on** feature in your project.

---

## Enhancement

### 1. JWT Reader Group restriction

Reader group restrictions have now been introduced for JWT readers. Henceforth, while creating a JWT token for readers, the reader group Id can also be passed. This will result in applying the same level of restrictions to JWT readers similar to that of the Document360 readers associated to that group. Multiple group Id can also be passed as comma-separated parameters. Another minor enhancement is the option to specify the 'session validity' (duration in minutes) during token generation.

[**Read more →**](/v3/docs/jwt-reader-groups)

### 2. Export option in ‘Page not found’ overview

Now users can export the ‘Page not found’ data from the ‘Page not found’ overview page *(Analytics → Page not found)* into a CSV file. Users can use call the filter options available such as User agent type, Date range, and search results. Once the data is filtered, click on the **Export** button at the top right, the report would be generated, and the **Download** option would be visible adjacent to the export button shortly after.

![4_Screenshot-Export_option_in_page_not_found_overview_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Export_option_in_page_not_found_overview_page.png)

The downloaded file can be accessed on MS Excel. All the data parameters you find in the ‘Page not found’ overview page would be presented as rows and columns in the spreadsheet.

![5_Screenshot-Export_option_in_page_not_found_spreadsheet_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Export_option_in_page_not_found_spreadsheet_view.png)

### 3 . 'All content' in Drive

A new section is available in the Document360 Drive called the **All content**. This option is available on the left side below the Recent, Starred, and Recycle bin folders on the Drive. Users can view all the individual knowledge base assets irrespective of the folder/sub-folder they are grouped in.

![6_Screenshot-Drive_All_content_folder_enhancement](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Drive_All_content_folder_enhancement.png)

This comes in handy when users want to perform bulk operations on all/selected files. The bulk operations available here are Remove, Move, Copy, Download, and Add to starred.

[**Read more →**](/v3/docs/all-content-overview)

### 4. Set editor folder in Drive (global level)

An editor folder is the default folder in the Drive where all the image files uploaded directly from the documentation editor using the Insert image would be saved. Earlier the **Documentation** system folder was set as the default editor folder and could not be changed. But with the new enhancement, users can set any parent folder on the Drive as an editor folder. Just click on the **••• More** option next to the folder and select the **Set editor folder** option.

![7_Screenshot-Set_editor_folder_on_drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Set_editor_folder_on_drive.png)

If a drive folder has already been set for a particular category, the images uploaded in that category articles would be saved in the mapped folder. The editor folder is just for images uploaded from the unmapped category articles. The image uploaded in templates and snippets would still be saved under the system ‘Documentation’ folder.

[**Read more →**](/v3/docs/editor-folder)

---

## Improvements

* We have renamed the **Project admin** to **Knowledge base portal** in the Settings menu grouping
* **YAML** is now available in the code block option on the editors. (YAML is a data serialization language that is often used for writing configuration files)
* Minor performance, bug fixes, and security improvement can also be observed in the knowledge base portal and site

<a id="september-2021-release-note"></a>

## September 2021

## New features

### 1. Workflow

The most requested and awaited feature ‘Workflow’ is now available in the Document360 knowledge base portal. Using this nifty feature project team members can define, manage, and track the different phases in the documentation of an article. This serves as a good assistance to editors in keeping track of the article statuses in the knowledge base project.

#### a. Workflow designer

The **Workflow designer** can be found under the **Documentation** menu grouping in the new **Content tools** menu. ***(Content tools → Documentation → Workflow designer)***

![1_Screenshot-Workflow_designer_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Workflow_designer_page.png)

The stages of the documentation cycle are referred to as **status** in the Document360 workflow. Two default system statuses (**Draft** and **Published**) and one custom status (**In review**) would be available by default.

However, users can add custom status based on their requirement, rearrange the order and delete (just custom status). When the status is set as **read only**, other users will not be able to edit inside the documentation since it would be available only in read-view. They can only assign a user and/or assign a due date.

#### b. Workflow assignments

A complete overview of all the documents (articles and category pages) in the selected version and language of the knowledge base project. To access this page, just click on the **Workflow assignments** option above the category manager on the left.

![2_Screenshot-Workflow_assignments](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Workflow_assignments.png)

Here, users can view the total document count, Documents that are assigned to the respective user by another team member, the article count in the different statuses, and the article list with filtering options.

Users can view the current **Workflow status** and the article workflow history at the top left in the documentation editor. By clicking on the dropdown, the user gets the complete information about the past, current, and upcoming article status.

### 2. Ticket deflector in Knowledge base assistant

Now users can map the existing and live ticket deflector forms on the Knowledge base assistant. We introduced the **Ticket deflector** (a feature that helps reduce the volume of support tickets by resolving customer queries with self-service support.) in our July release. And in the past release, we introduced Analytics data for the Ticket deflector forms.

When the user has mapped a live ticket deflector, all the form analytics data (such as satisfaction, feedback, answered from KB, search, and form submission) can be viewed. Go to **Analytics → Ticket deflectors** and select the Knowledge base assistant in the **Application** dropdown.

If any helpdesk (Freshdesk or Zendesk) is configured on a live Ticket deflector form, that configuration would also be available when you add the respective form on the Knowledge base assistant.

### 3. ‘Page not found’ data in Analytics

We have added an exclusive **Page not found** (**404 error**) section in the Analytics menu. If any visitor access unavailable URLs in your knowledge base, it would be recorded as 'Page not found (in technical terms 404 error). For a healthy knowledge base (and good SEO) this error should be avoided. Users can view the data when such errors occur and resolve it.

![4_Screenshot-Page_not_found_analytics_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Page_not_found_analytics_page.png)

Users can also view a drill-down of the **User-agent type** (source) such as **Browser, Bot,** or **Unknown**. Users can view the data for up to 30 days. On the overview page, users can view the list of links that throw the 404 error, User-agent type (Browser, bot, unknown), User agent (For ex. Mozilla 5.0), the timestamp (in UTC), and the URL referrer.

---

## Enhancements

### 1. Export to PDF data filtering

#### Content templates

We have added a new tab in the Export to pdf overview page (***Content tools → Import & Export → Export to PDF → Content templates***). Users can filter and save content templates for export at a category and article level.

![5_Screenshot-Content_templates_in_Export_to_pdf](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Content_templates_in_Export_to_pdf.png)

This comes in handy when exporting any segment repetitively in your knowledge base. The user doesn’t have to go through the entire process of compiling the articles and categories every time. Instead, they can just click on the **Download** option and the same content set would be exported again.

### 2. Import and Export – Language level

Now export and import project versions at a language level. This feature comes in handy when users want to localize/translate a particular version in their project. Users can make use of the translation capabilities in the knowledge base portal.

![6_Screenshot-Import_and_export_enhancement](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Import_and_export_enhancement.png)

However, when they want to translate huge volumes of articles, they can simply export a certain language, translate it, and then import the same file (.zip) back into the Document360 project. The article in the imported file would be saved as a new version if it’s from the same project. If the user imports a file from a different project, new articles would be created for the same.

This would help users move content from one project to another or have a copy of their knowledge base project as a backup either in markdown or HTML format.

### 3. Drive updates

1. We have capped the file limit to **5000 per folder**. If you have a sub-folder inside a parent folder, that would be treated as a separate folder.
2. Earlier, uploading files directly from the article editor would be added to the Documentation default folder. Now individual folders in the Drive can be mapped to different categories in the knowledge base. If no folder is selected, the files would be uploaded into the default Documentation folder.  
    Also, if the sub-category is not mapped to any specific folder in the Drive, then it would be saved under the default ‘Documentation’ folder.
3. **Set drive folder** – Click on the ••• more option in the top right when a category is selected and click on **Set drive folder**

![7_Screenshot-Drive_improvement_Set_drive_folder](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Drive_improvement_Set_drive_folder.png)

4. If the ‘Documentation’ default folder reaches its maximum limit of 5000 files, the next file uploaded or moved would be saved under a newly created default folder ‘Documentation\_1’
5. Folder selection can be done now for document elements (Images, Videos) while import of articles from .docx files

### 4. Category page integration

#### a. Links status

Category page links have been included in the Links status at the time of validations (Scheduled and Manual) and the link overview page. Earlier, the validation would only accommodate article links. The category page links can be distinguished using a category icon next to the link. This applies to the ignored links overview page as well.

![8_Screenshot-Category_link_selection_on_analytis_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Category_link_selection_on_analytis_page.png)

Users can easily filter the category page links in the links list by clicking on the quick filter option **Category links** (or) In the filter bar, select **Category links** in the **Source** dropdown.

#### b. Drive dependency viewer

When users view the file dependencies in the Dependency viewer blade (***Drive → Select folder → eye icon*** next to any file) the category page dependency would be distinguished using the **Category page** label.

---

## UI/UX updates in portal

### 1. Content tools

![9_Screenshot-UI_updates_content_tools](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-UI_updates_content_tools.png)

A parent menu item **’Content tools’** has been added to the main menu bar. You can find three menu groupings in this menu blade

#### a. Documentation

* Templates
* Bulk operations
* Article review reminders
* Tags
* Workflow designer

#### b. Content reuse

* Variable
* Snippet

#### c. Import & Export

* Import from Word
* Import & Export
* Export to PDF

### 2. Settings → Security

![10_Screenshot-UI_updates_security_menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-UI_updates_security_menu.png)

A new menu grouping **’Security’** has been added in place of the previous **Advanced** menu grouping. As the name implies, you can find all the settings pertaining to security options under this.

* Team & Security
* Access & Security
* Enterprise SSO

### 3. Other minor improvements

* **Advanced** menu grouping in **Settings** has been removed
* **Backup & Restore** moved from **Advanced** to **Project admin**
* **API tokens** moved from **Advanced** to **Project admin**
* **Extensions** moved from **Advanced** to **Project admin**
* Two new tabs **Content templates** and **Design templates** have been added in place of the **Export** and **Settings** tab in the **Export to PDF** page

---

## Improvements

* We have added the breadcrumb (a link trail for navigation till the current webpage) on the What's new feature
* Explainer videos for the feature have been added to modules in the knowledge base portal
* Users can now use category page tags in the Show/Hide rule for Smart bars

<a id="august-2021-release-notes"></a>

## August 2021

## New features

### 1. Ticket deflectors

### Ticket deflectors – Helpdesk configuration

We have added yet another feature to the Ticket deflectors. Now users can raise support tickets from the Document360 ticket deflectors form directly onto third-party helpdesks like **Freshdesk** or **Zendesk**.

Here’s how you can configure the helpdesk on the ticket deflector. Click on **Settings → Knowledge base site → Ticket deflectors → Notification & Ticket**. On the right when you scroll down you can find the **Helpdesk ticket** section.

![1_Screenshot_Ticket_deflector_Helpdesk_configuration_menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Ticket_deflector_Helpdesk_configuration_menu.png)

a. To configure Freshdesk, add the **API key** and **Domain URL** obtained from Freshdesk on the Document360 Helpdesk configuration blade.

b. To configure Zendesk, add the **API key**, **Domain URL**, and **Zendesk agents’ Email** obtained from Zendesk on the Document360 Helpdesk configuration blade.

![2_Screenshot_Ticket_deflector_Helpdesk_configuration_blade_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Ticket_deflector_Helpdesk_configuration_blade_view.png)

Each time a reader raises a ticket, a replica of the ticket would be recorded on the helpdesk platform you have configured.

### Ticket deflector – Analytics

Analytic data is now available for the Ticket deflectors. You can access this by clicking on the **Analytics** menu and **Ticket deflector** option.

Here you have access to four sections  
 • Dashboard  
 • Feedback  
 • Satisfaction  
 • Search

Each section gives a distinct drill down into the different analytics data. This data helps to understand the reader, retune the ticket deflector, and address the changes required in the knowledge base.

![5_Screenshot_Ticket_deflector_analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_Ticket_deflector_analytics.png)

---

### 2. JWT

A **JSON Web Token (JWT)** is a means of representing claims to be transferred between two applications. JWT is used only for the Readers login.

![3_Screenshot_JWT_login_client_secret_create_JWT](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_JWT_login_client_secret_create_JWT.png)

You can easily create a JWT **(Settings → Advanced → Enterprise SSO → JWT)** which is referred to here as the **Client secret**. You can use this in your application to configure Document360 Enterprise SSO login for your reader. Unlike the other IdP options available (Okta, Azure AD, etc) the user is not required to have a separate reader account on Document360; the account on the client application would do. After the JWT login is enabled, the reader can use the client application credentials to log in to Document360 knowledge base site as well.

![4_Screenshot_JWT_login_client_secret](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot_JWT_login_client_secret.png)

---

### 3. Download article as PDF on Knowledge base site

We have now introduced the option for readers of your knowledge base site to download individual articles as a PDF. The download **PDF** option would be available on the top left of the article, along with **print** and **share** buttons.

![6_Screenshot_Knowledge_base_site_download_article_as_pdf_button](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot_Knowledge_base_site_download_article_as_pdf_button.png)

By default, this option is enabled in your new or existing project. You can disable this by going to **Settings → Knowledge base site → Article settings & SEO → Article settings**. In the **Article header** section, turn **off** the **Show download PDF button** toggle to disable this option for your readers.  
![7_Screenshot_Knowledge_base_site_download_article_as_pdf_control](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot_Knowledge_base_site_download_article_as_pdf_control.png)

---

## Enhancements

### 1. Billing and payments

#### a. Version add-on

Now you can buy additional version add-ons with new restrictions based on your higher plan tier (For ex. If you are a customer in the Standard plan, you can purchase a version add-on with the available business tier plan versions). This option is available across all the plan tiers.

#### b. Team accounts add-on

The restrictions for the number of team accounts have been lifted and you can now purchase any number of team accounts on your project irrespective of the plan tier. This option is available across all the plan tiers.

#### c. Downgrade plan by yourself

Earlier, if you wanted to downgrade your project from a higher plan tier to a lower plan tier (For ex. Enterprise → Business) you had to contact customer support on Document360. Now you can do it by yourself in few simple steps by unchecking the option in the downgrade window **(Settings → Billing → My plans → Downgrade)**. The only limitation here is that few dependency features like **Content reuse, Ticket deflector, Custom roles,** and **Enterprise SSO** have to be manually altered or disabled before you can proceed with the downgrade.

![8_Screenshot_Billing_downgrade_scenario](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot_Billing_downgrade_scenario.png)

#### d. Get feature

We have added the **Get feature** button on the different feature pages in Standard and business tier plans.  You can also view a brief intro on what the feature does and an explainer video on the right. When you click on the **Get feature** button, a billing blade would open with all the feature list, add-ons, and cost information. You can click on the **Confirm payment** button and your plan would be upgraded to an upper tier.

![9_Screenshot_Billing_get_feature](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot_Billing_get_feature.png)

#### e. Feature caps changed

Now you can enjoy the revised cap for API tokens and Article review reminder feature across all the plan tiers. **API token** is set to the max limit of **10** and **Article review reminders** to the max limit of **10**.

### 2. Integration rules (Show/Hide)

You can now set Show and Hide rules for all the configured third-party integrations in your knowledge base. You can configure the conditions based on **IP address, Project**, and **Language**.

Go to **Settings → Knowledge base site → Integrations** and click on an already configured integration or add a new integration. In the Add integration blade, you can find the **Advanced insertion rules** section. Now choose the **Show** and/or **Hide** rules. Once you’re done, click on the **Add** button at the bottom.

![10_Screenshot_Integration_show_hide_rules](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot_Integration_show_hide_rules.png)

### 3. Ignored links on Links status

Now we have added a new link type called **Ignored links** along with the working, broken, redirected, and unknown. In this context when you add a link to the Ignored link category, that link will be omitted from all the upcoming scheduled and manual validations. Any team member with access to Links status can Ignore or include links anytime and any number of times on their project.

![12_Screenshot_Link_Analytic_ignored_links_blade](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot_Link_Analytic_ignored_links_blade.png)

---

## Improvements

• Overall performance and security of Document360 has been improved  
 • Adding new languages in a version is now easy with an exclusive icon for languages on the versions page  
 • Export to PDF in the Portal is capped at 2 MB. Users might face issues when they try to export the project to pdf, when the size of all the articles in the project is more than the 2 MB limit.  
 • We have now limited the subdomain name to 63 characters

<a id="july-2021-release-note"></a>

## July 2021

## New feature

### 1. Ticket deflector

Optimizing and balancing the role of a knowledge base and customer support in customer query resolution has always been a challenge. The all-new **Ticket deflector** feature does just that, helping customers find the solution before directly raising a ticket with customer support.

![1_Screenshot_Accessing_ticket_deflector_in_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot_Accessing_ticket_deflector_in_settings.png)

Ticket deflector achieves this with a bit of reader interaction, a set of questions and responses called **block steps**, and a search assistant. Most customers' query gets resolved in this stage and this, in turn, reduces the number of support ticket significantly.

### 2. Dependency viewer – Drive

One of the most requested and awaited features in Document360 Drive, the **file dependency viewer** is a part of this release. Now users can view all the reference point articles/category pages where an individual file from the Drive has been added/attached. You can access the viewer in one of two ways on the Drive.

![2_Screenshot_Accessing_file_dependency_viewer_in_drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot_Accessing_file_dependency_viewer_in_drive.png)

You can either select the **View dependency article(s)** option after clicking on ••• button next to the file **(or)** clicking on the **‘eye’ icon** on the right when you hover your mouse pointer over the file.

This dependency viewer gives you the list of articles/pages the file has been used; along with details such as article name, link to the article, article status, version, language, and the contributor who has used/attached the file.  
[**Read more →**](https://docs.document360.com/docs/file-dependency-viewer)  
![3_Screenshot_File_dependency_viewer_blade_in_drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot_File_dependency_viewer_blade_in_drive.png)

### 3. Export to PDF

The Export to pdf feature is not an entirely new feature in the Document360 portal, but we now have a dedicated page with additional settings and a menu item for this added in **Settings** under **Advanced**.

![4_Screenshot_Accessing_export_to_pdf](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot_Accessing_export_to_pdf.png)

We have added two tabs in the Export to PDF page (**Export** and **Settings**)

#### Export

Select the published content from your knowledge base such as specific project version, language, with a predefined setting to be exported as a PDF. You can also choose to secure the PDF with password protection.

#### Settings

You can create and save predefined settings for your future PDF exports. You can customize and modify most of the PDF file attributes (cover page, watermark, page orientation, fonts, TOC, etc.) to better suit your company’s branding or style guide.

![5_Screenshot_export_to_pdf__add_settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot_export_to_pdf__add_settings.png)

---

## Enhancements

### 1. Private notes

We have renamed **Internal notes** to **Private notes** in the documentation editor. You can add the **private notes** to your articles/pages by using the respective icon on the formatting toolbar in both markdown and WYSIWYG editor.

![6_Screenshot_Private_notes_configuring_visibility](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot_Private_notes_configuring_visibility.png)

We have also added more controls for private notes exclusive to the **WYSIWYG editor**. You can control who can see the private note by configuring the visibility setting. You can enable and select the intended **security groups** and/or **reader groups** to view the private note. You can also leave it at the default setting of **All team accounts** if you want this to be visible to all team members (or) you can toggle to off on all options to not to show the private note to anyone in KB.

Note

Advanced private note visibility controls are **only available in WYSIWYG editor**.

### 2. Additional text formatting on snippets

Users can now edit their snippet content using additional tools added onto the formatting toolbar.  
 Previously only basic tools (bold, italic, underline, callouts, table, and code block) were available.  
 Here are some of the new tools added: **Font settings, lists, insert image, links,** and **code view.**  
[**Read more →**](https://docs.document360.com/v3/docs/snippets)  
![7_Screenshot_Additional_formatting_controls_on_snippets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot_Additional_formatting_controls_on_snippets.png)

### 3. Mark as deprecated

You can notice a small change with the text formatting tools now available at the top in the deprecation message field. This was previously available but many of our users failed to notice or use this as it would only be visible when you click inside the deprecation message field.

![8_Screenshot_Mark_as_deprecated_formatting_controls](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot_Mark_as_deprecated_formatting_controls.png)

Another update to this feature is that now you can select multiple articles to bulk deprecate in the **All content** page.

[**Read more →**](/v3/docs/marking-articles-as-deprecated)

![9_Screenshot_Mark_as_deprecated_in_all_content_bulk](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot_Mark_as_deprecated_in_all_content_bulk.png)

### 4. Custom domain enhancements

* **Sub-domain** names can be directly edited by owners/admins on the knowledge base portal. Earlier you had to contact our customer support for custom domain changes
* You can now change the default **sub folder hosting path** (/docs) to match your needs. For example /help, /support, etc
* A new control to enable/disable article preview in sub folder hosting has also been added above the sub folder path setting

***(Settings → Knowledge base site → Custom domain → Custom domain mapping/Sub folder hosting)***

![10_Screenshot_Custom_domain_mapping_enhancement](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot_Custom_domain_mapping_enhancement.png)

---

## Improvements

* **Smart bars** feature has an improvement in the Advanced visibility rules. Now you can set show/hide rules at subcategory levels
* You can add, update, map, or delete, Readers and Reader groups with our public API docs.  Previously this could be done only from the knowledge base portal
* Overall performance, working, and design improvements

<a id="june-2021-release-note"></a>

## June 2021

We're here with our **June 2021** releases and we have a bunch of exciting new features and enhancements.

---

## New features

### 1. Import from word files (Beta)

Now you can import article content into your knowledge base directly from word files with **.docx** extension. You can find the import option added at the bottom of the category manager (left navigation pane) in the documentation editor right above the Content reuse and templates button.

![1_Screenshot-Importing_docs_in_word_format](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Importing_docs_in_word_format.jpg)

Click on the **Import** button and select the source word doc type and choose how you want to split the document. You can import the content into a **single article** (or) you can create **multiple articles** based on headings in the source document.

After that type in the article title, choose the category/ subcategory you want to import the article into. You can also preview the document or make changes to the article title or category at this stage. Click on ‘**next**’ and click on ‘**Start import**’.

![2_Screenshot-Splitting_multiple_docs_in_word_import](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Splitting_multiple_docs_in_word_import.jpg)

### 2. Tag management

We now have a separate module for all your tag management under a single menu. You can view, add, edit, redirect, and delete tags from this repository. Its so much easier when the same tags use in articles can also be used for files on your Drive. You can also view a dependency view for your tags. Access the Tag management page by ***Settings → Project admin → Tags***. You can export the Tags in form of an Excel or PDF file.

![3_Screenshot-Overview_page_of_tag_manager](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Overview_page_of_tag_manager.jpg)

### 3. Knowledge base assistant – Analytics

Similar to the different analytics data on your knowledge base, you can also view analytics data for Knowledgebase assistant as well. You can find the **Applications** dropdown in the Geography, Performance, Search, and Feedback page in the Analytics menu. You can easily switch back and forth between data here.

![4_Screenshot-Knowledge_base_assistant_analytics_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Knowledge_base_assistant_analytics_overview.jpg)

---

## Enhancements

### 1. Analytics comparison

Data comparison is key when it comes to analytics on your pages. It helps you strategize and rethink your approach. We have added a **comparison** feature in the Geography, Performance, and Search pages in your Analytics menu. You can view the comparison data for both knowledge base and knowledgebase assistant selections.  
![5_Screenshot-Knowledge_base_analytics_comparison_feature](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Knowledge_base_analytics_comparison_feature.jpg)

The following date range comparisons are available ***(Previous period, Previous month, Previous quarter, Previous year, and custom)***

### 2. Weekly report mail with analytics

Team members now receive weekly report mails about the project such as total weekly views, reads, likes, leading articles in terms of views, top search queries, and top countries data.

### 3. Custom filter addition in Bulk operations (All content)

We have added a feature to create a **custom filter** in bulk operations (now ‘All content’ menu). To create your own filter, click on the ‘**All content**’ option from the category manager (left navigation pane) in documentation editor. Now click on ‘**Filter**’ in the top-right and select **+ Add filter**. Add the filter name, the different filter conditions, and hit **Save**. If you want this filter to be accessible by all your team members, then switch on the **Filter visibility** toggle.

![6_Screenshot-All_content_creating_a_custom_filter](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-All_content_creating_a_custom_filter.jpg)

### 4. Search term highlight in article or category page

Earlier when readers search for a term using the bar at the top of the knowledge base and click on any of the search result listed, the page would just redirect to the particular article or category page.  
 With this new update the search term would be highlighted in ‘yellow’, and the page would automatically scroll to the section of the article with the search term.

![9_ScreenGIF-search_highlight_improvements_june_2021.jpg-min](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_ScreenGIF-search_highlight_improvements_june_2021.jpg-min.gif)

Default setting

This **Search highlight** feature would by default be **disabled** in your knowledge base setting. You can easily enable it from **Article settings & SEO**

#### Enabling the search highlight setting

Go to **Settings → Knowledge base site → Article settings & SEO → Article settings** and scroll down to find **Search highlight**. Switch the toggle on to enable this feature in your knowledge base site.

![10_Screenshot-Enabling_search_highlight_feature](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Enabling_search_highlight_feature.jpg)

---

## Improvements

* Overall performance and security of Document360 has been improved
* Import export API has been added – [**Link to API doc**](https://apidocs.document360.com/docs/export-documentation); This feature is available for Enterprise and Enterprise Plus customers only
* For private project, when registered readers or team members want to leave a feedback at the end of an article, their **profile would be preselected** and added along with name and Email info

### UI/UX

![7_Screenshot-UI_improvements_june_2021](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-UI_improvements_june_2021.jpg)

1. **Bulk operations** has been renamed to ‘**All content**’ and moved to the top of the category manager (left navigation pane)
2. **Home page builder** option has been moved inside the category manager (left navigation pane) from main menu
3. **Categories and articles** can now be expanded and collapsed in the category manager (left navigation pane)
4. Import, Templates, and Content reuse has now been grouped under Tools which can be expanded or collapsed
5. A **New** button has been added to Categories and articles

### Links status

![8_Screenshot-Links_status_improvements_june_2021](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Links_status_improvements_june_2021.jpg)

1. The links status page links list has been set to this default sorting 1. Broken, 2. Unknown, and 3. Working
2. You can also find one-touch filter options like Hidden, Working, Broken, Unknown, Redirect URL, and Media URL above the links list
3. Users can search for links using URL, Article name, or Redirect URL
4. The main Redirect category has now been moved as a subcategory under other main categories- Working redirected, Broken redirected, and Unknown redirected

<a id="may-2021-release-note"></a>

## May 2021

We’re here with our **May 2021** updates. Unlike the previous release we don’t have any entirely new features per se. But we have a bunch of exciting enhancements and key performance improvements coming your way.

---

## Enhancements

### 1. Export team members and readers as a CSV file

Now you can export team member or reader list to a **CSV file**(Spreadsheet) with a click of a button.

1. **Reader export**  
    In case of a private project, ***(Settings → Access & Security → Access → Readers)***, you can find the **Export readers** icon next to the **Add readers** and **Import readers** buttons.

![2_Screenshot-Export_reader_account_details_as_CSV](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Export_reader_account_details_as_CSV.jpg)

2. **Team member export**  
    Similarly, if you want to export team member details ***(Setting → Team & Security → Team members)*** you can find the **Export team member** icon next to the **Add team member** and **Import team member** buttons.

![1_Screenshot-Export_team_member_as_CSV](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Export_team_member_as_CSV.jpg)

Click on the export icon; the CSV file will be generated and available to save in your local storage.

### 2. Automatic review reminder

Now you can add automatic review reminder for article/page at a project level. You can set the number of days before the newly published article/category page is up for a review reminder. You can set from 1 to 365 days from the date of publish. You can change this option in ***Settings → Project admin → General → Documentation → Review reminder***.

![3_Screenshot-Default_review_reminder_setting](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Default_review_reminder_setting.jpg)

### 3. Mark as deprecated

Earlier you had the option **‘Mark as deprecated’** (for outdated or obsolete content) at a version level on your project. Now you can use the same function at an article/page level, where in the article/page would appear with the **‘Deprecated’** public status indicator. Also, you can show custom description or reason for the deprecation and the link to a newer version of the article/page at the top.

![4_Screenshot-Mark_as_deprecated_reader_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Mark_as_deprecated_reader_view.jpg)

You can access this option under the **Mark as deprecated** section in the right side **article settings** menu.

![5_Screenshot-Mark_as_deprecated_setting_portal_view](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Mark_as_deprecated_setting_portal_view.jpg)

### 4. Disable feedback in article/page level

![7_Screenshot-Article_level_feedback_bottom](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Article_level_feedback_bottom.jpg)

Earlier we had a global project setting for article/page feedback where in you can just enable/disable feedback for the entire project ***(Settings → Article Settings & SEO → Article settings → Article bottom)***. As an enhancement to this feature, you have the option of **disabling feedback for individual article/page** in the article settings. At the same time if you have disabled feedback at project level, you cannot enable feedback for individual articles/pages.

![6_Screenshot-Disable_article_level_feedback](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Disable_article_level_feedback.jpg)

### 5. Bulk delete on article/category versions

Earlier you could only delete one article/page version at a time in **view history**. Now you can select multiple versions the article/page has been forked from and do a bulk delete. This action would be logged in your Team audit and a notification would also be sent to the admin/owner.

![8_Screenshot-Article_version_bulk_delete](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Article_version_bulk_delete.jpg)

### 6. Filter assistant content

Now you can control and choose what knowledge base content you want to show/hide in your Knowledge base assistant. Earlier all the versions, languages, categories, articles were shown to the readers when you activate the Knowledge base assistant in your project or elsewhere.

![9_Screenshot-Filter_kb_assistant_categories](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Filter_kb_assistant_categories.jpg)

Go to ***(Settings → Knowledge base assistant → General → Filter assistant content)***. Here you can choose version level, language level, or even category level restriction of content to access and display on your assistant assistant.

### 7. Content reuse – UI enhancements

We have brought a quick access button for **Content reuse** in the documentation editor. You can find the new Content reuse button along with the **Templates** and **Bulk operations** button on the left. Also, the UI of the content reuse window has also been improved. You can notice the language selection has been moved on the top as a drop-down.

![10_Screenshot-Content_reuse_UI_revamp](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Content_reuse_UI_revamp.jpg)

### 8. Restricting selective domains for Reader self-registration

For private projects you can allow/block specific domains from being used at the time of reader self-registration. You can do this by adding the domain name in ***(Settings → Access & Security → Access → Reader self registration → Add domain)*** and choosing **Allow/Block**.

![11_Screenshot-Blacklist_domain_self_signup](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-Blacklist_domain_self_signup.jpg)

---

## Improvements

* Overall performance, working, and design improvements
* Notification setting for article feedback and self-signup events
* A more granular level Team audit log for IP restriction event
* Now you can add a comment when you publish new or forked articles
* In documentation editor, we have improved the insert link option. We have added a separate field for search and display text
* Earlier we used static key for article or file search. As a security improvement we have adopted dynamic key for search

<a id="april-2021-release-note"></a>

## April 2021

We are back again with our **April 2021** new feature releases and enhancements. Some of the most awaited features like Article template and an all-new updated category manager is a part of this release. We are adding a new extension for Salesforce in this release. Other than these major highlights we also have few slightly smaller yet significant enhancements like import of team accounts, automatic article status indication, Enterprise SSO binding type addition, and minor performance improvements.

---

## New features

### Article templates

Document360 article templates are predefined templates that you or any other member from the project can make use of while writing articles for your Knowledge base. The templates could be for a simple user guide, FAQ, Release notes, or pretty much anything you can create as a custom article template. Regardless of the use cases, article templates provide design consistency and style for your brand.

![1_Screenshot-Article_template](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Article_template.jpg)

In Document360 you can create new articles from any of the basic system templates or create/save from your own article template, which you can reuse any number of times in your project. You can access templates on the portal by clicking on the **Templates** option at the bottom of the category manager.

[**Read more →**](https://docs.document360.com/docs/article-templates)

### Introduction of Category types

Earlier a category was just a folder for the articles, but now you can choose to do more with categories. We have introduced two new category types along with the basic folder type

![2_Screenshot-category_types](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-category_types.jpg)

1. **Folder**: This is the basic category type which acts just as a simple bucket folder for articles and sub-categories
2. **Index** :  This type of category acts as an index to all the articles present within the folder and a preview excerpt from the article.
3. **Page**: This type of category is similar to the articles you create under the categories in your project.

You can choose these category type when you create a new category or change the type of existing categories.

![2_Screenshot-category_types_index page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-category_types_index%20page.jpg)

We have also improved the UI of the existing category manager in the Documentation editor. You can find new option of Templates added to the left side category navigation pane.

[**Read more →**](https://docs.document360.com/docs/category-types)

---

## New Extensions

### Salesforce

We introduce another powerful Document360 integration with the Salesforce platform. What this integration achieves is, it enhances and equips your support agents with a powerful knowledge base while serving customers. You can look-up or share articles easily and create articles for your knowledge base right from Salesforce.

The multiple use cases with Document360 integration in Salesforce makes it a value proposition for brands and people who engage with Salesforce environment.

![3_Screenshot-Salesforce_extension](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Salesforce_extension.jpg)

[**Read more →**](https://docs.document360.com/docs/salesforce)

---

## New Integrations

We have introduced 4 new integrations to the Document360 platform.

|  | Integration | Type | About the platform/app |
| --- | --- | --- | --- |
| 1 | **Belco** | Chat | Live chat and messenger on your website to talk to visitors in real-time. |
| 2 | **Gorgios** | Chat | Gorgias helps you communicate with your customers from multiple channels. |
| 3 | **FullStory** | Analytics | Makes it easy to solve problems, find answers, and optimize your customer's experience. |
| 4 | **Sunshine Conversations** | Chat | Enables businesses to communicate with their customers across every popular messaging app. |

![4_Screenshot-4-new-integrations-added](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-4-new-integrations-added.jpg)

[**Read more →**](https://docs.document360.com/docs/integrations-getting-started)

---

## Enhancements

### Import team accounts

We have introduced the option to import team accounts from your local storage  in using CSV file. This work similar to the import of reader accounts. You can find the standard template in the portal for the .CSV file.

![4_Screenshot-import_team_accounts_csv_file](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-import_team_accounts_csv_file.jpg)

### Article attachments from external source

Now user can add attachments to the articles from external source via URL. Earlier attachments could only be added from your Document360 Drive.

![6_Screenshot-attachments_from_external_source](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-attachments_from_external_source.jpg)

### Automatic article status indication

Now you can set automatic status (New/Updated) for articles in your initial publish or forked publish accordingly. You can enable this feature in the portal *(Settings →Knowledge base site → Article settings & SEO → Category manager)*.

The default time period would be set as 30 days, however you can set any value between 1 and 90 days.

![7_Screenshot-Automatic_article_status_indicator_update](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Automatic_article_status_indicator_update.jpg)

### Table of content in your Pdf export docs

Henceforth, when you export a category or entire Knowledge base into a Pdf, the document would contain a predefined table of content based on your categories and internal navigation links to each article in the .pdf document.

---

## Improvements

* The overall performance has been improved with considerable reduction in load times
* The Links status feature has been enhanced with hidden article filter and key performance improvements
* For Enterprise SSO SAML standard we have introduced Binding type (HttpPost and HttpRedirect) in the configuration
* ‘What's new’ is now supported on sub-folder hosted project and few security fixes have been implemented
* The Latest changes option has been moved from the profile section to the right top of the portal

<a id="march-2021-release-note"></a>

## March 2021

We are here with our March 2021 updates and improvements. We have a couple of updates in the Knowledge base site design. We have updated the direct portal login for SSO users. There is also a key security update in the recently released What’s new feature.

---

## Enhancements

### Knowledge base site design

You can now add logo and favicon from an external URL. You can also select the indent between small and medium in the fluid layout. This makes designing your knowledge base site easier along with the last month’s font selection options for body and heading texts.  
![1_Screenshot-Knowledge_base_design_favicon_external_url](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Knowledge_base_design_favicon_external_url.jpg)

### ‘What’s new’ security update

In our last release we introduced the ability to enable or disable the What’s new option in the document header. But reader’s who had bookmarked the URL were able to access the page irrespective of the option being disabled on the Knowledge base site. This has been addressed in this release and reader can only access the What’s new page only if the option is enabled in the portal settings *(Settings → Knowledge base site → Article Settings & SEO → Document header)*.

---

## Improvements

* Project creation performance has been improved
* Now you can use **File replace** to swap Draw.io format files which was not supported previously

<a id="february-2021-release-note"></a>

## February 2021

We’re here with our February 2021 releases and improvement. As an enhancement to the Drive, File replace feature has been added, which makes it easier for users to swap files which are used in documentation. We also have made a handful of minor improvements in UI/UX and Knowledge base font options.

---

## New Features

### File replace

Another important feature update to the Drive is the File replace option. You can replace files of the same extension and type (ex. Jpeg, .pdf, .png, and more) with the same file name and metadata. This comes in handy when you want to update a certain file in an article. To access this, click on the ••• **more option** adjacent to any file on the Drive. Another way to do this is to click on the file in the Drive page and in the right blade window click on the **File replace** button.  
[**Read more →**](https://docs.document360.com/docs/file-replace)

![3_Screenshot-File_replace_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-File_replace_overview.jpg)

---

## Improvements

* Few changes have been made for SSO users in our public [**API Documentation**](https://apidocs.document360.com/docs/get-users) under the Teams category
* You can now **Reorder the versions** display on your project for readers. In the **Settings→ Project Admin→Localization & versions** you can use your mouse pointer to drag drop the version vertically.
* **Font options** have been added to the Design section of your Knowledge base. Go to **Settings → Knowledge base site→ Design**. You can now change the **Body** and **heading fonts** of your Knowledge base.
* **Control on social media share feature** – You can now enable individual social media share option in your Knowledge base articles.
* The **Overview** option in the **Analytics** menu has been renamed to **Geography**

<a id="january-2021-release-note"></a>

## January 2021

We are starting of 2021 with new hopes and feature updates to Document360.  
 Before we get into that, here’s a **look back at Document360 in 2020**.

This past year Document360 was enhanced with major feature releases like [**Localization**](https://docs.document360.com/docs/localization-101), [**Enterprise SSO**](https://docs.document360.com/docs/single-sign-on-sso-getting-started), [**Knowledge base assistant**](https://docs.document360.com/docs/in-app-assistant-101), [**Drive**](https://docs.document360.com/docs/drive-getting-started), [**Content reuse**](https://docs.document360.com/docs/snippets), and a whole line-up of 3rd party [**integrations**](https://docs.document360.com/docs/integrations-getting-started) and [**extensions**](https://document360.com/integrations-and-extensions/).

Document360 portal also saw significant improvements in the Home page builder, Analytics, Article editors, Access and security, and an improved UI/UX for the portal.

With the January 2021 update, we bring you the addition of **smart bar** and **cookie consent** in your knowledge base and ‘**What’s new**’ feature is another exciting update. We have also made an enhancement with the Enterprise SSO by adding a login page bypass option and strict email domain restrictions.

---

## New features

### Smart bar

Smart bars allow you to display a banner/bar of info messages overlaying the knowledge base at site level or article level based on certain conditions. Using the smart bar option, you create and add banner(s) at the top and/or bottom of your knowledge base. You can choose if you want the smart bar to appear at a Global level (all the pages of your knowledge base) or Language specific.

The smart bar option can be found under ‘Knowledge base site’ in Settings menu. You can add text, numbers, characters, or links in the banner content. The smart bar can be set in four custom position and can be edited with styles (Colour theme) of the banner to best suit your page.  
[**Read more→**](https://docs.document360.com/v3/docs/smart-bar)

![3_Screenshot-Smart_bar_preview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Smart_bar_preview.jpg)

### Cookie consent

This option allows you to show a cookie consent banner for your page visitors on your knowledge base. The General Data Protection Regulation (GDPR) mandates that any website should obtain prior consent from the users before collecting, storing, or using their personal or behavioural data.

The cookie consent banner setting can be accessed under ‘Knowledge base site’ in the Settings menu.  You can enable cookie consent banner or pop-up at a global level (all the languages available in the project) or language specific. You can add custom cookie consent messages with basic formatting, add links, and add CTA (Call to action) buttons or icons. You can also edit the banner type (Bar or Pop-up), position, and the looks (theme colour) with live preview.  
[**Read more→**](https://docs.document360.com/v3/docs/cookie-consent)

![2_Screenshot-Cookie_consent_bar_preview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2_Screenshot-Cookie_consent_bar_preview.jpg)

### What’s new

We have added a new What’s new page on your knowledge base window. Readers can access it by clicking on the ‘Present box’ icon at the top right (blow header section) of the page. Once clicked a new page (Recently updated articles) would appear with the list of recently published articles (both new and forked). Reader can click on the article to visit the article.

![5_Screenshot-Whats_new_icon](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Whats_new_icon.jpg)

---

## Enhancements

### Enterprise SSO

#### Bypass Document360 common login page

Make use of this bypass option to skip the Document360 common login page and directly access the SSO login page. This option is available for private projects in which all the members of the project are SSO readers. Once you have configured the project using either of the SSO standards (SAML or OpenID), the bypass setting would appear above the Invite existing users setting.  
[**Read more→**](https://docs.document360.com/v3/docs/bypass-document360-common-login-page)

![1_Screenshot-Bypass_common_login_page_for_SSO_users](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Bypass_common_login_page_for_SSO_users.jpg)

#### Email domain restriction for SSO users

We have improved the level of security in your project by enhancing the existing email domain restrictions. Now users can sign up as SSO readers only using the permissible email domains specified by the Admin or Owner of the project.

### Idle screen timeout

We have added the idle screen timeout for the Document360 portal. If the portal is left idle for 2 hour the screen would display a warning prompt with 60 second timer with option (Stay logged in and Log out). After which the project would have an overlay and you have to hit the Refresh button displayed on your project screen to continue.

![4_Screenshot-idle_portal_screen_timeout](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-idle_portal_screen_timeout.jpg)

---

## Improvements

• Based on customer request, we have added article links in the Team audit and notification channel for specific article events (Ex. Article publish, Article contributors updated, and more)

• In the Team accounts section of Analytics menu, we have added an identifier badge for SSO user. This would help you differentiate regular team accounts from SSO team accounts.

<a id="november-2020-release-note"></a>

## November 2020

We’re here with our November 2020 releases and improvement. As new features, we have added Content reuse with custom Variables and Snippets. Also, in the Design & Navigations setting page we have added a dedicated Menu tab. Another major feature update is the inclusion of the most requested RSS feeds.

We have also added brand new external and internal integrations. The Zapier extension and Drift extension are a couple of exciting integration features. Regarding internal integrations, users can now choose to integrate with 21 platforms and applications.

There are few improvements in UI/UX updates in Home page builder, Machine translate, Drive, and other general improvements.

---

## New Features

### Content Reuse

The introduction of [**Variables**](https://docs.document360.com/v3/docs/variables) and [**Snippets**](https://docs.document360.com/docs/snippets) is a feature that would help users reuse a particular piece of content that is often repeated. If it is a small piece of information (like a contact number, mail Id) you can add and use a Variable instead of typing it every single time in your documentation. If in case the content should contain more information with different forms of content (like table, links, or more) you can use Snippets.

![1_Screenshot-Content_reuse_menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Content_reuse_menu.jpg)

#### Variables

Variables are short content containing Text, numbers, and special characters. Some of the common user cases of variables are Contact numbers, Emails, Company name, and more. With Variables you can either choose to have Global variable (available across all the languages), or Local variables specific to a Language in your project.  
[**Read more →**](https://docs.document360.com/v3/docs/variables)

#### Snippets

Snippets are predefined set of content that content manager identifies as reusable content. The content of the snippet can vary from simple text or phrases to lengthy paragraphs, tables, code blocks, and more. Snippets are stored in a library from which they can be inserted into articles at the time of edit by a simple click of a button.  
[**Read more →**](https://docs.document360.com/docs/snippets)

### Menu – Navigations

We have segregated the Menu tab in the Navigation setting page. This would make editing the menu items and links in your page so much easier. The interface is simple with drag and drop functionality and toggle to open the link in a new tab. You can do all this in the Menu section for all your versions and languages.  
[**Read more →**](https://docs.document360.com/v3/docs/menu)

### RSS feeds

We have brought in RSS feeds in the Header navigation tab under the Navigations menu. You can enable this on your home page and your reader can be aware of the recently published or updated articles. When the reader clicks on the RSS Feed option in your Home page menu bar, an XML file would be opened with the entries of recent 20 articles published or updated.

---

## New Extensions

### Drift

Drift is a conversational messenger platform that you can add to your website, knowledge bases, or online businesses. Now you can easily connect your Document360 knowledge base with the chat application. This gives you an additional edge to provide support or answer queries of your customers by sharing relevant article from your knowledge base, without having to leave the Drift conversation page  
[**Read more →**](https://docs.document360.com/docs/drift)

### Zapier

The integration tool Zapier is available as an extension on your Document360. This integration would allow users to connect and integrate between multiple cloud apps and service. You can easily create a Zap (workflows that connect your app). You can choose a trigger for the workflow to activate and then choose a response action. This opens new possibilities and hundreds of possible use cases.  
 The **Zaps** helps automate your tasks at the background, and basically automates certain workflows.

---

## Improvements

### Home page builder

The user interface in the Home page builder is made even easier with different functions segregated. We have added assistants (Most viewed, liked, read, modified, and created) which you can customize on your home page. Also, you can edit and add Language specific SEO titles for your page.

### Selective PDF export

Now you can perform the bulk operation of exporting your intended articles as a PDF file. You can select all or specific articles you want to be compiled and exported using the Generate pdf option.

### Article status indicator

We have introduced a new status indicator in articles. The newly created articles that haven’t yet been published are indicated in Blue. Also, previously the articles that are being forked would be represented in Yellow & Green will henceforth be indicated in just Yellow. The rest of the status indicators remain the same (Green for published articles and Red for article under review)

[**Read more →**](https://docs.document360.com/docs/article-status)

![4_Screenshot-Article_status_indicator_new](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Article_status_indicator_new.jpg)

### Integrations

We have improved the UI in the Integrations page. Now there are about 21 integrations that can be connected with your Document360 project. Another notable feature is the ability to switch on/off the integration in your project without having to remove or delete the configuration completely.  
[**Read more →**](https://docs.document360.com/docs/integrations-getting-started)

### Machine translate

Earlier articles in the HTML editor (WYSIWYG) could be translated using the Machine translate option. If you wanted to translate an article in Markdown, you had to manually convert/change the editor settings to HTML editor before proceeding with the Translate.

With the latest improvement the articles created with markdown editor can be automatically changed to HTML when you click on Machine translate.  
[**Read more →**](https://docs.document360.com/docs/machine-translation)

### Drive

* You can now set restrictions for file formats that can be uploaded into the Drive
* Another minor improvement is with the folder colors. Earlier users can only select from a predefined color palette. But now, we have added the color picker and He code support.

### Table of content

Now you can choose to display even **H3** and **H4** subheadings on the right-side along with table of content in your articles. Earlier the default mode was only for H2 headings. This would give a complete tree-view skeleton of the article.  
[**Read more →**](https://docs.document360.com/docs/right-sidebar)

### UI/UX improvements

We have made few UI improvements in the portal. Some notable ones are

* In **Settings → Project admin → General**, we have split and segregated the options under three different tabs (**General**, **Editor**, and **Drive**)
* In **Settings**, under **Knowledge base site** we have split the earlier Design & Navigations to two main menu items (**Design**, **Navigations**)
* The loading graphics within the portal has been given a new design.

<a id="october-2020-release-note"></a>

## October 2020

October 2020 updates and releases are here! And we’ve got some big ones. One of the most anticipated features among customer is the Enterprise SSO (Single Sign-On) feature is now available on Document360. Another major integration update is the addition of a Google Chrome browser extension for Document360. Other than these major updates, we have also made such as version level article redirections and security fixes in the Document360 APIs.

---

## New Features

### Enterprise SSO

The **Enterprise SSO** (Single Sign-On) feature enriches the user experience in authentication and access within Document360. Enabling the SSO feature in your knowledge base projects simplifies the credential management, saves time, improves identity protections which in turn adds an additional level of security. The user need not worry about remembering the individual credentials for each project.

Users can choose from two different SSO standards, the [**SAML 2.0**](https://docs.document360.com/v3/docs/enabling-saml-sso) (Security Assertion Markup Language) and [**OpenID Connect**](https://docs.document360.com/v3/docs/enabling-openid-sso). Also, users can choose from different Identity Providers like **Okta**, **Microsoft Azure Active Directory**, and **Auth0**.

![1_Screenshot-Enabling-Enterprise-SSO](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-Enabling-Enterprise-SSO.jpg)

### Chrome extension

Now Document360 is available for access on Google Chrome browser as an extension. With the [**Document360 extension**](https://docs.document360.com/v3/docs/chrome-extension), personnel from your organization with access to API key can connect, access, and look-up content from your knowledge base in their browser tabs anytime, anywhere.

#### **Chrome Web Store :** [**Document360**](https://chrome.google.com/webstore/detail/document360/lifhmbmenhhiolpbbahnjicckcnnophl)

The highlights of the Document360 extension include birds eye view of your knowledge base categories and articles, quick launch label, easy article search, suggested articles based on top searches, and a convenient reader mode.  
![1_ScreenGIF-Adding-document360-extension-in-chrome-min](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenGIF-Adding-document360-extension-in-chrome-min.gif)

---

## Other improvements

* We have added Version level article redirection based on popular customers’ request.
* Now roman numerals can be used for numbering in HTML (WYSIWYG) editor.
* We have also updated few security improvement fixes in Document360 APIs.

<a id="august-2020-release-note"></a>

## August 2020

We are back again with our 2020 mid-year product update and enhancements. We have added a couple of major features such as Localization and Document360 Drive. Other than the features we have also enhanced the overall product UI/UX experience. We are very keen on enriching Document360 as a holistic and powerful knowledge base platform in the SaaS documentation space.

---

## New Features

### Localization

Document360 now comes with complete localization as a major feature update. By offering your brand experience and support in a language that feels familiar, both existing and potential customers are much more likely to engage with your knowledge base content and reduce churn rate.  
![Image 7 - Screenshot - UI improvement- Language dropdown](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image%207%20-%20Screenshot%20-%20UI%20improvement-%20Language%20dropdown.jpg)

Localizing your Home page and your knowledge base would eliminate many hindrances faced by your customers in understanding and connecting with your business, as opposed to single language website and documentation. The translation of your categories can either be done in-house or external human translators manually, with generic machine translation (MT) option, or on a cloud-based localization management platform ([Crowdin](https://docs.document360.com/docs/en/crowdin)) where machine and human translators can collaborate.

![2 ScreenGIF - Comparison English and Russian](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2%20ScreenGIF%20-%20Comparison%20English%20and%20Russian.gif)

There’s much more to gain from [localizing](https://docs.document360.com/docs/en/setting-up-a-multi-lingual-knowledge-base) your Document360 knowledge base than just translated articles. You would be able to customize functionalities, articles, and URL slug in the intended languages. This would mean the content is either just translated from the original language or content is modified to better suit the target audience. The graphics, colors, and the aesthetics of your pages, fonts, and images can also be modified.

Also read our [Localization blog article](https://document360.com/blog/multilingual-knowledge-base/) for a detailed walk-through of this feature.

### Drive

A new and improved repository for your entire digital assets is here. Sync, organize, backup, and work with your folders and digital file formats like images, videos, audios, documents, and many other formats.

You can upload your digital assets to [Drive](https://document360.com/blog/manage-knowledge-base-assets-using-the-new-document360-drive/) using the simple interfaces on your Document360 project dashboard. The way the Drive works is like most well-known cloud storage platforms and a no brainer to get used to. Also, your Drive size limit would be based on the monthly plan you’ve chosen.

Read our [Blog article on Drive](https://document360.com/blog/manage-knowledge-base-assets-using-the-new-document360-drive/) for a detailed walk-through of the feature.

![Image 2 - Screenshot - New drive window](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image%202%20-%20Screenshot%20-%20New%20drive%20window.jpg)

---

## New Extensions

### Crowdin

**Crowdin** a cloud-based localization management platform, that can be integrated with Document360 knowledge base and achieve multilingual machine translation of categories and articles. The [integration of Crowdin](https://docs.document360.com/docs/en/crowdin) extension with Document360 provides an array of possibilities in context to high quality and near-perfect translations using the platform for collaboration between human and machine translation. This helps companies cater and provide support to a multi-linguistic clientele.

The integration is pretty much straight-forward and can be easily achieved with the aid of our installation guide.  
![Image 4 - Screenshot - UI improvement- Settings menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image%204%20-%20Screenshot%20-%20UI%20improvement-%20Settings%20menu.jpg)

---

## Other improvements

### Knowledge base assistant

We have enhanced the already existing Knowledge base assistant ([In-app assistant](https://docs.document360.com/docs/en/in-app-assistant-101)) on Document360. Yes, we now call it the **Knowledge base assistant**. All the existing and new functions have been brought under more structured and easily accessible dropdowns.

And with the introduction of Localization, users can select and search articles in version and language-level specific knowledge bases. We have also introduced the Custom launcher icon where you can select from a list of icons or also insert your custom icon from any URL. In the Knowledge base, the assistant assistant is movable and not fixed to a static position.

### New and Simplified UI/UX

We revamped our existing User interface (UI) and introduced a better, fluidic, and streamlined controls and menu options. This UI change makes all the relevant functions more accessible and simplifies the project settings. Also, we have revamped the article settings, discussions, view history and more.  
 Check out our [August 2020 updates blog](https://document360.com/blog/august-2020-product-update/) for a more detailed coverage.  
![Image 3 - Screenshot - UI improvement- Settings menu](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Image%203%20-%20Screenshot%20-%20UI%20improvement-%20Settings%20menu.jpg)

<a id="june-2020-release-note"></a>

## June 2020

We’re in the mid months of 2020; the world seems to be coping with the changes. Yet we constantly strive to innovate and make Document360 better by the day. We have added sitemap improvements and also made some relaxations in Drive by increasing the maximum file size limit for upload.  As a feature update we’ve added the SendGrid email tracking history. Now browse through article with a specific tag using the dedicated tag page and we’ve also introduced a couple of reader filters in Access & Security.

---

## Enhancements

### Increase in file size limit for upload

We’ve now increased the limit of individual and bulk file size being uploaded into the [Drive](https://docs.document360.com/docs/using-the-file-manager).

#### New file size limit

* **Single file upload** - The maximum file size is **150MB** per file
* **Multiple files upload** - The maximum combined size of all the files selected should be no more than **160MB**

### Dedicated tag page

Similar to viewing articles by a particular author in a knowledge base; readers can now view a compilation of articles from your knowledge base with a specific tag in a separate **dedicated tag page**. By clicking on a particular [article tag](https://docs.document360.com/docs/article-tags) displayed adjacent to the article, readers would be redirected the dedicated tag page.

![3 Screenshot - Dedicated tags page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3%20Screenshot%20-%20Dedicated%20tags%20page.JPG)

### Sitemaps

Now you can utilize XML sitemaps with your knowledge base website. As a knowledge base, you are bound to add articles, update, and remove them on a regular basis. Make it easier for search engines to crawl the pages in your knowledge base by linking a verified XML sitemap in your document360 site.

### Email delivery status

Now it’s easier to know the delivery status of your sent **invite mail** (New user), **associate mail** (existing user when associated with another project), and **change password email**. Using the SendGrid email tracking history you can view the status and other parameters of the email.  
**Tracking status**:  Delivered | Not Delivered

---

## Access & Security updates

### Domain filter

You can allow only readers from specific domain to sign up. These authorized domains can be added from the [**Reader self-registration**](https://docs.document360.com/docs/reader-accounts) in the **Access & Security** section from the project dashboard.  
 But in some case when the admin has authorized over hundreds of domains, it’s quite difficult to search for any particular domain from the lists. With the new domain filter update you can type the domain name in the search bar and find it easily.

![1 Screenshot - Domain filter in Access and security](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1%20Screenshot%20-%20Domain%20filter%20in%20Access%20and%20security.JPG)

### Reader login status filter

You can now filter the [readers](https://docs.document360.com/docs/reader-accounts) based on their last login status on your private knowledge base.  Just select the criteria and the filtered reader list would be displayed.

#### Status filters

**Logged-in reader | Never logged-in reader**

You can further use a sub-filter on the Logged-in reader status. This would allow you to filter readers based on their last login time periods.

**Logged-in reader sub-filter**  
 1 year | 3 months | 30 days | 7 days | Specific date range

![2 Screenshot -Reader last login filter status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/2%20Screenshot%20-Reader%20last%20login%20filter%20status.JPG)

### Custom password for reader self-signup

Based on customer feedback, we have added the option for readers to select their own custom password at the time of self-signup in your site. The invite mail sent to the readers post signup would contain the username and the password they've provided during signup.

<a id="may-2020-release-note"></a>

## May 2020

We’re here with our roll-out for the summer of 2020. Your in-product article search experience is getting even easier with the Category breadcrumb in search. Another functionality that’s new with this month release is a new mechanism to handle access permission of files displayed on your user landing pages. That’s not all; we’ve made Microsoft Teams integration with Document360 as an external integration.

Apart from these new and enhanced features, we’ve also implemented a couple of improvements to the product including a minor performance update.

---

## New features

### Secured files

For private projects we have introduced a mechanism to make images and files only accessible to authorized team members and registered readers within a project. This is achieved by appending an authorization token with short duration validity for the files being uploaded on Knowledge base.

### Microsoft Teams integration

Now users can integrate Microsoft Teams with Document360 seamlessly. This would enable users to search for and share articles from Document360 within Microsoft Teams platform. The integration is configurable in a matter of seconds by an authorization key.

![1 MS teams integration](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1%20MS%20teams%20integration.JPG)

---

## Enhancements

### Category breadcrumb in search

Earlier when users type in the search bar to find an article, the search relevant articles would be listed. The user wouldn’t know which category these articles fall under.  
 Now we’ve implemented the ‘Category breadcrumb in search’ for article search results across the board in portal as well as Knowledge base. This makes it easier for the user to identify the most relevant articles by seeing their base category.

![3 Category breadcrumb search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3%20Category%20breadcrumb%20search.png)

Also, as an add-on enhancement, users can search for any article with the article’s slug.

---

## Other improvements

Users can experience Document360 with a slightly enhanced performance.

* These updates can be effectively observed with project creation and cache implementation; where the time taken has been considerably improved

<a id="april-2020-release-note"></a>

## April 2020

This month, we’ve made it easier than ever to keep your knowledge base fresher than the produce in your fridge with a plethora of new article tools. Easily see what state an article is in using new article status icons, set automatic review reminders to keep article information looking fresh, and more.

---

## New features

### Article Locking

Now, when you’re editing/writing an article, the article locks to keep multiple users from editing the same article at the same time. You can manually unlock the article once you’re done editing, or it will automatically unlock after fifteen minutes of inactivity.  
![April  Article Lock](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/April%20%20Article%20Lock.png)

### Article Review Reminder

Keep your knowledge base content up-to date by setting review reminders. Review reminders help teams deliver the most accurate information to customers and internal teams by alerting project members when an article is ready for a fresh pair of eyes. Create and apply review reminders to flag an article for review immediately, or set the review reminder to trigger on a specified date. You can also apply a review reminder individually or to a group of articles.

### Article Status

Once you have a bigger knowledge base you’ll have knowledge base articles in various states. Some articles might be brand new, some might be drafts, others published, and others might require review. Now, with status indicators, you don’t have to guess article state.  
![April Article  Status](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/April%20Article%20%20Status.png)

---

## Other improvements

We revisited the Home Page Builder! Now you’ll find:

* Collapsible/expandable sections
* Insert images from a URL or the Drive to replace icons in the Columns of Text or Category sections.
* Add a featured image to the home page.

<a id="march-2020-release-note"></a>

## March 2020

0This month, we’ve been cooped up in our houses and, though none of us are sure if time is a  thing any more, we’ve still made big changes to Document360. Stuff like a revamped payment process, personal analytics in My Profile, and a Slack integration.

---

## New features

### Payment Revamp

Our end-to-end payment flow is now much much better. The pricing page now includes a clear description of each feature and variable pricing for storage and page visits. One important update, we made “Private Readers” unlimited! Before we were charging an additional cost for extra private readers, so happy early birthday! (unless today is your birthday, then happy birthday!)

### My Analytics

Curious about how your articles are performing? We’ve added user-specific analytics to the My Profile panel. My Profile analytics will provide you with more insight about your recent activities and analytics data like most viewed articles and when you last contributed.  
![March My Profile Analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/March%20My%20Profile%20Analytics.png)

### Slack Integration

Slack workspaces allow you to organize communications by channels for group discussions and allows for private messages to share information, files, and more all in one place. With our handy app, you will be able to search through the knowledge base, link the articles and create articles to your current workspace without leaving Slack.

---

## Enhancements

1. Multi-token option in Freshdesk: An extension to the Freshdesk integration feature supports integrating multiple knowledge base projects at the same time.
2. Codeblocks in WYSIWYG Editor: You  requested, we answered: code blocks can now be added to articles using the WYSIWYG text editor. Use the “Insert Codeblock” tool to post syntax-highlighted code in more than 30 programming language formats.

<a id="february-2020-release-note"></a>

## February 2020

February brings a long-awaited feature that’s been requested from many of our customers…a button that inserts a randomized kitten image! Just kidding, we’ve added an easier way to link to other articles within articles. We’ve also added some improvements to analytics and tags.

---

## New features

### Internal links

Previously, if you wanted to add a link to another article in your knowledge base, you needed to physically copy that link from the knowledge base and paste it into your editor. Now, we’ve added the Type-to-Search feature on the “Insert Link” tool in the editor.  
![feb 1](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/feb%201.png)

---

## Other improvements

1. Autocomplete on tags - When adding tags to articles or in the Drive  relevant tags that were previously will display in a dropdown.  
   ![feb autocomplete   tag](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/feb%20autocomplete%20%20%20tag.png)
2. Feedback Analytics - Feedback analytics now get their own tab instead of sharing space with performance analytics. All functionality is the same, they’ve just grown up and got their own rooms.

<a id="january-2020"></a>

## January 2020

New year, new changes!

In January 2020, we’ve added better analytics for article feedback, internal comment blocks, and improved URL mapping for the Knowledge base assistant. Smaller improvements include more filtering options in Bulk Operations, and the frequently requested ordered and unordered lists in callouts. Shoo. We’re going to go take a nap now.

---

## New features

### Feedback Analytics

We made it easier for customers to share praises or grumbles about your perfectly-written content. When they like or dislike an article, they now get the chance to add their feedback. Let’s be honest though, most will just tell you what they dislike, but the good news is, it opens up a brand new way to help you to understand your customer needs and wants.

Check out the project member-facing feedback UI  in the **feedback** tab found in the **performance** section of **Analytics.**

![Feedback in Portal](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Feedback%20in%20Portal.png)

If you’d like to see the feedback form live, scroll down to the bottom of this document and leave a (nice?) comment, or just look at this less interactive picture.

![Feedback Form](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Feedback%20Form.png)

### Internal Notes

Leave other team members secret notes that public readers will never ever see. Internal notes will only be visible by project members when included in a published articles and can be added in both the Markdown and WYSIWYG editors. They are perfect for telling a project member when a bit of information might not be accurate, that their boss is standing behind them, or even leaving a note to yourself for future improvements.

Check out internal notes by clicking on the internal notes icon in an editor toolbar.

![Internal Notes](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Internal%20Notes.png)

### An Improved Knowledge base assistant

We’ve made the Knowledge base assistant more assistive by:

1. Adding custom CSS/JS sections that let you whip up and include your own styles and functionality.
2. Making the  URL mapping feature more dynamic by allowing project members to include query parameters and hash values in their URLs.

Check out the improvements by visiting the **Knowledge base assistant** section in **Settings**.

---

## Enhancements

* We added better language around article states in “Bulk Operations”. “New Article” now refers to an article that’s never been published, while “Draft” refers to an article that has been published but is currently being edited.
* Twenty four hour project access during email verification. New team members will get one day of access without verifying their email. After one day, the link will expire, and the invite must be resent.
* Your votes have been heard and now any callout block can now include bullet points and numbered lists. They can also be multi-line.
* List pagination: In the Drive and team management lists, it’s easier to navigate through several pages of data with added pagination.
* Mac users rejoice, you can now save your article using `cmd+s`.

<a id="december"></a>

## December 2019

It’s the end of the year and we’re getting in one more release in before the holiday season. We’ve updated our Integrations UI, added the ability to manage an article’s contributors, and added more detailed analytics for team accounts.

---

## Improvements

### Integration UI Revamp

Internal and external integrations now have their own dedicated tabs. We’ve moved the Custom Tags tab out of the Custom CSS/Javascript Section, renamed it Custom HTML, and moved it into internal integrations so that you can easily add HTML-based widgets.

![Integrations](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Integrations.png)

### Manage Contributors

By default, users who create/fork/save/publish the articles are added to articles as contributors, but if a contributor leaves your company, what do you do? Now, you can add and remove contributors from the contributor list.

![Contributor list](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Contributor%20list.png)

### Expanded Team Accounts Analytics

We’ve added some new stuff to the Team Accounts section in analytics:

* Extra fields!

  + User Type
  + Articles Created
  + Last Contributed
* Export data to Excel & PDF

![Team Analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Team%20Analytics.png)

See you next year!

<a id="november"></a>

## November 2019

Why have one text editor when you could have two? Our November 2019 release comes with a new WYSIWYG editor. A great option for media-heavy articles and those who prefer more of a Microsoft Word-like editing experience. We’ve also added export to PDF, a referral program, bulk reader import, and the ability to configure your team audit log.

---

## New features

### WYSIWYG editor

The WYSIWYG editor is our new alternative to the default markdown editor. WYSIWYG uses Rich Text Formatting, making it similar to Microsoft Word or Google Docs. The WYSIWYG editor includes features such as multi-line callouts, emoji support, table options, and links inside an image.

You can choose either the WYSIWYG or Markdown editor during project creation and later in your project settings. You can also set the editor on an article-by-article basis.

![WYSIWYG](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/WYSIWYG.gif)

### Export to PDF

You can now export your knowledge base as a PDF for offline users. Before importing, you can also password protect the file to make sure you have complete control over who can access it.

Check it out in the **Import & Export** section in **Settings**.

![PDF](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/PDF.png)

### Referral program

This isn’t a feature proper, but we’re just as excited about it! We have a new referral program. Share the love lets you earn discounts towards your subscription by inviting people you know to start using Document360. Send out your own unique link to your friends and if they sign up and become Document360 customers you will both earn $50 coupons towards your subscription.

![Share the Love](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Share%20the%20Love.jpg)

You can get a referral link in the **Share the love** section in **Settings**.

### Bulk Reader import

We’ve added the ability to import multiple readers by uploading.csv file. Simply drag and drop your file and we’ll handle the rest!

Check it out in the **Site Access (public/private)** section in **Settings**

![Import readers](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Import%20readers.jpg)

### Audit configuration

Team auditing is a great way to see what is happening in your knowledge base. However, there might be some events you don’t need to added to the audit list. Now you can choose which events are listed in your audit log.

![Audit Config](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Audit%20Config.gif)

<a id="october"></a>

## October 2019

Instead of October release, we've been focusing all our efforts on a hard launch of Document360 on the popular product finding platform Product Hunt.

And after months of hard work, building, and strategizing we're proud to say we've officially launched Document360!

Thanks to all our customers who have been with us so far!

[Check us out on Product Hunt!](https://www.producthunt.com/posts/document360)

<a id="september-2019"></a>

## September 2019

Fall is brisk, so we’ll try and make this update the same. September 2019 brings URL mapping to the Knowledge base assistant, an improved Settings UI, the option to open links in a new tab (how many tabs can you have open at one time?), and updates to our payment system.

---

## New features

### URL mapping for Knowledge base assistant

Set the Knowledge base assistant to show a list of articles, or an individual article, or search results for a keyword in your assistant, when a user navigates to a specific URL.

Check it out in the **Knowledge base** section in **Settings**.

---

## Improvements

### Improved Settings UI

We’ve made some design changes to the Settings section by making use of tabs to give you less chaos and more organization of various settings.

![Improved Settings UI](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Improved%20Settings%20UI.jpg)

### Open article links in new tab

A customer request, we added the ability to open any article links need in new tab. Go ahead. If you’re a Mac user, cmd + click, on an article link. Windows users? Ctrl+click. We dare you.

### Support for Strong Customer Authentication

We have made necessary changes to our payment system that are needed to meet the new requirements for authenticating online payments, introduced in Europe as part of the second Payment Services Directive (PSD2).

<a id="august"></a>

## August 2019

There are a few things that just need to be exactly how you like it, coffee, pillows, and application security. This release brings the frequently-requested Custom Security feature, as well as IP whitelisting. Smaller improvements include Find and Replace in articles, better category management in the Documentation Editor, and CSS snippet templates.

---

## New features

### Custom Security

The wait is over, you can now assign custom levels of access for both team accounts and readers. Access can be limited to project level, version level, or category level. Pre-define/assign sets of permissions for custom team roles or security groups.

![Custom Security](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Custom%20Security.png)

Similarly, you can create Reader Groups for a private knowledge base and restrict a group of readers to only view a limited set of documents.

Custom Security is available to tiers Enterprise or higher.

### IP Restriction

Restrict or allow knowledge base access for specified IP addresses.

Check it out in **Site Security** in **Settings**.

![IP Whitelist](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/IP%20Whitelist.png)

## Improvements

* You asked, we added. “Find and Replace” is now in our text editor. You can find it in the editor toolbar.
* Add categories, subcategories, and articles in the Documentation Editor from a quick add button that appears when you hover your mouse between items in the category manager.
* We whipped up some frequently used custom CSS snippets that you can add to your CSS editor with a click. Find them in **Custom CSS/JavaScript** in **Settings**.

![CSS](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/CSS.png)

<a id="july"></a>

## July 2019

In July 2019, we made you a treasure map, and by that we mean we’ve added an interactive Getting Started guide. This guide lets you know how many Document 360 features you’ve explored. We’ve also let readers self-register to your private knowledge base, and tossed in a few other smaller enhancements.

---

## New features

### Getting Started

Welcome to our new Getting Started guide! This guide will help users understand and explore all the Document360 features. The progress bar will let you know how many features you still get to experience for the first time. Click on any feature name to navigate to that section of Document360. You can find the guide in the **General** section of **Settings**.

![Getting Started](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Getting%20Started.png)

### Self Sign-up

Users can now self-register to a private knowledge base. You can also restrict the sign up for certain email-domains only, to prevent random access. You can enable self-sign up in the **Readers** **Self Registration** section of **Site Access (public/private)** in **Project Settings**.

![Public Knowledgebase](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Public%20Knowledgebase.png)

### Exclude Articles from SEO

You can now keep your articles away from the grabby hands of SEO crawlers. You can exclude articles from being returned in search engine results by checking “exclude from external search” in the Article Settings options on each article. We’ll add a noindex/nofollow meta tag to that article which will keep it off Google, Bing, Yahoo, and Ask Jeeves (does anyone even ask Jeeves anymore?).

![Exclude from Search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Exclude%20from%20Search.png)

---

## Improvements

You asked, so we added a permanent redirect status code (301) for projects using a custom domain.

<a id="june"></a>

## June 2019

If your docs can’t contain cat videos to sooth customers while they try to solve their issues, can you even writing good documentation?

Yes. The answer is probably yes.

Good news for those of you who said “no”, though, or anyone who likes videos. With our June release, you can now add audio and video files to your docs, as well as PDF and other documents. We’ve also added a bulk operation option so you can manage multiple articles at the same time.

---

## New features

### Add Audio, Video, and other files

Document360 now supports audio and video uploading. You can add MP3, OGG, WAV, MP4, OGV, and WEBM files to the Drive and, once in the manager, into your docs.

We’ve also added the ability to insert PDFs and other file types such as .doc, .zip, and more. PDF files can be previewed within the text editor. Other files will show as download links.

![Add Media](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Add%20Media.png)

### Bulk Operations

Why publish one file at a time when you could publish five at a time? Outside of that fact that it wasn’t possible in Document360 before this release, no reason at all!   
 With bulk operations, you can create, update, publish, and delete multiple articles at the same time.

<a id="may-2019"></a>

## May 2019

Summer is on the horizon and we decided that nothing says summer like being able to audit the actions of your team members. For May 2019, we’ve added an automatic audit log, an Knowledge base assistant that will give your customers access to your knowledge base wherever they are, and opened up access to [Swagger](https://swagger.io/) so you can more easily test the Document360 APIs.

---

## New features

### Team Auditing

Notification channels were a good start to keeping you up to date with everything happening with your knowledge base. However, you may not want notifications every time someone updates their account settings. Enter the audit log. From now on, we will monitor your knowledge base around the clock and log it to a secure place. The audit log is available in **Project Settings** whenever you need it.

![Auditing](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Auditing.jpg)

### Knowledge base assistant

The brand-new Knowledge base assistant will replace all other assistants! This isn’t true at all, but it will allow your users to access your knowledge base on any page of your website or even in your app. We provide a script for you to inject into the website, and tadah, a small button will appear in the corner of your page so that the assistant can assist. Inside you or your users can search your knowledge base and open the articles.

![IAA](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/IAA.jpg)

### Swagger UI

With the release of our APIs to the public, many of you suggested that it would be handy if we expose Swagger for easier testability. It is now available from the root URL of the API <https://apidocs.document360.com/docs>

Just copy your API token to Swagger and start testing. Turns out, swagger isn’t just how awesome you look walking down a city street. Swagger is also a place to play around with our APIs, no need for extra software.

![Swagge](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/Swagge.jpg)

<a id="april-2019"></a>

## April 2019

The release notes are our monthly update that highlights recent product developments.\_

Here is up-to-date on what’s new in Document360 in the month of April 2019

## Brand new features

#### Comprehensive UI enhancement

We are delighted to inform that we have the improved UI in aspects of accessibility of Portal and Knowledge base in a comprehensive manner such as follows.

* In the Article settings,

1. You could easily insert files as attachment formats so that it could be downloaded by the end user from the knowledge base portal on any necessity.
2. You could locate the visibility of the “File attachments” either in the bottom or on the right side of the Article layout.
3. You have the provision to remove the previously uploaded Feature image.
4. You could add “tags” to articles to help your users find and benefit your information just on keyword search as they browse.

* The Icons UI had been improved greatly, such as you could notice the pleasing visibility of the Icons of much importance alone in the Markdown menu and other icons in the extended view of the menu.
* In the Documentation section, we have improved the UI of displaying the date in a user-friendly manner as hours or days or years.
* In the Discussion section, we have improved the UI of chat layout in a way you could effectively collaborate among team.
* The provision of toggling to enable the Landing page visibility is appropriately segregated from the Landing page to the General Section of the Settings page.
* We have enhanced the optimization of SEO with provision to include the SEO Title and SEO Meta Description of your Project under the General settings of the Knowledge base rather than including the summary of a Project.
* The Teams & Protection section is appropriately segregated into two separate sections such as follows

**Team access**:  
 You could only add users and define respective roles as needed.

**Security access**:  
 You could enable your Knowledge base access either by Private or Public.

* As many numbers of versions of an article created, you could possibly assign a friendly name and the same would be visible on the versions’ dropdown menu in the Documentation.

## Extended Storage limit

We have included the option to add-on storage in the Enterprise plan.

---

## Enhancements

* You could enable the Markdown view of published articles on a single pane without even forking the existing published article and this in fact helps to avoid unnecessary creation of an Article version.
* In the “Bulk Operations”, we have included the provision to directly open the latest version of a specific article in an Editor view.
* The Draft Writer henceforth could access the Article Settings.
* In the General settings of Knowledge base,

  1. You could to enable Visibility Settings and to add Canonical domain URL.
  2. You could enable the visibility of the first hierarchical level of level of Articles of all the main categories.
  3. You have the option to show or hide the estimated time to read in the Customer Portal
  4. Included provision to locate the link of “Related articles” either in the bottom or on the right side of the layout.

<a id="march"></a>

## March 2019

*The release notes are our monthly update that highlights recent product developments.*

Here is up-to-date on what’s new in Document360 in the month of March 2019

## Brand new feature

#### API Documentation

Document360 is open for Integration.

You can now integrate your software, flows and more with your Document360 documentation. On-boarding new users or dynamically creating articles from your support tickets is now possible with Document360 RESTful APIs. The possibilities are endless, so head over to our API documentation to get started with your first integration.

> Set API documentation in action easily with Document360 RESTful APIs.

#### To use the Document360 RESTful API:

API documentation made easy with Document360. All you need to do is just generating an API token, receive responses and make your first Document360 API call.

Document360 RESTful APIs uses HTTP requests to GET, PUT, POST and DELETE data and the Responses are in JSON format.

  

## Enhancements

#### Lightbox

The Lightbox zoom effect had been enabled for images within the Documentation as well as for the images on the landing page.  You just need to click on the images to zoom it. This Lightbox effect allows your images to be viewed center-stage in a larger format whenever they are clicked on.

**Note**: you can use your arrow keys to navigate between the two photos in this lightbox view.

#### Preview Hidden draft article

In Document360, we have included the functionality of previewing hidden articles. So that, once after authentication, you could see the hidden article preview on the landing page. If you are happy with the content and formatting, you could publish this article.

#### Exclude Internal and related article search in Analytics

Basically, we understand that Analytics helps to track how customers engage with your product knowledge base. So, to acquire precise analytics report, we have included the functionality to exclude internal and related article search from Analytics activity.

<a id="february"></a>

## February 2019

*The release notes are our monthly update that highlights recent product developments.*

**Here is up-to-date on what’s new in Document360 in the month of Feb 2019**

---

## New features

## Drive

The Drive interface allows users to predominantly organize, view, access, and manage all the files and folders in one place.

We are happy to announce that in this upcoming release, we have introduced the Drive interface in Document360 to systematically facilitate all kinds of file operations, such as create, upload, delete, etc.

### Images

The ‘Images’ folder is a central location for all your image files and makes it easy to upload all images.

Once you create a project, the folders of prime importance, such as Settings, Landing page, and Documentation, will be created by default.

**Note**:The default folders could not be deleted.

**You could easily perform file functions such as Image upload, view, or delete activities.**

#### Upload an image

You could easily upload an image directly by choosing the image file from the Images folder. Alternatively, you could drag and drop an image file onto this folder.

#### Upload Files

You can upload Files in the Drive, and the file size limit depends on your chosen pricing plan and can be from 5GB to 100 GB.

#### Storage Size (based on license)

* Standard: 5 GB
* Business: 25 GB
* Enterprise: 100 GB

*Single file upload limit: 25 MB*

#### Supported files formats

In Document360, we have included the ability to support various file formats in Drive, such as

* Images
* PDF
* Word Documents
* Presentation
* Zip
* Excel/CSV

### File Picker

In File Picker, you could pick image files from the Drive and insert them onto the Knowledge base, Landing page, etc., but you are not allowed to delete Files or create Folders.

**Note**: It is mandatory to pick image files from the Drive and not from the local browser, which was permitted earlier in Document360.  
(*File picker supports the upload of Image files alone.*)

---

## Enhancements

### Notification channel UI enhancements

In Document360, we have segregated the Notification events at the granular level.

We have revamped the event mapping layout, where the user could view the mapped channel adjacent to the respective event and remove the mapping without navigating to the Mapping blade.

---

### Export as html

Now, you can easily export the knowledge base articles in HTML format in addition to the Markdown format.

**Note:** Import of knowledge base can be achieved in Markdown format alone

<a id="january-2019"></a>

## January 2019

\*\**The release notes are our monthly update that highlights recent product developments.*\*\*

Here is up-to-date on what’s new in Document360 in the month of **Jan 2019**

---

#### Brand new feature(s)

## Notification Channel

> **Enjoy faster communication experience!**

Notifications are an established concept for alerting users. Mainly, it is a significant piece of information to make users aware of certain conditions that would need timely action. Notifications from Document360 could be sent through various external notification channels like Webhook, Slack, Microsoft Teams etc.

By default, external notification channels are in-built in Document360 to help your users enjoy faster communication. The only step you need to perform is to configure these notification channels with the appropriate URL, Access Token value (for Slack) and Authentication settings (for WebHook), and Teams WebHook Connector (for Microsoft Teams). What this means for you, is that if you are already using either of these channels in your organization, it becomes easier to receive alerts from Document360 right into these channels.

In Document360, you could set up custom Notification Channels easily as follows:

  

## Configure a Channel

On the Notification -> Channels page, click the '**Add New Channel**' button and navigate to the page you wish to configure and set up a new Notification Channel from the available options such as **WebHook, Microsoft Teams, Slack or SMTP**.

## Manage your Channel

Once you complete configuring the custom Notification channel, you could manage easily by mapping the events that you prefer to be notified to the respective channel to receive notifications.

Navigate to **Settings -> Notifications > Event Mapping**

In the Notification Event Mapping, you could enable alert notification in the core settings if any changes in the below-mentioned areas.

* Custom domain
* Custom CSS or JavaScript
* Custom Tags
* Project backup
* Project member
* Project Imported or Exported
* Article Redirection
* Notification Channel
* Appearance settings
* Integration

Additionally, you could enable alert notifications for any changes at the level of

* Documentation
* Landing page
* Category
* Article
* Drive
* Payment

## Notification History

In the ‘History’ section of Notification, you could view all the notifications that have been sent out from Document360 to the channels you have configured.

---

## Enhancements

### @Mentions in article comments

> "Ensuring effective collaboration on your articles, among the users."

We have enhanced the comments section of the Articles in the Documentation portal, enabling you to tag any of your team members.

* You could easily tag a user just by @mention in the text box in the Article comment section.
* Immediately, you could view the list of Project members, click on the user name you want to tag and mention your comment and click the ‘send’ icon.
* Once the user tagged, they would be notified via email with embedded comment description.

You could easily tag a user just by @mention a user in the text box of the Article comment section. Once a user tagged, they would be notified via email with embedded comment description.

---

## Hiding Category

We have added the ability to hide your Category from viewing on Knowledge base and excluding it from the Search results.

For instance, in case if any of the Category is under development and you could maintain its privacy by hiding this Category from clients’ view inclusive of the Subcategories and articles within it.

---

## Category tree enhancement

Another notable improvement was made in the Category tree, as we care your performance just like you. We have improvised the performance of the emoji library enabling it to load faster in your category manager and save your time.

---

## Custom Footer

You could easily configure advanced custom footer in Document360.

**To configure Custom Footer Navigation**

* We have included a Blank layout, so you could customize your preference with HTML & CSS sections.
* Alternatively, we have added two predefined themes A and B with default HTML & CSS, so you customize your preference.

<a id="support-ticket"></a>

## Support ticket

**Plans supporting access to the support page**

| Professional | Business | Enterprise |
| --- | --- | --- |
|  |  |  |

Need support or assistance? Feel free to contact us from the [Document360 support page](https://support.document360.com/support/login). Raising and tracking support tickets is very easy and user-friendly. Our support experts will respond to your queries within minutes.

![1-Screenshot-Support_portal_login](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732093291652.png)

---

## Raising a support ticket

### Logging in to the Document360 support page

To log in to the Document360 support page,

1. Navigate to the [Document360 support page](https://support.document360.com/support/login).
2. Enter your credentials for the support page and click **Login**.
3. If you’re a Document360 customer without support page credentials, click **Login here** next to **Are you a customer?** to log in using your Document360 credentials or the SSO option.

![2_Screenshot-support_ticket_login_page](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732093438088.png)

### Submitting a ticket

Once you log in to the support page, follow the below instructions to submit a ticket.

1. Click **Submit a ticket** at the top right corner of the support page.

![3_Screenshot-Doc360_Support_ticket_homepage](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732095618736.png)

2. Input the required information in the Requester, Subject, Group, and Description fields.
3. Click **Attachments** to include any files relevant your issue.
4. Click **Submit.**

![4_Screenshot-Submitting_a_support_ticket](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732095660957.png)

After submitting your ticket, you will be redirected to the ticket status page, where you can view details such as the Ticket ID, Date Created, and other relevant information.

---

## Viewing the status of your ticket

You can easily track the status of your tickets from the support page.

1. Log in to the [Document360 support page](https://support.document360.com/support/login) and click **Tickets** on the top.
2. Enter the desired keyword in the 'Search' field and click the **Search ()** icon**.**
3. Filter your tickets by status using the **Status** dropdown. It has the following options:

   * **All tickets**: View all the tickets you've submitted, regardless of their current status.
   * **Open or Pending**: Tickets that are still being worked on or need action.
   * **Resolved or Closed**: Tickets that have been completed or marked as finished.
   * **Archive**: Older tickets that are no longer active but are saved for your reference.
4. Click on the desired ticket.
5. The **Status** of the ticket appears on the right.
6. You can also find the ticket history on this page.

   ![5_Screenshot-Status_of_my_ticket](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732095706901.png)

---

## Exporting tickets

You can export the tickets as a **.csv** or **.xls** file. To export your tickets,

1. Log in to the [Document360 support page](https://support.document360.com/support/login) and click **Tickets** on the top.
2. Click **Export Tickets** on the top right of this section.
3. Select the desired data from the **Export Tickets** window:

   * **Created in:** Select the date range for the tickets you want to export.
   * **Export as:** Choose the desired file format: **CSV** or **Excel**.
   * **Select field:** Select the fields to include in the export file, such as:

     + Ticket ID
     + Subject
     + Description
     + Status
     + Requestor source
     + Requestor email
     + Group
     + Created time
     + Last updated time
4. Click **Export**, and the exported file is saved in your local storage.

![6_Screenshot-Exporting_the_tickets](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/image-1732095765194.png)

<a id="document360-support-generating-a-har-file"></a>

## Generating a HAR file

## What is an HAR file?

A **HAR** (HTTP Archive) file is a JSON formatted file that contains a log of a web browser's interaction with a web page. It captures details such as requests and responses between the browser and the web server, cookies, timings, and other metadata related to the page's loading and rendering process.

> NOTE
>
> HAR files are used by Document360 team for debugging and analyzing Document360 project's performance issues, as they provide a detailed record of the interactions between the browser and Document360.

### How to generate a HAR file?

They can be generated by most modern web browsers, as well as by various web development tools and browser extensions.

---

## Generate HAR files in web browsers

Follow the steps mentioned below to generate a HAR file in the following web browsers to aid the Document360 team in troubleshooting your issue

1. Google Chrome - HAR file generation
2. Mozilla Firefox - HAR file generation
3. Microsoft Edge - HAR file generation
4. Safari - HAR file generation
5. Opera - HAR file generation

The steps to generate a HAR file are mostly similar with minor UI changes that vary from web browser to web browser.

### How to generate a HAR file in Google Chrome?

You can generate a HAR file in Google Chrome using the built-in Developer Tools.

Here are the steps:

1. Open Google Chrome and go to [**portal.document360.io**](https://portal.document360.io/)**.**
2. Select your Document360 project.
3. Go to the **Chrome menu** (three dots on the top-right corner) > **More Tools** > **Developer Tools**.
4. In the Developer Tools panel that appears, click on the **Network** tab.
5. Make sure the **Preserve log** checkbox is checked, which will ensure that the network activity is not cleared when you navigate to a different page.
6. The network recording usually starts automatically. To ensure it is recording, check for a red dot in the Network panel. If it’s not recording, click on the Record () icon.
7. Reproduce the issue you face with your Document360 project.
8. Once you have reproduced the issue on your Document360 project, click on the red dot or **Ctrl+E** to stop capturing network activity.
9. Right-click anywhere in the network activity table and select **Save all as HAR with content** from the context menu.
10. Choose a file name and location to save the HAR file in your local storage.

You now have a HAR file that contains a log of all the network activity that occurred while reproducing the issue you faced in your Document360 project. You can share the file with the Document360 support personnel.

### How to generate a HAR file in Mozilla Firefox?

You can generate a HAR file in Mozilla Firefox using the built-in Developer Tools.

Here are the steps:

1. Open Mozilla Firefox and go to [**portal.document360.io**](https://portal.document360.io/)**.**
2. Select your Document360 project.
3. Click on the **Firefox menu** (three horizontal lines in the top-right corner) > **Web Developer** > **Network**.
4. In the Network panel, click on the **Persist Logs** button to ensure that the network activity is not cleared when you navigate to a different page.
5. Make sure the **All** tab is selected to capture all the network activity associated with the page.
6. The network recording usually starts automatically. To ensure its recording, check for a red dot in the Network panel. If it’s not recording, click on the Record () icon.
7. Reproduce the issue you face with your Document360 project.
8. Once you have reproduced the issue on your Document360 project, click on the red dot or **Ctrl+E** to stop capturing network activity.
9. Right-click anywhere within the list of network requests and select **Save All As HAR** from the context menu.
10. Choose a file name and location to save the HAR file in your local storage.

### How to generate a HAR file in Microsoft Edge?

You can generate a HAR file in Microsoft Edge using the built-in Developer Tools.

Here are the steps:

1. Open Microsoft Edge. Go to [**portal.document360.io**](https://portal.document360.io/).
2. Select your Document360 project.
3. Go to the **Edge menu** (three horizontal dots in the top-right corner) > **More Tools** > **Developer Tools**.
4. In the Developer Tools panel that appears, click on the **Network** tab.
5. Make sure the **Preserve log** checkbox is checked, which will ensure that the network activity is not cleared when you navigate to a different page.
6. The network recording usually starts automatically. To ensure its recording, check for a red dot in the Network panel. If it’s not recording, click on the Record () icon.
7. Reproduce the issue you face with your Document360 project
8. Once you have reproduced the issue on your Document360 project, click on the red dot to stop capturing network activity.
9. Right-click anywhere within the list of network requests and select **Save all as HAR with content** from the context menu.
10. Choose a file name and location to save the HAR file in your local storage.

### How to generate a HAR file in Safari?

You can generate a HAR file in Safari using the built-in Web Inspector.

Here are the steps:

1. Open Safari and go to [**portal.document360.io**](https://portal.document360.io/).
2. Select your Document360 project.
3. Enable the **Develop** menu by going to **Safari menu** > **Preferences** > **Advanced** and check the **Show Develop menu in menu bar** checkbox.
4. From the **Develop** menu in the menu bar, select **Show Web Inspector.**
5. In the Web Inspector panel, click on the **Network** tab.
6. Make sure the **Preserve log** checkbox is checked, which will ensure that the network activity is not cleared when you navigate to a different page.
7. The network recording usually starts automatically. To ensure its recording, check for a red dot in the Network panel. If it’s not recording, click on the Record () icon.
8. Reproduce the issue you face with your Document360 project.
9. Once you have reproduced the issue on your Document360 project, click on the red dot to stop capturing network activity.
10. Right-click anywhere within the list of network requests and select **Export HAR** from the context menu.
11. Choose a file name and location to save the HAR file in your local storage.

### How to generate a HAR file in Opera?

You can generate a HAR file in Opera using the built-in Developer Tools.

Here are the steps:

1. Open Opera and go to [**portal.document360.io**](https://portal.document360.io/).
2. Select your Document360 project.
3. Go to the **Opera menu** (three horizontal lines in the top-left corner) > **Developer** > **Developer Tools**.
4. In the Developer Tools panel, click on the **Network** tab.
5. Ensure the **Preserve log** checkbox is checked, which will ensure that the network activity is not cleared when you navigate to a different page.
6. The network recording usually starts automatically. To ensure its recording, check for a red dot in the Network panel. If it’s not recording, click on the Record () icon.
7. Reproduce the issue you face with your Document360 project
8. Once you have reproduced the issue on your Document360 project, click on the red dot to stop capturing network activity.
9. Right-click anywhere within the network requests and select **Save as HAR with Content** from the context menu.
10. Choose a file name and location to save the HAR file in your local storage.


</document_content>
</document>

<document index="28">
<source>docs/document360_core.json</source>
<document_content>
{"openapi":"3.0.1","info":{"title":"Document360 Customer API","description":"Document360 RESTful APIs will allow you to integrate your documentation with your software, allowing you to easily onboard new users, manage your articles and more. \n\nYou can find detailed API documentation here : [API Documentation](https://apidocs.document360.io/docs)","contact":{"name":"Document360 Support","url":"https://document360.io/contact-us/","email":"support@document360.com"},"version":"2.0"},"servers":[{"url":"https://apihub.document360.io","description":"Document 360 API Hub"},{"url":"https://apihub.us.document360.io","description":"Document360 API Hub - US data center"},{"url":"https://apihub.{private_hosting}.document360.io","description":"Private hosting - Please provide the subdomain name.","variables":{"private_hosting":{"default":"domain","description":"Sub domain for private hosting"}}}],"paths":{"/v2/Articles/{articleId}":{"delete":{"tags":["Articles"],"summary":"Deletes an article with an ID","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article Deleted Successfully":{"summary":"Article has been successfully deleted. This file cannot be retrived or undo.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/version/{versionNumber}":{"delete":{"tags":["Articles"],"summary":"Deletes an article version","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the article","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article Deleted Successfully":{"summary":"Article has been successfully deleted. This file cannot be retrived or undo.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Article Version not found":{"summary":"Kindly verify your versionNumber and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/version/{versionNumber}":{"delete":{"tags":["Articles"],"summary":"Deletes an article version","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the article","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article Deleted Successfully":{"summary":"Article has been successfully deleted. This file cannot be retrived or undo.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Article Version not found":{"summary":"Kindly verify your versionNumber and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/bulkdelete-article-versions":{"delete":{"tags":["Articles"],"summary":"Delete multiple article versions","parameters":[{"name":"articleId","in":"query","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"query","description":"Language code of the article","required":true,"schema":{"type":"string"}},{"name":"articleVersionNumbers","in":"query","description":"Array of article version numbers","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int32"}}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteArticleVersionResonse"},"examples":{"Articles Deleted Successfully":{"summary":"Article has been successfully deleted. This file cannot be retrived or undo.","value":{"article_id":"00966e87-2f6c-4844-b586-ccc81ddab056","data":"Deleted article version(s) are 1,2,3","extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Article Version not found":{"summary":"Kindly verify your articleVersion and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid Article Version","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/bulkdelete":{"delete":{"tags":["Articles"],"summary":"Deletes multiple articles","parameters":[{"name":"articleIds","in":"query","description":"Array of article IDs","required":true,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteArticleResponse"},"examples":{"Successfully deleted bulk article":{"summary":"This states that the bulk article has been deleted successfully.","value":{"data":[{"article_id":null,"success":true,"details":"Successfully deleted article with an id 4b10a0b0-7300-4f0d-b2cd-47c619af4047"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article Id not found":{"summary":"Kindly verify the article Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to delete article with an id 4b10a0b0-7300-4f0d-b2cd-47c619af4047\r\nError: Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/{langCode}":{"get":{"tags":["Articles"],"summary":"Gets an article","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the article to the end-user. If true, the content of snippets or variables appears in the article. Note: If the value is true, ensure that the article content is not passed for update article endpoints.","schema":{"type":"boolean","default":false}},{"name":"isPublished","in":"query","description":"**true** : You will get the latest published version of the article. (If there are no published versions, then it will return the latest version)            \r\n**false** : To get the the latest version of the article","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleResponseCustomer"},"examples":{"Sample response":{"summary":"This is the sample response for get-article, You can verify the information regarding the individual article.","value":{"data":{"id":"a1096061-e842-41fd-9085-494095e401b9","title":"Knowledge bases are much easier to design and edit","content":"Have you ever edited a Wikipedia page? You have to break the flow of text to add tags, and when you want to connect two articles together you have to just hope that nobody changes the other article\u2019s name, lest you end up with a rusty red \u201cdead link.\u201dTo be fair,Wikipedia has actually made good strides in making their Wiki software easy to use for anybody, but opening up the editor is still a bit of a shock since you don\u2019t see the familiar webpage you just clicked on. With a knowledge base, what you see is what you get.You don\u2019t have to train anybody on how to add or edit pages because the whole thing is extremely intuitive. Anybody can learn to navigate an edit page in seconds flat.","html_content":null,"category_id":"de104b39-db97-4509-8d4c-deeac74d448b","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":2,"enable_rtl":false,"hidden":false,"status":0,"order":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","user_description":null,"unique_user_name":"peter-jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","profile_logo_cdn_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","is_enterprise_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"Knowledge-bases-are-much-easier-to-design-and edit","is_fall_back_content":false,"description":null,"category_type":0,"content_type":null,"is_shared_article":false,"translation_option":0,"url":"https://example.com/v1/docs/en/getting-started"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}},"put":{"tags":["Articles"],"summary":"Updates an article with the ID","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleRequest"}]},"examples":{"Update article wth article Id for default language":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option for default language,source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"0","source":"uat","order":0}},"Update article wth article Id for article in the state of need translation":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as need translation, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"1","source":"uat","order":0}},"Update article wth article Id with translation you had made":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as translated, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"2","source":"uat","order":0}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleRequest"}]},"examples":{"Update article wth article Id for default language":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option for default language,source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"0","source":"uat","order":0}},"Update article wth article Id for article in the state of need translation":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as need translation, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"1","source":"uat","order":0}},"Update article wth article Id with translation you had made":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as translated, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"2","source":"uat","order":0}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleRequest"}]},"examples":{"Update article wth article Id for default language":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option for default language,source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"0","source":"uat","order":0}},"Update article wth article Id for article in the state of need translation":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as need translation, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"1","source":"uat","order":0}},"Update article wth article Id with translation you had made":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as translated, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"2","source":"uat","order":0}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleRequest"}]},"examples":{"Update article wth article Id for default language":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option for default language,source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"0","source":"uat","order":0}},"Update article wth article Id for article in the state of need translation":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as need translation, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"1","source":"uat","order":0}},"Update article wth article Id with translation you had made":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option as translated, source and order.","value":{"title":"updated article title","content":"Hi this is an API article Sample. This is updated.","html_content":"<p>Hi this is an API article Sample. This is updated.</p>","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","hidden":true,"version_number":1,"translation_option":"2","source":"uat","order":0}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleResponse"},"examples":{"Article Created Successfully":{"summary":"The article has been created under the following category. you can use the article Id to view the article in the portal.","value":{"data":{"id":"a1096061-e842-41fd-9085-494095e401b9","title":"Knowledge bases are much easier to design and edit","content":"Have you ever edited a Wikipedia page? You have to break the flow of text to add tags, and when you want to connect two articles together you have to just hope that nobody changes the other article\u2019s name, lest you end up with a rusty red \u201cdead link.\u201dTo be fair,Wikipedia has actually made good strides in making their Wiki software easy to use for anybody, but opening up the editor is still a bit of a shock since you don\u2019t see the familiar webpage you just clicked on. With a knowledge base, what you see is what you get.You don\u2019t have to train anybody on how to add or edit pages because the whole thing is extremely intuitive. Anybody can learn to navigate an edit page in seconds flat.","html_content":null,"category_id":"de104b39-db97-4509-8d4c-deeac74d448b","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":2,"enable_rtl":false,"hidden":false,"status":0,"order":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","user_description":null,"unique_user_name":"peter-jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","profile_logo_cdn_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","is_enterprise_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"Knowledge-bases-are-much-easier-to-design-and edit","is_fall_back_content":false,"description":null,"category_type":0,"content_type":null,"is_shared_article":false,"translation_option":0,"url":"https://example.com/v1/docs/en/getting-started"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article Not Found":{"summary":"Kindly verify the article Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/versions":{"get":{"tags":["Articles"],"summary":"Gets all article versions","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleVersionsResponse"},"examples":{"Success Status Response":{"summary":"You can verify all the type of versions in a project.","value":{"data":[{"version_number":1,"created_by":"peter jone","created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":0,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"}],"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/versions":{"get":{"tags":["Articles"],"summary":"Gets all article versions","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleVersionsResponse"},"examples":{"Success Status Response":{"summary":"You can verify all the type of versions in a project.","value":{"data":[{"version_number":1,"created_by":"peter jone","created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":0,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"}],"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/versions/{versionNumber}":{"get":{"tags":["Articles"],"summary":"Gets article by a version number","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the article","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the article to the end-user. If true, the content of snippets or variables appears in the article. Note: If the value is true, ensure that the article content is not passed for update article endpoints.","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleVersionResponse"},"examples":{"Success status Response":{"summary":"This is the sample response for get-article, You can verify the information regarding the individual article.","value":{"data":{"id":"a1096061-e842-41fd-9085-494095e401b9","title":"Knowledge bases are much easier to design and edit","content":"Have you ever edited a Wikipedia page? You have to break the flow of text to add tags, and when you want to connect two articles together you have to just hope that nobody changes the other article\u2019s name, lest you end up with a rusty red \u201cdead link.\u201dTo be fair,Wikipedia has actually made good strides in making their Wiki software easy to use for anybody, but opening up the editor is still a bit of a shock since you don\u2019t see the familiar webpage you just clicked on. With a knowledge base, what you see is what you get.You don\u2019t have to train anybody on how to add or edit pages because the whole thing is extremely intuitive. Anybody can learn to navigate an edit page in seconds flat.","html_content":null,"category_id":"de104b39-db97-4509-8d4c-deeac74d448b","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":2,"enable_rtl":false,"hidden":false,"status":0,"order":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","user_description":null,"unique_user_name":"peter-jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","profile_logo_cdn_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","is_enterprise_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"Knowledge-bases-are-much-easier-to-design-and edit","is_fall_back_content":false,"description":null,"category_type":0,"content_type":null,"is_shared_article":false,"translation_option":0,"version_created_at":"0001-01-01T00:00:00"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/versions/{versionNumber}":{"get":{"tags":["Articles"],"summary":"Gets article by a version number","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the article","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the article to the end-user. If true, the content of snippets or variables appears in the article. Note: If the value is true, ensure that the article content is not passed for update article endpoints.","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleVersionResponse"},"examples":{"Success status Response":{"summary":"This is the sample response for get-article, You can verify the information regarding the individual article.","value":{"data":{"id":"a1096061-e842-41fd-9085-494095e401b9","title":"Knowledge bases are much easier to design and edit","content":"Have you ever edited a Wikipedia page? You have to break the flow of text to add tags, and when you want to connect two articles together you have to just hope that nobody changes the other article\u2019s name, lest you end up with a rusty red \u201cdead link.\u201dTo be fair,Wikipedia has actually made good strides in making their Wiki software easy to use for anybody, but opening up the editor is still a bit of a shock since you don\u2019t see the familiar webpage you just clicked on. With a knowledge base, what you see is what you get.You don\u2019t have to train anybody on how to add or edit pages because the whole thing is extremely intuitive. Anybody can learn to navigate an edit page in seconds flat.","html_content":null,"category_id":"de104b39-db97-4509-8d4c-deeac74d448b","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":2,"enable_rtl":false,"hidden":false,"status":0,"order":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","user_description":null,"unique_user_name":"peter-jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","profile_logo_cdn_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","is_enterprise_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"Knowledge-bases-are-much-easier-to-design-and edit","is_fall_back_content":false,"description":null,"category_type":0,"content_type":null,"is_shared_article":false,"translation_option":0,"version_created_at":"0001-01-01T00:00:00"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/settings":{"get":{"tags":["Articles"],"summary":"Gets settings for the article","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleSettingsResponse"},"examples":{"Success status Response":{"summary":"This is the sample response for Get-Article-Settings, You can verify the Slug, Tags, and relatedArticles.","value":{"data":{"slug":"5-basic-things-to-get-started","seo_title":null,"description":null,"allow_comments":true,"show_table_of_contents":true,"featured_image_url":null,"tags":["Getting started"],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":false,"exclude_from_ai_search":false,"related_articles":[],"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true},"put":{"tags":["Articles"],"summary":"Updates settings for the article","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateArticleSettingsResponseCustomer"},"examples":{"Successfully updated the article setings.":{"summary":"This response indicate a article settings has been successfully updated.","value":{"data":{"url":"https://example.com/v1/docs/en/getting-started","slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"featured_image_url":"","tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[{"extension_data":null,"description":"Article settings updated successfully"}]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/settings":{"get":{"tags":["Articles"],"summary":"Gets settings for the article","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticleSettingsResponse"},"examples":{"Success status Response":{"summary":"This is the sample response for Get-Article-Settings, You can verify the Slug, Tags, and relatedArticles.","value":{"data":{"slug":"5-basic-things-to-get-started","seo_title":null,"description":null,"allow_comments":true,"show_table_of_contents":true,"featured_image_url":null,"tags":["Getting started"],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":false,"exclude_from_ai_search":false,"related_articles":[],"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article not found":{"summary":"Kindly verify your articleId and perform the task again. Also verify the langCode (language code) is mismatching.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}},"put":{"tags":["Articles"],"summary":"Updates settings for the article","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateArticleSettingsResponseCustomer"},"examples":{"Successfully updated the article setings.":{"summary":"This response indicate a article settings has been successfully updated.","value":{"data":{"url":"https://example.com/v1/docs/en/getting-started","slug":"updatearticlesettings","seo_title":"update","description":"This is the description for updating article settings.","allow_comments":true,"show_table_of_contents":true,"featured_image_url":"","tags":[],"status_indicator":2,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[{"extension_data":null,"description":"Article settings updated successfully"}]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles":{"post":{"tags":["Articles"],"summary":"Adds an article to an existing category","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateArticleRequest"}]},"examples":{"Create article Request Example":{"summary":"Create an article with the title, categoryId, projevtVersionId, and userId.","value":{"title":"New Article","content":"This is my new article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateArticleRequest"}]},"examples":{"Create article Request Example":{"summary":"Create an article with the title, categoryId, projevtVersionId, and userId.","value":{"title":"New Article","content":"This is my new article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateArticleRequest"}]},"examples":{"Create article Request Example":{"summary":"Create an article with the title, categoryId, projevtVersionId, and userId.","value":{"title":"New Article","content":"This is my new article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateArticleRequest"}]},"examples":{"Create article Request Example":{"summary":"Create an article with the title, categoryId, projevtVersionId, and userId.","value":{"title":"New Article","content":"This is my new article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleResponse"},"examples":{"Article Created Successfully":{"summary":"The article has been created under the following category. you can use the article Id to view the article in the portal.","value":{"data":{"id":"925b69b9-f241-4d89-9e3e-208a98dfc8eb","title":"Sample Article","public_version":0,"latest_version":1,"language_code":null,"hidden":false,"status":0,"order":3,"slug":"sample-article","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":null},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"userId not found":{"summary":"Kindly check your user Id and perform the task again. Find your user Id at /v2/Teams.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The user with id 'f11efc6f-e968-4e95-82eb-85ad61559de81' does not exist in your project.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"category_id not found":{"summary":"Kindly check the category_id from /v2/ProjectVersions/{projectVersionId}/categories and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Unable to find specified parent category with an id 5b291e6b-fa40-4ab9-941e-f8fffc23b3761.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"project_version_id not found":{"summary":"Kindly check the project_version_id from /v2/ProjectVersions and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The supplied project version id 46f48bc7-760f-4b07-b2d2-fce4aa8ba2349 does not exist in your project.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"title not found":{"summary":"Kindly check the title is empty or null, and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The Title field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/bulkcreate":{"post":{"tags":["Articles"],"summary":"Adds multiple articles","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateArticleRequest"}},"examples":{"Create Bulk Article Request Example":{"summary":"Create Bulk artilce by adding a list of data in title, category_id, project_version_id, and user_id. use content property to add some data in to your article.","value":[{"title":"New Article 1","content":"This is my first article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"title":"New Article 2","content":"This is my second article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateArticleRequest"}},"examples":{"Create Bulk Article Request Example":{"summary":"Create Bulk artilce by adding a list of data in title, category_id, project_version_id, and user_id. use content property to add some data in to your article.","value":[{"title":"New Article 1","content":"This is my first article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"title":"New Article 2","content":"This is my second article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateArticleRequest"}},"examples":{"Create Bulk Article Request Example":{"summary":"Create Bulk artilce by adding a list of data in title, category_id, project_version_id, and user_id. use content property to add some data in to your article.","value":[{"title":"New Article 1","content":"This is my first article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"title":"New Article 2","content":"This is my second article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateArticleRequest"}},"examples":{"Create Bulk Article Request Example":{"summary":"Create Bulk artilce by adding a list of data in title, category_id, project_version_id, and user_id. use content property to add some data in to your article.","value":[{"title":"New Article 1","content":"This is my first article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"title":"New Article 2","content":"This is my second article Content.","category_id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateArticleResponseCustomer"},"examples":{"Article Created Successfully":{"summary":"The article has been created under the following category. you can use the article Id to view the article in the portal.","value":{"data":[{"article_id":"d83f3388-7493-489f-ab51-249d4e6a25ce","success":true,"details":"Successfully created article c1"},{"article_id":"5cabbba1-fc2a-4f82-9dee-01759509b109","success":true,"details":"Successfully created article c2"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"userId not found":{"summary":"Kindly check your user Id and perform the task again. Find your user Id at /v2/Teams.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to create article c2\r\nError: The user with id 'f11efc6f-e968-4e95-82eb-85ad61559de81' does not exist in your project.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"project_version_id not foundd":{"summary":"Kindly check the project_version_id from /v2/ProjectVersions and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to create article c1\r\nError: The supplied workspace id 46f48bc7-760f-4b07-b2d2-fce4aa8ba2341 does not exist in your project..","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"category_id not found":{"summary":"Kindly check the category_id from /v2/ProjectVersions/{projectVersionId}/categories and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to create article c1\r\nError: Unable to find specified parent category with an id 5b291e6b-fa40-4ab9-941e-f8fffc23b3761.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"title not found":{"summary":"Kindly check the title is empty or null, and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The Title field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/publish":{"post":{"tags":["Articles"],"summary":"Publishes an article with an id","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleResponse"},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"url":"https://example.com/v1/docs/en/getting-started","extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"ALready published Article":{"summary":"This is repeated task that, this article has already published ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article has already been published.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number Not Found":{"summary":"version_number is missing or null, kindly verify the version number and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"article_id Not Found":{"summary":"Kindly verify the article_id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"One or more errors occurred. (Article not found).","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"article Not Found":{"summary":"Kindly verify the articleId or langCode and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/publish":{"post":{"tags":["Articles"],"summary":"Publishes an article with an id","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishArticleRequest"}]},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publishing my article with new changes."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleResponse"},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"url":"https://example.com/v1/docs/en/getting-started","extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"ALready published Article":{"summary":"This is repeated task that, this article has already published ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article has already been published.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number Not Found":{"summary":"version_number is missing or null, kindly verify the version number and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"article_id Not Found":{"summary":"Kindly verify the article_id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"One or more errors occurred. (Article not found).","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"article Not Found":{"summary":"Kindly verify the articleId or langCode and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/bulkpublish/{langCode}":{"post":{"tags":["Articles"],"summary":"Publishes multiple articles","parameters":[{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishArticle"}},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":[{"article_id":"8bcd4bf9-eb93-40d9-a8df-c3b518660ceb","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"},{"article_id":"2ce2607f-6cfa-4bc9-9e47-1dc3843198629","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishArticle"}},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":[{"article_id":"8bcd4bf9-eb93-40d9-a8df-c3b518660ceb","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"},{"article_id":"2ce2607f-6cfa-4bc9-9e47-1dc3843198629","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishArticle"}},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":[{"article_id":"8bcd4bf9-eb93-40d9-a8df-c3b518660ceb","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"},{"article_id":"2ce2607f-6cfa-4bc9-9e47-1dc3843198629","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishArticle"}},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":[{"article_id":"8bcd4bf9-eb93-40d9-a8df-c3b518660ceb","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"},{"article_id":"2ce2607f-6cfa-4bc9-9e47-1dc3843198629","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"multiple article published"}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleResponse"},"examples":{"Publish Article Request Example":{"summary":"Publishing an article with ArticleId, langCode, user_id, version_number, and publish_message.","value":{"data":[{"article_id":"8bcd4bf9-eb93-40d9-a8df-c3b518660ceb","success":true,"details":"Successfully published article with an id 8bcd4bf9-eb93-40d9-a8df-c3b518660ceb"},{"article_id":"99575fe3-f7b0-4e0a-bc46-38aed8c621f9","success":true,"details":"Successfully published article with an id 99575fe3-f7b0-4e0a-bc46-38aed8c621f9"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"already published article":{"summary":"This article has been already published.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to publish article with an id 99575fe3-f7b0-4e0a-bc46-38aed8c621f9\r\nError: Article has already been published.","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"user_id not found":{"summary":"Kindly verfy the user_id is not null or empty, and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to publish article with an id 99575fe3-f7b0-4e0a-bc46-38aed8c621f9\r\nError: The user with id 'f11efc6f-e968-4e95-82eb-85ad61559de81' does not exist in your project.","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"article_id not found":{"summary":"Invalid article_id or null reference, verify the article Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The ArticleId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number not found":{"summary":"Invalid datatype for version_number, Kindly use integer value perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/fork":{"put":{"tags":["Articles"],"summary":"Forks an article with an id","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkArticleVersionRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"version_number":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkArticleVersionRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"version_number":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkArticleVersionRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"version_number":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkArticleVersionRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"version_number":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForkArticleVersionResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"data":{"version_number":4,"created_by":"peter jone","created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":3,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"user_id not found.":{"summary":"Kindly verify the user_id and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"The UserId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"lang_code not found.":{"summary":"Kindly verify the lang_code and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"The LangCode field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number not found.":{"summary":"Kindly verify the version_number and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Cannot fork version number 0, it does not exist in your project.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Article Id not found.":{"summary":"Kindly verify the Article Id and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"One or more errors occurred. (Article not found).","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/bulkupdate":{"put":{"tags":["Articles"],"summary":"Updates multiple articles","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkUpdateArticle"}},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":[{"article_id":"0e9a3cf2-b5ce-46d4-a637-604cb8407b93","lang_code":"en","title":"Updated Title","content":"updating content","html_content":"<p>updating content</p>","category_id":"68212cec-7a9b-4323-9bb8-33865444a508","hidden":false,"version_number":1,"translation_option":"","source":"","order":0}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkUpdateArticle"}},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":[{"article_id":"0e9a3cf2-b5ce-46d4-a637-604cb8407b93","lang_code":"en","title":"Updated Title","content":"updating content","html_content":"<p>updating content</p>","category_id":"68212cec-7a9b-4323-9bb8-33865444a508","hidden":false,"version_number":1,"translation_option":"","source":"","order":0}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkUpdateArticle"}},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":[{"article_id":"0e9a3cf2-b5ce-46d4-a637-604cb8407b93","lang_code":"en","title":"Updated Title","content":"updating content","html_content":"<p>updating content</p>","category_id":"68212cec-7a9b-4323-9bb8-33865444a508","hidden":false,"version_number":1,"translation_option":"","source":"","order":0}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkUpdateArticle"}},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":[{"article_id":"0e9a3cf2-b5ce-46d4-a637-604cb8407b93","lang_code":"en","title":"Updated Title","content":"updating content","html_content":"<p>updating content</p>","category_id":"68212cec-7a9b-4323-9bb8-33865444a508","hidden":false,"version_number":1,"translation_option":"","source":"","order":0}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateArticleResponse"},"examples":{"Success response for bulk article update.":{"summary":"This is an response that indicate the bulk articles has updated successfully.","value":{"data":[{"article_id":"0e9a3cf2-b5ce-46d4-a637-604cb8407b93","success":true,"details":"Successfully updated article with an id 0e9a3cf2-b5ce-46d4-a637-604cb8407b93"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Articles/{articleId}/updateDescription":{"put":{"tags":["Articles"],"summary":"Update the Article Description","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"description","in":"query","description":"The description of the article","schema":{"maxLength":250,"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Kindly verify the language code.":{"summary":"Verify the language code and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}},"Kindly verify the  article Id.":{"summary":"Verify the article Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Articles/{articleId}/{langCode}/updateDescription":{"put":{"tags":["Articles"],"summary":"Update the Article Description","parameters":[{"name":"articleId","in":"path","description":"The ID of the article","required":true,"schema":{"type":"string"}},{"name":"description","in":"query","description":"The description of the article","schema":{"maxLength":250,"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the article","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Article settings update request.":{"summary":"This request is used to update the article settings. Kindly make sure the changes for updating your parameters has done successfully.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Kindly verify the language code.":{"summary":"Verify the language code and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}},"Kindly verify the  article Id.":{"summary":"Verify the article Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Article not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}":{"delete":{"tags":["Categories"],"summary":"Deletes an category with an ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Successfully Deleted":{"summary":"The category has been successfully deleted.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":null}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}},"get":{"tags":["Categories"],"summary":"Get category with an ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"query","description":"If the language code is empty, the default language of the category will be taken into account.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryResponse"},"examples":{"Success Response":{"summary":"This is an example for get category succes response. \\n Here you can view diffrent data included with multiple article associated with a category.","value":{"data":{"id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","name":"Category name","description":null,"project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":11,"parent_category_id":null,"hidden":false,"articles":[{"id":"cf8f67da-77c7-48b1-b207-70875caa2f55","title":"New article 1","public_version":1,"latest_version":1,"language_code":"en","hidden":false,"status":0,"order":2,"slug":"new-article-1","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":"2024-06-13T14:30:00"},{"id":"925b69b9-f241-4d89-9e3e-208a98dfc8eb","title":"New article 2","public_version":1,"latest_version":1,"language_code":"en","hidden":false,"status":0,"order":2,"slug":"new-article-2","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":"2024-06-13T14:30:00"}],"child_categories":[{"id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","name":"Child category name","description":null,"project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":11,"parent_category_id":null,"hidden":false,"articles":[{"id":"cf8f67da-77c7-48b1-b207-70875caa2f55","title":"New article 3","public_version":1,"latest_version":1,"language_code":"en","hidden":false,"status":0,"order":2,"slug":"new-article-3","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":"2024-06-13T14:30:00"},{"id":"925b69b9-f241-4d89-9e3e-208a98dfc8eb","title":"New article 4","public_version":1,"latest_version":1,"language_code":"en","hidden":false,"status":0,"order":2,"slug":"new-article-4","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":"2024-06-13T14:30:00"}],"child_categories":[],"icon":null,"slug":"category-name","language_code":null,"category_type":2,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","status":null,"content_type":null}],"icon":null,"slug":"category-name","language_code":null,"category_type":2,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","status":null,"content_type":null},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category Not Found":{"summary":"Kindly verify the Categotry Id, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Cannot find category with id 5b291e6b-fa40-4ab9-941e-f8fffc23b3761","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Language Not Found":{"summary":"Kindly verify the langCode, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Language code not found","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}},"put":{"tags":["Categories"],"summary":"Update a category with the ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryRequest"}]},"examples":{"Updating Category":{"summary":"Request for Updating Category Name.\\n  if you are not using parent_category_id then remove the field.","value":{"name":"UpdatedName","order":0,"parent_category_id":"814bd3cc-4cd1-4f97-adde-d4d644e9fe78","hidden":false,"icon":"","language":"en"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryRequest"}]},"examples":{"Updating Category":{"summary":"Request for Updating Category Name.\\n  if you are not using parent_category_id then remove the field.","value":{"name":"UpdatedName","order":0,"parent_category_id":"814bd3cc-4cd1-4f97-adde-d4d644e9fe78","hidden":false,"icon":"","language":"en"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryRequest"}]},"examples":{"Updating Category":{"summary":"Request for Updating Category Name.\\n  if you are not using parent_category_id then remove the field.","value":{"name":"UpdatedName","order":0,"parent_category_id":"814bd3cc-4cd1-4f97-adde-d4d644e9fe78","hidden":false,"icon":"","language":"en"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryRequest"}]},"examples":{"Updating Category":{"summary":"Request for Updating Category Name.\\n  if you are not using parent_category_id then remove the field.","value":{"name":"UpdatedName","order":0,"parent_category_id":"814bd3cc-4cd1-4f97-adde-d4d644e9fe78","hidden":false,"icon":"","language":"en"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCategoryResponse"},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"data":{"id":"68212cec-7a9b-4323-9bb8-33865444a508","name":"UpdatedName","order":0,"icon":""},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"parent_category_id should be removed if its null or empty..":{"summary":"Kindly remove the parent_category_id, it should not be null or empty. \\n if there you need an parent_category_id with another category please add it.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Object reference not set to an instance of an object.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/version/{versionNumber}":{"delete":{"tags":["Categories"],"summary":"Delete category Version","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the category to be deleted","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Successfully Deleted":{"summary":"The category version has been successfully deleted.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid CategoryId","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version not found":{"summary":"Kindly verify the version and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Last Version cannot be deleted","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version number invalid":{"summary":"Kindly verify the version number and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid Category Version","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Categories/{categoryId}/{langCode}/version/{versionNumber}":{"delete":{"tags":["Categories"],"summary":"Delete category Version","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the category to be deleted","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Successfully Deleted":{"summary":"The category version has been successfully deleted.","value":{"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid CategoryId","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version not found":{"summary":"Kindly verify the version and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Last Version cannot be deleted","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version number invalid":{"summary":"Kindly verify the version number and Langauage code, then peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid Category Version","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/bulkdelete-category-versions":{"delete":{"tags":["Categories"],"summary":"Delete multiple category versions","parameters":[{"name":"categoryId","in":"query","description":"The ID of the Category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"query","description":"Language code of the category","required":true,"schema":{"type":"string"}},{"name":"categoryVersionNumbers","in":"query","description":"Array of category version numbers to be deleted","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int32"}}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteCategoryVersionResponse"}}}}}}},"/v2/Categories/{categoryId}/content/{langCode}":{"get":{"tags":["Categories"],"summary":"Get category page with an ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the category to the end-user. If **true**, the content of snippets or variables appears in the category. Note: If the value is true, ensure that the article content is not passed for *update* category endpoints.","schema":{"type":"boolean","default":false}},{"name":"isPublished","in":"query","description":"To get latest published article, **set isPublished as true.**","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryContentResponse"},"examples":{"Success Response":{"summary":"This is an example for get category page succes response. \\n Here you can view diffrent data included with multiple Authors associated with a category page.","value":{"category":{"id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","title":"IndexPage","content":"Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication","html_content":"<p>Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication</p>\n","block_content":null,"parent_category_id":null,"project_document_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":1,"enable_rtl":true,"hidden":false,"status":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","user_role":7,"last_login_at":"2024-06-13T14:30:00","unique_user_name":"peter-jone","sso_user_type":0,"is_sso_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"indexpage","is_fall_back_content":true,"stale_status":{"article_stale_status":0,"stale_reason":"","expired_at":"2024-06-13T14:30:00"},"content_type":"Markdown","is_block_editor":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id, version Number and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version not found":{"summary":"Kindly verify the version Number and language code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category with Id ad6ef117-1e8f-4817-800b-6ed8e2304bf2 with the language code en does not contain version 2","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}},"put":{"tags":["Categories"],"summary":"Update a category page content with the ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryContentCustomerRequest"}]},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"title":"UpdateTitleForCategoryPage","content":"This is my updated content.","html_content":"<p>This is my updated content,</p>","block_content":"<p>This is my updated content,</p>","version_number":1,"translation_option":"","source":"","updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryContentCustomerRequest"}]},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"title":"UpdateTitleForCategoryPage","content":"This is my updated content.","html_content":"<p>This is my updated content,</p>","block_content":"<p>This is my updated content,</p>","version_number":1,"translation_option":"","source":"","updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryContentCustomerRequest"}]},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"title":"UpdateTitleForCategoryPage","content":"This is my updated content.","html_content":"<p>This is my updated content,</p>","block_content":"<p>This is my updated content,</p>","version_number":1,"translation_option":"","source":"","updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateCategoryContentCustomerRequest"}]},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"title":"UpdateTitleForCategoryPage","content":"This is my updated content.","html_content":"<p>This is my updated content,</p>","block_content":"<p>This is my updated content,</p>","version_number":1,"translation_option":"","source":"","updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCategoryContentCustomerResponse"},"examples":{"Successfully Updated Category":{"summary":"Updated Catgory information is shown in this response.","value":{"data":{"id":"d6f49c75-1eea-4101-bfd4-fd314f57815d","title":"UpdateTitleForCategoryPage","content":"This is my updated content.","html_content":"<p>This is my updated content.</p>\n","block_content":null,"category_id":"d6f49c75-1eea-4101-bfd4-fd314f57815d","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":2,"public_version":1,"latest_version":2,"enable_rtl":false,"hidden":false,"status":0,"order":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"updatetitleforcategorypage","is_fall_back_content":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/versions/{versionNumber}":{"get":{"tags":["Categories"],"summary":"Get category page content with an ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the category","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the category to the end-user. If true, the content of snippets or variables appears in the category. Note: If the value is true, ensure that the category content is not passed for update category endpoints.","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryContentResponse"},"examples":{"Success Response":{"summary":"This is an sample category data by category version.","value":{"category":{"id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","title":"IndexPage","content":"Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication","html_content":"<p>Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication</p>\n","block_content":null,"parent_category_id":null,"project_document_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":1,"enable_rtl":true,"hidden":false,"status":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","user_role":7,"last_login_at":"2024-06-13T14:30:00","unique_user_name":"peter-jone","sso_user_type":0,"is_sso_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"indexpage","is_fall_back_content":true,"stale_status":{"article_stale_status":0,"stale_reason":"","expired_at":"2024-06-13T14:30:00"},"content_type":"Markdown","is_block_editor":false},"extension_data":null,"success":false,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version not found":{"summary":"Kindly verify the version Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category with Id ad6ef117-1e8f-4817-800b-6ed8e2304bf2 with the language code en does not contain version 2","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Categories/{categoryId}/versions/{langCode}/{versionNumber}":{"get":{"tags":["Categories"],"summary":"Get category page content with an ID","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"versionNumber","in":"path","description":"Version number of the category","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}},{"name":"isForDisplay","in":"query","description":"Set this to true, if you are displaying the category to the end-user. If true, the content of snippets or variables appears in the category. Note: If the value is true, ensure that the category content is not passed for update category endpoints.","schema":{"type":"boolean","default":false}},{"name":"appendSASToken","in":"query","description":"Set this to false to exclude appending SAS token for images/files","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryContentResponse"},"examples":{"Success Response":{"summary":"This is an sample category data by category version.","value":{"category":{"id":"5b291e6b-fa40-4ab9-941e-f8fffc23b376","title":"IndexPage","content":"Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication","html_content":"<p>Content is the information contained within communication media. This includes internet, cinema, television, radio, audio CDs, books, magazines, physical art, and live event content. It\u2019s directed at an end-user or audience in the sectors of publishing, art, and communication</p>\n","block_content":null,"parent_category_id":null,"project_document_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1,"public_version":1,"latest_version":1,"enable_rtl":true,"hidden":false,"status":0,"created_by":"f11efc6f-e968-4e95-82eb-85ad61559de8","authors":[{"id":"f11efc6f-e968-4e95-82eb-85ad61559de8","first_name":"peter","last_name":"jone","email_id":"peterjone@mail.com","profile_logo_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E?sv=2022-11-02&st=2024-06-18T07%3A12%3A34Z&se=2024-06-18T07%3A32%3A34Z&sr=b&sp=r&sig=LEA2ccLr1hMTZkAE48jsdaTYgRr6jNScPQ4x4E3vTss%3D","user_role":7,"last_login_at":"2024-06-13T14:30:00","unique_user_name":"peter-jone","sso_user_type":0,"is_sso_user":false}],"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","slug":"indexpage","is_fall_back_content":true,"stale_status":{"article_stale_status":0,"stale_reason":"","expired_at":"2024-06-13T14:30:00"},"content_type":"Markdown","is_block_editor":false},"extension_data":null,"success":false,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Version not found":{"summary":"Kindly verify the version Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category with Id ad6ef117-1e8f-4817-800b-6ed8e2304bf2 with the language code en does not contain version 2","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/versions":{"get":{"tags":["Categories"],"summary":"Get category page versions","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryVersionsResponse"},"examples":{"Success response":{"summary":"Success response for getting category page with version.","value":{"versions":[{"version_number":1,"created_by":null,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":0,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"}],"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Categories/{categoryId}/{langCode}versions":{"get":{"tags":["Categories"],"summary":"Get category page versions","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoryVersionsResponse"},"examples":{"Success response":{"summary":"Success response for getting category page with version.","value":{"versions":[{"version_number":1,"created_by":null,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":0,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"}],"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/settings":{"get":{"tags":["Categories"],"summary":"Get settings for the Category","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategorySettingsResponse"},"examples":{"Success Response":{"summary":"Getting settings status for category.","value":{"data":{"slug":"indexpage","seo_title":"IndexPage","description":null,"allow_comments":true,"show_table_of_contents":true,"featured_image_url":null,"tags":[],"status_indicator":0,"status_indicator_expiry_date":null,"exclude_from_search":false,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true},"put":{"tags":["Categories"],"summary":"Update settings for the category","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategorySettingsResponse"},"examples":{"Successfully updated the setings.":{"summary":"This response indicate a category settings has been successfully updated.","value":{"data":null,"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category Not Found.":{"summary":"Kindly verifty the category Id or the langCode, and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":".Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/{langCode}/settings":{"get":{"tags":["Categories"],"summary":"Get settings for the Category","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategorySettingsResponse"},"examples":{"Success Response":{"summary":"Getting settings status for category.","value":{"data":{"slug":"indexpage","seo_title":"IndexPage","description":null,"allow_comments":true,"show_table_of_contents":true,"featured_image_url":null,"tags":[],"status_indicator":0,"status_indicator_expiry_date":null,"exclude_from_search":false,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Kindly verify the Categotry Id and Langauage code, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}},"put":{"tags":["Categories"],"summary":"Update settings for the category","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UpdateArticleSettingsRequest"}]},"examples":{"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"slug":"updatedslug","seo_title":"updatedSeoTitle","description":"This is the description in updating category settings.","allow_comments":true,"show_table_of_contents":true,"tags":[],"status_indicator":1,"status_indicator_expiry_date":"2024-06-13T14:30:00","exclude_from_search":true,"exclude_from_ai_search":false,"related_articles":[],"content_type":0,"is_acknowledgement_enabled":false}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategorySettingsResponse"},"examples":{"Successfully updated the setings.":{"summary":"This response indicate a category settings has been successfully updated.","value":{"data":null,"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category Not Found.":{"summary":"Kindly verifty the category Id or the langCode, and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":".Category not found","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Non-Empty body is required.":{"summary":"This response is due to an empty request body. \\n Kindly make some body parameters to get success response.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"A non-empty request body is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories":{"post":{"tags":["Categories"],"summary":"Adds a new category","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AddCategoryRequest"}]},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Page .":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as  Index.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AddCategoryRequest"}]},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Page .":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as  Index.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AddCategoryRequest"}]},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Page .":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as  Index.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AddCategoryRequest"}]},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Page .":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as  Index.","value":{"name":"New Category","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCategoryResponse"},"examples":{"Successfully Created the Category":{"summary":"Here you can find the Category Id and category name to navigate.","value":{"data":{"id":"df574e5a-8015-428f-ac33-cad428d1230c","name":"New Category","order":0,"icon":null},"extension_data":null,"success":true,"errors":null,"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Invalid Category project_version_id Parameters":{"summary":"Kindly verify the project_version_id, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The supplied project version id 46fvf48bc7-760f-4b07-b2d2-fce4aa8ba234 does not exist in your project","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Empty project_version_id Parameters":{"summary":"Kindly verify the project_version_id is not empty, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The ProjectVersionId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Invalid Category Name Parameter":{"summary":"Kindly verify the Name, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The Name field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/bulkcreate":{"post":{"tags":["Categories"],"summary":"Adds multiple Categories","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddCategoryRequest"}},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Page.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Index.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddCategoryRequest"}},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Page.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Index.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddCategoryRequest"}},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Page.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Index.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddCategoryRequest"}},"examples":{"Create a new Category as Folder.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Folder.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":0,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Page.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Page.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]},"Create a new Category as Index.":{"summary":"Add Name, Project_Version_Id, order, category_type, and user_id to create a new category. This is an example for category_type as Index.","value":[{"name":"New Category 1","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null},{"name":"New Category 2","project_version_id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","order":0,"parent_category_id":null,"content":null,"category_type":2,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","content_type":null}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateCategoryResponse"},"examples":{"Update article wth article Id":{"summary":"Update the article with needed information such as title, content, html_content, category_id, hidden, version_number, translation_option, and source.","value":{"data":[{"category_id":"b1a857d9-ecbc-4ab3-a0cb-ed22267ec999","success":true,"details":"Successfully created category New Category 1"},{"category_id":"975a72df-a8b6-4a4e-8081-be9baddd0467","success":true,"details":"Successfully created category New Category 2"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"No Category created":{"summary":"Kindly add some data to create category.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}},"Empty project_version_id Parameters":{"summary":"Kindly verify the project_version_id is not empty, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The ProjectVersionId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Invalid Category Name Parameter":{"summary":"Kindly verify the Name, and peroform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The Name field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/publish":{"post":{"tags":["Categories"],"summary":"Publishes an category with an id","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateCategoryResponse"},"examples":{"Successfully Published Category":{"summary":"Category page\t\t","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"CategoryId not found":{"summary":"kindly verify the CategoryId and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number not found":{"summary":"kindly verify the version_number and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"user_id not found":{"summary":"Kindly verify the user_id nad perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The UserId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Categories/{categoryId}/{langCode}/publish":{"post":{"tags":["Categories"],"summary":"Publishes an category with an id","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublishCategoryRequest"}]},"examples":{"Publish Category Request Example":{"summary":"This is an basic example for publish category. UserId and VersionNumber are mandatory.","value":{"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Successfully Published"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateCategoryResponse"},"examples":{"Successfully Published Category":{"summary":"Category page\t\t","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"CategoryId not found":{"summary":"kindly verify the CategoryId and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number not found":{"summary":"kindly verify the version_number and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"user_id not found":{"summary":"Kindly verify the user_id nad perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The UserId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/bulkpublish/{langCode}":{"post":{"tags":["Categories"],"summary":"Publishes multiple categories","parameters":[{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishCategory"}},"examples":{"Published Category Request":{"summary":"Category page has published successfully. the category_id, user_id, and version_number are mandatory.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6s","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publish Success"},{"category_id":"gr32e9239-1a5a-4044-b5de-1030f499fe6sr","user_id":"edr1efc6f-e968-4e95-82eb-ccad61559deef3","version_number":1,"publish_message":"Publish Success"}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishCategory"}},"examples":{"Published Category Request":{"summary":"Category page has published successfully. the category_id, user_id, and version_number are mandatory.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6s","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publish Success"},{"category_id":"gr32e9239-1a5a-4044-b5de-1030f499fe6sr","user_id":"edr1efc6f-e968-4e95-82eb-ccad61559deef3","version_number":1,"publish_message":"Publish Success"}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishCategory"}},"examples":{"Published Category Request":{"summary":"Category page has published successfully. the category_id, user_id, and version_number are mandatory.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6s","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publish Success"},{"category_id":"gr32e9239-1a5a-4044-b5de-1030f499fe6sr","user_id":"edr1efc6f-e968-4e95-82eb-ccad61559deef3","version_number":1,"publish_message":"Publish Success"}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkPublishCategory"}},"examples":{"Published Category Request":{"summary":"Category page has published successfully. the category_id, user_id, and version_number are mandatory.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6s","user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","version_number":1,"publish_message":"Publish Success"},{"category_id":"gr32e9239-1a5a-4044-b5de-1030f499fe6sr","user_id":"edr1efc6f-e968-4e95-82eb-ccad61559deef3","version_number":1,"publish_message":"Publish Success"}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPublishCategoryResponse"},"examples":{"Successfully Published Category":{"summary":"Category page\t\t","value":{"data":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6s","success":true,"details":"Bulk Publish Success"},{"category_id":"gr32e9239-1a5a-4044-b5de-1030f499fe6sr","success":true,"details":"Bulk Publish Success"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"category_id not found":{"summary":"Kindly verify the category_id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The CategoryId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"user_id not found":{"summary":"Kindly verify the user_id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The UserId field is required.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"version_number not found":{"summary":"Kindly verify the version_number and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The field VersionNumber must be between 1 and 32767.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/bulkupdateContent":{"put":{"tags":["Categories"],"summary":"Update multiple page categories","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UpdateCategoryContentRequest"}},"examples":{"Update multiple page category ":{"summary":"Update multiple page category. Kindly for the needed page category for the bulk updation. you can find the updated_by (user id) from /V2/Teams Get Method.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6","lang_code":"en","title":"New Name","content":"No new content","html_content":"<p>No new content</p>","block_content":"<p>No new content</p>","version_number":2,"translation_option":null,"source":null,"updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}]}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UpdateCategoryContentRequest"}},"examples":{"Update multiple page category ":{"summary":"Update multiple page category. Kindly for the needed page category for the bulk updation. you can find the updated_by (user id) from /V2/Teams Get Method.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6","lang_code":"en","title":"New Name","content":"No new content","html_content":"<p>No new content</p>","block_content":"<p>No new content</p>","version_number":2,"translation_option":null,"source":null,"updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}]}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UpdateCategoryContentRequest"}},"examples":{"Update multiple page category ":{"summary":"Update multiple page category. Kindly for the needed page category for the bulk updation. you can find the updated_by (user id) from /V2/Teams Get Method.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6","lang_code":"en","title":"New Name","content":"No new content","html_content":"<p>No new content</p>","block_content":"<p>No new content</p>","version_number":2,"translation_option":null,"source":null,"updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}]}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UpdateCategoryContentRequest"}},"examples":{"Update multiple page category ":{"summary":"Update multiple page category. Kindly for the needed page category for the bulk updation. you can find the updated_by (user id) from /V2/Teams Get Method.","value":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6","lang_code":"en","title":"New Name","content":"No new content","html_content":"<p>No new content</p>","block_content":"<p>No new content</p>","version_number":2,"translation_option":null,"source":null,"updated_by":"f11efc6f-e968-4e95-82eb-85ad61559de8"}]}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateCategoryContentResponse"},"examples":{"Bulk Update Successful":{"summary":"You can find all the updated Category page details below.","value":{"data":[{"category_id":"152e9239-1a5a-4044-b5de-1030f49976b6","success":true,"details":"Successfully updated category with an id 152e9239-1a5a-4044-b5de-1030f49976b6"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not Found":{"summary":"The enhtered categoryId is not valid. Kindly verify the categoryId and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to update category with an id 152e9239-1a5a-044-b5de-103f49976b6\r\nError: Category not found' does not exist in your project.","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"UserId not Found":{"summary":"The user_id is not found. kindly verify the updated_by (user id) from /V2/Teams Get Method","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Failed to update category with an id 152e9239-1a5a-4044-b5de-1030f49976b6\r\nError: The user with id '6f-e968-4e95-82eb-85ad61559de8' does not exist in your project.","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/fork":{"put":{"tags":["Categories"],"summary":"Fork category page with an id","parameters":[{"name":"categoryId","in":"path","description":"ID of the category","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkCategoryVersionRequest"}]},"examples":{"Fork category page with Id":{"summary":"Fork category page with current version_number, user_id and lang_code.","value":{"version_number":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkCategoryVersionRequest"}]},"examples":{"Fork category page with Id":{"summary":"Fork category page with current version_number, user_id and lang_code.","value":{"version_number":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkCategoryVersionRequest"}]},"examples":{"Fork category page with Id":{"summary":"Fork category page with current version_number, user_id and lang_code.","value":{"version_number":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ForkCategoryVersionRequest"}]},"examples":{"Fork category page with Id":{"summary":"Fork category page with current version_number, user_id and lang_code.","value":{"version_number":1,"user_id":"f11efc6f-e968-4e95-82eb-85ad61559de8","lang_code":"en"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForkCategoryVersionResponse"},"examples":{"Fork category page with Id":{"summary":"Fork category page with current version_number, user_id and lang_code.","value":{"data":{"version_number":2,"created_by":"peter jone","created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","base_version":1,"status":0,"profile_url":"https://www.gravatar.com/avatar/FE29D578CBEC3945FC88BF4F10906A3E"},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category not found":{"summary":"Category page not found in the context. Kindly verify the categoryId and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"","custom_data":null}],"warnings":[],"information":[]}},"UserId not found":{"summary":"UserId not found in the context. Kindly verify the categoryId and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"The user with id 'f11efc6f-e968-4e95-82eb-85ad61559de' does not exist in your project.","error_code":"","custom_data":null}],"warnings":[],"information":[]}},"Version Number not found":{"summary":"Version Number not found in the context. Kindly verify the categoryId and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"Cannot fork version number 5, it does not exist in your project","error_code":"","custom_data":null}],"warnings":[],"information":[]}},"LangCode not found":{"summary":"LangCode is missing in the Request Body. Kindly verify the categoryId and perform the task again.","value":{"extension_data":null,"success":true,"errors":[{"extension_data":null,"stack_trace":null,"description":"The LangCode field is required.","error_code":"","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/updateCategoryType":{"put":{"tags":["Categories"],"summary":"Update the Category Type","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"categoryType","in":"query","description":"Category type (0-Folder, 1-Page, 2-Index)","required":true,"schema":{"allOf":[{"$ref":"#/components/schemas/CategoryType"}],"description":"0 - Folder, 1 - Page, 2 - Index"}},{"name":"userId","in":"query","description":"The ID of the team account","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category type Updated Successfully":{"summary":"Updated the category type. Status updated successfully.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"CategoryId not found":{"summary":"Kindly update the category Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}},"userId not found":{"summary":"Kindly update the user Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}}}}},"/v2/Categories/{categoryId}/updateDescription":{"put":{"tags":["Categories"],"summary":"Update the category description","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"description","in":"query","description":"The description of the category","schema":{"maxLength":250,"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category description updated success":{"summary":"Kindly update the category Id and perform the task again.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}},"Description not found":{"summary":"Kindly update the description and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category Id not found":{"summary":"Kindly update the Category Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"","custom_data":null}],"warnings":[],"information":[]}},"LangCode not found":{"summary":"Kindly update the Language code and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}}},"deprecated":true}},"/v2/Categories/{categoryId}/{langCode}/updateDescription":{"put":{"tags":["Categories"],"summary":"Update the category description","parameters":[{"name":"categoryId","in":"path","description":"The ID of the category","required":true,"schema":{"type":"string"}},{"name":"description","in":"query","description":"The description of the category","schema":{"maxLength":250,"type":"string"}},{"name":"langCode","in":"path","description":"Language code of the category","required":true,"schema":{"type":"string","default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category description updated success":{"summary":"Kindly update the category Id and perform the task again.","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}},"Description not found":{"summary":"Kindly update the description and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Category Id not found":{"summary":"Kindly update the Category Id and perform the task again.","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Category not found","error_code":"","custom_data":null}],"warnings":[],"information":[]}},"LangCode not found":{"summary":"Kindly update the Language code and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}}}}},"/v2/Language/{projectVersionId}":{"get":{"tags":["Language"],"summary":"Gets all version languages in the project","parameters":[{"name":"projectVersionId","in":"path","description":"The ID of the project version","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetLanguageFromProjectVersion"},"examples":{"Language versions in a project":{"summary":"This is the enabled language versions for the following project.","value":{"data":[{"language_id":"850668e5-cbf6-4522-850668e5-cbf6-4522","language_code":"en","language_name":"English","is_set_as_default":true,"country_flag_code":null},{"language_id":"850634e-a748-4522-850668e5-cbf6-4522","language_code":"zh","language_name":"Chinese","is_set_as_default":false,"country_flag_code":null},{"language_id":"850668e5-cbf6-4522-8534e-a748-4522","language_code":"nl","language_name":"Dutch","is_set_as_default":false,"country_flag_code":null}],"extension_data":null,"success":true,"errors":null,"warnings":null,"information":null}}}}}}}}},"/v2/ProjectVersions":{"get":{"tags":["ProjectVersions"],"summary":"Gets list of project versions","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProjectVersionsResponse"},"examples":{"200 Status response":{"summary":"The below example shows the status response 200.","value":{"data":[{"id":"46f48bc7-760f-4b07-b2d2-fce4aa8ba234","version_number":1.0,"base_version_number":0.0,"version_code_name":"v1","is_main_version":true,"is_beta":false,"is_public":true,"is_deprecated":false,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","language_versions":[{"id":"","name":null,"code":"SS","set_as_default":false,"hidden":false,"enable_rtl":true,"site_protection_level":2,"is_inheritance_disabled":false,"has_inheritance_disabled_categories_or_articles":false,"country_flag_code":null,"is_home_page_enabled":false,"version_display_name":null}],"slug":"","order":0,"version_type":0}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}}}}},"/v2/ProjectVersions/{projectVersionId}/{langCode}":{"get":{"tags":["ProjectVersions"],"summary":"Searches for a phrase inside project version","parameters":[{"name":"projectVersionId","in":"path","description":"The ID of the project version","required":true,"schema":{"type":"string"}},{"name":"searchQuery","in":"query","description":"The phrase to search across all articles in the project version","schema":{"type":"string"}},{"name":"langCode","in":"path","description":"The language code of the article","required":true,"schema":{"type":"string","default":"en"}},{"name":"page","in":"query","description":"Specify the page to retrieve. Page numbers are zero-based. Therefore, to retrieve the 10th page, you need to set page=9","schema":{"type":"integer","format":"int32","default":0}},{"name":"hitsPerPage","in":"query","description":"Number of results per page","schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchProjectVersionResponseCustomerApi"},"examples":{"Example for 200 response":{"summary":"200 response in searches for a phrase inside project version","value":{"data":{"hits":[{"title":"Understanding Home page builder","content":"The home page is the first page an end-user will see when they visit your knowledge base. The Home Page Builder lets you customize your home page by adding links, changing colors, including categories from your knowledge base, and more. \n The home page builder comes with an intuitive interface to design a professional looking front-page to your knowledge base. You do not need any developer support to create a good looking home page. \n If you do not want a home page and would like to direct the user directly to the real content, you can easily turn off the home page for your knowledge base. \n \n                \n                This is a sample article, you can safely delete it. \n  \n","is_hidden":false,"tags":[],"slug":"understanding-home-page-builder","version":1,"article_id":"6116080f-5b38-4037-b878-82d318543dsw","category_id":"6116080f-5b38-4037-b878-82d318543af","is_category_hidden":null,"order":5,"is_draft":false,"exclude":false,"breadcrumb":null,"is_category":null,"attachment_ids":null,"is_deleted":null,"is_folder_type_category":null,"updated_on_timestamp":null,"is_private":false,"language_id":null,"project_id":null,"is_latest_version":null,"contributors":null,"is_shared_article":null,"lang_code":null,"category_unique_id":null,"unique_id":null,"deleted_by":null,"deleted_at":null,"is_git_hub_entity":false,"original_article_id":null,"object_id":"","_snippet_result":{"content":{"value":" The home page is the first page an end-user will see when they visit your knowledge base. The Home Page Builder lets you customize your home page by adding links, changing colors, including categories from your knowledge base, and more. \n The home page builder comes with an intuitive","match_level":""}},"_highlight_result":{"title":null}}],"nb_hits":null,"page":null,"nb_pages":null,"hits_per_page":null,"processing_time_ms":null,"query":null},"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Example for 400 response due to project version Id ":{"summary":"400 bad response due to invalid Project version Id ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The supplied project version id does not exist in your project","error_code":"400","custom_data":null}],"warnings":[],"information":[]}},"Example for 400 response due to Lanuage Code ":{"summary":"400 bad response due to invalid Language Code ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Invalid Language code","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/ProjectVersions/{projectVersionId}/categories":{"get":{"tags":["ProjectVersions"],"summary":"Gets list of categories within project version","parameters":[{"name":"projectVersionId","in":"path","description":"The ID of the project version","required":true,"schema":{"type":"string"}},{"name":"excludeArticles","in":"query","description":"`True` - Articles will be excluded; `False` - Articles will be included","schema":{"type":"boolean"}},{"name":"langCode","in":"query","description":"Get article in the project version that corresponds to the given language code. If the language code is empty, the default language of the project version will be taken into account","schema":{"type":"string"}},{"name":"includeCategoryDescription","in":"query","description":"`True` - Include category description; `False` - Exclude category description","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCategoriesResponse"},"examples":{"Example for 200 response":{"summary":"200 response in get list of categories within project version","value":{"data":[{"id":"f587e278-4205-4a07-a6b7-28dc9caf6f48","name":"Getting started","description":"This is the description of the getting started category.","project_version_id":"ad76e483-6ef7-4e43-b53f-4fe5e52sefw","order":1,"parent_category_id":null,"hidden":false,"articles":[{"id":"c31b0a18-5416-4cef-b165-83d9b52ada43","title":"Why did we build Document360?","public_version":1,"latest_version":1,"language_code":null,"hidden":false,"status":0,"order":1,"slug":"why-did-we-build-document360","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":null}],"child_categories":[],"icon":null,"slug":"getting-started","language_code":null,"category_type":0,"created_at":"2024-06-13T14:30:00","modified_at":"2024-06-13T14:30:00","status":null,"content_type":null}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Example for 400 response":{"summary":"400 response in get list of categories within project version","value":{"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}}}}},"/v2/ProjectVersions/{projectVersionId}/articles":{"get":{"tags":["ProjectVersions"],"summary":"Gets list of articles within project version","parameters":[{"name":"projectVersionId","in":"path","description":"The ID of the project version","required":true,"schema":{"type":"string"}},{"name":"langCode","in":"query","description":"Get article in the project version that corresponds to the given language code. If the language code is empty, the default language of the project version will be taken into account","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetArticlesResponseCustomer"},"examples":{"Example for 200 response due to invalid project version Id ":{"summary":"200 response in get list of articles within project version","value":{"data":[{"url":"https://example.com/v1/docs/en/getting-started","id":"7db99386-2816-40f0-991f-174dgdscf","title":"Why did we build Document360?","public_version":1,"latest_version":1,"language_code":null,"hidden":false,"status":0,"order":1,"slug":"why did we build document360","content_type":null,"translation_option":0,"is_shared_article":false,"modified_at":null}],"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Example for 400 response due to invalid Project version Id":{"summary":"400 bad response due to invalid Project version Id ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"The supplied project version id does not exist in your project","error_code":"400","custom_data":null}],"warnings":[],"information":[]}}}}}}}}},"/v2/ProjectVersions/{projectVersionId}/apireferences":{"get":{"tags":["ProjectVersions"],"summary":"Gets list of api reference within project version","parameters":[{"name":"projectVersionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetApiReferenceDataResponseCustomer"},"examples":{"Success status Response":{"summary":"This is the sample response for this endpoint.","value":{"data":[{"id":"d8a7dfb6-0539-4583-9af2-1bd40863f866","name":"1412706f-d63e-4070-9af7-3af2b77616bb","upload_type":"23c9f6c4-0b90-49e4-abb4-0ac11da3af50"}],"extension_data":null,"success":true,"errors":[],"warnings":[],"information":[]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Invalid project version ID":{"summary":"Kindly ensure the project version ID is valid and perform the task again.","value":{"extension_data":null,"success":false,"errors":[],"warnings":[],"information":[]}}}}}}}}},"/v2/ProjectVersions/ask-eddy":{"post":{"tags":["ProjectVersions"],"summary":"Perform AI assistive search within project version","requestBody":{"content":{"application/json-patch+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AIAssistiveSearchRequest"}]}},"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AIAssistiveSearchRequest"}]}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AIAssistiveSearchRequest"}]}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AIAssistiveSearchRequest"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIAssistiveSearch"},"examples":{"Success status response":{"summary":"This is sample response for this endpoint.","value":{"prompt":"How to configure single sign-on in Document360?","result":"<p>To configure Single Sign On in Document360, follow these steps:</p><br><ol><br>    <li>Access the Azure AD portal and log in to your Microsoft Azure account.</li><br>    <li>Add your application by logging in to your Azure account, visiting the Azure portal page, and selecting the New application option.</li><br>    <li>Navigate to Document360 portal, select Settings \u2192 Users Security \u2192 SAML/OpenID \u2192 SAML, and set up your application by copying the parameters from Document360 to the Azure AD portal.</li><br>    <li>Configure SAML based SSO settings by copying and pasting values between Document360 and Azure AD portal.</li><br>    <li>Test the configuration by logging into Document360 using the credentials added to the registered application.</li><br></ol>\",\r\n","reference_articles":[{"category_id":"807cafd4-5d9b-4be6-becd-906f1509b0db","category_title":"SAML","category_slug":"saml","version_name":"Document360 2.0","version_slug":"help","article_id":"fb0444b1-6ff6-41dc-b68b-93e86c0470cc","article_title":"SAML SSO with Azure AD","article_slug":"saml-sso-with-azure-ad","version_display_name":null,"language_code":null},{"category_id":"807cafd4-5d9b-4be6-becd-906f1509b0db","category_title":"SAML","category_slug":"saml","version_name":"Document360 2.0","version_slug":"help","article_id":"4a88b443-fbdb-4dc7-882a-e802bb9de6e9","article_title":"Identity Provider (IdP) initiated login","article_slug":"idp-initiated-login","version_display_name":null,"language_code":null},{"category_id":"807cafd4-5d9b-4be6-becd-906f1509b0db","category_title":"SAML","category_slug":"saml","version_name":"Document360 2.0","version_slug":"help","article_id":"642719c7-5689-4f80-9bf3-79b53edacfcc","article_title":"Setting up OpenID as your SSO standard","article_slug":"enabling-openid-sso","version_display_name":null,"language_code":null}],"limit_exceeded":false,"analytics_id":"8ac6020b-d329-4968-b562-5497c88e65a6","remaining_credits":10,"extension_data":null,"context":null,"success":true,"errors":[],"warnings":[],"information":[],"feature_explorer_status":null,"custom_page_element":null}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerApiBaseResponse"},"examples":{"Invalid prompt":{"summary":"Kindly ensure the prompt is not empty and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Prompt should not be empty","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Invalid project version ID":{"summary":"Kindly ensure the project version ID is not empty and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Project version ID should not be empty","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Invalid language code":{"summary":"Kindly ensure the language code is not empty and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"Language Code should not be empty","error_code":null,"custom_data":null}],"warnings":[],"information":[]}},"Public API access is disabled":{"summary":"Kindly ensure the public API is enabled and perform the task again. ","value":{"extension_data":null,"success":false,"errors":[{"extension_data":null,"stack_trace":null,"description":"API access is disabled. Please contact your project administrator.","error_code":null,"custom_data":null}],"warnings":[],"information":[]}}}}}}}}}},"components":{"schemas":{"AIAssistiveSearch":{"type":"object","properties":{"prompt":{"type":"string","nullable":true},"result":{"type":"string","nullable":true},"reference_articles":{"type":"array","items":{"$ref":"#/components/schemas/VectorSearchReferenceArticles"},"nullable":true},"limit_exceeded":{"type":"boolean"},"analytics_id":{"type":"string","nullable":true},"remaining_credits":{"type":"integer","format":"int32"},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"nullable":true},"context":{"allOf":[{"$ref":"#/components/schemas/BaseResponseContext"}],"nullable":true},"success":{"type":"boolean"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"nullable":true},"feature_explorer_status":{"allOf":[{"$ref":"#/components/schemas/FeatureExplorerStatus"}],"nullable":true},"custom_page_element":{"allOf":[{"$ref":"#/components/schemas/UIElement"}],"nullable":true}},"additionalProperties":false},"AIAssistiveSearchRequest":{"type":"object","properties":{"prompt":{"type":"string","nullable":true},"version_id":{"type":"string","nullable":true},"language_code":{"type":"string","nullable":true}},"additionalProperties":false},"AddCategoryRequest":{"required":["name","project_version_id"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"The name of the category"},"project_version_id":{"minLength":1,"type":"string","description":"The ID of the project version where category has to be added"},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"parent_category_id":{"type":"string","description":"The ID of the parent category. If empty, it will be added as top level category)","nullable":true},"content":{"type":"string","description":"The content of the article, for any Editor type, use this property","nullable":true},"category_type":{"allOf":[{"$ref":"#/components/schemas/CategoryType"}],"description":"0 - Folder, 1 - Page, 2 - Index"},"user_id":{"type":"string","description":"The ID of the team account","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG","default":null,"nullable":true}},"additionalProperties":false},"AddCategoryResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategorySimpleData"}],"description":"added category response data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"ApiDefinitionInforamtionCustomer":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"upload_type":{"type":"string","nullable":true}},"additionalProperties":false},"ArticleContentType":{"enum":[0,1,2],"type":"integer","description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG","format":"int32"},"ArticleMatchedData":{"type":"object","properties":{"hits":{"type":"array","items":{"$ref":"#/components/schemas/Hit"},"description":"The list of articles that matched the search query.","nullable":true},"nb_hits":{"type":"integer","description":"The number of hits (articles) matched by the query.","format":"int32","nullable":true},"page":{"type":"integer","description":"The position of the current page (zero-based).","format":"int32","nullable":true},"nb_pages":{"type":"integer","description":"The number of returned pages. Calculation is based on the total number of hits (nbHits) divided by the number of hits per page (hitsPerPage), rounded up to the nearest integer.","format":"int32","nullable":true},"hits_per_page":{"type":"integer","description":"Maximum number of hits (articles) per page.","format":"int32","nullable":true},"processing_time_ms":{"type":"integer","description":"The time the server took to process the request, in milliseconds. This doesn\u2019t include network time.","format":"int32","nullable":true},"query":{"type":"string","description":"The query used to search the articles.","nullable":true}},"additionalProperties":false},"ArticleSettingCustomer":{"type":"object","properties":{"slug":{"type":"string","description":"The slug of the article","nullable":true},"seo_title":{"type":"string","description":"The SEO title of the article","nullable":true},"description":{"type":"string","description":"The SEO description of the article","nullable":true},"allow_comments":{"type":"boolean","description":"`True` indicates that comments are allowed in the article"},"show_table_of_contents":{"type":"boolean","description":"`True` indicates that Table of Contents are shown in the article"},"featured_image_url":{"type":"string","description":"URL of the featured image","nullable":true},"tags":{"type":"array","items":{"type":"string"},"description":"List of tags associated to the article","nullable":true},"status_indicator":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusIndicator"}],"description":"The status of the article: 0 - None, 1 - New, 2 - Updated, 3 - Custom"},"status_indicator_expiry_date":{"type":"string","description":"The number of days after which the article status will be removed","format":"date-time","nullable":true},"exclude_from_search":{"type":"boolean","description":"`True` indicates that the article will not appear in the Knowledge base search results"},"exclude_from_ai_search":{"type":"boolean"},"related_articles":{"type":"array","items":{"$ref":"#/components/schemas/RelatedArticleData"},"description":"List of related articles associated to the article","nullable":true},"is_acknowledgement_enabled":{"type":"boolean"}},"additionalProperties":false},"ArticleSettingCustomerResponse":{"type":"object","properties":{"url":{"type":"string","description":"Url of the article","nullable":true},"slug":{"type":"string","description":"The slug of the article","nullable":true},"seo_title":{"type":"string","description":"The SEO title of the article","nullable":true},"description":{"type":"string","description":"The SEO description of the article","nullable":true},"allow_comments":{"type":"boolean","description":"`True` indicates that comments are allowed in the article"},"show_table_of_contents":{"type":"boolean","description":"`True` indicates that Table of Contents are shown in the article"},"featured_image_url":{"type":"string","description":"URL of the featured image","nullable":true},"tags":{"type":"array","items":{"type":"string"},"description":"List of tags associated to the article","nullable":true},"status_indicator":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusIndicator"}],"description":"The status of the article: 0 - None, 1 - New, 2 - Updated, 3 - Custom"},"status_indicator_expiry_date":{"type":"string","description":"The number of days after which the article status will be removed","format":"date-time","nullable":true},"exclude_from_search":{"type":"boolean","description":"`True` indicates that the article will not appear in the Knowledge base search results"},"exclude_from_ai_search":{"type":"boolean"},"related_articles":{"type":"array","items":{"$ref":"#/components/schemas/RelatedArticleData"},"description":"List of related articles associated to the article","nullable":true},"is_acknowledgement_enabled":{"type":"boolean"}},"additionalProperties":false},"ArticleSimpleDataCustomer":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the article","nullable":true},"title":{"type":"string","description":"The article title","nullable":true},"public_version":{"type":"integer","description":"The article version number(revision) that is currently published","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number of this article","format":"int32"},"language_code":{"type":"string","description":"The default language code","nullable":true,"deprecated":true},"hidden":{"type":"boolean","description":"Indicates if the article is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"order":{"type":"integer","description":"The position of the article inside the parent category","format":"int32"},"slug":{"type":"string","description":"The slug of the article","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"The content type of the article: Markdown = 0, Wysiwyg = 1, Block = 2","nullable":true},"translation_option":{"allOf":[{"$ref":"#/components/schemas/LanguageTranslationOption"}],"description":"The Translation status of the article"},"is_shared_article":{"type":"boolean","description":"`True` indicates that the article is shared"},"modified_at":{"type":"string","description":"Article modified date time","format":"date-time","nullable":true}},"additionalProperties":false},"ArticleSimpleDataCustomerResponse":{"type":"object","properties":{"url":{"type":"string","description":"Url of the article","nullable":true},"id":{"type":"string","description":"The ID of the article","nullable":true},"title":{"type":"string","description":"The article title","nullable":true},"public_version":{"type":"integer","description":"The article version number(revision) that is currently published","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number of this article","format":"int32"},"language_code":{"type":"string","description":"The default language code","nullable":true,"deprecated":true},"hidden":{"type":"boolean","description":"Indicates if the article is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"order":{"type":"integer","description":"The position of the article inside the parent category","format":"int32"},"slug":{"type":"string","description":"The slug of the article","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"The content type of the article: Markdown = 0, Wysiwyg = 1, Block = 2","nullable":true},"translation_option":{"allOf":[{"$ref":"#/components/schemas/LanguageTranslationOption"}],"description":"The Translation status of the article"},"is_shared_article":{"type":"boolean","description":"`True` indicates that the article is shared"},"modified_at":{"type":"string","description":"Article modified date time","format":"date-time","nullable":true}},"additionalProperties":false},"ArticleSimpleVersionCustomer":{"type":"object","properties":{"version_number":{"type":"integer","description":"The version number of the article","format":"int32"},"created_by":{"type":"string","description":"Author name","nullable":true},"created_at":{"type":"string","description":"The date the article version was created","format":"date-time"},"modified_at":{"type":"string","description":"The last time the article version was modified","format":"date-time"},"base_version":{"type":"integer","description":"The version number from which this article version is derived","format":"int32"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"profile_url":{"type":"string","description":"Author profile image","nullable":true}},"additionalProperties":false},"ArticleStaleStatus":{"enum":[0,1],"type":"integer","description":"The status of the article: 0 - None, 1 - New, 2 - Updated, 3 - Custom","format":"int32"},"ArticleStatusCustomer":{"enum":[0,3],"type":"integer","description":"The status of the article: 0 - Draft, 3 - Published","format":"int32"},"ArticleStatusIndicator":{"enum":[0,1,2,3],"type":"integer","description":"Article status in the knowledge base. 0 - None; 1 - New; 2 - Updated; 3 - Custom","format":"int32"},"ArticleVersionDataCustomerResponse":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the article","nullable":true},"title":{"type":"string","description":"The title of the article","nullable":true},"content":{"type":"string","description":"If the article editor is **Markdown**, then the article content will be present in this property","nullable":true},"html_content":{"type":"string","description":" If the article editor is **WYSIWYG (HTML)**, then the content will be present in this property. \r\n**Note**: Markdown editor will also have HTML content (read-only).","nullable":true},"category_id":{"type":"string","description":"The ID of the article's parent category","nullable":true},"project_version_id":{"type":"string","description":"The ID of the project version where the article is located","nullable":true},"version_number":{"type":"integer","description":"The currently fetched version number of the article","format":"int32"},"public_version":{"type":"integer","description":"The currently published version number of the article","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number of the article","format":"int32"},"enable_rtl":{"type":"boolean","description":"`True` indicates that **Right to Left** alignment is enabled for the article language"},"hidden":{"type":"boolean","description":"`False` indicates that the article is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"created_by":{"type":"string","description":"The ID of the team account who created the article","nullable":true},"authors":{"type":"array","items":{"$ref":"#/components/schemas/UserDetailsCustomer"},"description":"The list of contributors in the article","nullable":true},"created_at":{"type":"string","description":"The date on which the article was created","format":"date-time"},"modified_at":{"type":"string","description":"The date on which the article was last modified","format":"date-time"},"slug":{"type":"string","description":"The slug of the article","nullable":true},"is_fall_back_content":{"type":"boolean","description":"`True` indicates that the article content is a fallback of the default language content"},"description":{"type":"string","description":"The description of the article","nullable":true},"category_type":{"allOf":[{"$ref":"#/components/schemas/CategoryType"}],"description":"0 - Folder, 1 - Page, 2 - Index","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG","nullable":true},"is_shared_article":{"type":"boolean","description":"`True` indicates that the article is shared"},"translation_option":{"allOf":[{"$ref":"#/components/schemas/LanguageTranslationOption"}],"description":"The Translation status of the article"},"url":{"type":"string","description":"Url of the article","nullable":true}},"additionalProperties":false},"ArticleVersionInfoCustomerResponse":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the article","nullable":true},"title":{"type":"string","description":"The title of the article","nullable":true},"content":{"type":"string","description":"If the article editor is **Markdown**, then the article content will be present in this property","nullable":true},"html_content":{"type":"string","description":" If the article editor is **WYSIWYG (HTML)**, then the content will be present in this property. \r\n**Note**: Markdown editor will also have HTML content (read-only).","nullable":true},"category_id":{"type":"string","description":"The ID of the article's parent category","nullable":true},"project_version_id":{"type":"string","description":"The ID of the project version where the article is located","nullable":true},"version_number":{"type":"integer","description":"The currently fetched version number of the article","format":"int32"},"public_version":{"type":"integer","description":"The currently published version number of the article","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number of the article","format":"int32"},"enable_rtl":{"type":"boolean","description":"`True` indicates that **Right to Left** alignment is enabled for the article language"},"hidden":{"type":"boolean","description":"`False` indicates that the article is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"created_by":{"type":"string","description":"The ID of the team account who created the article","nullable":true},"authors":{"type":"array","items":{"$ref":"#/components/schemas/UserDetailsCustomer"},"description":"The list of contributors in the article","nullable":true},"created_at":{"type":"string","description":"The date on which the article was created","format":"date-time"},"modified_at":{"type":"string","description":"The date on which the article was last modified","format":"date-time"},"slug":{"type":"string","description":"The slug of the article","nullable":true},"is_fall_back_content":{"type":"boolean","description":"`True` indicates that the article content is a fallback of the default language content"},"description":{"type":"string","description":"The description of the article","nullable":true},"category_type":{"allOf":[{"$ref":"#/components/schemas/CategoryType"}],"description":"0 - Folder, 1 - Page, 2 - Index","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG","nullable":true},"is_shared_article":{"type":"boolean","description":"`True` indicates that the article is shared"},"translation_option":{"allOf":[{"$ref":"#/components/schemas/LanguageTranslationOption"}],"description":"The Translation status of the article"},"version_created_at":{"type":"string","description":"Latest version created date","format":"date-time"}},"additionalProperties":false},"BaseError":{"type":"object","properties":{"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Thids is the Extention data object","nullable":true},"stack_trace":{"type":"string","description":"Stack trace for error response message","nullable":true},"description":{"type":"string","description":"Description for error cause","nullable":true},"error_code":{"type":"string","description":"Error code for Api response","nullable":true},"custom_data":{"type":"object","additionalProperties":{},"nullable":true}},"additionalProperties":false},"BaseInformation":{"type":"object","properties":{"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer Api response information","nullable":true},"description":{"type":"string","description":"status description for customer Api response information","nullable":true}},"additionalProperties":false},"BaseResponseContext":{"type":"object","properties":{"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"nullable":true},"caller_reference":{"type":"string","nullable":true}},"additionalProperties":false},"BaseWarning":{"type":"object","properties":{"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention Data for customer Api warning","nullable":true},"description":{"type":"string","description":"Warning description","nullable":true},"warning_code":{"type":"string","description":"warning code for customer Api base response","nullable":true}},"additionalProperties":false},"BulkArticleResultCustomer":{"type":"object","properties":{"article_id":{"type":"string","description":"Article ID that has updated","nullable":true},"success":{"type":"boolean","description":"Indicates if articles creation was successful"},"details":{"type":"string","description":"Additional information about articles creation status","nullable":true}},"additionalProperties":false},"BulkCategoryResult":{"type":"object","properties":{"category_id":{"type":"string","description":"The ID of the category","nullable":true},"success":{"type":"boolean","description":"`True` - Category is published\r\n`False` - Category is not published"},"details":{"type":"string","description":"Description of the action performed","nullable":true}},"additionalProperties":false},"BulkCreateArticleResponseCustomer":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkArticleResultCustomer"},"description":"Bulk article create response","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkCreateCategoryResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkCategoryResult"},"description":"bulk category response data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkDeleteArticleResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkArticleResultCustomer"},"description":"Bulk delete article response","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkDeleteArticleVersionResonse":{"type":"object","properties":{"article_id":{"type":"string","description":"IDs of the articles","nullable":true},"data":{"type":"string","description":"Response article data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkDeleteCategoryVersionResponse":{"type":"object","properties":{"category_id":{"type":"string","description":"The ID of the category","nullable":true},"data":{"type":"string","description":"The list of deleted category versions","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkPublishArticle":{"required":["article_id","user_id","version_number"],"type":"object","properties":{"article_id":{"minLength":1,"type":"string","description":"The ID of the article"},"user_id":{"minLength":1,"type":"string","description":"The ID of the team account that will be marked as the contributor of this publish"},"version_number":{"maximum":32767,"minimum":1,"type":"integer","description":"The version number of the article to be published","format":"int32"},"publish_message":{"type":"string","description":"The publish message of the article","nullable":true}},"additionalProperties":false},"BulkPublishCategory":{"required":["category_id","user_id","version_number"],"type":"object","properties":{"category_id":{"minLength":1,"type":"string","description":"The ID of the category"},"user_id":{"minLength":1,"type":"string","description":"The ID of the team account responsible for the publish"},"version_number":{"maximum":32767,"minimum":1,"type":"integer","description":"Version number of the category page","format":"int32"},"publish_message":{"type":"string","description":"Publish message for the category","nullable":true}},"additionalProperties":false},"BulkPublishCategoryResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkCategoryResult"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkUpdateArticle":{"type":"object","properties":{"article_id":{"type":"string","description":"The ID of the article","nullable":true},"lang_code":{"type":"string","description":"Language code of the article","nullable":true},"title":{"type":"string","description":"The title of the article","nullable":true},"content":{"type":"string","description":"The content of the article, for any Editor type, use this property.","nullable":true},"html_content":{"type":"string","description":"The HTML content of the article. If the editor type is WYSIWYG (HTML), use this property - (This property is deprecated and will be removed in a future version of the API.  Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"category_id":{"type":"string","description":"The ID of the category. If the article has to be moved to another category, enter the desired category ID","nullable":true},"hidden":{"type":"boolean","description":"Visibility status of the article. **true** - Article will be hidden; **false** - Article will be shown"},"version_number":{"type":"integer","description":"The version number of the article to be updated. The latest version is updated by default.","format":"int32","nullable":true},"translation_option":{"type":"string","description":"Translation status of the article. 0 - None, 1 - Needs translation, 2 Translated","nullable":true},"source":{"type":"string","description":"Free text used for future reference","nullable":true},"order":{"type":"integer","description":"To update the position of the article in the category tree. (Default value is 0, and the order starts from 1 when explicitly set or updated).","format":"int32"}},"additionalProperties":false},"BulkUpdateArticleResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkArticleResultCustomer"},"description":"Bulk updated article data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"BulkUpdateCategoryContentResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkCategoryResult"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false,"description":"Bulk Updating of category content"},"CategoryDataCustomer":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the category","nullable":true},"name":{"type":"string","description":"Name of the category","nullable":true},"description":{"type":"string","description":"Description of the category","nullable":true},"project_version_id":{"type":"string","description":"The ID of the project version where this category is located","nullable":true},"order":{"type":"integer","description":"The position the category inside the parent category","format":"int32"},"parent_category_id":{"type":"string","description":"The ID of the parent category ( null if top-level )","nullable":true},"hidden":{"type":"boolean","description":"Indicates if the category is visible on the site ( If \"false,\" all the child categories and articles will be hidden as well )"},"articles":{"type":"array","items":{"$ref":"#/components/schemas/ArticleSimpleDataCustomer"},"description":"The list of articles attached to this category","nullable":true},"child_categories":{"type":"array","items":{"$ref":"#/components/schemas/CategoryDataCustomer"},"description":"The list of categories attached to this category","nullable":true},"icon":{"type":"string","description":"Unicode representation of the icon or image URL","nullable":true},"slug":{"type":"string","description":"The slug of the category","nullable":true},"language_code":{"type":"string","description":"Language code of the category","nullable":true},"category_type":{"allOf":[{"$ref":"#/components/schemas/CategoryType"}],"description":"0 - Folder, 1 - Page, 2 - Index"},"created_at":{"type":"string","description":"Category created date time","format":"date-time","nullable":true},"modified_at":{"type":"string","description":"Category modified date time","format":"date-time","nullable":true},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the page type category: 0 - Draft, 3 - Published","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"The content type of the page type category: Markdown = 0, Wysiwyg = 1, Block = 2","nullable":true}},"additionalProperties":false},"CategorySettingsCustomer":{"type":"object","properties":{"slug":{"type":"string","description":"The slug of the category","nullable":true},"seo_title":{"type":"string","description":"SEO title of the category","nullable":true},"description":{"type":"string","description":"SEO description of the category","nullable":true},"allow_comments":{"type":"boolean","description":"Allow comments for category"},"show_table_of_contents":{"type":"boolean","description":"`True` - Table of Contents will be enabled \r\n`False` - Table of Contents will be disabled"},"featured_image_url":{"type":"string","description":"URL of the featured image","nullable":true},"tags":{"type":"array","items":{"type":"string"},"description":"List of Tags associated to the category","nullable":true},"status_indicator":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusIndicator"}],"description":"Category status in the knowledge base. 0 - None; 1 - New; 2 - Updated; 3 - Custom"},"status_indicator_expiry_date":{"type":"string","description":"The number of days after which the article status will be removed","format":"date-time","nullable":true},"exclude_from_search":{"type":"boolean","description":"**true** - The caetgory will not appear in search results in the knowledge base\r\n**false** - The category will appear in search results in the knowledge base"},"exclude_from_ai_search":{"type":"boolean","description":"**true** - The AI search assistant will not fetch information from this page category; \r\n**false** - The AI search assistant will not exclude this page category while fetching information"},"related_articles":{"type":"array","items":{"$ref":"#/components/schemas/RelatedArticleData"},"description":"The list of related article IDs to show in the knowledge base","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown content; 1 - HTML content"},"is_acknowledgement_enabled":{"type":"boolean"}},"additionalProperties":false},"CategorySimpleData":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the category","nullable":true},"name":{"type":"string","description":"Name of the category","nullable":true},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"icon":{"type":"string","description":"Unicode representation of the icon","nullable":true}},"additionalProperties":false},"CategorySimpleVersionCustomer":{"type":"object","properties":{"version_number":{"type":"integer","description":"The currently fetched version number of this category page","format":"int32"},"created_by":{"type":"string","description":"The ID of the user that created the category page","nullable":true},"created_at":{"type":"string","description":"The date the category page was created","format":"date-time"},"modified_at":{"type":"string","description":"The date the category page was last modified","format":"date-time"},"base_version":{"type":"integer","description":"The base version of the currently fetched category page","format":"int32"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"profile_url":{"type":"string","description":"The URL of team account's profile image","nullable":true}},"additionalProperties":false},"CategoryType":{"enum":[0,1,2],"type":"integer","description":"0 - Folder, 1 - Page, 2 - Index","format":"int32"},"CategoryVersionData":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the category","nullable":true},"title":{"type":"string","description":"Category title","nullable":true},"content":{"type":"string","description":"Category page Markdown content","nullable":true},"html_content":{"type":"string","description":"Category page WYSIWYG(HTML) content","nullable":true},"block_content":{"type":"string","description":"Category page Advanced WYSIWYG content","nullable":true},"parent_category_id":{"type":"string","description":"Parent category ID","nullable":true},"project_document_version_id":{"type":"string","description":"Project document version ID","nullable":true},"version_number":{"type":"integer","description":"The currently fetched version number of this category page","format":"int32"},"public_version":{"type":"integer","description":"The version number that is currently published","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number(revision) of this  category page.","format":"int32"},"enable_rtl":{"type":"boolean","description":"Indicates if Right to Left alignment is enabled for the category page language"},"hidden":{"type":"boolean","description":"Indicates if the category page is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the article: 0 - Draft, 3 - Published"},"created_by":{"type":"string","description":"The ID of the user that created the category page","nullable":true},"authors":{"type":"array","items":{"$ref":"#/components/schemas/UserProfileCustomer"},"description":"The list of authors that contributed to this category page","nullable":true},"created_at":{"type":"string","description":"The date the category page was created","format":"date-time"},"modified_at":{"type":"string","description":"The date the category page was last modified","format":"date-time"},"slug":{"type":"string","description":"The slug of the category page","nullable":true},"is_fall_back_content":{"type":"boolean","description":"Indicates whether the category page content is a fallback of the default language content or not"},"stale_status":{"allOf":[{"$ref":"#/components/schemas/StaleStatus"}],"description":"Fresh - Category page is up-to-date\r\nStale -  Category page requires review","nullable":true},"content_type":{"type":"string","description":"0 - Markdown\r\n1 - WYSIWYG(HTML)\r\n2 - Advanced WYSIWYG","nullable":true},"is_block_editor":{"type":"boolean","readOnly":true}},"additionalProperties":false},"CategoryVersionDataCustomer":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the category","nullable":true},"title":{"type":"string","description":"The title of the category","nullable":true},"content":{"type":"string","description":"The content of the category","nullable":true},"html_content":{"type":"string","description":"The HTML content of the category","nullable":true},"block_content":{"type":"string","description":"The HTML content of the category (Block editor)","nullable":true},"category_id":{"type":"string","description":"Existing category ID","nullable":true},"project_version_id":{"type":"string","description":"Existing project version ID","nullable":true},"version_number":{"type":"integer","description":"Category Version Number","format":"int32"},"public_version":{"type":"integer","description":"The ID of the project version where this category is located","format":"int32"},"latest_version":{"type":"integer","description":"The latest version number of this category","format":"int32"},"enable_rtl":{"type":"boolean","description":"Indicates if Right to Left alignment is enabled for the category language"},"hidden":{"type":"boolean","description":"Indicates if the category is visible on the site"},"status":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusCustomer"}],"description":"The status of the category: 0 - Draft,  3 - Published"},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"created_by":{"type":"string","description":"The ID of the user that created the category","nullable":true},"authors":{"type":"array","items":{"$ref":"#/components/schemas/UserProfileCustomer"},"description":"The list of authors that contributed to this category","nullable":true},"created_at":{"type":"string","description":"The date the category was created","format":"date-time"},"modified_at":{"type":"string","description":"The date the category was last modified","format":"date-time"},"slug":{"type":"string","description":"The slug of the category","nullable":true},"is_fall_back_content":{"type":"boolean","description":"Indicates whether the category content is a fallback of the default language content or not"}},"additionalProperties":false},"Content":{"type":"object","properties":{"value":{"type":"string","description":"Markup text with occurrences highlighted.","nullable":true},"match_level":{"type":"string","description":"Indicates how well the attribute matched the search query. Can be: none, partial, full","nullable":true}},"additionalProperties":false},"CreateArticleRequest":{"required":["category_id","project_version_id","title","user_id"],"type":"object","properties":{"title":{"minLength":1,"type":"string","description":"The title of the article"},"content":{"type":"string","description":"The content of the article, for any Editor type, use this property","nullable":true},"category_id":{"minLength":1,"type":"string","description":"The ID of the category where the article will be created"},"project_version_id":{"minLength":1,"type":"string","description":"The project version ID in which the article will be created"},"order":{"type":"integer","description":"The position of the article in the category tree (By default, it will be placed at the bottom of the category)","format":"int32"},"user_id":{"minLength":1,"type":"string","description":"The ID of the team account that will be marked as a contributor of the article"},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG","default":null,"nullable":true}},"additionalProperties":false},"CreateArticleResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleSimpleDataCustomer"}],"description":"Create article response data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"CustomerApiBaseResponse":{"type":"object","properties":{"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"EditableElementTypes":{"enum":[0,1,2,3,4,5,6,7,8],"type":"integer","format":"int32"},"ExtensionDataObject":{"type":"object","additionalProperties":false},"FeatureAnalytics":{"type":"object","properties":{"section":{"allOf":[{"$ref":"#/components/schemas/SectionTypeEnum"}]},"feature_name":{"allOf":[{"$ref":"#/components/schemas/FeatureListEnum"}]},"is_feature_explored":{"type":"boolean"},"time_stamp":{"type":"string","format":"date-time"}},"additionalProperties":false},"FeatureExplorerStatus":{"type":"object","properties":{"feature_usage_score":{"type":"number","format":"double"},"section":{"allOf":[{"$ref":"#/components/schemas/SectionTypeEnum"}]},"feature_id":{"type":"string","nullable":true},"feature_name":{"allOf":[{"$ref":"#/components/schemas/FeatureListEnum"}]},"advanced_feature_user_role":{"allOf":[{"$ref":"#/components/schemas/FeatureExplorerUserRoleEnum"}]},"feature_explorer_user_analytics":{"allOf":[{"$ref":"#/components/schemas/FeatureExplorerUserAnalyticsEntity"}],"nullable":true}},"additionalProperties":false},"FeatureExplorerUserAnalyticsEntity":{"type":"object","properties":{"id":{"type":"string","nullable":true},"project_id":{"type":"string","nullable":true},"user_id":{"type":"string","nullable":true},"trophy_status":{"allOf":[{"$ref":"#/components/schemas/TrophyStatus"}],"nullable":true},"show_default":{"type":"boolean"},"show_advanced_section_popup":{"type":"boolean"},"hide_popup":{"type":"boolean"},"hide_popup_date":{"type":"string","format":"date-time"},"is_advanced_section_unlocked":{"type":"boolean"},"usage_score":{"type":"number","format":"double"},"features":{"type":"array","items":{"$ref":"#/components/schemas/FeatureAnalytics"},"nullable":true},"is_closed_content_reuse_info":{"type":"boolean"}},"additionalProperties":false},"FeatureExplorerUserRoleEnum":{"enum":[0,1,2],"type":"integer","format":"int32"},"FeatureListEnum":{"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"type":"integer","format":"int32"},"ForkArticleVersionRequest":{"required":["lang_code","user_id","version_number"],"type":"object","properties":{"version_number":{"type":"integer","description":"The version number of the article to be forked","format":"int32"},"user_id":{"minLength":1,"type":"string","description":"The ID of the team account that will be marked as the contributor of this fork"},"lang_code":{"minLength":1,"type":"string","description":"Language code of the article"}},"additionalProperties":false},"ForkArticleVersionResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleSimpleVersionCustomer"}],"description":"forked article data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"ForkCategoryVersionRequest":{"required":["lang_code","user_id","version_number"],"type":"object","properties":{"version_number":{"type":"integer","description":"The version number of the category page","format":"int32"},"user_id":{"minLength":1,"type":"string","description":"The ID of the team account"},"lang_code":{"minLength":1,"type":"string","description":"Language code of the category"}},"additionalProperties":false},"ForkCategoryVersionResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategorySimpleVersionCustomer"}],"description":"category response forked data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"FormEditableProperties":{"type":"object","properties":{"element_name":{"type":"string","nullable":true},"element_type":{"allOf":[{"$ref":"#/components/schemas/EditableElementTypes"}],"nullable":true},"label":{"type":"string","nullable":true},"value":{"type":"string","nullable":true},"view_form_control":{"allOf":[{"$ref":"#/components/schemas/ViewFormControl"}],"nullable":true},"editable_properties":{"allOf":[{"$ref":"#/components/schemas/FormEditableProperties"}],"nullable":true},"element_guid":{"type":"string","nullable":true},"children":{"type":"array","items":{"$ref":"#/components/schemas/FormEditableProperties"},"nullable":true},"edit_component_style_properties":{"type":"object","additionalProperties":{},"nullable":true},"edit_component_properties":{"type":"object","additionalProperties":{},"nullable":true}},"additionalProperties":false},"GetApiReferenceDataResponseCustomer":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiDefinitionInforamtionCustomer"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetArticleResponseCustomer":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleVersionDataCustomerResponse"}],"description":"Article data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetArticleSettingsResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleSettingCustomer"}],"description":"Get article settings","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetArticleVersionResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleVersionInfoCustomerResponse"}],"description":"Get article data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetArticleVersionsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ArticleSimpleVersionCustomer"},"description":"Article version response data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetArticlesResponseCustomer":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ArticleSimpleDataCustomerResponse"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetCategoriesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CategoryDataCustomer"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetCategoryContentResponse":{"type":"object","properties":{"category":{"allOf":[{"$ref":"#/components/schemas/CategoryVersionData"}],"description":"Get category version data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetCategoryResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategoryDataCustomer"}],"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetCategorySettingsResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategorySettingsCustomer"}],"description":"This is to get category settings data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetCategoryVersionsResponse":{"type":"object","properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/CategorySimpleVersionCustomer"},"description":"get category data by version","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetLanguageFromProjectVersion":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectLanguage"},"description":"All Language data in a poject","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"GetProjectVersionsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectVersionCustomer"},"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"Hit":{"type":"object","properties":{"title":{"type":"string","description":"Article title","nullable":true},"content":{"type":"string","description":"Article HTML content","nullable":true},"is_hidden":{"type":"boolean","description":"Indicates if the article is visible on the site","nullable":true},"tags":{"type":"array","items":{"type":"string"},"description":"Custom article tags","nullable":true},"slug":{"type":"string","description":"The slug of the article","nullable":true},"version":{"type":"integer","description":"The version number that is currently published","format":"int32","nullable":true},"article_id":{"type":"string","description":"The ID of the article","nullable":true},"category_id":{"type":"string","description":"The ID of the category","nullable":true},"is_category_hidden":{"type":"boolean","description":"Indicates if category is visible on the site","nullable":true},"order":{"type":"integer","description":"The position inside the parent category","format":"int32"},"is_draft":{"type":"boolean","description":"Indicates if the article is marked as a draft","nullable":true},"exclude":{"type":"boolean","description":"Indicates if the article is excluded from search results on user website","nullable":true},"breadcrumb":{"type":"string","description":"The breadcrumb of the article","nullable":true},"is_category":{"type":"boolean","description":"If the value is True, then the object has to considered as a category, otherwise it is an article","nullable":true},"attachment_ids":{"type":"array","items":{},"description":"The IDs of the files attached to the article","nullable":true},"is_deleted":{"type":"boolean","description":"If the value is True, then it indicates that the article has been deleted","nullable":true},"is_folder_type_category":{"type":"boolean","description":"If the value is True, then it indicates that the category is a folder type category","nullable":true},"updated_on_timestamp":{"type":"number","description":"The last updated timestamp of the article","format":"double","nullable":true},"is_private":{"type":"boolean","description":"If the value is True, then the article can only be accessed by logged in users in the knowledge base site"},"language_id":{"type":"string","description":"The ID of the language","nullable":true},"project_id":{"type":"string","description":"The ID of the project","nullable":true},"is_latest_version":{"type":"boolean","description":"If the value is True, then the article is the latest version","nullable":true},"contributors":{"type":"array","items":{"type":"string"},"description":"The IDs of users who have contributed to the article","nullable":true},"is_shared_article":{"type":"integer","description":"If the value is True, then it indicates that it is a shared article","format":"int32","nullable":true},"lang_code":{"type":"string","description":"The language code of the article or category","nullable":true},"category_unique_id":{"type":"string","description":"A unique identifier for the category which is a combination of category ID and the language code","nullable":true},"unique_id":{"type":"string","description":"A unique identifier for the article which is a combination of article ID and the language code","nullable":true},"deleted_by":{"type":"string","description":"The ID of the user who deleted the article","nullable":true},"deleted_at":{"type":"string","description":"The timestamp when the article was deleted","nullable":true},"is_git_hub_entity":{"type":"boolean","description":"If the value is True, then it indicates that the article is synced from GitHub"},"original_article_id":{"type":"string","description":"The original article ID. Applicable only for shared articles.","nullable":true},"object_id":{"type":"string","description":"algolia search object ID","nullable":true},"_snippet_result":{"allOf":[{"$ref":"#/components/schemas/_Snippetresult"}],"description":"Markup text with occurrences highlighted.","nullable":true},"_highlight_result":{"allOf":[{"$ref":"#/components/schemas/_Highlightresult"}],"description":"Highlighted attributes","nullable":true}},"additionalProperties":false},"Language":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"code":{"type":"string","nullable":true},"set_as_default":{"type":"boolean"},"hidden":{"type":"boolean"},"enable_rtl":{"type":"boolean"},"site_protection_level":{"allOf":[{"$ref":"#/components/schemas/ProjectProtection"}]},"is_inheritance_disabled":{"type":"boolean"},"has_inheritance_disabled_categories_or_articles":{"type":"boolean"},"country_flag_code":{"type":"string","nullable":true},"is_home_page_enabled":{"type":"boolean"},"version_display_name":{"type":"string","nullable":true}},"additionalProperties":false},"LanguageTranslationOption":{"enum":[0,1,2,3],"type":"integer","description":"0 - None, 1 - Needs transation, 2 - Translated, 3 - In progress","format":"int32"},"ProjectLanguage":{"type":"object","properties":{"language_id":{"type":"string","description":"The ID of the language","nullable":true},"language_code":{"type":"string","description":"The code of the language","nullable":true},"language_name":{"type":"string","description":"The name of the language","nullable":true},"is_set_as_default":{"type":"boolean","description":"`True` - Default language of the version; `False` - Non-default language of the version"},"country_flag_code":{"type":"string","description":"The code of the country flag","nullable":true}},"additionalProperties":false},"ProjectProtection":{"enum":[0,1,2],"type":"integer","format":"int32"},"ProjectVersionCustomer":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the project version","nullable":true},"version_number":{"type":"number","description":"Project version number","format":"double"},"base_version_number":{"type":"number","description":"The version number from which this version is derived","format":"double"},"version_code_name":{"type":"string","description":"Custom version name","nullable":true},"is_main_version":{"type":"boolean","description":"\"True\" if this version is the main version after loading documentation"},"is_beta":{"type":"boolean","description":"\"True\" if this version is marked as Beta"},"is_public":{"type":"boolean","description":"\"True\" if this version is visible to the public"},"is_deprecated":{"type":"boolean","description":"\"True\" if this version is marked as deprecated"},"created_at":{"type":"string","description":"The date and time the version was created","format":"date-time"},"modified_at":{"type":"string","description":"The last date and time the version was modified","format":"date-time"},"language_versions":{"type":"array","items":{"$ref":"#/components/schemas/Language"},"nullable":true},"slug":{"type":"string","nullable":true},"order":{"type":"integer","format":"int32"},"version_type":{"allOf":[{"$ref":"#/components/schemas/ProjectVersionTypeCustomer"}],"description":"0 - KB workspace ; 1 - API Reference workspace;"}},"additionalProperties":false},"ProjectVersionTypeCustomer":{"enum":[0,1],"type":"integer","description":"0 - KB workspace , 1 - API Reference workspace","format":"int32"},"PublishArticleRequest":{"required":["user_id","version_number"],"type":"object","properties":{"user_id":{"minLength":1,"type":"string","description":"The ID of the team account that will be marked as the contributor of this publish"},"version_number":{"maximum":32767,"minimum":1,"type":"integer","description":"The version number of the article to be published","format":"int32"},"publish_message":{"type":"string","description":"The publish message of the article","nullable":true}},"additionalProperties":false},"PublishCategoryRequest":{"required":["user_id","version_number"],"type":"object","properties":{"user_id":{"minLength":1,"type":"string","description":"The ID of the team account who is responsible for the publish"},"version_number":{"maximum":32767,"minimum":1,"type":"integer","description":"The version number of the category","format":"int32"},"publish_message":{"type":"string","description":"Publish message for the category","nullable":true}},"additionalProperties":false},"RelatedArticleData":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the article","nullable":true},"title":{"type":"string","description":"The title of the article","nullable":true},"hidden":{"type":"boolean","description":"`True` indicates that the article is hidden"},"slug":{"type":"string","description":"The slug of the article","nullable":true}},"additionalProperties":false},"SSOUserTypes":{"enum":[0,1,2],"type":"integer","description":"SSO user type 0 - Normal user, 1 - SSO user, 2 - Invited SSO user","format":"int32"},"SearchProjectVersionResponseCustomerApi":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleMatchedData"}],"nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"SectionTypeEnum":{"enum":[0,1,2,3,4,5],"type":"integer","format":"int32"},"StaleStatus":{"type":"object","properties":{"article_stale_status":{"allOf":[{"$ref":"#/components/schemas/ArticleStaleStatus"}],"description":"The status of the article: 0 - None, 1 - New, 2 - Updated, 3 - Custom"},"stale_reason":{"type":"string","nullable":true},"expired_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"Title":{"type":"object","properties":{"value":{"type":"string","description":"Markup text with occurrences highlighted.","nullable":true},"match_level":{"type":"string","description":"Indicates how well the attribute matched the search query. Can be: none, partial, full","nullable":true},"fully_highlighted":{"type":"boolean"},"matched_words":{"type":"array","items":{"type":"string"},"description":"List of words from the query that matched the object.","nullable":true}},"additionalProperties":false},"TrophyStatus":{"type":"object","properties":{"first":{"type":"boolean"},"second":{"type":"boolean"},"third":{"type":"boolean"},"fourth":{"type":"boolean"}},"additionalProperties":false},"UIElement":{"type":"object","properties":{"element_type":{"allOf":[{"$ref":"#/components/schemas/UIElementType"}]},"element_name":{"type":"string","nullable":true},"element_guid":{"type":"string","nullable":true},"display_name":{"type":"string","nullable":true},"view_styles":{"type":"object","additionalProperties":{},"nullable":true},"view_properties":{"type":"object","additionalProperties":{},"nullable":true},"editable_properties":{"type":"array","items":{"$ref":"#/components/schemas/FormEditableProperties"},"nullable":true},"children":{"type":"array","items":{"$ref":"#/components/schemas/UIElement"},"nullable":true}},"additionalProperties":false},"UIElementType":{"enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"type":"integer","format":"int32"},"UpdateArticleRequest":{"type":"object","properties":{"title":{"type":"string","description":"The title of the article","nullable":true},"content":{"type":"string","description":"The content of the article, for any Editor type, use this property.","nullable":true},"html_content":{"type":"string","description":"The HTML content of the article. If the editor type is WYSIWYG (HTML), use this property - (This property is deprecated and will be removed in a future version of the API.  Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"category_id":{"type":"string","description":"The ID of the category. If the article has to be moved to another category, enter the desired category ID","nullable":true},"hidden":{"type":"boolean","description":"Visibility status of the article. **true** - Article will be hidden; **false** - Article will be shown"},"version_number":{"type":"integer","description":"The version number of the article to be updated. The latest version is updated by default.","format":"int32","nullable":true},"translation_option":{"type":"string","description":"Translation status of the article. 0 - None, 1 - Needs translation, 2 Translated","nullable":true},"source":{"type":"string","description":"Free text used for future reference","nullable":true},"order":{"type":"integer","description":"To update the position of the article in the category tree. (Default value is 0, and the order starts from 1 when explicitly set or updated).","format":"int32"}},"additionalProperties":false},"UpdateArticleSettingsRequest":{"type":"object","properties":{"slug":{"type":"string","description":"The slug of the article","nullable":true},"seo_title":{"type":"string","description":"The SEO title of the article","nullable":true},"description":{"type":"string","description":"The SEO description of the article","nullable":true},"allow_comments":{"type":"boolean","description":"Enable or disable the commenting on the article. **true** - Commenting will be enabled; **false** - Commenting will be disabled"},"show_table_of_contents":{"type":"boolean","description":"Enable or disable the Table of Contents (TOC) for the article in the knowledge base. **true** - TOC will be enabled; **false** - TOC will be disabled"},"tags":{"type":"array","items":{"type":"string"},"description":"Custom article tags","nullable":true},"status_indicator":{"allOf":[{"$ref":"#/components/schemas/ArticleStatusIndicator"}],"description":"Article status in the knowledge base. 0 - None; 1 - New; 2 - Updated; 3 - Custom"},"status_indicator_expiry_date":{"type":"string","description":"The date-time when the public article status is removed","format":"date-time","nullable":true},"exclude_from_search":{"type":"boolean","description":"**true** - The article will not appear in search results in the knowledge base; **false** - The article will appear in search results in the knowledge base"},"exclude_from_ai_search":{"type":"boolean","description":"**true** - The Eddy-AI assistant will not fetch information from this article; **false** - The Eddy-AI assistant will not exclude this article while fetching information"},"related_articles":{"type":"array","items":{"type":"string"},"description":"The list of related article IDs to show in the knowledge base","nullable":true},"content_type":{"allOf":[{"$ref":"#/components/schemas/ArticleContentType"}],"description":"0 - Markdown; 1 - WYSIWYG(HTML); 2 - Advanced WYSIWYG"},"is_acknowledgement_enabled":{"type":"boolean"}},"additionalProperties":false},"UpdateArticleSettingsResponseCustomer":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/ArticleSettingCustomerResponse"}],"description":"update article settings","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"UpdateCategoryContentCustomerRequest":{"type":"object","properties":{"title":{"type":"string","description":"The title of the category","nullable":true},"content":{"type":"string","description":"The content of the category, for any Editor type, use this property.","nullable":true},"html_content":{"type":"string","description":"The HTML content of the category. If the editor type is WYSIWYG (HTML), use this property - (This property is deprecated and will be removed in a future version of the API, Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"block_content":{"type":"string","description":"The HTML content of the category. If the editor type is Block Editor (HTML), use this property - (This property is deprecated and will be removed in a future version of the API, Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"version_number":{"type":"integer","description":"The version number of the category to be updated. The latest version is updated by default.","format":"int32","nullable":true},"translation_option":{"type":"string","description":"Translation status of the category. 0 - None, 1 - Needs translation, 2 Translated","nullable":true},"source":{"type":"string","description":"Free text used for future reference","nullable":true},"updated_by":{"type":"string","description":"The ID of the team account responsible for the category update","nullable":true}},"additionalProperties":false},"UpdateCategoryContentCustomerResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategoryVersionDataCustomer"}],"description":"category version data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"UpdateCategoryContentRequest":{"type":"object","properties":{"category_id":{"type":"string","description":"Category ID for updating the content","nullable":true},"lang_code":{"type":"string","description":"Language Code for updating the content","nullable":true},"title":{"type":"string","description":"The title of the category","nullable":true},"content":{"type":"string","description":"The content of the category, for any Editor type, use this property.","nullable":true},"html_content":{"type":"string","description":"The HTML content of the category. If the editor type is WYSIWYG (HTML), use this property - (This property is deprecated and will be removed in a future version of the API, Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"block_content":{"type":"string","description":"The HTML content of the category. If the editor type is Block Editor (HTML), use this property - (This property is deprecated and will be removed in a future version of the API, Kindly use **content** property instead of this.)","nullable":true,"deprecated":true},"version_number":{"type":"integer","description":"The version number of the category to be updated. The latest version is updated by default.","format":"int32","nullable":true},"translation_option":{"type":"string","description":"Translation status of the category. 0 - None, 1 - Needs translation, 2 Translated","nullable":true},"source":{"type":"string","description":"Free text used for future reference","nullable":true},"updated_by":{"type":"string","description":"The ID of the team account responsible for the category update","nullable":true}},"additionalProperties":false,"description":"Update category content"},"UpdateCategoryRequest":{"type":"object","properties":{"name":{"type":"string","description":"The name of the category","nullable":true},"order":{"type":"integer","description":"The position of the category. By default, it will be added at the end of the parent category.","format":"int32"},"parent_category_id":{"type":"string","description":"The ID of the category where the category will be moved. By default, it will be created at the first level.","nullable":true},"hidden":{"type":"boolean","description":"Visibility status of the category. **true** - Category will be hidden; **false** - Category will be shown"},"icon":{"type":"string","description":"The icon of the category. Specify the Unicode icon. Example: \ud83d\udcdc (Windows 10 - Win key + . or Mac \u2303-\u2318-Space Bar to open emoji menu)","nullable":true},"language":{"type":"string","description":"Language code of the category. If language is not specified, the category would be updated in the default language.","nullable":true}},"additionalProperties":false},"UpdateCategoryResponse":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/CategorySimpleData"}],"description":"category simple data","nullable":true},"extension_data":{"allOf":[{"$ref":"#/components/schemas/ExtensionDataObject"}],"description":"Extention data for customer API response","nullable":true},"success":{"type":"boolean","description":"Status indication for customer API response"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BaseError"},"description":"Errors in the customer API response","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/BaseWarning"},"description":"Warnings in the customer API response","nullable":true},"information":{"type":"array","items":{"$ref":"#/components/schemas/BaseInformation"},"description":"Information passed by the customer API response","nullable":true}},"additionalProperties":false},"UserAccess":{"enum":[1,2,3,4,7],"type":"integer","format":"int32"},"UserDetailsCustomer":{"type":"object","properties":{"id":{"type":"string","nullable":true},"first_name":{"type":"string","nullable":true},"last_name":{"type":"string","nullable":true},"user_description":{"type":"string","nullable":true},"unique_user_name":{"type":"string","nullable":true},"email_id":{"type":"string","nullable":true},"profile_logo_url":{"type":"string","nullable":true},"profile_logo_cdn_url":{"type":"string","nullable":true},"is_enterprise_user":{"type":"boolean"}},"additionalProperties":false},"UserProfileCustomer":{"type":"object","properties":{"id":{"type":"string","nullable":true},"first_name":{"type":"string","nullable":true},"last_name":{"type":"string","nullable":true},"email_id":{"type":"string","nullable":true},"profile_logo_url":{"type":"string","nullable":true},"user_role":{"allOf":[{"$ref":"#/components/schemas/UserAccess"}]},"last_login_at":{"type":"string","format":"date-time","nullable":true},"unique_user_name":{"type":"string","nullable":true},"sso_user_type":{"allOf":[{"$ref":"#/components/schemas/SSOUserTypes"}],"description":"SSO user type 0 - Normal user, 1 - SSO user, 2 - Invited SSO user"},"is_sso_user":{"type":"boolean"}},"additionalProperties":false},"VectorSearchReferenceArticles":{"type":"object","properties":{"category_id":{"type":"string","nullable":true},"category_title":{"type":"string","nullable":true},"category_slug":{"type":"string","nullable":true},"version_name":{"type":"string","nullable":true},"version_slug":{"type":"string","nullable":true},"article_id":{"type":"string","nullable":true},"article_title":{"type":"string","nullable":true},"article_slug":{"type":"string","nullable":true},"version_display_name":{"type":"string","nullable":true},"language_code":{"type":"string","nullable":true}},"additionalProperties":false},"ViewFormControl":{"type":"object","properties":{"property_key":{"type":"string","nullable":true},"is_children":{"type":"integer","format":"int32"},"view_type":{"type":"string","nullable":true},"element_name":{"type":"string","nullable":true},"is_children_root":{"type":"boolean"},"element_type":{"type":"string","nullable":true},"inverted_value":{"type":"boolean"},"is_dirty":{"type":"boolean"}},"additionalProperties":false},"_Highlightresult":{"type":"object","properties":{"title":{"allOf":[{"$ref":"#/components/schemas/Title"}],"nullable":true}},"additionalProperties":false},"_Snippetresult":{"type":"object","properties":{"content":{"allOf":[{"$ref":"#/components/schemas/Content"}],"nullable":true}},"additionalProperties":false}},"securitySchemes":{"api_token":{"type":"apiKey","description":"Enter REST API key. To generate a key, go to Settings \u2192 Knowledge base portal \u2192 API tokens","name":"api_token","in":"header"}}},"security":[{"api_token":[]}]}
</document_content>
</document>

<document index="29">
<source>docs/document361.json</source>
<document_content>
[
  {
    "heading": "What is Document360?",
    "text": "## What is Document360?\n\nHere is an overview and a navigation guide to help you get started with your Document360 experience.\n\n### What is Document360?\n\n**Document360** is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.\n\nWhen using Document360, you'll interact with several key interfaces:\n\n* #### [My Projects](/help/docs/document360-getting-started#my-projects)\n* #### [Knowledge base portal](/help/docs/document360-getting-started#knowledge-base-portal)\n* #### [Knowledge base site](/help/docs/document360-getting-started#knowledge-base-site)\n* #### [Document360 AI - Eddy AI](/help/docs/ai-features)\n* #### [Resources](/help/docs/document360-getting-started#other-resources)\n\n---",
    "summary": "## What is Document360?\n\n**Document360** is a Knowledge management platform for creating public, private, or mixed-access self-service knowledge bases. Key interfaces include **My Projects**, **Knowledge base portal**, **Knowledge base site,** ** Eddy AI**, and **Resources.**"
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="30">
<source>docs/document362.json</source>
<document_content>
[
  {
    "heading": "Table of Contents",
    "text": "## Table of Contents\n\n- [What is Document360?](#document360-getting-started)\n- [Sign up to Document360](#sign-up-to-document-360)\n- [System and browser requirements](#system-and-browser-requirements)\n- [Project dashboard](#document360-my-projects)\n- [Top-right menu overview](#top-right-menu-overview)\n- [Creating a project in Document360](#creating-a-project)\n- [Dashboard](#dashboard)\n- [Multilingual Knowledge bases](#getting-started-with-multi-lingual-knowledge-base)\n- [Creating a sandbox project](#creating-a-sandbox-project)\n- [Document360 security and infrastructure](#quick-summary-of-the-security-and-infrastructure-aspects)\n- [X-Frame options](#x-frame-options)\n- [Content security policy](#content-security-policy)\n- [CSP and Whitelisting guidelines for Document360 widget](#csp-guidelines-for-document360-widget)\n- [Bot management](#bot-management)\n- [Fair usage policy for bot management](#fair-usage-policy-for-bot-management)\n- [Editor choices in Document360](#using-the-text-editor)\n- [Elements of the editor](#elements-of-the-editor)\n- [Markdown editor](#markdown-editor-overview)\n- [Basic Markdown syntax](#markdown-basics)\n- [WYSIWYG editor](#wysiwyg-editor)\n- [Advanced WYSIWYG editor](#advanced-wysiwyg-editor)\n- [Advanced WYSIWYG editor basics](#advanced-wysiwyg-editor-basics)\n- [Movable blocks in Advanced WYSIWYG editor](#movable-blocks-in-advanced-wysiwyg-editor)\n- [Conditional content blocks in Advanced WYSIWYG editor](#conditional-content-blocks)\n- [Tables in Advanced WYSIWYG editor](#tables-in-advanced-wysiwyg-editor)\n- [Image formatting in the Advanced WYSIWYG editor](#image-formatting-in-the-advanced-wysiwyg-editor)\n- [Tabs in the Advanced WYSIWYG editor](#tabs-in-the-advanced-wysiwyg-editor)\n- [Categories and subcategories](#categories-and-subcategories)\n- [Managing categories](#managing-categories)\n- [Category types](#category-types)\n- [Mapping a category with a folder in Drive](#assigning-drive-folder-for-a-category)\n- [Downloading category and article in KB site](#downloading-category-and-article-in-kb-site)\n- [Managing articles](#managing-articles)\n- [Word .docx files](#article-import-from-word-files)\n- [Publishing an article](#publishing-an-article)\n- [Reviewing an article using Inline comments](#reviewing-an-article-inline-comments)\n- [Adding images to articles](#adding-images-to-articles)\n- [Adding videos in articles](#adding-videos-in-articles)\n- [Adding files to article](#adding-files-to-articles)\n- [Adding hyperlinks](#linking-to-other-articles)\n- [Code blocks](#code-blocks)\n- [Adding private notes](#private-notes)\n- [Embedding Stream videos in articles](#embedding-microsoft-streams-video-in-articles)\n- [Embedding Google forms in articles](#embedding-google-forms-in-article)\n- [Embedding a Draw.io diagram](#embedding-a-drawio-diagram)\n- [All articles - Overview page](#all-articles-overview-page)\n- [Using filters in All articles page](#filter-bulk-operations)\n- [Export All articles list](#export-bulk-operations)\n- [Article review reminder](#review-reminders)\n- [Article SEO](#article-seo)\n- [Excluding articles from search engines](#excluding-articles-from-searches)\n- [Change the URL of an article](#changing-the-url-of-an-article)\n- [Article tags](#article-tags)\n- [Add article labels](#adding-article-labels)\n- [Related articles](#related-articles)\n- [Featured image](#featured-image)\n- [Attachments](#attachments)\n- [Status indicator](#status-indicator)\n- [Article status](#article-status)\n- [Preferences](#preferences)\n- [Show/hide table of contents for an article](#showhide-table-of-contents-for-an-article)\n- [Mark as deprecated](#marking-articles-as-deprecated)\n- [Update article contributors](#updating-article-contributors)\n- [Schedule publishing](#schedule-publishing)\n- [Discussion feed](#article-discussion-feed)\n- [Revision history](#revision-history)\n- [Article analytics](#article-analytics)\n- [Security - Article access control](#article-access-control-knowledge-base-site)\n- [Health check metrics](#health-check-metrics)\n- [Readability score](#readability-score)\n- [Sitemap](#sitemap-generator)\n- [Public article comments](#public-comments)\n- [Robots.txt](#robotstxt)\n- [Read receipt](#read-receipt)\n- [Share articles via private link](#share-articles-via-private-link)\n- [Eddy AI customization](#ai-customization)\n- [AI machine translation](#ai-machine-translation)\n- [Eddy AI trust page](#eddy-ai-trust-page)\n- [AI writer suite](#ai-writer-suite)\n- [AI writer](#ai-writer)\n- [AI FAQ generator](#ai-faq-generator)\n- [AI title recommender](#ai-title-recommender)\n- [AI SEO description generator](#seo-description-generator)\n- [AI tag recommender](#ai-tag-recommender)\n- [AI related articles recommender](#ai-related-articles-recommender)\n- [AI Chart generator](#ai-chart-generator)\n- [AI alt text generator](#ai-alt-text-generator)\n- [AI search suite](#ai-search-suite)\n- [AI assistive search (Ask Eddy AI)](#ai-assistive-search-ask-eddy)\n- [AI dynamic related articles recommendation](#ai-dynamic-related-articles-recommendation)\n- [AI Chatbot](#ai-chatbot)\n- [Securing Chatbot authentication using JWT](#securing-chatbot-authentication-using-jwt)\n- [Styling the Chatbot](#styling-the-chatbot)\n- [Adding external sources for AI Assistive search](#eddy-ai-federated-search)\n- [AI article summarizer](#ai-article-summarizer)\n- [Ask Eddy AI API](#ask-eddy-ai-api)\n- [Enhancing accessibility with our read out loud feature](#text-to-voice-functionality)\n- [AI premium suite](#ai-premium-suite)\n- [AI glossary generator](#ai-glossary-generator)\n- [How to write GenAI friendly content](#how-to-write-genai-friendly-content)\n- [Prompt engineering tips](#prompt-engineering-tips)\n- [File management](#drive)\n- [Adding folders and files](#adding-folders-and-files)\n- [Folder actions in Drive](#folder-actions-in-drive)\n- [File actions in Drive](#file-actions-in-drive)\n- [All files overview](#all-content-overview)\n- [Recent, Starred, and Recycle bin files](#recycle-bin-recent-and-starred-files)\n- [Workflow designer](#workflow-designer)\n- [Managing workflow status](#managing-workflow-status)\n- [Workflow assignment](#workflow-assignment)\n- [Templates](#article-templates)\n- [Variables](#variables)\n- [Snippet](#snippets)\n- [Glossary](#glossary)\n- [Adding glossary terms](#adding-glossary-term)\n- [Inserting glossary term in an article](#adding-glossary-term-in-articles)\n- [Managing glossary terms](#editing-and-deleting-glossary-term)\n- [Managing the glossary landing page](#glossary-overview-page)\n- [Feedback manager](#feedback-manager-overview)\n- [Custom pages](#custom-pages)\n- [Tags](#tags)\n- [Manage tags page overview](#tag-manager-overview-page)\n- [Adding a new tag](#adding-a-new-tag)\n- [Tag groups page overview](#tag-groups-overview)\n- [Manage tag dependencies](#tag-dependency-viewer)\n- [Find and replace](#find-and-replace)\n- [SEO descriptions](#seo-descriptions)\n- [Exporting your Document360 project as a ZIP file](#export-documentation-as-zip)\n- [Importing a Document360 project ZIP file](#import-a-documentation-project)\n- [Migrating documentation from other platforms](#migrating-documentation-from-another-knowledge-base-platform)\n- [Designing a PDF template](#pdf-design-templates)\n- [Compiling content for PDF](#compliling-content-for-pdf)\n- [Analytics](#analytics)\n- [Articles analytics](#articles-analytics)\n- [Eddy AI search analytics](#eddy-ai-search-analytics)\n- [Search analytics](#analytics-search)\n- [Reader analytics](#reader-analytics)\n- [Team accounts analytics](#analytics-team-accounts)\n- [Feedback analytics](#feedback)\n- [Links status analytics](#links-status)\n- [Ticket deflector analytics](#ticket-deflector-overview)\n- [Managing API documentation](#manage-api-documentation)\n- [Edit, Clone, and Delete widget](#edit-clone-and-delete)\n- [Managing and customizing the Knowledge base widget](#managing-and-customizing-the-knowledge-base-widget)\n- [URL Mapping](#url-mapping)\n- [Customizing the Knowledge base widget using Custom CSS/JavaScript](#customizing-the-kb-widget-using-custom-css-javascript)\n- [FAQ - Knowledge base widget](#faq-knowledge-base-widget)\n- [Knowledge base site 2.0](#knowledge-base-site-20)\n- [Customize site](#customize-site)\n- [KB site 2.0 migration](#kb-site-20-migration)\n- [Web Content Accessibility Guidelines (WCAG)](#web-content-accessibility-guidelines-wcag)\n- [Header - Primary navigation](#header-primary-navigation)\n- [Header - Secondary navigation](#header-secondary-navigation)\n- [Footer](#footer-navigation)\n- [Custom footer](#custom-footer)\n- [RSS Feeds](#rss-feeds)\n- [Main pages](#main-pages)\n- [Hero section](#hero-section)\n- [Rich text blocks](#text-block)\n- [Multicolumn card section](#text-columns-block)\n- [Image with text block](#image-and-text)\n- [Custom code section](#html-block)\n- [Knowledge base categories block](#knowledge-base-categories)\n- [Widgets block](#widgets)\n- [Error pages](#error-pages)\n- [404 page](#404-page)\n- [Access denied page](#access-denied-page)\n- [Unauthorized page](#unauthorized-page)\n- [IP restriction page](#ip-restriction-page)\n- [Custom CSS & JavaScript](#custom-css-javascript)\n- [CSS Snippets](#css-snippets)\n- [Callout styles](#callout-styles)\n- [Body font style](#body-font-style)\n- [Image alignment](#image-alignment)\n- [Header font style](#header-font-style)\n- [Table style](#table-style)\n- [Article redirect rule](#article-redirect-rules)\n- [Article settings & SEO](#configuring-the-article-settings)\n- [Article header](#article-header)\n- [Site header-What's new](#document-header)\n- [Follow articles and categories](#follow-articles-and-categories)\n- [Search in Knowledge base site](#search-in-knowledge-base-site)\n- [Liking or disliking an article](#liking-or-disliking-an-article)\n- [Smart bars](#smart-bar)\n- [Cookie consent](#cookie-consent)\n- [Accessing the ticket deflectors in portal](#accessing-the-ticket-deflectors)\n- [Adding a new ticket deflector](#adding-a-new-ticket-deflector)\n- [Integrations in Document360](#integrations-getting-started)\n- [Code inclusion and exclusion conditions](#advanced-insertion-rules-in-integration)\n- [LiveChat](#livechat)\n- [Olark](#olark)\n- [Freshchat](#freshchat)\n- [Crisp](#crisp)\n- [Chatra](#chatra)\n- [Doorbell](#door-bell)\n- [Gorgias](#gorgias)\n- [Belco](#belco)\n- [Sunshine Conversations](#sunshine)\n- [Kommunicate](#kommunicate)\n- [Google Analytics](#google-analytics-integration)\n- [Google Analytics (GA4)](#google-analytics-new)\n- [Google Tag Manager](#google-tag-manager)\n- [Heap](#heap)\n- [Segment](#segment-integration)\n- [Hotjar](#hotjar)\n- [Amplitude](#amplitude)\n- [FullStory](#fullstory)\n- [Mixpanel](#mixpanel)\n- [VWO](#vwo)\n- [Freshmarketer](#freshmarketer)\n- [ZOHO PageSense](#zoho-page-sense)\n- [GoSquared](#gosquared)\n- [Commento](#commento)\n- [Disqus](#disqus)\n- [Document360 Extensions - Getting started](#all-extensions)\n- [Freshdesk](#freshdesk)\n- [Freshservice](#freshservice)\n- [Zendesk](#zendesk)\n- [Intercom](#intercom-integration)\n- [Salesforce](#salesforce)\n- [Cases page](#cases-page)\n- [Slack](#slack)\n- [Microsoft Teams](#microsoft-teams)\n- [Drift](#drift)\n- [Zapier - Setup guide](#zapier-setup-guide)\n- [Integrating Google Docs with Document360](#google-docs-document360-integration)\n- [Integrating Google Sheets with Document360](#document360-with-google-sheets-integration)\n- [Integrating Document360 with Google Drive](#google-drive-document360)\n- [Integrating Trello with Document360](#document360-with-trello-integration)\n- [Integrating GitHub with Document360](#github-document360)\n- [Integrating Confluence Server with Document360](#confluence-document360)\n- [Integrating Zoho CRM with Document360](#zoho-crm-document360)\n- [Integrating Pipedrive with Document360](#pipedrive-document360)\n- [Integrating Hubspot with Document360](#hubspot-document360)\n- [Integrating Asana with Document360](#asana-document360)\n- [Integrating Monday.com with Document360](#mondaycom-document360)\n- [Integrating Typeform with Document360](#typeform-document360)\n- [Integrating Gmail with Document360](#document360-gmail)\n- [Integrating Mailchimp with Document360](#document360-mailchimp)\n- [Make - Setup guide](#make-setup-guide)\n- [Integrating Asana with Document360](#asana-and-document360-integration)\n- [Integrating Monday.com with Document360](#monday-document360-integration)\n- [Integrating Typeform with Document360](#typeform-and-document360-integration)\n- [Integrating Google Docs with Document360](#google-docs-and-document360-integration)\n- [Integrating Jira with Document360](#jira-and-document360-integration)\n- [Chrome](#chrome-extension)\n- [Crowdin](#crowdin)\n- [Phrase](#phrase)\n- [General project settings](#general-project-settings)\n- [Team auditing](#team-auditing)\n- [Localization - Getting started](#localization-getting-started)\n- [Setting up a Multi-lingual knowledge base](#setting-up-a-multi-lingual-knowledge-base)\n- [Localization variables](#localization-variables)\n- [Workspaces](#workspaces)\n- [Backup and restore](#backup-restore)\n- [Notifications](#notifications)\n- [Webhook notification channel](#webhook-notification-channel)\n- [Slack notification channel](#slack-notification-channel)\n- [Microsoft Teams notification channel](#microsoft-teams-notification-channel)\n- [SMTP notification channel](#smtp-email-notification-channel)\n- [Notification mapping](#notification-mapping)\n- [Notification history](#notification-history)\n- [Email domain](#send-notifications-from-custom-email-domain)\n- [How to use Postman?](#how-to-use-postman)\n- [How to use Swagger?](#how-to-use-swagger)\n- [Portal search](#full-portal-search)\n- [Article-portal search](#article-full-portal-search)\n- [Drive-portal search](#drive-full-portal-search)\n- [Users & groups-portal search](#users-groups-full-portal-search)\n- [Tags-portal search](#tags-full-portal-search)\n- [Settings-portal search](#settings-full-portal-search)\n- [Custom domain mapping](#custom-domain-mapping)\n- [Hosting Document360 on a sub-directory](#document360-on-a-sub-folder)\n- [Nginx server - Subfolder hosting](#nginx-server)\n- [ASP.NET Core server](#aspnet-core-server)\n- [Microsoft - IIS server](#microsoft-iis-server)\n- [Apache HTTP server](#apache-http-server)\n- [Readers self registration](#reader-self-registration)\n- [Managing reviewer accounts](#managing-reviewer-accounts)\n- [Account locked](#account-locked)\n- [Block inheritance](#block-inheritance)\n- [IP restriction](#ip-restriction)\n- [Single Sign-On (SSO)](#single-sign-on-sso)\n- [Login using SSO - Knowledge base portal](#login-using-sso-knowledge-base-portal)\n- [Login using SSO - Knowledge base site](#login-using-sso-knowledge-base-site)\n- [Inviting or Adding SSO users](#inviting-or-adding-sso-users)\n- [Mapping an existing SSO configuration to other projects](#mapping-an-existing-sso-configuration-to-other-projects)\n- [Disable Document360 login page](#disable-document360-login-page)\n- [Auto assign reader group](#auto-assign-reader-group)\n- [Convert to SSO account](#convert-to-sso-account)\n- [Sign out idle SSO team account](#team-account-idle-timeout)\n- [SAML](#saml)\n- [SAML SSO with Okta](#saml-sso-with-okta)\n- [SAML SSO with Entra](#saml-sso-with-entra)\n- [SAML SSO with Google](#google-sso-saml-configuration)\n- [SAML SSO with OneLogin](#saml-sso-with-onelogin)\n- [SAML SSO with ADFS](#saml-sso-with-adfs)\n- [SAML SSO with other configurations](#saml-sso-with-other-configurations)\n- [Identity Provider (IdP) initiated sign in](#idp-initiated-login)\n- [Removing a configured SAML SSO](#removing-a-configured-saml-sso)\n- [OpenID](#openid)\n- [Okta with OpenID SSO](#okta-with-openid-sso)\n- [Auth0 with OpenID SSO](#auth0-with-openid-sso)\n- [ADFS with OpenID SSO](#adfs-with-openid-sso)\n- [Other configurations with OpenID SSO](#other-configurations-with-openid-sso)\n- [Removing a configured OpenID SSO](#removing-a-configured-openid-sso)\n- [Setting up JWT SSO](#configuring-the-jwt-sso)\n- [JWT reader groups](#jwt-reader-groups)\n- [How to enlarge the pdf preview in the article?](#how-to-enlarge-the-pdf-preview-in-the-article)\n- [How to change the color of the hyperlinks in Dark mode?](#how-to-change-the-color-of-the-hyperlinks-in-dark-mode)\n- [How to change the highlighted search result color in articles?](#how-to-change-the-highlighted-search-result-color-in-articles)\n- [How to hide the project's workspace dropdown in the Knowledge base site?](#how-to-hide-the-project-versions-dropdown-in-the-knowledge-base-site)\n- [How to add a vertical scrollbar to the code blocks?](#how-to-add-a-vertical-scrollbar-to-the-code-blocks)\n- [How to set the default height and width of the embedded PDF?](#how-to-set-the-default-height-and-width-of-the-embedded-pdf)\n- [How to make the table border bold in knowledge base?](#how-to-make-the-table-border-bold-in-knowledge-base)\n- [How to vertically align table contents at the top in the Knowledge base?](#how-to-vertically-align-table-contents-at-the-top-in-the-knowledge-base)\n- [How to restrict the readers from copying the content?](#how-to-restrict-the-readers-from-copying-the-content)\n- [How to keep dark mode for the Knowledge base site by default?](#how-to-keep-dark-mode-for-the-knowledge-base-site-by-default)\n- [How to center align the text in Markdown?](#how-to-center-align-the-text-in-markdown)\n- [How to change the color of the text in Markdown?](#how-to-change-the-color-of-the-text-in-markdown)\n- [How to change the language name text in code blocks?](#how-to-change-the-language-name-text-in-code-blocks)\n- [How to change the callouts color in dark mode?](#how-to-change-the-callouts-color-in-dark-mode)\n- [How to center align the heading in the articles?](#how-to-center-align-the-heading-in-the-articles)\n- [How to change the color of the table header?](#how-to-change-the-color-of-the-table-header)\n- [How to add accordion in Markdown?](#how-to-add-accordion-in-markdown)\n- [How to add extra space in Markdown?](#how-to-add-extra-space-in-markdown)\n- [How to align the image in Markdown?](#how-to-align-the-image-in-markdown)\n- [How to add a background image for a text content?](#how-to-add-a-background-image-for-a-text-content)\n- [How to change the color of the table of contents?](#how-to-change-the-color-of-the-table-of-contents)\n- [How to sort the contents of a table?](#how-to-sort-the-contents-of-a-table)\n- [How to customize the hyperlink size?](#how-to-customize-the-hyperlink)\n- [How to make all links open in new tab?](#how-to-make-all-links-open-in-new-tab)\n- [How to set a default featured image in knowledge base?](#how-to-set-a-default-featured-image-in-knowledge-base)\n- [How to add shadows to an image in Markdown?](#how-to-add-shadows-to-an-image-in-markdown)\n- [How to add borders to an image in Markdown?](#how-to-add-borders-to-an-image-in-markdown)\n- [How to embed YouTube Shorts?](#embed-youtube-shorts)\n- [How to embed a Loom video?](#how-to-embed-loom-video)\n- [How to embed an Excel file?](#how-to-embed-an-excel-file)\n- [How to change the color of Feedback buttons?](#how-to-change-the-color-of-feedback-buttons)\n- [How to hide footer in mobile view?](#how-to-hide-footer-in-mobile-view)\n- [How to change the hover color of the header options?](#how-to-change-the-hover-color-of-the-header-options)\n- [How to move the related articles above the feedback section?](#how-to-move-the-related-articles-above-the-feedback-section)\n- [How to hide the change password option for readers?](#how-to-hide-the-change-password-option-for-readers)\n- [How to hide the category manager?](#how-to-hide-the-category-manager)\n- [How to configure a custom font in the knowledge base?](#how-to-configure-a-custom-font-in-the-knowledge-base)\n- [How to hide the left navigation bar in the knowledge base site?](#how-to-hide-the-left-navigation-bar-in-knowledge-base-site)\n- [Plans and pricing](#plans-and-pricing)\n- [Upgrading your subscription plan](#upgrading-your-plan)\n- [Downgrading your subscription plan](#downgrading-your-plan)\n- [Purchasing add-ons](#add-ons)\n- [Upgrading from trial version](#upgrading-from-trial-version)\n- [Changing payment information](#changing-payment-information)\n- [February 2025 - 11.1.2](#february-2025-1112)\n- [January 2025 - 11.01.1](#january-2025-1111)\n- [December 2024 - 10.12.1](#december-2024-10121)\n- [November 2024 - 10.11.1](#november-2024-10111)\n- [October 2024 - 10.10.1](#october-2024-10101)\n- [September 2024 - 10.9.1](#september-2024-1091)\n- [September 2024 - 10.8.2](#september-2024-1082)\n- [August 2024 - 10.8.1](#august-2024-1081)\n- [July 2024 - 10.7.1](#july-2024-1071)\n- [July 2024 - 10.6.2](#july-2024-1062)\n- [June 2024 - 10.6.1](#june-2024-1061)\n- [June 2024 - 10.5.2](#june-2024-1052)\n- [May 2024 - 10.5.1](#may-2024-1051)\n- [May 2024 - 10.4.2](#may-2024-1042)\n- [April 2024 - 10.4.1](#1041-release-note)\n- [April 2024 - Minor release](#april-2024-minor-release)\n- [March 2024](#march-2024)\n- [February 2024](#february-2024)\n- [January 2024](#january-2024)\n- [December 2023](#december-2023)\n- [November 2023](#november-2023)\n- [August 2023](#august-3)\n- [July 2023](#july-2)\n- [June 2023](#june-3)\n- [May 2023](#may-1)\n- [April 2023](#april-3)\n- [March 2023](#march-4)\n- [February 2023](#february-3)\n- [January 2023](#january-2)\n- [December 2022](#december-2022-release-note)\n- [November 2022](#november-2022-release-note)\n- [October 2022](#october-2022-release-note)\n- [September 2022](#september-2022-release-note)\n- [August 2022](#august-2022-release-note)\n- [July 2022](#july-2022-release-note)\n- [June 2022](#june-2022-release-notes)\n- [May 2022](#may-2022-release-note)\n- [April 2022](#april-2022-release-note)\n- [March 2022](#march-2022-release-note)\n- [February 2022](#february-2022-release-note)\n- [January 2022](#january-2022-release-note)\n- [December 2021](#december-2021-release-note)\n- [November 2021](#november-2021-release-note)\n- [October 2021](#october-2021-release-note)\n- [September 2021](#september-2021-release-note)\n- [August 2021](#august-2021-release-notes)\n- [July 2021](#july-2021-release-note)\n- [June 2021](#june-2021-release-note)\n- [May 2021](#may-2021-release-note)\n- [April 2021](#april-2021-release-note)\n- [March 2021](#march-2021-release-note)\n- [February 2021](#february-2021-release-note)\n- [January 2021](#january-2021-release-note)\n- [November 2020](#november-2020-release-note)\n- [October 2020](#october-2020-release-note)\n- [August 2020](#august-2020-release-note)\n- [June 2020](#june-2020-release-note)\n- [May 2020](#may-2020-release-note)\n- [April 2020](#april-2020-release-note)\n- [March 2020](#march-2020-release-note)\n- [February 2020](#february-2020-release-note)\n- [January 2020](#january-2020)\n- [December 2019](#december)\n- [November 2019](#november)\n- [October 2019](#october)\n- [September 2019](#september-2019)\n- [August 2019](#august)\n- [July 2019](#july)\n- [June 2019](#june)\n- [May 2019](#may-2019)\n- [April 2019](#april-2019)\n- [March 2019](#march)\n- [February 2019](#february)\n- [January 2019](#january-2019)\n- [Support ticket](#support-ticket)\n- [Generating a HAR file](#document360-support-generating-a-har-file)\n\n---\n\n<a id=\"document360-getting-started\"></a>",
    "summary": ""
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="31">
<source>docs/mkdocs_export.md</source>
<document_content>
# MkDocs Export Documentation

**Document360 → MkDocs Export System**

The d361 MkDocs export system provides comprehensive conversion capabilities from Document360 archives or API data to modern MkDocs documentation sites, with full support for Material theme, popular plugins, and advanced features.

## Table of Contents

1. [Overview](#overview)
2. [Quick Start](#quick-start)
3. [Configuration](#configuration)
4. [Templates](#templates)
5. [Content Processing](#content-processing)
6. [Asset Management](#asset-management)
7. [Navigation](#navigation)
8. [Advanced Features](#advanced-features)
9. [API Reference](#api-reference)
10. [Examples](#examples)
11. [Troubleshooting](#troubleshooting)

## Overview

The MkDocs export system is built on a modular architecture that processes Document360 content through multiple specialized components:

### Core Components

- **MkDocsExporter**: Main orchestrator for the complete export process
- **ConfigGenerator**: Dynamic MkDocs YAML configuration generation with template support
- **NavigationBuilder**: Intelligent navigation structure creation from Document360 hierarchy
- **ContentEnhancer**: Content optimization with frontmatter, quality assessment, and SEO
- **AssetManager**: Image processing, CDN optimization, and responsive asset handling
- **CrossReferenceResolver**: Internal link resolution and validation

### Supported Features

- ✅ **Archive and API Sources**: Works with Document360 archives (.zip) and live API
- ✅ **Modern Themes**: Full Material for MkDocs integration with all features
- ✅ **Popular Plugins**: autorefs, section-index, redirects, social cards, minify
- ✅ **Advanced Markdown**: SuperFences, tabbed content, admonitions, math expressions
- ✅ **Performance**: Parallel processing, intelligent caching, optimization
- ✅ **Quality Control**: Content validation, broken link detection, SEO optimization
- ✅ **Template System**: Jinja2 templates for complete customization

## Quick Start

### Basic Export from Archive

```python
import asyncio
from pathlib import Path
from d361.mkdocs import MkDocsExporter

async def export_documentation():
    # Create exporter instance
    exporter = MkDocsExporter(
        source="archive",
        archive_path=Path("my-docs-archive.zip"),
        output_path=Path("mkdocs_site"),
        theme="material",
        enable_plugins=True
    )
    
    # Run export
    results = await exporter.export()
    
    # Check results
    if results["success"]:
        print(f"✅ Export successful!")
        print(f"📁 Output: {results['output_path']}")
        print(f"⚙️ Config: {results['config_path']}")
        print(f"📊 Processed {results['statistics']['articles_processed']} articles")
    else:
        print("❌ Export failed")
        for error in results["validation"]["errors"]:
            print(f"   Error: {error}")

# Run the export
asyncio.run(export_documentation())
```

### Export from API

```python
from d361.mkdocs import MkDocsExporter

async def export_from_api():
    exporter = MkDocsExporter(
        source="api",
        api_token="your-document360-api-token",
        api_base_url="https://apidocs.document360.com",
        output_path=Path("api_mkdocs_site"),
        theme="material"
    )
    
    results = await exporter.export()
    return results

# For hybrid mode (archive + API)
async def export_hybrid():
    exporter = MkDocsExporter(
        source="hybrid",
        archive_path=Path("base-archive.zip"),
        api_token="your-api-token",
        output_path=Path("hybrid_site"),
        theme="material",
        parallel_processing=True,  # Enable for faster processing
        max_workers=6
    )
    
    results = await exporter.export()
    return results
```

### Generated Directory Structure

After export, you'll have a complete MkDocs project:

```
mkdocs_site/
├── mkdocs.yml              # Generated configuration
├── docs/                   # Markdown content
│   ├── index.md           # Homepage
│   ├── guides/            # Organized by categories
│   │   ├── index.md
│   │   ├── getting-started.md
│   │   └── advanced-guide.md
│   ├── reference/
│   │   └── api-docs.md
│   └── assets/            # Processed images and files
│       ├── images/
│       └── stylesheets/
└── site/                  # Built site (after mkdocs build)
```

## Configuration

### MkDocsExporter Options

```python
exporter = MkDocsExporter(
    # Data Source Configuration
    source="archive",                    # "archive", "api", or "hybrid"
    archive_path=Path("archive.zip"),    # Path to Document360 archive
    api_token="your-token",              # Document360 API token
    api_base_url="https://api.url",      # API base URL
    
    # Output Configuration  
    output_path=Path("output"),          # Output directory
    theme="material",                    # MkDocs theme ("material", "readthedocs", etc.)
    enable_plugins=True,                 # Enable popular MkDocs plugins
    
    # Performance Configuration
    parallel_processing=True,            # Enable parallel processing
    max_workers=4,                       # Number of parallel workers
    
    # Advanced Configuration
    config_path=Path("d361.toml")       # Path to d361 configuration file
)
```

### ConfigGenerator Customization

```python
from d361.mkdocs import ConfigGenerator

# Create config generator
generator = ConfigGenerator(
    theme="material",
    enable_plugins=True
)

# Generate configuration programmatically
config_yaml = await generator.generate_config(
    site_name="My Documentation",
    site_url="https://docs.example.com",
    site_description="Comprehensive project documentation",
    repo_url="https://github.com/user/project",
    navigation=[
        {"Home": "index.md"},
        {
            "User Guide": [
                "guide/getting-started.md",
                "guide/advanced.md"
            ]
        },
        {"API Reference": "api/index.md"}
    ]
)

# Generate from template
config_content = await generator.generate_config_from_template(
    template_name="material_theme.yml.j2",
    context={
        "site_name": "Custom Site",
        "primary_color": "teal",
        "accent_color": "orange",
        "enable_social_cards": True,
        "analytics": {
            "provider": "google",
            "property": "G-XXXXXXXXXX"
        }
    }
)

# Validate configuration
validation_results = generator.validate_final_config(config_yaml)
if not validation_results["valid"]:
    print("Configuration errors:")
    for error in validation_results["errors"]:
        print(f"  - {error}")
```

### Theme-Specific Configuration

#### Material Theme

```python
# Material theme with all features
material_context = {
    "site_name": "Material Documentation",
    "site_url": "https://docs.example.com",
    
    # Color scheme
    "color_scheme": "auto",          # "auto", "light", "dark"
    "primary_color": "indigo",       # Material color palette
    "accent_color": "blue",
    
    # Typography
    "text_font": "Roboto",
    "code_font": "Roboto Mono",
    
    # Features
    "enable_tabs": True,             # Navigation tabs
    "enable_instant": True,          # Instant navigation
    "enable_social_cards": True,     # Social media cards
    "enable_feedback": True,         # Page feedback system
    
    # Search
    "enable_offline_search": True,   # Offline search capability
    
    # Analytics
    "analytics": {
        "provider": "google",
        "property": "G-XXXXXXXXXX",
        "feedback": {
            "title": "Was this page helpful?",
            "ratings": [
                {"icon": "material/emoticon-happy-outline", "name": "Yes", "data": 1},
                {"icon": "material/emoticon-sad-outline", "name": "No", "data": 0}
            ]
        }
    }
}
```

#### Read the Docs Theme

```python
# RTD theme configuration
rtd_context = {
    "site_name": "RTD Documentation",
    "theme_name": "readthedocs",
    "highlightjs": True,
    "hljs_languages": ["python", "javascript", "yaml", "bash"]
}
```

## Templates

The system includes three main Jinja2 templates for different use cases:

### 1. Base Template (`mkdocs_base.yml.j2`)

Basic MkDocs configuration suitable for any theme:

```yaml
# Example usage
await generator.generate_config_from_template(
    "mkdocs_base.yml.j2",
    {
        "site_name": "Basic Documentation",
        "theme_name": "mkdocs",
        "navigation": [{"Home": "index.md"}],
        "enable_task_lists": True,
        "enable_superfences": True
    }
)
```

### 2. Material Theme Template (`material_theme.yml.j2`)

Comprehensive Material theme configuration with all features:

```yaml
# Full Material theme example
material_config = await generator.generate_config_from_template(
    "material_theme.yml.j2",
    {
        "site_name": "Advanced Material Site",
        "site_url": "https://docs.example.com",
        "primary_color": "deep purple",
        "accent_color": "pink",
        "color_scheme": "auto",
        "enable_social_cards": True,
        "enable_tags": True,
        "enable_feedback": True,
        "social": [
            {"icon": "fontawesome/brands/github", "link": "https://github.com/user/repo"},
            {"icon": "fontawesome/brands/twitter", "link": "https://twitter.com/user"}
        ]
    }
)
```

### 3. Plugin Configuration Template (`plugin_configs.yml.j2`)

Focused on plugin configuration and advanced features:

```yaml
plugin_config = await generator.generate_config_from_template(
    "plugin_configs.yml.j2",
    {
        "site_name": "Plugin-Rich Site",
        "enable_autorefs": True,
        "enable_section_index": True,
        "enable_redirects": True,
        "redirects": {
            "old-page.html": "new-page.md",
            "legacy/": "current/"
        }
    }
)
```

### Custom Templates

Create your own templates for specialized use cases:

```yaml
# custom_enterprise.yml.j2
site_name: {{ site_name }}
site_url: {{ site_url }}

theme:
  name: material
  custom_dir: {{ custom_dir | default('theme') }}
  features:
    - navigation.instant
    - navigation.tracking
    {% if enable_enterprise_features %}
    - content.action.edit
    - content.feedback.general
    {% endif %}

plugins:
  - search
  {% if enable_enterprise_auth %}
  - auth:
      providers:
        - saml: {{ saml_config | to_yaml }}
        - oauth: {{ oauth_config | to_yaml }}
  {% endif %}
```

## Content Processing

### ContentEnhancer Features

The ContentEnhancer optimizes Document360 content for MkDocs:

```python
from d361.mkdocs.processors import ContentEnhancer

# Create content enhancer
enhancer = ContentEnhancer(
    site_url="https://docs.example.com",
    enable_seo=True,
    validate_links=True,
    add_edit_links=True,
    enable_social_cards=True,
    custom_css_classes={
        "tables": "data-table",
        "blockquotes": "callout"
    }
)

# Enhance article content
enhanced = await enhancer.enhance_article(article)

# Access enhanced components
frontmatter = enhanced["frontmatter"]      # YAML frontmatter
content = enhanced["content"]              # Processed markdown
quality = enhanced["quality_metrics"]     # Quality assessment
nav_hints = enhanced["navigation_hints"]  # Navigation suggestions
```

### Content Transformations

#### 1. Heading Normalization

```markdown
# Input (Document360)
# Main Title
## Section
### Subsection

# Output (MkDocs)
## Main Title {: #main-title }
## Section {: #section }
### Subsection {: #subsection }
```

#### 2. Link Processing

```markdown
# Internal links
[Guide](../docs/user-guide.html) → [Guide](../docs/user-guide.md)

# External links  
[Example](https://example.com) → [Example](https://example.com){: target="_blank" rel="noopener noreferrer" }
```

#### 3. Image Enhancement

```markdown
# Document360 CDN URLs are optimized
![Diagram](https://d360-cdn.com/image.png) → ![Diagram](assets/images/optimized-image.png)

# Responsive images
![Large Image](big-image.jpg) → ![Large Image](big-image.jpg){: .responsive-image loading="lazy" }
```

#### 4. Code Block Enhancement

```markdown
# Language detection and line numbers
```
def example():
    return "hello world"
```

# Becomes:
```python linenums="1"
def example():
    return "hello world"
```

### Quality Assessment

The system provides comprehensive quality metrics:

```python
quality_metrics = {
    "word_count": 450,
    "heading_count": 5,
    "link_count": 8,
    "image_count": 3,
    "code_block_count": 2,
    "estimated_reading_time": 3,  # minutes
    "overall_score": 85,          # 0-100
    "quality_level": "excellent"  # needs_improvement, fair, good, excellent
}
```

## Asset Management

### AssetManager Configuration

```python
from d361.mkdocs.processors import AssetManager

# Configure asset processing
manager = AssetManager(
    output_dir=Path("docs/assets"),
    enable_optimization=True,
    generate_responsive=True,
    max_image_width=1200,
    image_quality=85,
    convert_to_webp=True,
    enable_lazy_loading=True,
    download_external_assets=True  # Download and localize external assets
)

# Process assets in content
processed_content = await manager.process_assets(content, article_id)

# Copy all assets to output directory
assets_copied = await manager.copy_assets(docs_dir)
```

### Supported Asset Types

- **Images**: PNG, JPG, WebP, GIF, SVG
- **Documents**: PDF, DOCX, XLSX
- **Code**: JSON, XML, CSV
- **Media**: MP4, WebM (with appropriate player integration)

### CDN Optimization

```python
# Document360 CDN URLs are automatically optimized
original_url = "https://document360.com/wp-content/uploads/2023/image.png"
optimized_url = manager.optimize_cdn_url(original_url)
# Result: "assets/images/document360-image-optimized.webp"
```

## Navigation

### NavigationBuilder Features

```python
from d361.mkdocs.exporters import NavigationBuilder

builder = NavigationBuilder()

# Build navigation from Document360 structure
navigation = await builder.build_navigation(articles, categories)

# Example output:
[
    {"Home": "index.md"},
    {
        "Getting Started": [
            "guides/index.md",
            "guides/installation.md",
            "guides/quick-start.md"
        ]
    },
    {
        "API Reference": [
            "api/index.md",
            "api/authentication.md",
            "api/endpoints.md"
        ]
    },
    {"FAQ": "help/faq.md"}
]
```

### Hierarchical Categories

The system automatically handles nested categories:

```python
# Document360 categories
parent_category = Category(id="guides", name="User Guides", parent_id=None)
child_category = Category(id="advanced", name="Advanced Topics", parent_id="guides")

# Generates nested navigation:
{
    "User Guides": [
        "guides/index.md",
        "guides/basic-guide.md",
        {
            "Advanced Topics": [
                "guides/advanced/index.md",
                "guides/advanced/expert-tips.md"
            ]
        }
    ]
}
```

## Advanced Features

### Cross-Reference Resolution

```python
from d361.mkdocs.processors import CrossReferenceResolver

resolver = CrossReferenceResolver(
    articles=all_articles,
    categories=all_categories,
    base_url="https://docs.example.com",
    validate_external=True,
    generate_autorefs=True
)

# Resolve references in content
resolved_content = await resolver.resolve_content_references(content, current_article_id)

# Generate link report
link_report = resolver.generate_link_report()
```

### Template Validation

```python
# Comprehensive template validation
validation_results = generator.validate_final_config(config_yaml)

print(f"Valid: {validation_results['valid']}")
print(f"Errors: {len(validation_results['errors'])}")
print(f"Warnings: {len(validation_results['warnings'])}")
print(f"Suggestions: {len(validation_results['suggestions'])}")

for error in validation_results['errors']:
    print(f"❌ {error}")

for warning in validation_results['warnings']:
    print(f"⚠️ {warning}")

for suggestion in validation_results['suggestions']:
    print(f"💡 {suggestion}")
```

### Performance Optimization

```python
# Enable parallel processing for large archives
exporter = MkDocsExporter(
    source="archive",
    archive_path=large_archive,
    output_path=output_dir,
    parallel_processing=True,
    max_workers=8  # Adjust based on system capabilities
)

# Monitor performance
results = await exporter.export()
performance_metrics = results["performance"]

print(f"Total time: {performance_metrics['total_export']}s")
print(f"Content loading: {performance_metrics['content_loading']}s")  
print(f"Content processing: {performance_metrics['content_processing']}s")
```

## API Reference

### MkDocsExporter

#### Constructor

```python
MkDocsExporter(
    source: str = "archive",                    # Data source type
    archive_path: Optional[Path] = None,        # Archive file path
    api_token: Optional[str] = None,            # API token
    api_base_url: Optional[str] = None,         # API base URL
    output_path: Path = Path("mkdocs_output"),  # Output directory
    theme: str = "material",                    # MkDocs theme
    enable_plugins: bool = True,                # Enable plugins
    parallel_processing: bool = True,           # Parallel processing
    max_workers: int = 4,                       # Worker threads
    config_path: Optional[Path] = None          # Configuration file
)
```

#### Methods

```python
async def export() -> Dict[str, Any]:
    """Execute complete MkDocs export process."""
    
async def _load_content() -> Tuple[List[Article], List[Category]]:
    """Load content from configured data source."""
    
async def _validate_export() -> Dict[str, Any]:
    """Validate the generated MkDocs export."""
```

### ConfigGenerator

#### Constructor

```python
ConfigGenerator(
    theme: str = "material",                    # Theme name
    enable_plugins: bool = True,                # Enable plugins
    template_dir: Optional[Path] = None         # Custom template directory
)
```

#### Methods

```python
async def generate_config(
    site_name: str,
    navigation: List[Dict[str, Any]],
    output_path: Path,
    **kwargs
) -> str:
    """Generate MkDocs configuration YAML."""

async def generate_config_from_template(
    template_name: str,
    context: Dict[str, Any],
    validate_output: bool = True
) -> str:
    """Generate configuration from Jinja2 template."""

def validate_final_config(config_yaml: str) -> Dict[str, Any]:
    """Validate MkDocs configuration."""
```

### ContentEnhancer

#### Constructor

```python
ContentEnhancer(
    site_url: Optional[str] = None,             # Site base URL
    enable_seo: bool = True,                    # SEO metadata
    validate_links: bool = True,                # Link validation
    add_edit_links: bool = True,                # Edit links
    enable_social_cards: bool = False,          # Social cards
    custom_css_classes: Optional[Dict] = None   # Custom CSS classes
)
```

#### Methods

```python
async def enhance_article(article: Article) -> Dict[str, Any]:
    """Enhance single article for MkDocs."""
```

## Examples

### Complete Enterprise Setup

```python
import asyncio
from pathlib import Path
from d361.mkdocs import MkDocsExporter, ConfigGenerator

async def enterprise_documentation_setup():
    """Complete enterprise documentation setup example."""
    
    # Step 1: Create custom configuration
    generator = ConfigGenerator(theme="material", enable_plugins=True)
    
    enterprise_context = {
        "site_name": "Enterprise Documentation Portal",
        "site_url": "https://docs.company.com",
        "site_description": "Comprehensive enterprise documentation",
        "repo_url": "https://github.com/company/docs",
        "copyright": "Copyright &copy; 2025 Company Inc.",
        
        # Enterprise theme
        "primary_color": "blue grey",
        "accent_color": "deep orange", 
        "color_scheme": "auto",
        "logo": "assets/company-logo.svg",
        "favicon": "assets/favicon.ico",
        
        # Advanced features
        "enable_social_cards": True,
        "enable_feedback": True,
        "enable_tags": True,
        "enable_offline_search": True,
        
        # Analytics and monitoring
        "analytics": {
            "provider": "google",
            "property": "G-COMPANY123",
            "feedback": {
                "title": "How was this page?",
                "ratings": [
                    {"icon": "material/thumb-up", "name": "Helpful", "data": 1},
                    {"icon": "material/thumb-down", "name": "Not helpful", "data": 0}
                ]
            }
        },
        
        # Social links
        "social": [
            {"icon": "fontawesome/brands/github", "link": "https://github.com/company"},
            {"icon": "fontawesome/brands/linkedin", "link": "https://linkedin.com/company/company"},
            {"icon": "fontawesome/solid/envelope", "link": "mailto:docs@company.com"}
        ],
        
        # Custom navigation
        "navigation": [
            {"Home": "index.md"},
            {
                "Getting Started": [
                    "getting-started/index.md",
                    "getting-started/installation.md",
                    "getting-started/authentication.md",
                    "getting-started/first-steps.md"
                ]
            },
            {
                "User Guides": [
                    "guides/index.md",
                    "guides/basic-usage.md",
                    "guides/advanced-features.md",
                    "guides/integrations.md"
                ]
            },
            {
                "API Reference": [
                    "api/index.md",
                    "api/authentication.md",
                    "api/users.md",
                    "api/projects.md",
                    "api/webhooks.md"
                ]
            },
            {
                "Administration": [
                    "admin/index.md",
                    "admin/user-management.md",
                    "admin/system-configuration.md",
                    "admin/monitoring.md"
                ]
            },
            {"Support": "support/index.md"},
            {"Changelog": "changelog.md"}
        ]
    }
    
    # Step 2: Set up exporter with enterprise configuration
    exporter = MkDocsExporter(
        source="hybrid",  # Use both archive and API
        archive_path=Path("enterprise-docs-archive.zip"),
        api_token="your-enterprise-api-token",
        output_path=Path("enterprise_docs_site"),
        theme="material",
        enable_plugins=True,
        parallel_processing=True,
        max_workers=6
    )
    
    # Step 3: Run export
    print("🚀 Starting enterprise documentation export...")
    results = await exporter.export()
    
    # Step 4: Generate custom configuration
    if results["success"]:
        print("✅ Basic export completed successfully!")
        
        # Generate enterprise configuration
        enterprise_config = await generator.generate_config_from_template(
            "material_theme.yml.j2",
            enterprise_context
        )
        
        # Save custom configuration
        config_path = Path(results["output_path"]) / "mkdocs-enterprise.yml"
        config_path.write_text(enterprise_config)
        
        print(f"📋 Enterprise configuration saved: {config_path}")
        print(f"📊 Statistics:")
        print(f"   Articles: {results['statistics']['articles_processed']}")
        print(f"   Categories: {results['statistics']['categories_processed']}")
        print(f"   Assets: {results['statistics']['assets_processed']}")
        print(f"   Links resolved: {results['statistics']['links_resolved']}")
        
        # Validation report
        validation = results["validation"]
        if validation["errors"]:
            print("⚠️ Validation issues found:")
            for error in validation["errors"]:
                print(f"   ❌ {error}")
        
        if validation["warnings"]:
            print("💡 Suggestions:")
            for warning in validation["warnings"]:
                print(f"   💭 {warning}")
    
    else:
        print("❌ Export failed!")
        for error in results["validation"]["errors"]:
            print(f"   Error: {error}")
    
    return results

# Run the enterprise setup
if __name__ == "__main__":
    asyncio.run(enterprise_documentation_setup())
```

### Multi-Site Documentation

```python
async def multi_site_documentation():
    """Generate multiple documentation sites from single source."""
    
    base_archive = Path("complete-documentation.zip")
    
    # Site configurations
    sites = {
        "public": {
            "output": "public_docs",
            "theme": "material",
            "name": "Public Documentation",
            "url": "https://docs.example.com"
        },
        "internal": {
            "output": "internal_docs", 
            "theme": "material",
            "name": "Internal Documentation",
            "url": "https://internal-docs.company.com"
        },
        "api": {
            "output": "api_docs",
            "theme": "material", 
            "name": "API Documentation",
            "url": "https://api-docs.example.com"
        }
    }
    
    results = {}
    
    for site_type, config in sites.items():
        print(f"🔄 Generating {site_type} documentation...")
        
        exporter = MkDocsExporter(
            source="archive",
            archive_path=base_archive,
            output_path=Path(config["output"]),
            theme=config["theme"]
        )
        
        result = await exporter.export()
        results[site_type] = result
        
        if result["success"]:
            print(f"✅ {site_type.title()} site generated successfully")
        else:
            print(f"❌ {site_type.title()} site generation failed")
    
    return results
```

## Troubleshooting

### Common Issues

#### 1. Template Not Found

```python
# Error: Template 'custom_template.j2' not found
# Solution: Check template path and ensure it exists
generator = ConfigGenerator(template_dir=Path("custom_templates"))
```

#### 2. Invalid Configuration

```python
# Error: YAML syntax error in generated config
# Solution: Validate template context
validation = generator.validate_final_config(config_yaml)
if not validation["valid"]:
    for error in validation["errors"]:
        print(f"Config error: {error}")
```

#### 3. Asset Processing Issues

```python
# Error: Cannot process external assets
# Solution: Enable external asset downloading
manager = AssetManager(
    output_dir=Path("assets"),
    download_external_assets=True
)
```

#### 4. Performance Issues

```python
# Issue: Slow export for large archives
# Solution: Enable parallel processing
exporter = MkDocsExporter(
    parallel_processing=True,
    max_workers=8  # Increase workers
)
```

### Debug Mode

```python
# Enable debug logging
import logging
logging.basicConfig(level=logging.DEBUG)

# Detailed error information
try:
    results = await exporter.export()
except Exception as e:
    logger.error(f"Export failed: {e}", exc_info=True)
```

### Validation Tools

```python
# Comprehensive validation
def validate_export_results(results):
    """Validate export results comprehensively."""
    
    issues = []
    
    # Check basic success
    if not results.get("success"):
        issues.append("Export marked as failed")
    
    # Check output structure
    output_path = Path(results["output_path"])
    if not output_path.exists():
        issues.append(f"Output directory not found: {output_path}")
    
    # Check configuration
    config_path = Path(results["config_path"])  
    if not config_path.exists():
        issues.append(f"Configuration file not found: {config_path}")
    else:
        try:
            import yaml
            yaml.safe_load(config_path.read_text())
        except yaml.YAMLError as e:
            issues.append(f"Invalid YAML configuration: {e}")
    
    # Check docs directory
    docs_dir = output_path / "docs"
    if not docs_dir.exists():
        issues.append("Docs directory not found")
    elif not any(docs_dir.glob("*.md")):
        issues.append("No markdown files found in docs directory")
    
    # Report issues
    if issues:
        print("❌ Validation issues found:")
        for issue in issues:
            print(f"   - {issue}")
        return False
    else:
        print("✅ Export validation passed")
        return True
```

---

**Need Help?**

- 📚 [API Reference](#api-reference)
- 🐛 [Report Issues](https://github.com/d361/issues)
- 💬 [Community Support](https://discord.gg/d361)
- 📧 [Contact Support](mailto:support@d361.com)

This documentation covers the comprehensive MkDocs export capabilities of d361. For the latest updates and additional examples, check the official repository and documentation site.
</document_content>
</document>

<document index="32">
<source>docs/openapi_spec.json</source>
<document_content>
{
  "openapi": "3.0.1",
  "info": {
    "title": "Document360 Customer API",
    "description": "Document360 RESTful APIs will allow you to integrate your documentation with your software, allowing you to easily onboard new users, manage your articles and more. \n\nYou can find detailed API documentation here : [API Documentation](https://apidocs.document360.io/docs)",
... (file content truncated to first 5 lines)
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/docs/summarize.py
# Language: python

import asyncio
import json
import re
import sys
from pathlib import Path
from typing import Any
from fire import Fire
from rich.console import Console
from rich.progress import Progress, SpinnerColumn, TextColumn
from tenacity import (
    retry,
    retry_if_exception_type,
    stop_after_attempt,
    wait_exponential,
)
import llm

class LLMError(E, x, c, e, p, t, i, o, n):
    """Base exception class for LLM errors"""

class SummarizeCommands:
    """Commands for markdown summarization workflow."""
    def load((
        self,
        input_file: str,
        output_file: str | None = None,
        *,
        verbose: bool = False,
    )):
        """ Load a markdown file, split it at H2 headings, and save as JSON...."""
    def process((
        self,
        input_file: str | None = None,
        output_file: str | None = None,
        model: str | None = None,
        *,
        verbose: bool = False,
        force: bool = False,
        concurrency: int = 3,
        list_models: bool = False,
    )):
        """ Process JSON file with sections and summarize each section...."""
    def save((
        self,
        input_file: str,
        output_file: str | None = None,
        *,
        verbose: bool = False,
    )):
        """ Load processed JSON sections and save as a markdown file...."""
    def all((
        self,
        input_file: str | None = None,
        output_file: str | None = None,
        model: str | None = None,
        *,
        verbose: bool = False,
        force: bool = False,
        concurrency: int = 3,
        list_models: bool = False,
    )):
        """ Run the entire workflow: load, process, and save...."""

def _try_model((
    prompt: str, model_id: str, attachments: list[llm.Attachment] | None = None
)) -> str:
    """Try a single model with retry logic"""

def ask((
    prompt: str,
    data: str | None = None,
    model_ids: list[str] | None = None,
)) -> str:
    """ Send a prompt to LLM with fallback models...."""

def split_markdown_at_h2((content: str)) -> list[dict[str, str]]:
    """ Split a markdown file at H2 headings...."""

def clean_llm_output((text: str)) -> str:
    """ Clean LLM output by extracting content between <output> and </output> tags...."""

def summarize_section((
    heading: str, content: str, model_ids: list[str] | None = None
)) -> str:
    """ Summarize a section of markdown content using LLM...."""

def load_markdown((
    input_file: str | Path,
    output_file: str | Path | None = None,
    *,
    verbose: bool = False,
)) -> None:
    """ Load a markdown file, split it at H2 headings, and save as JSON...."""

def process_section_async((
    section: dict[str, Any], model: str | None = None, force: bool = False
)) -> tuple[dict[str, Any], str | None, str | None]:
    """ Process a single section asynchronously, returning the updated section, any error message, and the ..."""

def process_sections_async((
    input_file: str | Path,
    output_file: str | Path | None = None,
    model: str | None = None,
    *,
    verbose: bool = False,
    force: bool = False,
    concurrency: int = 3,
)) -> None:
    """ Process JSON file with sections and summarize each section asynchronously...."""

def process_with_semaphore((section: dict[str, Any], idx: int)) -> None:

def process_sections((
    input_file: str | Path,
    output_file: str | Path | None = None,
    model: str | None = None,
    *,
    verbose: bool = False,
    force: bool = False,
    concurrency: int = 3,
)) -> None:
    """ Process JSON file with sections and summarize each section...."""

def save_markdown((
    input_file: str | Path,
    output_file: str | Path | None = None,
    *,
    verbose: bool = False,
)) -> None:
    """ Load processed JSON sections and save as a markdown file...."""

def load((
        self,
        input_file: str,
        output_file: str | None = None,
        *,
        verbose: bool = False,
    )):
    """ Load a markdown file, split it at H2 headings, and save as JSON...."""

def process((
        self,
        input_file: str | None = None,
        output_file: str | None = None,
        model: str | None = None,
        *,
        verbose: bool = False,
        force: bool = False,
        concurrency: int = 3,
        list_models: bool = False,
    )):
    """ Process JSON file with sections and summarize each section...."""

def save((
        self,
        input_file: str,
        output_file: str | None = None,
        *,
        verbose: bool = False,
    )):
    """ Load processed JSON sections and save as a markdown file...."""

def all((
        self,
        input_file: str | None = None,
        output_file: str | None = None,
        model: str | None = None,
        *,
        verbose: bool = False,
        force: bool = False,
        concurrency: int = 3,
        list_models: bool = False,
    )):
    """ Run the entire workflow: load, process, and save...."""


<document index="33">
<source>docs/test.json</source>
<document_content>
[
  {
    "heading": "My projects",
    "text": "## My projects\n\nThe **project dashboard** is the first thing you see when logging in to [**Document360**](https://portal.document360.io). The dashboard features all the projects you own, projects associated with a team account, and projects associated with a reader.  \nHere, each project will have a visibility tag to indicate the type of project (public, private, or mixed).\n\n![1_Screenshot-My_projects](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-My_projects.png \"My-Projects.png\")\n\n---",
    "summary": "## My projects\n\nThe **Document360** **project dashboard**, accessible upon login, displays all **projects** (owned, **team account**, or **reader** associated). Each project has a **visibility tag**: **public**, **private**, or **mixed**."
... (file content truncated to first 5 lines)
</document_content>
</document>

<document index="34">
<source>docs/test.md</source>
<document_content>
# Combined Documentation

## What is Document360?

Here is an overview and a navigation guide to help you get started with your Document360 experience.

### What is Document360?

**Document360** is a Knowledge management platform that allows you to create and curate a self-service public, private, or mixed access Knowledge base.

When using Document360, you'll interact with several key interfaces:

* #### [My Projects](/help/docs/document360-getting-started#my-projects)
* #### [Knowledge base portal](/help/docs/document360-getting-started#knowledge-base-portal)
* #### [Knowledge base site](/help/docs/document360-getting-started#knowledge-base-site)
* #### [Document360 AI - Eddy AI](/help/docs/ai-features)
* #### [Resources](/help/docs/document360-getting-started#other-resources)

---

## My projects

The **project dashboard** is the first thing you see when logging in to [**Document360**](https://portal.document360.io). The dashboard features all the projects you own, projects associated with a team account, and projects associated with a reader.  
Here, each project will have a visibility tag to indicate the type of project (public, private, or mixed).

![1_Screenshot-My_projects](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_Screenshot-My_projects.png "My-Projects.png")

---

## Knowledge base portal

The **Knowledge base portal** is where you can:

* **Create** Category, Articles, and Templates
* **Manage** files, team accounts, and readers
* **Set up** branding, domain, security, and more for the Knowledge base site

  ![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/1_ScreenShot-What_is_Document360.png)

Here are some elements you'll find on the knowledge base portal:

1. Dashboard
2. Documentation
3. API Documentation
4. Analytics
5. Widgets
6. Drive
7. Settings
8. Search
9. Open Site

> NOTE
>
> Anything created and/or configured on the Knowledge base portal will affect what an end-user or reader would see on the Knowledge base site.

### 1. Dashboard

This page provides an overview of your entire project and serves as a hub for contributors. In the **Overview** section, Team accounts can access information such as created articles, published articles, drafts, and the performance insights of published articles (views, reads, likes, and dislikes). You can use the filter option to select the time frame. You can also view other project-related information including **Recently seen**, **Team accounts**, **Readers**, **Drive capacity**, **Broken links**, **No result searches** and **Last backed up** date.

![3_Screenshot-Knowledge_base_portal_dashboard_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/3_Screenshot-Knowledge_base_portal_dashboard_overview.png)

In the **My contribution** section, the user can view their contributions to the project, article performance metrics, workflow assignments, review reminders, feedback, and broken links.

![Document360 dashboard showing article metrics summary with number of articles created, published or drafted, and an area to display assigned tasks.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/4_Screenshot-Knowledge_base_portal_dashboard_my_contribution.png)

---

### 2. Documentation

The **Documentation** page is where you'll create and maintain the tree-view folder structure of categories that will keep your articles organized. Start a knowledge base by creating a Category and then populate them with Subcategory and Articles.

Drag and drop categories and articles to reorder, hide, rename, and delete them using the More options () menu that appears when you hover your mouse over any item on the Category manager (left navigation pane).

![ocument360 user interface showing navigation menus for managing articles, workflow assignments, starred items, recycle bin, site builder, content tools, and categories/articles hierarchy.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/5_Screenshot-Knowledge_base_portal_documentation_view.png)

#### a. All articles

The **All articles** section allows you to perform bulk operations (publish, hide, move, delete, etc.) on multiple articles at once, saving time compared to performing these actions individually on each article.

![Document360's 'All articles' interface showing a list of articles with editing options like publish, hide, move, delete, review reminder, and live status, as well as features for reusing content through templates, variables, snippets, and a glossary.](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/6_Screenshot-Knowledge_base_portal_documentation_view_all_articles.png)

#### b. Workflow assignments

The Workflow assignments section gives you an idea about what the team is currently working on, and any recently published articles.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7_Screenshot-Knowledge_base_portal_documentation_view_workflow_assignments.png)

Any articles that you are assigned will show up on this page. You can filter articles based on the following workflow statuses: **Draft**, **In review**, or **Published**. If you missed the review due date for any article, it will appear under the **Overdue** category.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/7.1_Screenshot-Knowledge_base_portal_workflow_assignments_page.png)

#### c. Starred

The Starred section contains the articles you marked as favorites. This allows quick access to important articles.

![Document360's 'Starred' interface showing a list of articles with the respective tags and article status, along with an arrow pointing at 'Starred' on the left navigation panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/8_Screenshot-Knowledge_base_portal_documentation_view_starred.png)

#### d. Recycle bin

The Recycle bin section includes a list of articles and categories deleted in the past 30 days. You can restore the deleted categories and articles in the available time frame.

![Document360's 'Recycle bin' interface showing an empty recycle bin, along with an arrow pointing at 'Recycle bin' on the left navigation panel](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/9_Screenshot-Knowledge_base_portal_documentation_view_recycle_bin.png)

#### e. Site builder

You can personalize the look and feel of your knowledge base site from the **Site builder** section.

![](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/10_Screenshot-Knowledge_base_portal_documentation_view_site_builder.png)

You can choose the desired logo and icon for your knowledge base site. From this section, you can also customize the brand colors, font, and styling of the site.

#### f. Content tools

The **Content tools**, as the name implies, contain all the necessary tools to manage your article and project content.

![5_Screenshot-Knowledge_base_portal_Content_tools](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/11_Screenshot-Knowledge_base_portal_documentation_view_content_tools.png)

You can manage the following features from this menu.

* **Content reuse** - Manage all the variables, snippets, templates, and the glossary.
* **Import and Export** - Manage all your project import and export activities from this section. In this section, you can export your content as a PDF or migrate content from other knowledge management tools.
* **Content essentials** - Manage the project-level find and replace, review reminders, tags, and SEO descriptions from the menu.
* **Feedback manager** - View and respond to articles and no search feedback from a unified module.
* **Workflow designer** - Craft your workflow statuses and sequence from this section.

#### g. Categories & Articles (Category manager)

Writing and publishing articles in Document360 is simple: pick your category, create an article(title and slug), add SEO details, and publish to your knowledge base.

When you update or edit an article (Fork), Document360 will create a new Article revision without affecting the live/public workspace.

![12_Screenshot-Knowledge_base_portal_documentation_view_categories_and_articles](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/12_Screenshot-Knowledge_base_portal_documentation_view_categories_and_articles.png)

You can make the necessary changes and republish when you're ready. You can identify the articles easily using the Article status indicators (Yellow dot). Document360 maintains all the workspaces to check the differences between them.

---

### 3. API documentation

The API documentation feature in Document360 provides a complete solution for creating and managing API references. This feature allows you to create high-quality API documentation that helps users understand and consume your APIs effectively.

![13_Screenshot-Knowledge_base_portal_api_documentation](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/13_Screenshot-Knowledge_base_portal_api_documentation.png)

This API module includes the **Try it!** feature, which allows the users to test the API endpoints within the Knowledge base site. You can create dedicated versions of your API documentation. The feature provides an intuitive interface for uploading API references as URLs or JSON/YAML files. After uploading the OpenAPI definition, the interactive API endpoint articles are created in the Knowledge base portal. Now, end users can access the **Try it!** option with the available endpoints, parameters, and responses in the API documentation on the Knowledge base site.

---

### 4. Analytics

Document360 includes an **Analytics** menu with tools to help you understand end-user engagement with your knowledge base.

![12_Screenshot-Knowledge_base_portal_Analytics](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/14_Screenshot-Knowledge_base_portal_analytics.png)

Here is the list of metrics and modules you can track with the Analytics tool:

* **Articles**
* **Eddy AI**
* **Search**
* **Team accounts**
* **Feedback**
* **Links status**
* **Page not found**
* **Ticket deflector**

---

### 5. Widget

The Knowledge base widget (previously known as *Knowledge base assistant* (or) *In-app assistant*) helps readers find their answers without leaving your site or application.

![8_Screenshot-Knowledge_base_portal_Widget](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/15_Screenshot-Knowledge_base_portal_widgets.png)

You can update the following Knowledge base widget settings from this menu.

* **Installation & setup**
* **Custom CSS**
* **Custom JavaScript**
* **URL mapping**

---

### 6. Drive

Centralized and cloud-based storage for Document360 projects that stores and let team members manage all the Knowledge base artifacts (files). If you have already used any other heavyweights, such as Google Drive or OneDrive, getting accustomed to the functions in Document360 Drive should be relatively easy. You can access your Drive by clicking the Drive icon on the left menu.

![7_Screenshot-Knowledge_base_portal_Drive](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/16_Screenshot-Knowledge_base_portal_drive.png)

---

### 7. Settings

You can set and configure all aspects of the project and knowledge base in the **Project settings** such as inviting team members, editing notification settings, configuring domains, setting up article redirects, and more.

![9_Screenshot-Knowledge_base_portal_Settings](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/17_Screenshot-Knowledge_base_portal_settings.png)

The different features are mapped under the following classifications in the Settings menu:

* **Knowledge base portal**
* **Knowledge base site**
* **Users & Security**
* **AI Features**

---

### 8. Search

A dedicated space to search the entire project content is now available on the Knowledge base portal. Perform a combined search across all the workspaces and languages simultaneously. The search bar is available at the top of all the modules and pages in the Knowledge base portal.

![10_Screenshot-Knowledge_base_portal_Search](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/18_Screenshot-Knowledge_base_portal_search.png)

The search engine works similarly to the other search functionalities in the portal. Type in the keyword and narrow the results using filters such as workspace, language, visibility, tags, and date range. You can preview the article/category page, and then preview the article or navigate to the article in the Editor.

![11_Screenshot-Knowledge_base_portal_Search_results](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/19_Screenshot-Knowledge_base_portal_search_bar_dropdown.png)

As the search is performed universally in the project, it covers files. Users can switch between the article and Drive search using the tabs below the search bar.

---

### 9. Open site

The Open site () action is used to navigate to and view the Knowledge base site. Clicking the icon will take you to the Knowledge base site of the workspace that is currently open in your knowledge base portal. If you are in the API documentation workspace, the Open site action will take you to the API documentation home page. If your API documentation site does not have a home page, you will be directed to the first article or category page in the API documentation.

---

## Knowledge base site

The Knowledge base site is the website that end-users will access to read articles and find helpful answers.

Set your knowledge base access settings to public, private, or mixed. **Public** means it is accessible to anyone on the internet, **Private** is restricted by login screens, and **Mixed** combines elements of both public and private attributes.

![14_Screenshot-Knowledge_base_site_overview](https://cdn.document360.io/860f9f88-412e-4570-8222-d5bf2f4b7dd1/Images/Documentation/20_Screenshot-Knowledge_base_site_preview.png)

---


</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/example_api_usage.py
# Language: python

import asyncio
import sys
from pathlib import Path
from d361 import Document360ApiClient, ApiConfig
from d361 import Document360Error, AuthenticationError, ValidationError

def example_basic_usage(()):
    """Demonstrate basic API client usage."""

def example_article_management(()):
    """Demonstrate article creation, update, and deletion."""

def example_error_handling(()):
    """Demonstrate comprehensive error handling."""

def example_token_management(()):
    """Demonstrate token management features."""

def main(()):
    """Run all examples."""


<document index="35">
<source>examples/d361.example.toml</source>
<document_content>
# Configuration for standalone Python package

[project]
# List of packages to initialize
packages = [
    "d361"  # Your package name
]

# Output directory (optional, defaults to current directory)
output_dir = "."

[author]
name = "AUTHOR_NAME"
email = "adam+github@twardoch.com"
github_username = "twardoch"

[package]
description = ""
min_python = "3.10"
license = "MIT"
development_status = "4 - Beta"

[package.options]
include_cli = true        # Include CLI boilerplate
include_logging = true    # Include logging setup
use_pydantic = true      # Use Pydantic for data validation
use_rich = true          # Use Rich for terminal output

[features]
mkdocs = false           # Enable MkDocs documentation
vcs = true              # Initialize Git repository
github_actions = true   # Add GitHub Actions workflows 
</document_content>
</document>

<document index="36">
<source>examples/d361api.example.toml</source>
<document_content>
# Configuration for standalone Python package

[project]
# List of packages to initialize
packages = [
    "d361api"  # Your package name
]

# Output directory (optional, defaults to current directory)
output_dir = "."

[author]
name = "AUTHOR_NAME"
email = "adam+github@twardoch.com"
github_username = "twardoch"

[package]
description = ""
min_python = "3.10"
license = "MIT"
development_status = "4 - Beta"

[package.options]
include_cli = true        # Include CLI boilerplate
include_logging = true    # Include logging setup
use_pydantic = true      # Use Pydantic for data validation
use_rich = true          # Use Rich for terminal output

[features]
mkdocs = false           # Enable MkDocs documentation
vcs = true              # Initialize Git repository
github_actions = true   # Add GitHub Actions workflows 
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/examples/mkdocs_export_examples.py
# Language: python

import asyncio
from pathlib import Path
from typing import Dict, Any
import sys
from d361.mkdocs import MkDocsExporter, ConfigGenerator
from d361.mkdocs.processors import ContentEnhancer, AssetManager
from d361.core.models import Article

def basic_archive_export(()):
    """Basic export from Document360 archive to MkDocs."""

def api_export(()):
    """Export from Document360 API."""

def custom_configuration(()):
    """Generate custom MkDocs configuration."""

def content_enhancement(()):
    """Content enhancement example."""

def asset_processing(()):
    """Asset processing example."""

def hybrid_export(()):
    """Hybrid export using both archive and API."""

def advanced_template_usage(()):
    """Advanced template usage with validation."""

def performance_optimization(()):
    """Performance optimization example."""

def validation_and_quality(()):
    """Validation and quality assurance example."""

def main(()):
    """Main function to run examples."""


<document index="37">
<source>publish.sh</source>
<document_content>
#!/usr/bin/env bash
cd "$(dirname "$0")"
llms . "*.txt"
uvx hatch clean
gitnextver .
uvx hatch build
uvx hatch publish

</document_content>
</document>

<document index="38">
<source>pyproject.toml</source>
<document_content>
# this_file: pyproject.toml
[project]
name = "d361"
dynamic = ["version"]
description = ""
readme = "README.md"
requires-python = ">=3.10"
license = "MIT"
keywords = []
classifiers = [
    "Development Status :: 4 - Beta",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
]

dependencies = [
    "httpx>=0.25.0",        # Unified HTTP client (replaces aiohttp)
    "pydantic>=2.0,<3.0",   # Pydantic v2 for data validation
    "rich>=13.0.0",         # Rich terminal output
    "fire>=0.5.0",          # CLI framework
    "loguru>=0.7.0",        # Structured logging
    "tenacity>=8.2.0",      # Retry mechanisms
    "diskcache>=5.6.0",     # Persistent caching
    "playwright>=1.40.0",   # Web scraping (optional)
    "beautifulsoup4>=4.12.0", # HTML parsing
    "markdownify>=0.11.0",  # HTML to Markdown conversion
    "lxml>=5.3.1",         # XML/HTML parsing
    "aiofiles>=23.0.0",    # Async file operations
    "d361api",             # Auto-generated Document360 API client
]


[project.optional-dependencies]

# Core optional dependencies
scraping = [
    "playwright>=1.40.0",
    "beautifulsoup4>=4.12.0",
]

api = [
    "httpx-auth>=0.16.0",  # Authentication helpers
]

# Development dependencies
dev = [
    "pre-commit>=3.6.0",
    "ruff>=0.1.0",
    "mypy>=1.0.0",
    "pyupgrade>=3.19.0",
    "types-aiofiles",
    "types-beautifulsoup4",
    "bandit>=1.7.0",       # Security scanning
]

# Testing dependencies
test = [
    "pytest>=7.0.0",
    "pytest-cov>=4.0.0",
    "pytest-mock>=3.10.0",
    "pytest-asyncio>=0.21.0",
    "httpx>=0.25.0",       # For testing HTTP clients
    "pytest-httpx>=0.21.0", # Mock HTTP responses
]

# Monitoring dependencies  
monitoring = [
    "opentelemetry-api>=1.20.0",
    "opentelemetry-sdk>=1.20.0",
    "prometheus-client>=0.19.0",
]


all = [
]

[project.scripts]
d361 = "d361.cli.main:main_cli"
d361-offline = "d361.offline.__main__:main"  # Keep legacy entry point

[project.entry-points."d361.converters"]
# Plugin entry points for converters will be registered here
# Example: confluence = "d361_plugins.confluence:ConfluenceConverter"

[project.entry-points."d361.providers"] 
# Plugin entry points for data providers
# Example: custom = "d361_plugins.custom:CustomProvider"



[[project.authors]]
name = "Adam Twardoch"
email = "adam+github@twardoch.com"

[project.urls]
Documentation = "https://github.com/twardoch/d361#readme"
Issues = "https://github.com/twardoch/d361/issues"
Source = "https://github.com/twardoch/d361"


[build-system]
build-backend = "hatchling.build"
requires = [
    "hatchling>=1.21.0", 
    "hatch-vcs>=0.3.0"
]


[tool.coverage.paths]
d361 = ["src/d361", "*/d361/src/d361"]
tests = ["tests", "*/d361/tests"]



[tool.coverage.report]
exclude_lines = [
    "no cov",
    "if __name__ == .__main__.:",
    "if TYPE_CHECKING:",
]

[tool.coverage.run]
source_pkgs = ["d361", "tests"]
branch = true
parallel = true
omit = [
    "src/d361/__about__.py",
]



[tool.hatch.build.hooks.vcs]
version-file = "src/d361/__version__.py"


[tool.hatch.build.targets.wheel]
packages = ["src/d361"]



[tool.hatch.envs.default]
dependencies = [
  "d361", # Install the project itself by its name
  "mypy>=1.0.0",
  # "types-tenacity", # Tenacity should be typed directly
  # "types-python-fire", # Fire should be typed directly
  "types-aiofiles", # Stubs for aiofiles
  "pytest>=7.0.0", # For MyPy to find pytest stubs
  # Ruff is also good to have for other default scripts like lint/fix
  "ruff>=0.1.0"
]
# This ensures MyPy and the project deps (like pydantic) are in the same env.

[[tool.hatch.envs.all.matrix]]
python = ["3.10", "3.11", "3.12"]


[tool.hatch.envs.default.scripts]
test = "pytest {args:tests}"
test-cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=src/d361 --cov=tests {args:tests}"
type-check = "mypy src/d361 tests"
lint = ["ruff check src/d361 tests", "ruff format --respect-gitignore src/d361 tests"]
fix = ["ruff check  --fix --unsafe-fixes src/d361 tests", "ruff format --respect-gitignore src/d361 tests"]



[tool.hatch.envs.lint]
detached = true
dependencies = [
]


[tool.hatch.envs.lint.scripts]
typing = "mypy --install-types --non-interactive {args:src/d361 tests}"
style = ["ruff check {args:.}", "ruff format --respect-gitignore {args:.}"]
fmt = ["ruff format --respect-gitignore {args:.}", "ruff check --fix {args:.}"]
all = ["style", "typing"]


[tool.hatch.envs.test]
dependencies = [
  "pytest>=7.0.0",
  "pytest-cov>=4.0.0",
  "pytest-mock>=3.10.0",
  "pytest-xdist>=3.0.0", # For -n auto parallel execution
]

[tool.hatch.envs.test.scripts]
test = "python -m pytest -n auto -p no:briefcase {args:tests}"
test-cov = "python -m pytest -n auto -p no:briefcase --cov-report=term-missing --cov-config=pyproject.toml --cov=src/d361 --cov=tests {args:tests}"
bench = "python -m pytest -v -p no:briefcase tests/test_benchmark.py --benchmark-only"
bench-save = "python -m pytest -v -p no:briefcase tests/test_benchmark.py --benchmark-only --benchmark-json=benchmark/results.json"

[tool.hatch.version]
source = "vcs"
path = 'src/d361/__version__.py'
pattern = "__version__\\s*=\\s*version\\s*=\\s*['\"](?P<version>[^'\"]+)['\"]"


[tool.hatch.version.raw-options]
version_scheme = "post-release"


[tool.mypy]
python_version = "3.10"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
warn_unreachable = true
plugins = [
  "pydantic.mypy"
]

[[tool.mypy.overrides]]
module = [
    "markdownify",
    "fire",
    "playwright.async_api", # Adding this too as it was missing earlier
    "tenacity" # If it still complains after removing types-tenacity
]
ignore_missing_imports = true

[tool.ruff]
target-version = "py310"
line-length = 88

[tool.ruff.lint]
extend-select = [
    "A",
    "ARG",
    "B",
    "C",
    "DTZ",
    "E",
    "EM",
    "F",
    "FBT",
    "I",
    "ICN",
    "ISC",
    "N",
    "PLC",
    "PLE",
    "PLR",
    "PLW",
    "Q",
    "RUF",
    "S",
    "T",
    "TID",
    "UP",
    "W",
    "YTT",
]
ignore = ["ARG001", "E501", "I001", "RUF001", "PLR2004", "EXE003", "ISC001"]



[tool.ruff.per-file-ignores]
"tests/*" = ["S101"]





[tool.pytest.ini_options]
addopts = "-v --durations=10 -p no:briefcase"
asyncio_mode = "auto"
console_output_style = "progress"
filterwarnings = ["ignore::DeprecationWarning", "ignore::UserWarning"]
log_cli = true
log_cli_level = "INFO"
markers = [
  "benchmark: marks tests as benchmarks (select with '-m benchmark')",
  "unit: mark a test as a unit test",
  "integration: mark a test as an integration test",
  "permutation: tests for permutation functionality",
  "parameter: tests for parameter parsing",
  "prompt: tests for prompt parsing",
]
norecursedirs = [
  ".*",
  "build",
  "dist",
  "venv",
  "__pycache__",
  "*.egg-info",
  "_private",
]

python_classes = ["Test*"]
python_files = ["test_*.py"]
python_functions = ["test_*"]
testpaths = ["tests"]


[tool.pytest-benchmark]
min_rounds = 100
min_time = 0.1
histogram = true
storage = "file"
save-data = true
compare = [
    "min",    # Minimum time
    "max",    # Maximum time
    "mean",   # Mean time
    "stddev", # Standard deviation
    "median", # Median time
    "iqr",    # Inter-quartile range
    "ops",    # Operations per second
    "rounds", # Number of rounds
] 

</document_content>
</document>

<document index="39">
<source>schemas/d361.schema.json</source>
<document_content>
{"$schema": "http://json-schema.org/schema#", "type": "object", "properties": {"Slug": {"type": "string"}, "Workspace": {"type": "string"}, "ResourcePath": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "string"}}, "Categories": {"type": "array", "items": {"type": "object", "properties": {"SubCategories": {"type": "array", "items": {"type": "object", "properties": {"SubCategories": {"type": "array", "items": {"type": "object", "properties": {"SubCategories": {"type": "array", "items": {"type": "object", "properties": {"SubCategories": {"type": "array", "items": {"type": "object", "properties": {"SubCategories": {"type": "array"}, "Articles": {"type": "array", "items": {"type": "object", "properties": {"Id": {"type": "string"}, "Path": {"type": "string"}, "Order": {"type": "integer"}}, "required": ["Id", "Order", "Path"]}}, "Id": {"type": "string"}, "Path": {"type": ["null", "string"]}, "Order": {"type": "integer"}, "CategoryType": {"type": "integer"}, "Icon": {"type": "null"}, "Title": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "object", "properties": {"Code": {"type": "string"}, "Title": {"type": "string"}, "Slug": {"type": "string"}, "ContentType": {"type": "integer"}, "SeoTitle": {"type": "null"}, "Description": {"type": "null"}}, "required": ["Code", "ContentType", "Description", "SeoTitle", "Slug", "Title"]}}}, "required": ["Articles", "CategoryType", "Icon", "Id", "Languages", "Order", "Path", "SubCategories", "Title"]}}, "Articles": {"type": "array", "items": {"type": "object", "properties": {"Id": {"type": "string"}, "Path": {"type": "string"}, "Order": {"type": "integer"}}, "required": ["Id", "Order", "Path"]}}, "Id": {"type": "string"}, "Path": {"type": ["null", "string"]}, "Order": {"type": "integer"}, "CategoryType": {"type": "integer"}, "Icon": {"type": "null"}, "Title": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "object", "properties": {"Code": {"type": "string"}, "Title": {"type": "string"}, "Slug": {"type": "string"}, "ContentType": {"type": "integer"}, "SeoTitle": {"type": "null"}, "Description": {"type": "null"}}, "required": ["Code", "ContentType", "Description", "SeoTitle", "Slug", "Title"]}}}, "required": ["Articles", "CategoryType", "Icon", "Id", "Languages", "Order", "Path", "SubCategories", "Title"]}}, "Articles": {"type": "array", "items": {"type": "object", "properties": {"Id": {"type": "string"}, "Path": {"type": "string"}, "Order": {"type": "integer"}}, "required": ["Id", "Order", "Path"]}}, "Id": {"type": "string"}, "Path": {"type": ["null", "string"]}, "Order": {"type": "integer"}, "CategoryType": {"type": "integer"}, "Icon": {"type": "null"}, "Title": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "object", "properties": {"Code": {"type": "string"}, "Title": {"type": "string"}, "Slug": {"type": "string"}, "ContentType": {"type": "integer"}, "SeoTitle": {"type": ["null", "string"]}, "Description": {"type": "null"}}, "required": ["Code", "ContentType", "Description", "SeoTitle", "Slug", "Title"]}}}, "required": ["Articles", "CategoryType", "Icon", "Id", "Languages", "Order", "Path", "SubCategories", "Title"]}}, "Articles": {"type": "array", "items": {"type": "object", "properties": {"Id": {"type": "string"}, "Path": {"type": "string"}, "Order": {"type": "integer"}}, "required": ["Id", "Order", "Path"]}}, "Id": {"type": "string"}, "Path": {"type": ["null", "string"]}, "Order": {"type": "integer"}, "CategoryType": {"type": "integer"}, "Icon": {"type": ["null", "string"]}, "Title": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "object", "properties": {"Code": {"type": "string"}, "Title": {"type": "string"}, "Slug": {"type": "string"}, "ContentType": {"type": "integer"}, "SeoTitle": {"type": ["null", "string"]}, "Description": {"type": "null"}}, "required": ["Code", "ContentType", "Description", "SeoTitle", "Slug", "Title"]}}}, "required": ["Articles", "CategoryType", "Icon", "Id", "Languages", "Order", "Path", "SubCategories", "Title"]}}, "Articles": {"type": "array", "items": {"type": "object", "properties": {"Id": {"type": "string"}, "Path": {"type": "string"}, "Order": {"type": "integer"}}, "required": ["Id", "Order", "Path"]}}, "Id": {"type": "string"}, "Path": {"type": "null"}, "Order": {"type": "integer"}, "CategoryType": {"type": "integer"}, "Icon": {"type": "null"}, "Title": {"type": "string"}, "Languages": {"type": "array", "items": {"type": "object", "properties": {"Code": {"type": "string"}, "Title": {"type": "string"}, "Slug": {"type": "string"}, "ContentType": {"type": "integer"}, "SeoTitle": {"type": ["null", "string"]}, "Description": {"type": "null"}}, "required": ["Code", "ContentType", "Description", "SeoTitle", "Slug", "Title"]}}}, "required": ["Articles", "CategoryType", "Icon", "Id", "Languages", "Order", "Path", "SubCategories", "Title"]}}}, "required": ["Categories", "Languages", "ResourcePath", "Slug", "Workspace"]}
</document_content>
</document>

<document index="40">
<source>scripts/build.sh</source>
<document_content>
#!/usr/bin/env bash
# this_file: scripts/build.sh
# Build script for d361 project

set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_step() {
    echo -e "${BLUE}==> $1${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠ $1${NC}"
}

print_error() {
    echo -e "${RED}✗ $1${NC}"
}

# Function to check if command exists
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Main build function
main() {
    print_step "Starting build process for d361"
    
    # Check for required tools
    if ! command_exists uv; then
        print_error "uv is required but not installed. Please install uv first."
        exit 1
    fi
    
    if ! command_exists hatch; then
        print_warning "hatch not found, installing..."
        uv pip install hatch
    fi
    
    # Clean previous builds
    print_step "Cleaning previous builds"
    rm -rf dist/ build/ src/*.egg-info/
    print_success "Cleaned previous builds"
    
    # Install/update dependencies
    print_step "Installing dependencies"
    uv pip install --upgrade pip
    uv pip install --upgrade build hatchling hatch-vcs
    print_success "Dependencies installed"
    
    # Run code quality checks
    print_step "Running code quality checks"
    hatch run lint:style || {
        print_error "Code style checks failed"
        exit 1
    }
    print_success "Code quality checks passed"
    
    # Run type checking
    print_step "Running type checking"
    hatch run lint:typing || {
        print_error "Type checking failed"
        exit 1
    }
    print_success "Type checking passed"
    
    # Run tests
    print_step "Running tests"
    hatch run test:test-cov || {
        print_error "Tests failed"
        exit 1
    }
    print_success "All tests passed"
    
    # Build the package
    print_step "Building package"
    uv run python -m build --outdir dist || {
        print_error "Build failed"
        exit 1
    }
    print_success "Package built successfully"
    
    # Verify build artifacts
    print_step "Verifying build artifacts"
    if [ ! -f dist/*.whl ] || [ ! -f dist/*.tar.gz ]; then
        print_error "Build artifacts are missing"
        exit 1
    fi
    print_success "Build artifacts verified"
    
    # Show build results
    print_step "Build results"
    echo "Build artifacts:"
    ls -la dist/
    
    print_success "Build completed successfully!"
}

# Parse command line arguments
case "${1:-}" in
    --help|-h)
        echo "Usage: $0 [OPTIONS]"
        echo "Options:"
        echo "  --help, -h     Show this help message"
        echo "  --clean        Clean build artifacts and exit"
        echo "  --quick        Skip tests and quality checks"
        exit 0
        ;;
    --clean)
        print_step "Cleaning build artifacts"
        rm -rf dist/ build/ src/*.egg-info/
        print_success "Cleaned build artifacts"
        exit 0
        ;;
    --quick)
        print_step "Quick build mode (skipping tests and quality checks)"
        rm -rf dist/ build/ src/*.egg-info/
        uv pip install --upgrade build hatchling hatch-vcs
        uv run python -m build --outdir dist
        print_success "Quick build completed"
        exit 0
        ;;
    "")
        main
        ;;
    *)
        print_error "Unknown option: $1"
        echo "Use --help for usage information"
        exit 1
        ;;
esac
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/scripts/generate_d360_models.py
# Language: python

import sys
from pathlib import Path
import asyncio
from d361.api.generate_models import generate_models_cli
import fire

def main((**kwargs)):
    """Generate Pydantic models from Document360 OpenAPI specification."""


<document index="41">
<source>scripts/install.sh</source>
<document_content>
#!/usr/bin/env bash
# this_file: scripts/install.sh
# Installation script for d361

set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_step() {
    echo -e "${BLUE}==> $1${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠ $1${NC}"
}

print_error() {
    echo -e "${RED}✗ $1${NC}"
}

# Function to check if command exists
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Function to detect OS
detect_os() {
    if [[ "$OSTYPE" == "linux-gnu"* ]]; then
        echo "linux"
    elif [[ "$OSTYPE" == "darwin"* ]]; then
        echo "macos"
    elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then
        echo "windows"
    else
        echo "unknown"
    fi
}

# Function to get latest release version
get_latest_version() {
    local repo="twardoch/d361"
    local api_url="https://api.github.com/repos/$repo/releases/latest"
    
    if command_exists curl; then
        curl -s "$api_url" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//'
    elif command_exists wget; then
        wget -qO- "$api_url" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//'
    else
        print_error "curl or wget is required to fetch latest version"
        return 1
    fi
}

# Function to install via pip
install_via_pip() {
    local version="${1:-}"
    
    print_step "Installing d361 via pip"
    
    if [[ -n "$version" ]]; then
        python -m pip install "d361==$version"
    else
        python -m pip install d361
    fi
    
    print_success "d361 installed via pip"
}

# Function to install via uv
install_via_uv() {
    local version="${1:-}"
    
    print_step "Installing d361 via uv"
    
    if ! command_exists uv; then
        print_step "Installing uv first"
        curl -LsSf https://astral.sh/uv/install.sh | sh
        export PATH="$HOME/.cargo/bin:$PATH"
    fi
    
    if [[ -n "$version" ]]; then
        uv pip install "d361==$version"
    else
        uv pip install d361
    fi
    
    print_success "d361 installed via uv"
}

# Function to download binary
download_binary() {
    local os="$1"
    local version="${2:-latest}"
    local install_dir="${3:-$HOME/.local/bin}"
    
    print_step "Downloading d361 binary for $os"
    
    # Create install directory if it doesn't exist
    mkdir -p "$install_dir"
    
    # Determine binary name based on OS
    local binary_name
    case "$os" in
        "linux")
            binary_name="d361-offline-ubuntu-latest"
            ;;
        "macos")
            binary_name="d361-offline-macos-latest"
            ;;
        "windows")
            binary_name="d361-offline-windows-latest.exe"
            ;;
        *)
            print_error "Unsupported OS: $os"
            return 1
            ;;
    esac
    
    # Construct download URL
    local download_url
    if [[ "$version" == "latest" ]]; then
        download_url="https://github.com/twardoch/d361/releases/latest/download/$binary_name"
    else
        download_url="https://github.com/twardoch/d361/releases/download/v$version/$binary_name"
    fi
    
    # Download binary
    local target_file="$install_dir/d361-offline"
    if [[ "$os" == "windows" ]]; then
        target_file="$install_dir/d361-offline.exe"
    fi
    
    if command_exists curl; then
        curl -L -o "$target_file" "$download_url"
    elif command_exists wget; then
        wget -O "$target_file" "$download_url"
    else
        print_error "curl or wget is required to download binary"
        return 1
    fi
    
    # Make executable (not needed on Windows)
    if [[ "$os" != "windows" ]]; then
        chmod +x "$target_file"
    fi
    
    print_success "Binary downloaded to $target_file"
    
    # Check if install_dir is in PATH
    if [[ ":$PATH:" != *":$install_dir:"* ]]; then
        print_warning "Note: $install_dir is not in your PATH"
        print_warning "Add it to your PATH or move the binary to a directory in your PATH"
        print_warning "To add to PATH, add this line to your shell profile:"
        print_warning "export PATH=\"$install_dir:\$PATH\""
    fi
}

# Function to install playwright browsers
install_playwright_browsers() {
    print_step "Installing Playwright browsers"
    
    if command_exists playwright; then
        playwright install chromium
        print_success "Playwright browsers installed"
    else
        print_warning "Playwright not found, skipping browser installation"
        print_warning "Install d361 first, then run: playwright install chromium"
    fi
}

# Function to test installation
test_installation() {
    print_step "Testing d361 installation"
    
    # Test CLI
    if command_exists d361-offline; then
        if d361-offline --help > /dev/null 2>&1; then
            print_success "d361-offline CLI working"
        else
            print_error "d361-offline CLI not working"
            return 1
        fi
    else
        print_warning "d361-offline CLI not found in PATH"
    fi
    
    # Test Python import
    if command_exists python; then
        if python -c "import d361; print(f'd361 version: {d361.__version__}')" > /dev/null 2>&1; then
            print_success "d361 Python package working"
        else
            print_warning "d361 Python package not working or not installed"
        fi
    fi
}

# Main installation function
main() {
    local method="auto"
    local version=""
    local install_dir="$HOME/.local/bin"
    local install_browsers=false
    local test_install=true
    
    # Parse arguments
    while [[ $# -gt 0 ]]; do
        case $1 in
            --method|-m)
                method="$2"
                shift 2
                ;;
            --version|-v)
                version="$2"
                shift 2
                ;;
            --install-dir|-d)
                install_dir="$2"
                shift 2
                ;;
            --install-browsers|-b)
                install_browsers=true
                shift
                ;;
            --no-test)
                test_install=false
                shift
                ;;
            --help|-h)
                echo "Usage: $0 [OPTIONS]"
                echo "Options:"
                echo "  --method, -m METHOD    Installation method: auto, pip, uv, binary"
                echo "  --version, -v VERSION  Specific version to install"
                echo "  --install-dir, -d DIR  Directory for binary installation (default: ~/.local/bin)"
                echo "  --install-browsers, -b Install Playwright browsers"
                echo "  --no-test             Skip installation testing"
                echo "  --help, -h            Show this help message"
                exit 0
                ;;
            *)
                print_error "Unknown option: $1"
                echo "Use --help for usage information"
                exit 1
                ;;
        esac
    done
    
    print_step "Starting d361 installation"
    
    # Detect OS
    local os
    os=$(detect_os)
    print_step "Detected OS: $os"
    
    # Get latest version if not specified
    if [[ -z "$version" ]]; then
        print_step "Getting latest version"
        version=$(get_latest_version)
        print_step "Latest version: $version"
    fi
    
    # Determine installation method
    case "$method" in
        "auto")
            if command_exists python; then
                if command_exists uv; then
                    method="uv"
                else
                    method="pip"
                fi
            else
                method="binary"
            fi
            print_step "Auto-detected installation method: $method"
            ;;
        "pip"|"uv"|"binary")
            # Method explicitly specified
            ;;
        *)
            print_error "Invalid installation method: $method"
            echo "Valid methods: auto, pip, uv, binary"
            exit 1
            ;;
    esac
    
    # Perform installation
    case "$method" in
        "pip")
            if ! command_exists python; then
                print_error "Python not found. Please install Python first."
                exit 1
            fi
            install_via_pip "$version"
            ;;
        "uv")
            if ! command_exists python; then
                print_error "Python not found. Please install Python first."
                exit 1
            fi
            install_via_uv "$version"
            ;;
        "binary")
            download_binary "$os" "$version" "$install_dir"
            ;;
    esac
    
    # Install Playwright browsers if requested
    if [[ "$install_browsers" == "true" ]]; then
        install_playwright_browsers
    fi
    
    # Test installation
    if [[ "$test_install" == "true" ]]; then
        test_installation
    fi
    
    print_success "d361 installation completed!"
    
    # Show usage information
    echo ""
    echo "Usage:"
    echo "  d361-offline --help"
    echo "  d361-offline all --map-url='https://docs.example.com/sitemap.xml'"
    echo ""
    echo "For more information, see: https://github.com/twardoch/d361"
}

# Parse command line arguments
case "${1:-}" in
    --help|-h)
        echo "Usage: $0 [OPTIONS]"
        echo "Options:"
        echo "  --method, -m METHOD    Installation method: auto, pip, uv, binary"
        echo "  --version, -v VERSION  Specific version to install"
        echo "  --install-dir, -d DIR  Directory for binary installation (default: ~/.local/bin)"
        echo "  --install-browsers, -b Install Playwright browsers"
        echo "  --no-test             Skip installation testing"
        echo "  --help, -h            Show this help message"
        echo ""
        echo "Examples:"
        echo "  $0                                    # Auto-detect method and install latest"
        echo "  $0 --method pip --version 1.0.0      # Install specific version via pip"
        echo "  $0 --method binary --install-browsers # Install binary and browsers"
        echo ""
        echo "Installation methods:"
        echo "  auto   - Auto-detect best method (default)"
        echo "  pip    - Install via pip"
        echo "  uv     - Install via uv (faster)"
        echo "  binary - Download pre-built binary"
        exit 0
        ;;
    "")
        main
        ;;
    *)
        main "$@"
        ;;
esac
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/scripts/json_compress.py
# Language: python

from pathlib import Path
import json
import fire
from typing import Optional

def remove_textual_content((obj)):
    """Remove descriptive text content from the JSON structure."""

def keep_core_endpoints((data)):
    """Keep only core API endpoints related to content structure."""

def collect_referenced_schemas((obj, all_schemas, referenced_schemas)):
    """Recursively collect schema references from the API specification."""

def process_json((
    input_path: str | Path,
    output_path: str | Path,
    text: bool = False,
    core: bool = False,
)) -> None:
    """Process OpenAPI JSON specification file to remove content based on specified options."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/scripts/monitor_d360_api.py
# Language: python

import sys
import asyncio
from pathlib import Path
from d361.api.api_updater import run_one_time_update
from d361.api.api_updater import create_updater
from d361.api.api_updater import create_updater
import fire

class MonitorCLI:
    """CLI interface for Document360 API monitoring."""
    def run((self, output_dir: str = "generated/models", force: bool = False)):
        """Run one-time update check."""
    def monitor((
            self,
            output_dir: str = "generated/models",
            check_interval_seconds: int = 3600,
            auto_update: bool = True
        )):
        """Start continuous monitoring."""
    def status((self)):
        """Show monitoring status."""

def run_update((output_dir: str = "generated/models", force: bool = False)):
    """Run a one-time update check and model generation."""

def start_monitoring((
    output_dir: str = "generated/models",
    check_interval_seconds: int = 3600,
    auto_update: bool = True
)):
    """Start continuous monitoring for API changes."""

def on_update_start((event)):

def on_update_complete((event)):

def on_update_failed((event)):

def show_status(()):
    """Show current monitoring status."""

def main(()):
    """Main CLI interface."""

def run((self, output_dir: str = "generated/models", force: bool = False)):
    """Run one-time update check."""

def monitor((
            self,
            output_dir: str = "generated/models",
            check_interval_seconds: int = 3600,
            auto_update: bool = True
        )):
    """Start continuous monitoring."""

def status((self)):
    """Show monitoring status."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/scripts/process_d360_archive.py
# Language: python

import sys
import asyncio
from pathlib import Path
from d361.archive import ArchiveParser, ArchiveParserConfig
import json
import traceback
from d361.archive import ArchiveParser, SqliteCache, create_archive_schema, ArchiveSchema
from d361.archive import CacheConfig
from d361.archive import SqliteCache, CacheConfig
from d361.archive import create_archive_schema, migrate_archive_schema, get_schema_info
import fire

class ArchiveProcessorCLI:
    """CLI interface for Document360 archive processing."""
    def parse((
            self,
            archive_path: str,
            output_format: str = "json",
            verbose: bool = False
        )):
        """Parse a Document360 archive."""
    def index((
            self,
            archive_path: str,
            db_path: str = None,
            enable_fts: bool = True,
            enable_cache: bool = True
        )):
        """Index archive content in SQLite database."""
    def search((self, query: str, db_path: str = None, limit: int = 10)):
        """Search indexed archive content."""
    def cache((self, action: str, cache_path: str = None)):
        """Manage archive cache (stats, cleanup, clear)."""
    def schema((self, action: str, db_path: str = None)):
        """Manage database schema (create, migrate, info)."""

def parse_archive((
    archive_path: str,
    output_format: str = "json",
    verbose: bool = False
)):
    """Parse a Document360 archive."""

def index_archive((
    archive_path: str,
    db_path: str = None,
    enable_fts: bool = True,
    enable_cache: bool = True
)):
    """Index archive content in SQLite database."""

def search_content((query: str, db_path: str = None, limit: int = 10)):
    """Search indexed archive content."""

def manage_cache((action: str, cache_path: str = None)):
    """Manage archive cache."""

def manage_schema((action: str, db_path: str = None)):
    """Manage database schema."""

def main(()):
    """Main CLI interface."""

def parse((
            self,
            archive_path: str,
            output_format: str = "json",
            verbose: bool = False
        )):
    """Parse a Document360 archive."""

def index((
            self,
            archive_path: str,
            db_path: str = None,
            enable_fts: bool = True,
            enable_cache: bool = True
        )):
    """Index archive content in SQLite database."""

def search((self, query: str, db_path: str = None, limit: int = 10)):
    """Search indexed archive content."""

def cache((self, action: str, cache_path: str = None)):
    """Manage archive cache (stats, cleanup, clear)."""

def schema((self, action: str, db_path: str = None)):
    """Manage database schema (create, migrate, info)."""


<document index="42">
<source>scripts/release.sh</source>
<document_content>
#!/usr/bin/env bash
# this_file: scripts/release.sh
# Release script for d361 project

set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_step() {
    echo -e "${BLUE}==> $1${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠ $1${NC}"
}

print_error() {
    echo -e "${RED}✗ $1${NC}"
}

# Function to check if command exists
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Function to validate semver format
validate_semver() {
    local version="$1"
    if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?(\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?$ ]]; then
        print_error "Invalid semver format: $version"
        print_error "Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]"
        return 1
    fi
    return 0
}

# Function to get current version from git tags
get_current_version() {
    local current_tag
    current_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
    echo "${current_tag#v}"
}

# Function to check if version is newer than current
is_newer_version() {
    local new_version="$1"
    local current_version="$2"
    
    # Use Python to compare versions
    python3 -c "
import sys
from packaging import version
try:
    new_v = version.Version('$new_version')
    current_v = version.Version('$current_version')
    sys.exit(0 if new_v > current_v else 1)
except:
    sys.exit(1)
" 2>/dev/null || {
        print_warning "Could not compare versions, installing packaging..."
        pip install packaging
        python3 -c "
import sys
from packaging import version
new_v = version.Version('$new_version')
current_v = version.Version('$current_version')
sys.exit(0 if new_v > current_v else 1)
"
    }
}

# Function to generate changelog entry
generate_changelog_entry() {
    local version="$1"
    local previous_tag="$2"
    
    print_step "Generating changelog entry for v$version"
    
    echo "## [$version] - $(date +%Y-%m-%d)"
    echo ""
    
    # Get commits since last tag
    if [[ "$previous_tag" != "v0.0.0" ]]; then
        git log --oneline --no-merges "$previous_tag..HEAD" | while IFS= read -r commit; do
            echo "- $commit"
        done
    else
        echo "- Initial release"
    fi
    
    echo ""
}

# Function to update version in pyproject.toml (if needed)
update_version_files() {
    local version="$1"
    
    print_step "Updating version files"
    
    # Since we're using hatch-vcs, version is managed by git tags
    # But we can update other version references if needed
    
    print_success "Version files updated"
}

# Function to run pre-release checks
run_pre_release_checks() {
    print_step "Running pre-release checks"
    
    # Check if git working directory is clean
    if ! git diff-index --quiet HEAD --; then
        print_error "Git working directory is not clean"
        echo "Please commit or stash your changes before releasing"
        return 1
    fi
    
    # Check if we're on the main branch
    local current_branch
    current_branch=$(git rev-parse --abbrev-ref HEAD)
    if [[ "$current_branch" != "main" ]]; then
        print_warning "Not on main branch (current: $current_branch)"
        read -p "Continue anyway? (y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            print_error "Release cancelled"
            return 1
        fi
    fi
    
    # Run tests
    print_step "Running full test suite"
    if ! ./scripts/test.sh; then
        print_error "Tests failed"
        return 1
    fi
    
    # Run build
    print_step "Running build"
    if ! ./scripts/build.sh; then
        print_error "Build failed"
        return 1
    fi
    
    print_success "Pre-release checks passed"
    return 0
}

# Function to create and push tag
create_and_push_tag() {
    local version="$1"
    local tag_name="v$version"
    
    print_step "Creating git tag $tag_name"
    
    # Create annotated tag
    git tag -a "$tag_name" -m "Release $tag_name"
    
    print_step "Pushing tag to origin"
    git push origin "$tag_name"
    
    print_success "Tag $tag_name created and pushed"
}

# Function to create GitHub release
create_github_release() {
    local version="$1"
    local tag_name="v$version"
    
    print_step "Creating GitHub release"
    
    if ! command_exists gh; then
        print_warning "GitHub CLI not found, skipping GitHub release"
        print_warning "You can create the release manually at: https://github.com/$(git config --get remote.origin.url | sed 's/.*github.com[:/]\([^/]*\/[^/]*\)\.git/\1/')/releases/new?tag=$tag_name"
        return 0
    fi
    
    # Generate release notes
    local release_notes
    release_notes=$(generate_changelog_entry "$version" "$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "v0.0.0")")
    
    # Create release with artifacts
    gh release create "$tag_name" dist/* \
        --title "Release $tag_name" \
        --notes "$release_notes" \
        --latest
    
    print_success "GitHub release created"
}

# Function to publish to PyPI
publish_to_pypi() {
    local dry_run="${1:-false}"
    
    if [[ "$dry_run" == "true" ]]; then
        print_step "Publishing to PyPI (dry run)"
        python -m twine upload --repository testpypi dist/* --verbose
    else
        print_step "Publishing to PyPI"
        python -m twine upload dist/* --verbose
    fi
    
    print_success "Published to PyPI"
}

# Main release function
main() {
    local version=""
    local dry_run=false
    local skip_tests=false
    local skip_github=false
    local skip_pypi=false
    
    # Parse arguments
    while [[ $# -gt 0 ]]; do
        case $1 in
            --version|-v)
                version="$2"
                shift 2
                ;;
            --dry-run)
                dry_run=true
                shift
                ;;
            --skip-tests)
                skip_tests=true
                shift
                ;;
            --skip-github)
                skip_github=true
                shift
                ;;
            --skip-pypi)
                skip_pypi=true
                shift
                ;;
            --help|-h)
                echo "Usage: $0 [OPTIONS]"
                echo "Options:"
                echo "  --version, -v VERSION  Version to release (required)"
                echo "  --dry-run             Perform a dry run (test PyPI)"
                echo "  --skip-tests          Skip running tests"
                echo "  --skip-github         Skip GitHub release"
                echo "  --skip-pypi           Skip PyPI publishing"
                echo "  --help, -h            Show this help message"
                exit 0
                ;;
            *)
                print_error "Unknown option: $1"
                echo "Use --help for usage information"
                exit 1
                ;;
        esac
    done
    
    # Check if version is provided
    if [[ -z "$version" ]]; then
        print_error "Version is required"
        echo "Use --version to specify the version to release"
        exit 1
    fi
    
    # Validate version format
    validate_semver "$version" || exit 1
    
    # Check if version is newer than current
    local current_version
    current_version=$(get_current_version)
    if ! is_newer_version "$version" "$current_version"; then
        print_error "Version $version is not newer than current version $current_version"
        exit 1
    fi
    
    print_step "Starting release process for v$version"
    print_step "Current version: $current_version"
    print_step "New version: $version"
    
    # Check for required tools
    if ! command_exists uv; then
        print_error "uv is required but not installed. Please install uv first."
        exit 1
    fi
    
    if ! command_exists git; then
        print_error "git is required but not installed."
        exit 1
    fi
    
    # Install twine if not present
    if ! command_exists twine; then
        print_warning "twine not found, installing..."
        uv pip install twine
    fi
    
    # Run pre-release checks unless skipped
    if [[ "$skip_tests" != "true" ]]; then
        run_pre_release_checks || exit 1
    fi
    
    # Update version files
    update_version_files "$version"
    
    # Create and push tag
    create_and_push_tag "$version"
    
    # Create GitHub release unless skipped
    if [[ "$skip_github" != "true" ]]; then
        create_github_release "$version"
    fi
    
    # Publish to PyPI unless skipped
    if [[ "$skip_pypi" != "true" ]]; then
        publish_to_pypi "$dry_run"
    fi
    
    print_success "Release v$version completed successfully!"
    
    if [[ "$dry_run" == "true" ]]; then
        print_warning "This was a dry run. The package was published to test PyPI."
    fi
    
    echo ""
    echo "Next steps:"
    echo "1. Check the GitHub release: https://github.com/$(git config --get remote.origin.url | sed 's/.*github.com[:/]\([^/]*\/[^/]*\)\.git/\1/')/releases/tag/v$version"
    if [[ "$skip_pypi" != "true" ]]; then
        echo "2. Check PyPI: https://pypi.org/project/d361/$version/"
    fi
    echo "3. Update documentation if needed"
}

# Parse command line arguments
case "${1:-}" in
    --help|-h)
        echo "Usage: $0 [OPTIONS]"
        echo "Options:"
        echo "  --version, -v VERSION  Version to release (required)"
        echo "  --dry-run             Perform a dry run (test PyPI)"
        echo "  --skip-tests          Skip running tests"
        echo "  --skip-github         Skip GitHub release"
        echo "  --skip-pypi           Skip PyPI publishing"
        echo "  --help, -h            Show this help message"
        echo ""
        echo "Examples:"
        echo "  $0 --version 1.0.0"
        echo "  $0 --version 1.0.0 --dry-run"
        echo "  $0 --version 1.0.0 --skip-tests"
        exit 0
        ;;
    "")
        print_error "Version is required"
        echo "Use --version to specify the version to release"
        echo "Use --help for usage information"
        exit 1
        ;;
    *)
        main "$@"
        ;;
esac
</document_content>
</document>

<document index="43">
<source>scripts/test.sh</source>
<document_content>
#!/usr/bin/env bash
# this_file: scripts/test.sh
# Test script for d361 project

set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_step() {
    echo -e "${BLUE}==> $1${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠ $1${NC}"
}

print_error() {
    echo -e "${RED}✗ $1${NC}"
}

# Function to check if command exists
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Function to run linting
run_lint() {
    print_step "Running code formatting and linting"
    
    # Check style
    if ! hatch run lint:style; then
        print_error "Code style check failed"
        return 1
    fi
    
    print_success "Code style check passed"
    return 0
}

# Function to run type checking
run_type_check() {
    print_step "Running type checking"
    
    if ! hatch run lint:typing; then
        print_error "Type checking failed"
        return 1
    fi
    
    print_success "Type checking passed"
    return 0
}

# Function to run unit tests
run_unit_tests() {
    print_step "Running unit tests"
    
    if ! hatch run test:test-cov; then
        print_error "Unit tests failed"
        return 1
    fi
    
    print_success "Unit tests passed"
    return 0
}

# Function to run integration tests
run_integration_tests() {
    print_step "Running integration tests"
    
    if ! hatch run test:test -k "integration"; then
        print_warning "Integration tests failed or not found"
        return 1
    fi
    
    print_success "Integration tests passed"
    return 0
}

# Function to install playwright browsers
install_playwright_browsers() {
    print_step "Installing Playwright browsers"
    
    if ! command_exists playwright; then
        print_warning "Playwright not found, installing..."
        uv pip install playwright
    fi
    
    if ! playwright install chromium; then
        print_error "Failed to install Playwright browsers"
        return 1
    fi
    
    print_success "Playwright browsers installed"
    return 0
}

# Main test function
main() {
    local run_lint=true
    local run_types=true
    local run_unit=true
    local run_integration=false
    local install_browsers=false
    local coverage=true
    
    # Parse arguments
    while [[ $# -gt 0 ]]; do
        case $1 in
            --no-lint)
                run_lint=false
                shift
                ;;
            --no-types)
                run_types=false
                shift
                ;;
            --no-unit)
                run_unit=false
                shift
                ;;
            --integration)
                run_integration=true
                shift
                ;;
            --install-browsers)
                install_browsers=true
                shift
                ;;
            --no-coverage)
                coverage=false
                shift
                ;;
            --help|-h)
                echo "Usage: $0 [OPTIONS]"
                echo "Options:"
                echo "  --no-lint           Skip linting checks"
                echo "  --no-types          Skip type checking"
                echo "  --no-unit           Skip unit tests"
                echo "  --integration       Run integration tests"
                echo "  --install-browsers  Install Playwright browsers"
                echo "  --no-coverage       Skip coverage reporting"
                echo "  --help, -h          Show this help message"
                exit 0
                ;;
            *)
                print_error "Unknown option: $1"
                echo "Use --help for usage information"
                exit 1
                ;;
        esac
    done
    
    print_step "Starting test suite for d361"
    
    # Check for required tools
    if ! command_exists uv; then
        print_error "uv is required but not installed. Please install uv first."
        exit 1
    fi
    
    if ! command_exists hatch; then
        print_warning "hatch not found, installing..."
        uv pip install hatch
    fi
    
    # Install Playwright browsers if requested
    if [[ "$install_browsers" == "true" ]]; then
        install_playwright_browsers || exit 1
    fi
    
    # Run linting if enabled
    if [[ "$run_lint" == "true" ]]; then
        run_lint || exit 1
    fi
    
    # Run type checking if enabled
    if [[ "$run_types" == "true" ]]; then
        run_type_check || exit 1
    fi
    
    # Run unit tests if enabled
    if [[ "$run_unit" == "true" ]]; then
        if [[ "$coverage" == "true" ]]; then
            run_unit_tests || exit 1
        else
            print_step "Running unit tests (no coverage)"
            if ! hatch run test:test; then
                print_error "Unit tests failed"
                exit 1
            fi
            print_success "Unit tests passed"
        fi
    fi
    
    # Run integration tests if enabled
    if [[ "$run_integration" == "true" ]]; then
        run_integration_tests || {
            print_warning "Integration tests failed or not found (continuing)"
        }
    fi
    
    print_success "All tests completed successfully!"
}

# Quick test mode
quick_test() {
    print_step "Quick test mode (unit tests only)"
    
    if ! hatch run test:test; then
        print_error "Quick tests failed"
        exit 1
    fi
    
    print_success "Quick tests passed"
}

# Parse command line arguments
case "${1:-}" in
    --help|-h)
        echo "Usage: $0 [OPTIONS]"
        echo "Options:"
        echo "  --help, -h          Show this help message"
        echo "  --quick             Run only unit tests (no coverage, no lint)"
        echo "  --fix               Fix linting issues"
        echo "  --no-lint           Skip linting checks"
        echo "  --no-types          Skip type checking"
        echo "  --no-unit           Skip unit tests"
        echo "  --integration       Run integration tests"
        echo "  --install-browsers  Install Playwright browsers"
        echo "  --no-coverage       Skip coverage reporting"
        exit 0
        ;;
    --quick)
        quick_test
        ;;
    --fix)
        print_step "Fixing linting issues"
        hatch run lint:fix
        print_success "Linting issues fixed"
        ;;
    "")
        main
        ;;
    *)
        main "$@"
        ;;
esac
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/scripts/text_replacement_utility.py
# Language: python

import re


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/__init__.py
# Language: python

from importlib.metadata import PackageNotFoundError, version
from .core.models import Article, Category, ProjectVersion, PublishStatus, ContentType
from .core.interfaces import DataProvider, ConverterPlugin, ConvertedContent
from .core.transformers import ModelTransformer
from .http import UnifiedHttpClient, create_http_client, HttpResponse, RetryConfig
from .api import (
    Document360ApiClient,
    ApiConfig,
    TokenManager,
    TokenStats,
    RateLimiter,
    BulkOperationManager,
    BulkOperationConfig,
    SmartBulkProcessor,
    OperationType,
    OperationRequest,
    BulkOperationResult,
    ChunkedDownloader,
    DownloadConfig,
    DownloadStatus,
    ChunkStatus,
    DownloadChunk,
    DownloadProgress,
    DownloadState,
    CircuitBreaker,
    CircuitBreakerConfig,
    CircuitBreakerError,
    CircuitState,
    CircuitMetrics,
    CircuitBreakerRegistry,
    circuit_breaker,
    get_circuit_breaker,
    get_registry,
    DataSyncManager,
    SyncConfig,
    SyncStrategy,
    DeduplicationStrategy,
    ContentFingerprint,
    ChangeRecord,
    ChangeType,
    SyncState,
    ApiMetrics,
    MetricsConfig,
    MetricType,
    MetricPoint,
    MetricSeries,
    TimeWindow,
    get_metrics,
    configure_metrics,
    Document360Error,
    ApiError,
    AuthenticationError,
    RateLimitError,
    NotFoundError,
    ValidationError as ApiValidationError,
    ServerError,
    ErrorHandler,
    OpenApiIntegration,
    OpenApiConfig,
    OpenApiSpec,
    ModelGenerator,
    ModelGenerationConfig,
    GenerationResult,
    generate_models_cli,
    ApiUpdater,
    ApiUpdaterConfig,
    UpdateEvent,
    UpdateTrigger,
    UpdateStatus,
    create_updater,
    run_one_time_update,
)
from .archive import (
    ArchiveParser,
    ArchiveParserConfig,
    ArchiveMetadata,
    ParsedArchive,
    SqliteCache,
    CacheConfig,
    CacheEntry,
    CacheStats,
    ArchiveSchema,
    create_archive_schema,
    migrate_archive_schema,
)
from .scraping import (
    Document360Scraper,
    ScrapingConfig,
    ScrapedPage,
    ScrapingSession,
    BrowserType,
    ScrapingMode,
    UserAgent,
    ContentExtractor,
    ExtractionConfig,
    ExtractedContent,
    ContentBlock,
    ContentType as ScrapingContentType,
    ExtractionQuality,
    MarkdownConverter,
    ConversionConfig,
    ConversionResult,
    ConversionStats,
    MarkdownStyle,
    LinkHandling,
    Document360MarkdownConverter,
    ContentDeduplicator,
    DeduplicationConfig,
    DuplicateStatus,
    SimilarityScore,
    SimilarityAlgorithm,
    DuplicateGroup,
)
from .providers import ApiProvider, ArchiveProvider, HybridProvider, MockProvider
from .plugins import PluginManager
from .config import (
    Environment,
    LogLevel as ConfigLogLevel,
    CacheEvictionPolicy,
    SecretProvider,
    SecretType,
    AppConfig,
    ApiConfig as ConfigApiConfig,
    ArchiveConfig as ConfigArchiveConfig,
    ScrapingConfig as ConfigScrapingConfig,
    CacheConfig as ConfigCacheConfig,
    MonitoringConfig,
    SecurityConfig,
    EnvironmentLoader,
    ConfigFileHandler,
    SecretMetadata,
    SecretValue,
    SecretsProvider,
    EnvironmentSecretsProvider,
    LocalFileSecretsProvider,
    HashiCorpVaultProvider,
    SecretsManager,
    PROVIDER_REGISTRY,
    create_secrets_provider,
    ConfigLoader,
    ConfigValidator,
    get_config,
    set_config,
    reset_config,
    get_secrets_manager,
    set_secrets_manager,
    reset_secrets_manager,
    get_config_loader,
    set_config_loader,
    reset_config_loader,
)
from .mkdocs import (
    MkDocsExporter,
    ConfigGenerator,
    NavigationBuilder,
    ThemeOptimizer,
    MarkdownProcessor,
    ContentEnhancer,
    CrossReferenceResolver,
    LinkReference,
    AnchorReference,
    AssetManager,
    AssetReference,
    OptimizationResult,
)
from .utils import (
    LoggingManager,
    LogLevel,
    LogFormat,
    LogContext,
    get_logging_manager,
    get_logger,
    setup_logging,
    setup_development_logging,
    setup_production_logging,
    ServiceLifecycle,
    ServiceContainer,
    injectable,
    get_container,
    resolve,
    register_singleton,
    register_transient,
    register_scoped,
    PerformanceOptimizer,
    async_cache,
    batch_processor,
    performance_monitor,
    get_optimizer,
    ValidationHelper,
    ValidatedBaseModel,
    validate_function_inputs,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/__init__.py
# Language: python

from .client import Document360ApiClient, ApiConfig
from .errors import ErrorHandler
from .token_manager import TokenManager, TokenStats, RateLimiter
from .bulk_operations import (
    BulkOperationManager,
    BulkOperationConfig,
    SmartBulkProcessor,
    OperationType,
    OperationRequest,
    BulkOperationResult,
)
from .chunked_download import (
    ChunkedDownloader,
    DownloadConfig,
    DownloadStatus,
    ChunkStatus,
    DownloadChunk,
    DownloadProgress,
    DownloadState,
)
from .circuit_breaker import (
    CircuitBreaker,
    CircuitBreakerConfig,
    CircuitBreakerError,
    CircuitState,
    CircuitMetrics,
    CircuitBreakerRegistry,
    circuit_breaker,
    get_circuit_breaker,
    get_registry,
)
from .data_sync import (
    DataSyncManager,
    SyncConfig,
    SyncStrategy,
    DeduplicationStrategy,
    ContentFingerprint,
    ChangeRecord,
    ChangeType,
    SyncState,
)
from .metrics import (
    ApiMetrics,
    MetricsConfig,
    MetricType,
    MetricPoint,
    MetricSeries,
    TimeWindow,
    get_metrics,
    configure_metrics,
)
from .errors import (
    Document360Error,
    ApiError,
    AuthenticationError,
    RateLimitError,
    NotFoundError,
    ValidationError,
    ServerError,
)
from .openapi_integration import (
    OpenApiIntegration,
    OpenApiConfig,
    OpenApiSpec,
)
from .generate_models import (
    ModelGenerator,
    ModelGenerationConfig,
    GenerationResult,
    generate_models_cli,
)
from .api_updater import (
    ApiUpdater,
    ApiUpdaterConfig,
    UpdateEvent,
    UpdateTrigger,
    UpdateStatus,
    create_updater,
    run_one_time_update,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/api_updater.py
# Language: python

import asyncio
from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Dict, List, Optional, Callable, Awaitable
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from pydantic import BaseModel, Field
from .openapi_integration import OpenApiIntegration, OpenApiConfig, OpenApiSpec
from .generate_models import ModelGenerator, ModelGenerationConfig, GenerationResult

class UpdateTrigger(s, t, r, ,,  , E, n, u, m):
    """Types of update triggers."""

class UpdateStatus(s, t, r, ,,  , E, n, u, m):
    """Status of update operations."""

class UpdateEvent:
    """Record of an update event."""

class ApiUpdaterConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for the API updater."""

class ApiUpdater:
    """ Automated API client updater for Document360 OpenAPI specifications...."""
    def __init__((
        self,
        config: Optional[ApiUpdaterConfig] = None,
        callbacks: Optional[Dict[str, Callable]] = None
    )):
        """ Initialize the API updater...."""
    def start_monitoring((self)) -> None:
        """Start background monitoring for OpenAPI spec changes."""
    def stop_monitoring((self)) -> None:
        """Stop background monitoring."""
    def _monitoring_loop((self)) -> None:
        """Main monitoring loop."""
    def check_for_updates((self)) -> bool:
        """ Check if the OpenAPI specification has updates...."""
    def update_api_client((
        self,
        trigger: UpdateTrigger = UpdateTrigger.MANUAL,
        force: bool = False
    )) -> UpdateEvent:
        """ Update the API client when changes are detected...."""
    def _get_spec_changes((self, old_hash: str, new_spec: OpenApiSpec)) -> List[str]:
        """Get a list of changes between old and new specs."""
    def _execute_callback((self, callback_name: str, event: UpdateEvent)) -> None:
        """Execute a configured callback if available."""
    def _add_to_history((self, event: UpdateEvent)) -> None:
        """Add an update event to history."""
    def get_update_history((self, limit: Optional[int] = None)) -> List[UpdateEvent]:
        """ Get update history...."""
    def get_status((self)) -> Dict[str, Any]:
        """Get current status of the API updater."""
    def close((self)) -> None:
        """Close the updater and cleanup resources."""

def __init__((
        self,
        config: Optional[ApiUpdaterConfig] = None,
        callbacks: Optional[Dict[str, Callable]] = None
    )):
    """ Initialize the API updater...."""

def start_monitoring((self)) -> None:
    """Start background monitoring for OpenAPI spec changes."""

def stop_monitoring((self)) -> None:
    """Stop background monitoring."""

def _monitoring_loop((self)) -> None:
    """Main monitoring loop."""

def check_for_updates((self)) -> bool:
    """ Check if the OpenAPI specification has updates...."""

def update_api_client((
        self,
        trigger: UpdateTrigger = UpdateTrigger.MANUAL,
        force: bool = False
    )) -> UpdateEvent:
    """ Update the API client when changes are detected...."""

def _get_spec_changes((self, old_hash: str, new_spec: OpenApiSpec)) -> List[str]:
    """Get a list of changes between old and new specs."""

def _execute_callback((self, callback_name: str, event: UpdateEvent)) -> None:
    """Execute a configured callback if available."""

def _add_to_history((self, event: UpdateEvent)) -> None:
    """Add an update event to history."""

def get_update_history((self, limit: Optional[int] = None)) -> List[UpdateEvent]:
    """ Get update history...."""

def get_status((self)) -> Dict[str, Any]:
    """Get current status of the API updater."""

def close((self)) -> None:
    """Close the updater and cleanup resources."""

def create_updater((
    output_dir: Optional[str] = None,
    check_interval_seconds: int = 3600,
    auto_update: bool = False,
    callbacks: Optional[Dict[str, Callable]] = None
)) -> ApiUpdater:
    """ Create and configure an API updater with common settings...."""

def run_one_time_update((output_dir: Optional[str] = None, force: bool = False)) -> UpdateEvent:
    """ Run a one-time update check and model generation...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/bulk_operations.py
# Language: python

import asyncio
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Callable, Dict, List, Optional, Union
from datetime import datetime
from loguru import logger
from pydantic import BaseModel, Field
from .client import Document360ApiClient
from .errors import Document360Error, ErrorHandler

class OperationType(s, t, r, ,,  , E, n, u, m):
    """Types of bulk operations."""

class OperationRequest:
    """ Request for a single operation in a bulk operation...."""
    def __post_init__((self)):
        """Validate operation request."""

class BulkOperationResult:
    """ Results of a bulk operation...."""
    def mark_complete((self)) -> None:
        """Mark operation as complete and calculate duration."""

class BulkOperationConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for bulk operations."""

class BulkOperationManager:
    """ Manager for handling parallel bulk operations with the Document360 API...."""
    def __init__((self, client: Document360ApiClient, config: Optional[BulkOperationConfig] = None)):
        """ Initialize bulk operation manager...."""
    def execute_bulk_create((
        self,
        articles_data: List[Dict[str, Any]],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
        """ Execute bulk article creation...."""
    def execute_bulk_update((
        self,
        updates: List[tuple[str, Dict[str, Any]]],  # (article_id, update_data)
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
        """ Execute bulk article updates...."""
    def execute_bulk_delete((
        self,
        article_ids: List[str],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
        """ Execute bulk article deletion...."""
    def execute_bulk_fetch((
        self,
        article_ids: List[str],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
        """ Execute bulk article fetching...."""
    def _execute_bulk_operations((
        self,
        requests: List[OperationRequest],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
        """ Execute a list of operation requests...."""
    def _execute_single_operation((self, request: OperationRequest)) -> Optional[Dict[str, Any]]:
        """ Execute a single operation with semaphore control...."""
    def _perform_operation((self, request: OperationRequest)) -> Optional[Dict[str, Any]]:
        """ Perform a single API operation...."""
    def _retry_failed_operations((self, failed_requests: List[OperationRequest])) -> BulkOperationResult:
        """ Retry failed operations...."""

class SmartBulkProcessor:
    """ Smart bulk processor with automatic error recovery and optimization...."""
    def __init__((self, client: Document360ApiClient)):
        """Initialize smart bulk processor."""
    def process_articles_intelligently((
        self,
        operation: str,
        articles_data: List[Union[Dict[str, Any], tuple[str, Dict[str, Any]], str]],
        progress_callback: Optional[Callable[[int, int], None]] = None
    )) -> BulkOperationResult:
        """ Process articles with intelligent batch sizing and error recovery...."""
    def _adapt_batch_size((self, success_rate: float, response_time: float)) -> None:
        """ Adapt batch size based on performance metrics...."""

def __post_init__((self)):
    """Validate operation request."""

def success_rate((self)) -> float:
    """Calculate success rate (0-1)."""

def is_complete((self)) -> bool:
    """Check if operation is complete."""

def mark_complete((self)) -> None:
    """Mark operation as complete and calculate duration."""

def __init__((self, client: Document360ApiClient, config: Optional[BulkOperationConfig] = None)):
    """ Initialize bulk operation manager...."""

def execute_bulk_create((
        self,
        articles_data: List[Dict[str, Any]],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
    """ Execute bulk article creation...."""

def execute_bulk_update((
        self,
        updates: List[tuple[str, Dict[str, Any]]],  # (article_id, update_data)
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
    """ Execute bulk article updates...."""

def execute_bulk_delete((
        self,
        article_ids: List[str],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
    """ Execute bulk article deletion...."""

def execute_bulk_fetch((
        self,
        article_ids: List[str],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
    """ Execute bulk article fetching...."""

def _execute_bulk_operations((
        self,
        requests: List[OperationRequest],
        chunk_size: Optional[int] = None
    )) -> BulkOperationResult:
    """ Execute a list of operation requests...."""

def _execute_single_operation((self, request: OperationRequest)) -> Optional[Dict[str, Any]]:
    """ Execute a single operation with semaphore control...."""

def _perform_operation((self, request: OperationRequest)) -> Optional[Dict[str, Any]]:
    """ Perform a single API operation...."""

def _retry_failed_operations((self, failed_requests: List[OperationRequest])) -> BulkOperationResult:
    """ Retry failed operations...."""

def __init__((self, client: Document360ApiClient)):
    """Initialize smart bulk processor."""

def process_articles_intelligently((
        self,
        operation: str,
        articles_data: List[Union[Dict[str, Any], tuple[str, Dict[str, Any]], str]],
        progress_callback: Optional[Callable[[int, int], None]] = None
    )) -> BulkOperationResult:
    """ Process articles with intelligent batch sizing and error recovery...."""

def _adapt_batch_size((self, success_rate: float, response_time: float)) -> None:
    """ Adapt batch size based on performance metrics...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/chunked_download.py
# Language: python

import asyncio
import hashlib
import json
import os
import time
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from pathlib import Path
from typing import Any, AsyncGenerator, Callable, Dict, List, Optional, Union
from loguru import logger
from pydantic import BaseModel, Field, validator
from .client import Document360ApiClient
from .errors import Document360Error

class DownloadStatus(s, t, r, ,,  , E, n, u, m):
    """Download status enumeration."""

class ChunkStatus(s, t, r, ,,  , E, n, u, m):
    """Individual chunk status."""

class DownloadChunk:
    """ Represents a single download chunk...."""

class DownloadProgress:
    """ Download progress tracking...."""
    def update_progress((self, items_downloaded: int, chunk_completed: bool = False)) -> None:
        """Update progress metrics."""

class DownloadConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for chunked downloads."""

class DownloadState:
    """ Persistent download state for resumability...."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary for serialization."""

class ChunkedDownloader:
    """ Chunked downloader for large Document360 datasets...."""
    def __init__((
        self,
        client: Document360ApiClient,
        config: Optional[DownloadConfig] = None
    )):
        """ Initialize chunked downloader...."""
    def download_all_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        output_file: Optional[Path] = None
    )) -> DownloadState:
        """ Download all articles with chunked processing...."""
    def _create_chunks((self, total_items: int, chunk_size: int)) -> List[DownloadChunk]:
        """Create download chunks."""
    def _execute_chunked_download((self, download_state: DownloadState)) -> None:
        """Execute chunked download with concurrency control."""
    def _download_chunk((
        self,
        semaphore: asyncio.Semaphore,
        chunk: DownloadChunk,
        download_state: DownloadState,
        progress: DownloadProgress
    )) -> None:
        """Download a single chunk."""
    def _resume_download((self, download_state: DownloadState)) -> DownloadState:
        """Resume an existing download."""
    def _save_download_state((self, download_state: DownloadState)) -> None:
        """Save download state to disk."""
    def _load_download_state((self, download_id: str)) -> Optional[DownloadState]:
        """Load download state from disk."""
    def _save_download_results((self, download_state: DownloadState, output_file: Path)) -> None:
        """Save download results to file."""
    def list_downloads((self)) -> List[DownloadState]:
        """List all saved downloads."""
    def cancel_download((self, download_id: str)) -> bool:
        """Cancel an active download."""
    def cleanup_downloads((self, older_than_days: int = 30)) -> int:
        """Clean up old download state files."""

def is_complete((self)) -> bool:
    """Check if chunk is complete."""

def can_retry((self)) -> bool:
    """Check if chunk can be retried."""

def completion_percentage((self)) -> float:
    """Calculate completion percentage (0-100)."""

def chunk_completion_percentage((self)) -> float:
    """Calculate chunk completion percentage (0-100)."""

def elapsed_time((self)) -> float:
    """Get elapsed time in seconds."""

def estimated_time_remaining((self)) -> Optional[float]:
    """Estimate time remaining in seconds."""

def update_progress((self, items_downloaded: int, chunk_completed: bool = False)) -> None:
    """Update progress metrics."""

def validate_output_directory((cls, v)):
    """Validate output directory."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary for serialization."""

def from_dict((cls, data: Dict[str, Any])) -> DownloadState:
    """Create from dictionary."""

def __init__((
        self,
        client: Document360ApiClient,
        config: Optional[DownloadConfig] = None
    )):
    """ Initialize chunked downloader...."""

def download_all_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        output_file: Optional[Path] = None
    )) -> DownloadState:
    """ Download all articles with chunked processing...."""

def _create_chunks((self, total_items: int, chunk_size: int)) -> List[DownloadChunk]:
    """Create download chunks."""

def _execute_chunked_download((self, download_state: DownloadState)) -> None:
    """Execute chunked download with concurrency control."""

def _download_chunk((
        self,
        semaphore: asyncio.Semaphore,
        chunk: DownloadChunk,
        download_state: DownloadState,
        progress: DownloadProgress
    )) -> None:
    """Download a single chunk."""

def _resume_download((self, download_state: DownloadState)) -> DownloadState:
    """Resume an existing download."""

def _save_download_state((self, download_state: DownloadState)) -> None:
    """Save download state to disk."""

def _load_download_state((self, download_id: str)) -> Optional[DownloadState]:
    """Load download state from disk."""

def _save_download_results((self, download_state: DownloadState, output_file: Path)) -> None:
    """Save download results to file."""

def list_downloads((self)) -> List[DownloadState]:
    """List all saved downloads."""

def cancel_download((self, download_id: str)) -> bool:
    """Cancel an active download."""

def cleanup_downloads((self, older_than_days: int = 30)) -> int:
    """Clean up old download state files."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/circuit_breaker.py
# Language: python

import asyncio
import time
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from enum import Enum
from typing import Any, Callable, Dict, List, Optional, Union
from functools import wraps
from loguru import logger
from pydantic import BaseModel, Field
from .errors import Document360Error, ErrorSeverity, ErrorCategory

class CircuitState(s, t, r, ,,  , E, n, u, m):
    """Circuit breaker states."""

class CircuitMetrics:
    """ Circuit breaker metrics and statistics...."""
    def update_request((self, success: bool, response_time: float)) -> None:
        """Update metrics with request result."""
    def update_state_change((self, new_state: CircuitState)) -> None:
        """Update metrics for state change."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert metrics to dictionary."""

class CircuitBreakerConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for circuit breaker behavior."""

class Config:

class CircuitBreakerError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Exception raised when circuit breaker is open."""
    def __init__((self, message: str, circuit_state: CircuitState, metrics: CircuitMetrics)):

class CircuitBreaker:
    """ Circuit breaker implementation for API resilience...."""
    def __init__((self, name: str, config: Optional[CircuitBreakerConfig] = None)):
        """ Initialize circuit breaker...."""
    def call((self, func: Callable[..., Any], *args, **kwargs)) -> Any:
        """ Execute a function call through the circuit breaker...."""
    def _check_state((self)) -> None:
        """Check and potentially update circuit breaker state."""
    def _update_state((self, request_success: bool)) -> None:
        """Update circuit breaker state based on request result."""
    def _is_slow_call_rate_exceeded((self)) -> bool:
        """Check if slow call rate threshold is exceeded."""
    def _transition_to_open((self)) -> None:
        """Transition circuit breaker to OPEN state."""
    def _transition_to_half_open((self)) -> None:
        """Transition circuit breaker to HALF_OPEN state."""
    def _transition_to_closed((self)) -> None:
        """Transition circuit breaker to CLOSED state."""
    def force_open((self)) -> None:
        """Manually force circuit breaker to OPEN state."""
    def force_close((self)) -> None:
        """Manually force circuit breaker to CLOSED state."""
    def reset_metrics((self)) -> None:
        """Reset all metrics."""

class CircuitBreakerRegistry:
    """ Registry for managing multiple circuit breakers...."""
    def __init__((self)):
        """Initialize circuit breaker registry."""
    def get_or_create((self, name: str, config: Optional[CircuitBreakerConfig] = None)) -> CircuitBreaker:
        """Get existing circuit breaker or create new one."""
    def get_breaker((self, name: str)) -> Optional[CircuitBreaker]:
        """Get circuit breaker by name."""
    def list_breakers((self)) -> List[str]:
        """List all circuit breaker names."""
    def get_health_report((self)) -> Dict[str, Any]:
        """Get comprehensive health report for all circuit breakers."""
    def force_open_all((self)) -> None:
        """Force all circuit breakers to OPEN state."""
    def force_close_all((self)) -> None:
        """Force all circuit breakers to CLOSED state."""
    def reset_all_metrics((self)) -> None:
        """Reset metrics for all circuit breakers."""

def update_request((self, success: bool, response_time: float)) -> None:
    """Update metrics with request result."""

def update_state_change((self, new_state: CircuitState)) -> None:
    """Update metrics for state change."""

def success_rate((self)) -> float:
    """Calculate success rate (0-1)."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert metrics to dictionary."""

def __init__((self, message: str, circuit_state: CircuitState, metrics: CircuitMetrics)):

def __init__((self, name: str, config: Optional[CircuitBreakerConfig] = None)):
    """ Initialize circuit breaker...."""

def call((self, func: Callable[..., Any], *args, **kwargs)) -> Any:
    """ Execute a function call through the circuit breaker...."""

def _check_state((self)) -> None:
    """Check and potentially update circuit breaker state."""

def _update_state((self, request_success: bool)) -> None:
    """Update circuit breaker state based on request result."""

def _is_slow_call_rate_exceeded((self)) -> bool:
    """Check if slow call rate threshold is exceeded."""

def _transition_to_open((self)) -> None:
    """Transition circuit breaker to OPEN state."""

def _transition_to_half_open((self)) -> None:
    """Transition circuit breaker to HALF_OPEN state."""

def _transition_to_closed((self)) -> None:
    """Transition circuit breaker to CLOSED state."""

def force_open((self)) -> None:
    """Manually force circuit breaker to OPEN state."""

def force_close((self)) -> None:
    """Manually force circuit breaker to CLOSED state."""

def reset_metrics((self)) -> None:
    """Reset all metrics."""

def is_available((self)) -> bool:
    """Check if circuit breaker allows requests."""

def health_status((self)) -> Dict[str, Any]:
    """Get comprehensive health status."""

def circuit_breaker((
    name: str,
    config: Optional[CircuitBreakerConfig] = None,
    breaker_instance: Optional[CircuitBreaker] = None
)):
    """ Decorator for applying circuit breaker pattern to functions...."""

def decorator((func)):

def wrapper((*args, **kwargs)):

def __init__((self)):
    """Initialize circuit breaker registry."""

def get_or_create((self, name: str, config: Optional[CircuitBreakerConfig] = None)) -> CircuitBreaker:
    """Get existing circuit breaker or create new one."""

def get_breaker((self, name: str)) -> Optional[CircuitBreaker]:
    """Get circuit breaker by name."""

def list_breakers((self)) -> List[str]:
    """List all circuit breaker names."""

def get_health_report((self)) -> Dict[str, Any]:
    """Get comprehensive health report for all circuit breakers."""

def force_open_all((self)) -> None:
    """Force all circuit breakers to OPEN state."""

def force_close_all((self)) -> None:
    """Force all circuit breakers to CLOSED state."""

def reset_all_metrics((self)) -> None:
    """Reset metrics for all circuit breakers."""

def get_circuit_breaker((name: str, config: Optional[CircuitBreakerConfig] = None)) -> CircuitBreaker:
    """Get or create a circuit breaker from global registry."""

def get_registry(()) -> CircuitBreakerRegistry:
    """Get the global circuit breaker registry."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/client.py
# Language: python

import time
from datetime import datetime
from typing import Any, Dict, List, Optional, Union
from loguru import logger
from pydantic import BaseModel, Field, HttpUrl, validator
from .token_manager import TokenManager, TokenStats
from .errors import Document360Error, ErrorHandler, AuthenticationError, ValidationError
from d361api import ApiClient as D361ApiClient, Configuration, ArticlesApi, CategoriesApi, ProjectVersionsApi
from d361api.exceptions import ApiException as D361ApiException

class ApiConfig(B, a, s, e, M, o, d, e, l):
    """ Configuration model for Document360 API client...."""

class Document360ApiClient:
    """ Enterprise-grade Document360 API client...."""
    def __init__((self, config: ApiConfig)):
        """ Initialize the Document360 API client...."""
    def _setup_d361api_clients((self)):
        """Setup d361api clients for API operations."""
    def _execute_with_d361api((self, operation_name: str, api_call)):
        """Execute an API call using d361api with proper token management and error handling."""
    def get_article((self, article_id: str)) -> Dict[str, Any]:
        """ Get a single article by ID...."""
    def list_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        limit: int = 100,
        offset: int = 0
    )) -> Dict[str, Any]:
        """ List articles with optional filtering...."""
    def create_article((self, article_data: Dict[str, Any])) -> Dict[str, Any]:
        """ Create a new article...."""
    def update_article((self, article_id: str, article_data: Dict[str, Any])) -> Dict[str, Any]:
        """ Update an existing article...."""
    def delete_article((self, article_id: str)) -> bool:
        """ Delete an article...."""
    def get_categories((self, project_version_id: Optional[str] = None)) -> Dict[str, Any]:
        """ Get categories list...."""
    def get_project_versions((self)) -> Dict[str, Any]:
        """ Get project versions list...."""
    def health_check((self)) -> Dict[str, Any]:
        """ Perform a health check of the API client and tokens...."""
    def close((self)) -> None:
        """Clean up resources and close connections."""
    def __aenter__((self)):
        """Async context manager entry."""
    def __aexit__((self, exc_type, exc_val, exc_tb)):
        """Async context manager exit."""
    def reset_statistics((self)) -> None:
        """Reset client statistics."""
    def stream_all_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        page_size: int = 100,
        max_articles: Optional[int] = None
    )):
        """ Stream all articles using an asynchronous generator for memory efficiency...."""
    def stream_articles_batch((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        batch_size: int = 100,
        max_articles: Optional[int] = None
    )):
        """ Stream articles in batches for efficient batch processing...."""

def validate_tokens((cls, v)):
    """Validate that all tokens are non-empty strings."""

def __init__((self, config: ApiConfig)):
    """ Initialize the Document360 API client...."""

def _setup_d361api_clients((self)):
    """Setup d361api clients for API operations."""

def _execute_with_d361api((self, operation_name: str, api_call)):
    """Execute an API call using d361api with proper token management and error handling."""

def get_article((self, article_id: str)) -> Dict[str, Any]:
    """ Get a single article by ID...."""

def list_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        limit: int = 100,
        offset: int = 0
    )) -> Dict[str, Any]:
    """ List articles with optional filtering...."""

def create_article((self, article_data: Dict[str, Any])) -> Dict[str, Any]:
    """ Create a new article...."""

def update_article((self, article_id: str, article_data: Dict[str, Any])) -> Dict[str, Any]:
    """ Update an existing article...."""

def delete_article((self, article_id: str)) -> bool:
    """ Delete an article...."""

def get_categories((self, project_version_id: Optional[str] = None)) -> Dict[str, Any]:
    """ Get categories list...."""

def get_project_versions((self)) -> Dict[str, Any]:
    """ Get project versions list...."""

def health_check((self)) -> Dict[str, Any]:
    """ Perform a health check of the API client and tokens...."""

def close((self)) -> None:
    """Clean up resources and close connections."""

def __aenter__((self)):
    """Async context manager entry."""

def __aexit__((self, exc_type, exc_val, exc_tb)):
    """Async context manager exit."""

def statistics((self)) -> Dict[str, Any]:
    """Get comprehensive client statistics."""

def reset_statistics((self)) -> None:
    """Reset client statistics."""

def stream_all_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        page_size: int = 100,
        max_articles: Optional[int] = None
    )):
    """ Stream all articles using an asynchronous generator for memory efficiency...."""

def stream_articles_batch((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        batch_size: int = 100,
        max_articles: Optional[int] = None
    )):
    """ Stream articles in batches for efficient batch processing...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/data_sync.py
# Language: python

import asyncio
import hashlib
import json
import time
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from enum import Enum
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
from collections import defaultdict
from loguru import logger
from pydantic import BaseModel, Field
from ..core.models import Article, Category, ProjectVersion, ContentType
from .errors import Document360Error, ErrorSeverity, ErrorCategory

class SyncStrategy(s, t, r, ,,  , E, n, u, m):
    """Data synchronization strategies."""

class ChangeType(s, t, r, ,,  , E, n, u, m):
    """Types of changes detected."""

class DeduplicationStrategy(s, t, r, ,,  , E, n, u, m):
    """Content deduplication strategies."""

class ContentFingerprint:
    """ Content fingerprint for deduplication and change detection...."""
    def similarity_score((self, other: ContentFingerprint)) -> float:
        """Calculate similarity score with another fingerprint (0-1)."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary."""

class ChangeRecord:
    """ Record of detected change...."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary."""

class SyncConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for data synchronization."""

class SyncState(B, a, s, e, M, o, d, e, l):
    """ Persistent state for incremental synchronization...."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary for serialization."""

class DataSyncManager:
    """ Comprehensive data synchronization and deduplication manager...."""
    def __init__((
        self,
        api_client,  # Document360ApiClient
        config: Optional[SyncConfig] = None,
        state_dir: Optional[Path] = None
    )):
        """ Initialize data sync manager...."""
    def add_change_callback((self, callback: Callable[[ChangeRecord], None])) -> None:
        """Add callback for change notifications."""
    def sync_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        sync_id: Optional[str] = None
    )) -> SyncState:
        """ Synchronize articles with deduplication and incremental sync...."""
    def _initialize_sync((
        self,
        sync_id: Optional[str],
        operation_type: str,
        operation_params: Dict[str, Any]
    )) -> SyncState:
        """Initialize or resume sync operation."""
    def _fetch_articles((
        self,
        category_id: Optional[str],
        project_version_id: Optional[str]
    )) -> List[Article]:
        """Fetch articles from API."""
    def _process_articles_batch((
        self,
        articles: List[Article],
        sync_state: SyncState,
        previous_fingerprints: Dict[str, ContentFingerprint]
    )) -> None:
        """Process articles in batches."""
    def _process_single_article((
        self,
        article: Article,
        sync_state: SyncState,
        previous_fingerprints: Dict[str, ContentFingerprint]
    )) -> None:
        """Process a single article."""
    def _detect_field_changes((
        self,
        old_fp: ContentFingerprint,
        new_fp: ContentFingerprint
    )) -> Dict[str, Any]:
        """Detect which fields changed between fingerprints."""
    def _deduplicate_articles((self, sync_state: SyncState)) -> None:
        """Run deduplication on processed articles."""
    def _load_previous_fingerprints((self)) -> Dict[str, ContentFingerprint]:
        """Load fingerprints from previous sync."""
    def _save_sync_state((self, sync_state: SyncState)) -> None:
        """Save sync state to disk."""
    def _load_sync_state((self, sync_id: str)) -> Optional[SyncState]:
        """Load sync state from disk."""
    def list_syncs((self)) -> List[Dict[str, Any]]:
        """List all sync operations."""
    def get_sync_report((self, sync_id: str)) -> Optional[Dict[str, Any]]:
        """Get detailed report for a sync operation."""
    def cleanup_old_states((self)) -> int:
        """Clean up old sync states based on retention policy."""

def from_article((cls, article: Article)) -> ContentFingerprint:
    """Create fingerprint from article."""

def similarity_score((self, other: ContentFingerprint)) -> float:
    """Calculate similarity score with another fingerprint (0-1)."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary."""

def completion_percentage((self)) -> float:
    """Calculate completion percentage."""

def success_rate((self)) -> float:
    """Calculate success rate."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary for serialization."""

def __init__((
        self,
        api_client,  # Document360ApiClient
        config: Optional[SyncConfig] = None,
        state_dir: Optional[Path] = None
    )):
    """ Initialize data sync manager...."""

def add_change_callback((self, callback: Callable[[ChangeRecord], None])) -> None:
    """Add callback for change notifications."""

def sync_articles((
        self,
        category_id: Optional[str] = None,
        project_version_id: Optional[str] = None,
        sync_id: Optional[str] = None
    )) -> SyncState:
    """ Synchronize articles with deduplication and incremental sync...."""

def _initialize_sync((
        self,
        sync_id: Optional[str],
        operation_type: str,
        operation_params: Dict[str, Any]
    )) -> SyncState:
    """Initialize or resume sync operation."""

def _fetch_articles((
        self,
        category_id: Optional[str],
        project_version_id: Optional[str]
    )) -> List[Article]:
    """Fetch articles from API."""

def _process_articles_batch((
        self,
        articles: List[Article],
        sync_state: SyncState,
        previous_fingerprints: Dict[str, ContentFingerprint]
    )) -> None:
    """Process articles in batches."""

def process_article((article: Article)) -> None:

def _process_single_article((
        self,
        article: Article,
        sync_state: SyncState,
        previous_fingerprints: Dict[str, ContentFingerprint]
    )) -> None:
    """Process a single article."""

def _detect_field_changes((
        self,
        old_fp: ContentFingerprint,
        new_fp: ContentFingerprint
    )) -> Dict[str, Any]:
    """Detect which fields changed between fingerprints."""

def _deduplicate_articles((self, sync_state: SyncState)) -> None:
    """Run deduplication on processed articles."""

def _load_previous_fingerprints((self)) -> Dict[str, ContentFingerprint]:
    """Load fingerprints from previous sync."""

def _save_sync_state((self, sync_state: SyncState)) -> None:
    """Save sync state to disk."""

def _load_sync_state((self, sync_id: str)) -> Optional[SyncState]:
    """Load sync state from disk."""

def list_syncs((self)) -> List[Dict[str, Any]]:
    """List all sync operations."""

def get_sync_report((self, sync_id: str)) -> Optional[Dict[str, Any]]:
    """Get detailed report for a sync operation."""

def cleanup_old_states((self)) -> int:
    """Clean up old sync states based on retention policy."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/errors.py
# Language: python

from enum import Enum
from typing import Any, Dict, Optional
from ..http.client import HttpResponse
from loguru import logger

class ErrorSeverity(s, t, r, ,,  , E, n, u, m):
    """Error severity levels for classification."""

class ErrorCategory(s, t, r, ,,  , E, n, u, m):
    """Error categories for classification and handling."""

class Document360Error(E, x, c, e, p, t, i, o, n):
    """ Base exception for all Document360 API operations...."""
    def __init__((
        self,
        message: str,
        response: Optional[HttpResponse] = None,
        error_code: Optional[str] = None,
        category: ErrorCategory = ErrorCategory.UNKNOWN,
        severity: ErrorSeverity = ErrorSeverity.MEDIUM,
        retryable: bool = False,
        context: Optional[Dict[str, Any]] = None,
    )):
    def __str__((self)) -> str:
        """Enhanced string representation with context."""

class ApiError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """General API error for unclassified API issues."""
    def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

class AuthenticationError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Authentication and authorization errors."""
    def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

class RateLimitError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Rate limiting errors."""
    def __init__((
        self,
        message: str,
        response: Optional[HttpResponse] = None,
        retry_after: Optional[int] = None,
        **kwargs
    )):

class NotFoundError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Resource not found errors."""
    def __init__((self, message: str, resource_id: Optional[str] = None, **kwargs)):

class ValidationError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Input validation errors."""
    def __init__((
        self,
        message: str,
        field: Optional[str] = None,
        value: Optional[Any] = None,
        **kwargs
    )):

class ServerError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Server-side errors (5xx)."""
    def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

class NetworkError(D, o, c, u, m, e, n, t, 3, 6, 0, E, r, r, o, r):
    """Network connectivity errors."""
    def __init__((self, message: str, **kwargs)):

class ErrorHandler:
    """ Centralized error handler for API operations...."""

def __init__((
        self,
        message: str,
        response: Optional[HttpResponse] = None,
        error_code: Optional[str] = None,
        category: ErrorCategory = ErrorCategory.UNKNOWN,
        severity: ErrorSeverity = ErrorSeverity.MEDIUM,
        retryable: bool = False,
        context: Optional[Dict[str, Any]] = None,
    )):

def status_code((self)) -> Optional[int]:
    """Get HTTP status code if available."""

def response_text((self)) -> Optional[str]:
    """Get response text if available."""

def response_json((self)) -> Optional[Dict[str, Any]]:
    """Get response JSON if available."""

def __str__((self)) -> str:
    """Enhanced string representation with context."""

def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

def __init__((
        self,
        message: str,
        response: Optional[HttpResponse] = None,
        retry_after: Optional[int] = None,
        **kwargs
    )):

def __init__((self, message: str, resource_id: Optional[str] = None, **kwargs)):

def __init__((
        self,
        message: str,
        field: Optional[str] = None,
        value: Optional[Any] = None,
        **kwargs
    )):

def __init__((self, message: str, response: Optional[HttpResponse] = None, **kwargs)):

def __init__((self, message: str, **kwargs)):

def classify_error((response: Optional[HttpResponse], exception: Optional[Exception] = None)) -> Document360Error:
    """ Classify an error based on response and exception...."""

def should_retry((error: Document360Error, attempt: int, max_attempts: int)) -> bool:
    """ Determine if an operation should be retried...."""

def get_retry_delay((error: Document360Error, attempt: int)) -> float:
    """ Calculate retry delay based on error type and attempt...."""

def log_error((error: Document360Error, operation: str, attempt: int = 1)) -> None:
    """ Log error with appropriate level and context...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/generate_models.py
# Language: python

import asyncio
import json
import subprocess
import tempfile
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional
from loguru import logger
from pydantic import BaseModel, Field
from .openapi_integration import OpenApiIntegration, OpenApiConfig
import fire

class ModelGenerationConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for model generation."""

class GenerationResult(B, a, s, e, M, o, d, e, l):
    """Result of model generation."""

class ModelGenerator:
    """ Generator for Pydantic models from OpenAPI specifications...."""
    def __init__((self, config: Optional[ModelGenerationConfig] = None)):
        """ Initialize the model generator...."""
    def generate_models((self, force_refresh: bool = False)) -> GenerationResult:
        """ Generate Pydantic models from OpenAPI specification...."""
    def _generate_with_datamodel_codegen((
        self, 
        spec: Any,
        output_file: Path
    )) -> GenerationResult:
        """Generate models using datamodel-code-generator."""
    def _add_file_header((self, output_file: Path, spec: Any)) -> None:
        """Add header comment to generated models file."""
    def check_for_updates((self)) -> bool:
        """ Check if the OpenAPI spec has updates that would require model regeneration...."""
    def get_spec_summary((self)) -> Dict[str, Any]:
        """Get summary of the current OpenAPI specification."""
    def close((self)) -> None:
        """Close the OpenAPI integration and cleanup resources."""

def __init__((self, config: Optional[ModelGenerationConfig] = None)):
    """ Initialize the model generator...."""

def generate_models((self, force_refresh: bool = False)) -> GenerationResult:
    """ Generate Pydantic models from OpenAPI specification...."""

def _generate_with_datamodel_codegen((
        self, 
        spec: Any,
        output_file: Path
    )) -> GenerationResult:
    """Generate models using datamodel-code-generator."""

def _add_file_header((self, output_file: Path, spec: Any)) -> None:
    """Add header comment to generated models file."""

def check_for_updates((self)) -> bool:
    """ Check if the OpenAPI spec has updates that would require model regeneration...."""

def get_spec_summary((self)) -> Dict[str, Any]:
    """Get summary of the current OpenAPI specification."""

def close((self)) -> None:
    """Close the OpenAPI integration and cleanup resources."""

def generate_models_cli((
    output_dir: str = "generated/models",
    force_refresh: bool = False,
    config_file: Optional[str] = None
)) -> None:
    """ CLI interface for model generation...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/metrics.py
# Language: python

import asyncio
import time
from collections import defaultdict, deque
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from enum import Enum
from typing import Any, Callable, Dict, List, Optional, Set, Union
import threading
from loguru import logger
from pydantic import BaseModel, Field
from .errors import Document360Error, ErrorCategory, ErrorSeverity
import json

class MetricType(s, t, r, ,,  , E, n, u, m):
    """Types of metrics collected."""

class TimeWindow(s, t, r, ,,  , E, n, u, m):
    """Time windows for metric aggregation."""

class MetricPoint:
    """ Single metric measurement point...."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary."""

class MetricSeries:
    """ Time series of metric points...."""
    def add_point((self, value: float, timestamp: Optional[datetime] = None, labels: Optional[Dict[str, str]] = None)) -> None:
        """Add a new measurement point."""
    def get_points_in_window((self, window: TimeWindow)) -> List[MetricPoint]:
        """Get points within specified time window."""
    def _parse_time_window((self, window: TimeWindow)) -> timedelta:
        """Parse time window to timedelta."""
    def aggregate((self, window: TimeWindow)) -> Dict[str, float]:
        """Aggregate metrics within time window."""
    def _percentile((self, sorted_values: List[float], percentile: float)) -> float:
        """Calculate percentile from sorted values."""

class MetricsConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for metrics collection."""

class ApiMetrics:
    """ Comprehensive API metrics collector...."""
    def __init__((self, config: Optional[MetricsConfig] = None)):
        """ Initialize API metrics collector...."""
    def _init_builtin_metrics((self)) -> None:
        """Initialize built-in API metrics."""
    def create_metric((self, name: str, metric_type: MetricType, description: str = "", labels: Optional[Dict[str, str]] = None)) -> MetricSeries:
        """Create a new metric series."""
    def increment((self, name: str, value: float = 1.0, labels: Optional[Dict[str, str]] = None)) -> None:
        """Increment a counter metric."""
    def gauge((self, name: str, value: float, labels: Optional[Dict[str, str]] = None)) -> None:
        """Set a gauge metric value."""
    def histogram((self, name: str, value: float, labels: Optional[Dict[str, str]] = None)) -> None:
        """Record a histogram metric value."""
    def timing((self, name: str, duration: float, labels: Optional[Dict[str, str]] = None)) -> None:
        """Record a timing metric (convenience method for histograms)."""
    def record_request((self, method: str, endpoint: str, status_code: int, duration: float, request_size: int = 0, response_size: int = 0)) -> None:
        """Record API request metrics."""
    def record_rate_limit((self, remaining: int, reset_time: float, hit: bool = False)) -> None:
        """Record rate limiting metrics."""
    def record_token_usage((self, token_id: str, success: bool = True)) -> None:
        """Record token usage metrics."""
    def record_token_rotation((self, old_token: str, new_token: str, reason: str = "")) -> None:
        """Record token rotation."""
    def record_connection((self, event: str, count: int = 1)) -> None:
        """Record connection metrics."""
    def record_cache_event((self, event: str, size: Optional[int] = None)) -> None:
        """Record cache metrics."""
    def record_circuit_breaker((self, name: str, event: str, state: Optional[str] = None)) -> None:
        """Record circuit breaker metrics."""
    def record_sync_operation((self, operation: str, items: int = 0, duration: float = 0, duplicates: int = 0)) -> None:
        """Record sync operation metrics."""
    def _update_error_rate((self)) -> None:
        """Update error rate gauge."""
    def get_metric((self, name: str, window: TimeWindow = TimeWindow.FIVE_MINUTES)) -> Optional[Dict[str, Any]]:
        """Get aggregated metric data."""
    def get_all_metrics((self, window: TimeWindow = TimeWindow.FIVE_MINUTES)) -> Dict[str, Dict[str, Any]]:
        """Get all metrics with aggregation."""
    def get_health_metrics((self)) -> Dict[str, Any]:
        """Get key health metrics for monitoring."""
    def add_alert_callback((self, callback: Callable[[str, Dict[str, Any]], None])) -> None:
        """Add callback for metric alerts."""
    def check_alerts((self)) -> None:
        """Check metrics against alert thresholds."""
    def export_metrics((self, format: str = "prometheus")) -> str:
        """Export metrics in specified format."""
    def _export_prometheus((self)) -> str:
        """Export metrics in Prometheus format."""
    def _format_prometheus_labels((self, labels: Dict[str, str])) -> str:
        """Format labels for Prometheus export."""
    def _export_json((self)) -> str:
        """Export metrics in JSON format."""
    def start_collection((self)) -> None:
        """Start automatic metrics collection."""
    def stop_collection((self)) -> None:
        """Stop automatic metrics collection."""
    def _collection_loop((self)) -> None:
        """Main metrics collection loop."""
    def _cleanup_old_data((self)) -> None:
        """Clean up old metric data based on retention policy."""
    def _export_to_endpoint((self)) -> None:
        """Export metrics to configured endpoint."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary."""

def add_point((self, value: float, timestamp: Optional[datetime] = None, labels: Optional[Dict[str, str]] = None)) -> None:
    """Add a new measurement point."""

def get_points_in_window((self, window: TimeWindow)) -> List[MetricPoint]:
    """Get points within specified time window."""

def _parse_time_window((self, window: TimeWindow)) -> timedelta:
    """Parse time window to timedelta."""

def aggregate((self, window: TimeWindow)) -> Dict[str, float]:
    """Aggregate metrics within time window."""

def _percentile((self, sorted_values: List[float], percentile: float)) -> float:
    """Calculate percentile from sorted values."""

def __init__((self, config: Optional[MetricsConfig] = None)):
    """ Initialize API metrics collector...."""

def _init_builtin_metrics((self)) -> None:
    """Initialize built-in API metrics."""

def create_metric((self, name: str, metric_type: MetricType, description: str = "", labels: Optional[Dict[str, str]] = None)) -> MetricSeries:
    """Create a new metric series."""

def increment((self, name: str, value: float = 1.0, labels: Optional[Dict[str, str]] = None)) -> None:
    """Increment a counter metric."""

def gauge((self, name: str, value: float, labels: Optional[Dict[str, str]] = None)) -> None:
    """Set a gauge metric value."""

def histogram((self, name: str, value: float, labels: Optional[Dict[str, str]] = None)) -> None:
    """Record a histogram metric value."""

def timing((self, name: str, duration: float, labels: Optional[Dict[str, str]] = None)) -> None:
    """Record a timing metric (convenience method for histograms)."""

def record_request((self, method: str, endpoint: str, status_code: int, duration: float, request_size: int = 0, response_size: int = 0)) -> None:
    """Record API request metrics."""

def record_rate_limit((self, remaining: int, reset_time: float, hit: bool = False)) -> None:
    """Record rate limiting metrics."""

def record_token_usage((self, token_id: str, success: bool = True)) -> None:
    """Record token usage metrics."""

def record_token_rotation((self, old_token: str, new_token: str, reason: str = "")) -> None:
    """Record token rotation."""

def record_connection((self, event: str, count: int = 1)) -> None:
    """Record connection metrics."""

def record_cache_event((self, event: str, size: Optional[int] = None)) -> None:
    """Record cache metrics."""

def record_circuit_breaker((self, name: str, event: str, state: Optional[str] = None)) -> None:
    """Record circuit breaker metrics."""

def record_sync_operation((self, operation: str, items: int = 0, duration: float = 0, duplicates: int = 0)) -> None:
    """Record sync operation metrics."""

def _update_error_rate((self)) -> None:
    """Update error rate gauge."""

def get_metric((self, name: str, window: TimeWindow = TimeWindow.FIVE_MINUTES)) -> Optional[Dict[str, Any]]:
    """Get aggregated metric data."""

def get_all_metrics((self, window: TimeWindow = TimeWindow.FIVE_MINUTES)) -> Dict[str, Dict[str, Any]]:
    """Get all metrics with aggregation."""

def get_health_metrics((self)) -> Dict[str, Any]:
    """Get key health metrics for monitoring."""

def add_alert_callback((self, callback: Callable[[str, Dict[str, Any]], None])) -> None:
    """Add callback for metric alerts."""

def check_alerts((self)) -> None:
    """Check metrics against alert thresholds."""

def export_metrics((self, format: str = "prometheus")) -> str:
    """Export metrics in specified format."""

def _export_prometheus((self)) -> str:
    """Export metrics in Prometheus format."""

def _format_prometheus_labels((self, labels: Dict[str, str])) -> str:
    """Format labels for Prometheus export."""

def _export_json((self)) -> str:
    """Export metrics in JSON format."""

def start_collection((self)) -> None:
    """Start automatic metrics collection."""

def stop_collection((self)) -> None:
    """Stop automatic metrics collection."""

def _collection_loop((self)) -> None:
    """Main metrics collection loop."""

def _cleanup_old_data((self)) -> None:
    """Clean up old metric data based on retention policy."""

def _export_to_endpoint((self)) -> None:
    """Export metrics to configured endpoint."""

def get_metrics(()) -> ApiMetrics:
    """Get global metrics instance."""

def configure_metrics((config: MetricsConfig)) -> ApiMetrics:
    """Configure global metrics instance."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/openapi_integration.py
# Language: python

import asyncio
import hashlib
import json
import time
from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Tuple, Union
from loguru import logger
from pydantic import BaseModel, Field, validator
from ..http import UnifiedHttpClient
from .errors import Document360Error, ErrorCategory, ErrorSeverity
import json
from email.utils import parsedate_to_datetime

class OpenApiConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for OpenAPI integration."""

class OpenApiSpec(B, a, s, e, M, o, d, e, l):
    """OpenAPI specification data model."""
    def get_endpoints((self)) -> List[Dict[str, Any]]:
        """Extract all API endpoints with methods."""
    def get_models((self)) -> List[Dict[str, Any]]:
        """Extract model definitions for code generation."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert to dictionary."""

class OpenApiIntegration:
    """ OpenAPI integration for Document360 API...."""
    def __init__((
        self,
        config: Optional[OpenApiConfig] = None,
        http_client: Optional[UnifiedHttpClient] = None
    )):
        """ Initialize OpenAPI integration...."""
    def get_spec((self, force_refresh: bool = False)) -> OpenApiSpec:
        """ Get OpenAPI specification, fetching if needed...."""
    def _fetch_spec((self)) -> OpenApiSpec:
        """Fetch OpenAPI spec from remote URLs."""
    def _validate_spec((self, spec_data: Dict[str, Any])) -> None:
        """Validate OpenAPI specification."""
    def _load_cached_spec((self)) -> Optional[OpenApiSpec]:
        """Load OpenAPI spec from disk cache."""
    def _save_cached_spec((self, spec: OpenApiSpec)) -> None:
        """Save OpenAPI spec to disk cache."""
    def check_for_updates((self)) -> bool:
        """ Check if OpenAPI spec has updates available...."""
    def get_endpoint_changes((self, old_spec: OpenApiSpec, new_spec: OpenApiSpec)) -> Dict[str, Any]:
        """ Compare two OpenAPI specs and identify changes...."""
    def generate_models_script((self, output_file: Path)) -> str:
        """ Generate a script to create Pydantic models from OpenAPI spec...."""
    def get_api_summary((self)) -> Dict[str, Any]:
        """Get summary of API capabilities from OpenAPI spec."""
    def close((self)) -> None:
        """Close HTTP client and cleanup resources."""

def generate_content_hash((cls, v, values)):
    """Generate hash of spec content."""

def is_expired((self, ttl_hours: int = 24)) -> bool:
    """Check if spec is expired based on TTL."""

def paths((self)) -> Dict[str, Any]:
    """Get API paths from spec."""

def components((self)) -> Dict[str, Any]:
    """Get components/schemas from spec."""

def schemas((self)) -> Dict[str, Any]:
    """Get schema definitions."""

def get_endpoints((self)) -> List[Dict[str, Any]]:
    """Extract all API endpoints with methods."""

def get_models((self)) -> List[Dict[str, Any]]:
    """Extract model definitions for code generation."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert to dictionary."""

def __init__((
        self,
        config: Optional[OpenApiConfig] = None,
        http_client: Optional[UnifiedHttpClient] = None
    )):
    """ Initialize OpenAPI integration...."""

def get_spec((self, force_refresh: bool = False)) -> OpenApiSpec:
    """ Get OpenAPI specification, fetching if needed...."""

def _fetch_spec((self)) -> OpenApiSpec:
    """Fetch OpenAPI spec from remote URLs."""

def _validate_spec((self, spec_data: Dict[str, Any])) -> None:
    """Validate OpenAPI specification."""

def _load_cached_spec((self)) -> Optional[OpenApiSpec]:
    """Load OpenAPI spec from disk cache."""

def _save_cached_spec((self, spec: OpenApiSpec)) -> None:
    """Save OpenAPI spec to disk cache."""

def check_for_updates((self)) -> bool:
    """ Check if OpenAPI spec has updates available...."""

def get_endpoint_changes((self, old_spec: OpenApiSpec, new_spec: OpenApiSpec)) -> Dict[str, Any]:
    """ Compare two OpenAPI specs and identify changes...."""

def generate_models_script((self, output_file: Path)) -> str:
    """ Generate a script to create Pydantic models from OpenAPI spec...."""

def get_api_summary((self)) -> Dict[str, Any]:
    """Get summary of API capabilities from OpenAPI spec."""

def close((self)) -> None:
    """Close HTTP client and cleanup resources."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/api/token_manager.py
# Language: python

import asyncio
import time
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from enum import Enum
from typing import Dict, List, Optional
from loguru import logger
from pydantic import BaseModel, Field
import os

class TokenHealth(s, t, r, ,,  , E, n, u, m):
    """Token health status."""

class TokenStats:
    """ Statistics and tracking for a single API token...."""
    def __post_init__((self)):
        """Initialize tracking fields."""
    def record_call((self, response_time: float, success: bool = True)) -> None:
        """ Record a successful API call...."""
    def update_rate_limit((self, calls_remaining: int, reset_time: Optional[datetime] = None)) -> None:
        """ Update rate limit information from API response headers...."""
    def is_rate_limited((self)) -> bool:
        """Check if token is currently rate limited."""
    def can_make_call((self)) -> bool:
        """Check if token can make another API call."""
    def to_dict((self)) -> Dict[str, any]:
        """Convert stats to dictionary for monitoring/logging."""

class RateLimiter:
    """ Rate limiter for Document360 API (60 calls/minute per token)...."""
    def __init__((self, calls_per_minute: int = 60, safety_margin: int = 5)):
        """ Initialize rate limiter...."""
    def wait_if_needed((self)) -> float:
        """ Wait if necessary to respect rate limits...."""
    def record_call((self)) -> None:
        """Record that a call was made."""
    def calls_available((self)) -> int:
        """Get number of calls available in current window."""
    def time_until_reset((self)) -> float:
        """Get seconds until rate limit window resets."""

class TokenManager:
    """ Intelligent API token pool manager with rotation and health monitoring...."""
    def __init__((self, tokens: List[str], calls_per_minute: int = 60)):
        """ Initialize token manager...."""
    def get_best_token((self)) -> Optional[str]:
        """ Get the best available token for making an API call...."""
    def execute_with_token((self, operation: callable, max_retries: int = 3)) -> any:
        """ Execute an operation with automatic token selection and retry logic...."""
    def update_token_rate_limit((self, token: str, calls_remaining: int, reset_time: Optional[datetime] = None)) -> None:
        """ Update token rate limit info from API response headers...."""
    def get_min_reset_time((self)) -> float:
        """Get minimum time until any token's rate limit resets."""
    def get_health_report((self)) -> Dict[str, any]:
        """ Get comprehensive health report for all tokens...."""
    def reset_token_stats((self, token: str)) -> None:
        """Reset statistics for a specific token."""
    def add_token((self, token: str)) -> None:
        """Add a new token to the pool."""
    def remove_token((self, token: str)) -> None:
        """Remove a token from the pool."""
    def create_concurrency_limiter((self, max_concurrent: int = 10)) -> any:
        """ Create a semaphore for limiting concurrent API operations...."""
    def execute_batch_with_concurrency((
        self,
        operations: List[callable],
        max_concurrent: int = 10,
        max_retries: int = 3
    )) -> List[any]:
        """ Execute multiple operations with concurrency control...."""
    def reset_manager_statistics((self)) -> None:
        """Reset manager-level statistics (from vexy360 patterns)."""

def __post_init__((self)):
    """Initialize tracking fields."""

def record_call((self, response_time: float, success: bool = True)) -> None:
    """ Record a successful API call...."""

def update_rate_limit((self, calls_remaining: int, reset_time: Optional[datetime] = None)) -> None:
    """ Update rate limit information from API response headers...."""

def is_rate_limited((self)) -> bool:
    """Check if token is currently rate limited."""

def can_make_call((self)) -> bool:
    """Check if token can make another API call."""

def token_hash((self)) -> str:
    """Get a hash of the token for safe logging."""

def utilization_rate((self)) -> float:
    """Calculate token utilization rate (0-1)."""

def error_rate((self)) -> float:
    """Calculate error rate (0-1)."""

def to_dict((self)) -> Dict[str, any]:
    """Convert stats to dictionary for monitoring/logging."""

def __init__((self, calls_per_minute: int = 60, safety_margin: int = 5)):
    """ Initialize rate limiter...."""

def wait_if_needed((self)) -> float:
    """ Wait if necessary to respect rate limits...."""

def record_call((self)) -> None:
    """Record that a call was made."""

def calls_available((self)) -> int:
    """Get number of calls available in current window."""

def time_until_reset((self)) -> float:
    """Get seconds until rate limit window resets."""

def __init__((self, tokens: List[str], calls_per_minute: int = 60)):
    """ Initialize token manager...."""

def from_environment((
        cls,
        prefix: str = "DOCUMENT360_API_TOKEN",
        max_tokens: int = 10,
        calls_per_minute: int = 60
    )) -> 'TokenManager':
    """ Create TokenManager by loading tokens from environment variables...."""

def get_best_token((self)) -> Optional[str]:
    """ Get the best available token for making an API call...."""

def token_score((token: str)) -> tuple:

def execute_with_token((self, operation: callable, max_retries: int = 3)) -> any:
    """ Execute an operation with automatic token selection and retry logic...."""

def update_token_rate_limit((self, token: str, calls_remaining: int, reset_time: Optional[datetime] = None)) -> None:
    """ Update token rate limit info from API response headers...."""

def get_min_reset_time((self)) -> float:
    """Get minimum time until any token's rate limit resets."""

def get_health_report((self)) -> Dict[str, any]:
    """ Get comprehensive health report for all tokens...."""

def reset_token_stats((self, token: str)) -> None:
    """Reset statistics for a specific token."""

def add_token((self, token: str)) -> None:
    """Add a new token to the pool."""

def remove_token((self, token: str)) -> None:
    """Remove a token from the pool."""

def available_tokens_count((self)) -> int:
    """Get count of tokens that can currently make API calls."""

def create_concurrency_limiter((self, max_concurrent: int = 10)) -> any:
    """ Create a semaphore for limiting concurrent API operations...."""

def execute_batch_with_concurrency((
        self,
        operations: List[callable],
        max_concurrent: int = 10,
        max_retries: int = 3
    )) -> List[any]:
    """ Execute multiple operations with concurrency control...."""

def bounded_operation((operation: callable)):

def reset_manager_statistics((self)) -> None:
    """Reset manager-level statistics (from vexy360 patterns)."""

def manager_statistics((self)) -> Dict[str, any]:
    """Get manager-level statistics (from vexy360 patterns)."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/archive/__init__.py
# Language: python

from .parser import ArchiveParser, ArchiveParserConfig, ArchiveMetadata, ParsedArchive
from .cache import SqliteCache, CacheConfig, CacheEntry, CacheStats
from .schema import ArchiveSchema, create_archive_schema, migrate_archive_schema
from .document360_parser import Document360Parser


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/archive/cache.py
# Language: python

import asyncio
import sqlite3
import threading
import time
from contextlib import asynccontextmanager
from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Dict, List, Optional, Union, AsyncIterator
from dataclasses import dataclass
from enum import Enum
from queue import Queue
from loguru import logger
from pydantic import BaseModel, Field
from .schema import create_archive_schema, ArchiveSchema
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import pickle
import gzip
import pickle
import pickle
import gzip
import pickle

class EvictionPolicy(s, t, r, ,,  , E, n, u, m):
    """Cache eviction policies."""

class CacheStats:
    """Cache performance statistics."""

class CacheEntry(B, a, s, e, M, o, d, e, l):
    """Cache entry with metadata."""

class CacheConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for SQLite cache."""

class ConnectionPool:
    """SQLite connection pool for concurrent access."""
    def __init__((self, db_path: Path, max_connections: int = 10)):
    def get_connection((self, timeout: float = 30.0)) -> sqlite3.Connection:
        """Get a connection from the pool."""
    def return_connection((self, conn: sqlite3.Connection)) -> None:
        """Return a connection to the pool."""
    def _create_connection((self)) -> sqlite3.Connection:
        """Create a new database connection."""
    def close_all((self)) -> None:
        """Close all connections in the pool."""

class SqliteCache:
    """ Enterprise-grade SQLite cache implementation...."""
    def __init__((self, config: Optional[CacheConfig] = None)):
        """ Initialize SQLite cache...."""
    def start((self)) -> None:
        """Start the cache and initialize database."""
    def stop((self)) -> None:
        """Stop the cache and cleanup resources."""
    def get((self, key: str)) -> Optional[Any]:
        """ Get value from cache...."""
    def set((
        self,
        key: str,
        value: Any,
        ttl_seconds: Optional[int] = None
    )) -> bool:
        """ Set value in cache...."""
    def delete((self, key: str)) -> bool:
        """ Delete entry from cache...."""
    def clear((self)) -> None:
        """Clear all cache entries."""
    def cleanup_expired((self)) -> int:
        """ Clean up expired cache entries...."""
    def get_stats((self)) -> CacheStats:
        """Get current cache statistics."""
    def _ensure_cache_schema((self)) -> None:
        """Ensure cache database schema exists."""
    def _ensure_cache_capacity((self, cursor: sqlite3.Cursor, new_entry_size: int)) -> None:
        """Ensure cache has capacity for new entry."""
    def _evict_entries((self, cursor: sqlite3.Cursor)) -> int:
        """Evict entries based on configured policy."""
    def _update_stats((self, cursor: sqlite3.Cursor)) -> None:
        """Update cache statistics from database."""
    def _serialize_value((self, value: Any)) -> Union[str, bytes]:
        """Serialize value for storage."""
    def _deserialize_value((self, data: Union[str, bytes])) -> Any:
        """Deserialize value from storage."""
    def _background_cleanup((self)) -> None:
        """Background task for periodic cleanup."""

def hit_rate((self)) -> float:
    """Calculate cache hit rate."""

def miss_rate((self)) -> float:
    """Calculate cache miss rate."""

def is_expired((self)) -> bool:
    """Check if entry has expired."""

def age_seconds((self)) -> float:
    """Get entry age in seconds."""

def __init__((self, db_path: Path, max_connections: int = 10)):

def get_connection((self, timeout: float = 30.0)) -> sqlite3.Connection:
    """Get a connection from the pool."""

def return_connection((self, conn: sqlite3.Connection)) -> None:
    """Return a connection to the pool."""

def _create_connection((self)) -> sqlite3.Connection:
    """Create a new database connection."""

def close_all((self)) -> None:
    """Close all connections in the pool."""

def __init__((self, config: Optional[CacheConfig] = None)):
    """ Initialize SQLite cache...."""

def start((self)) -> None:
    """Start the cache and initialize database."""

def stop((self)) -> None:
    """Stop the cache and cleanup resources."""

def get((self, key: str)) -> Optional[Any]:
    """ Get value from cache...."""

def set((
        self,
        key: str,
        value: Any,
        ttl_seconds: Optional[int] = None
    )) -> bool:
    """ Set value in cache...."""

def delete((self, key: str)) -> bool:
    """ Delete entry from cache...."""

def clear((self)) -> None:
    """Clear all cache entries."""

def cleanup_expired((self)) -> int:
    """ Clean up expired cache entries...."""

def get_stats((self)) -> CacheStats:
    """Get current cache statistics."""

def _ensure_cache_schema((self)) -> None:
    """Ensure cache database schema exists."""

def _ensure_cache_capacity((self, cursor: sqlite3.Cursor, new_entry_size: int)) -> None:
    """Ensure cache has capacity for new entry."""

def _evict_entries((self, cursor: sqlite3.Cursor)) -> int:
    """Evict entries based on configured policy."""

def _update_stats((self, cursor: sqlite3.Cursor)) -> None:
    """Update cache statistics from database."""

def _serialize_value((self, value: Any)) -> Union[str, bytes]:
    """Serialize value for storage."""

def _deserialize_value((self, data: Union[str, bytes])) -> Any:
    """Deserialize value from storage."""

def _background_cleanup((self)) -> None:
    """Background task for periodic cleanup."""

def get_default_cache(()) -> SqliteCache:
    """Get the default cache instance."""

def cache_get((key: str)) -> Optional[Any]:
    """Get value from default cache."""

def cache_set((key: str, value: Any, ttl_seconds: Optional[int] = None)) -> bool:
    """Set value in default cache."""

def cache_delete((key: str)) -> bool:
    """Delete value from default cache."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/archive/document360_parser.py
# Language: python

import re
from datetime import datetime
from pathlib import Path
from typing import Any
from loguru import logger
from d361.core.models import Article, Category
import json
import yaml

class Document360Parser:
    """Parse Document360 export structure using d361 canonical models."""
    def __init__((self, export_path: Path)) -> None:
        """Initialize parser with export path."""
    def _validate_export_structure((self)) -> None:
        """Validate that the export has expected structure."""
    def _find_version_dir((self)) -> Path:
        """Find the version directory (e.g., v1)."""
    def _find_metadata_file((self)) -> Path:
        """Find the metadata JSON file."""
    def parse((self)) -> tuple[list[Category], list[Article]]:
        """Parse the complete Document360 export."""
    def _parse_categories((self, metadata: dict[str, Any])) -> list[Category]:
        """Parse category structure from metadata."""
    def _parse_articles_from_categories((
        self, 
        metadata: dict[str, Any], 
        categories: list[Category]
    )) -> list[Article]:
        """Parse articles from category metadata."""
    def _parse_article_metadata((self, art_data: dict[str, Any], category_id: int | str)) -> Article:
        """Parse article metadata into d361 canonical model."""
    def _load_article_content((self, articles: list[Article])) -> None:
        """Load article content from markdown files."""
    def _parse_markdown_file((self, md_file: Path)) -> tuple[dict[str, Any] | None, str]:
        """Parse markdown file with frontmatter."""
    def _strip_numeric_prefix((self, slug: str)) -> str:
        """Strip numeric prefixes from slugs (e.g., '001-article-name' -> 'article-name')."""
    def get_statistics((self)) -> dict[str, Any]:
        """Get statistics about the parsed export."""

def __init__((self, export_path: Path)) -> None:
    """Initialize parser with export path."""

def _validate_export_structure((self)) -> None:
    """Validate that the export has expected structure."""

def _find_version_dir((self)) -> Path:
    """Find the version directory (e.g., v1)."""

def _find_metadata_file((self)) -> Path:
    """Find the metadata JSON file."""

def parse((self)) -> tuple[list[Category], list[Article]]:
    """Parse the complete Document360 export."""

def _parse_categories((self, metadata: dict[str, Any])) -> list[Category]:
    """Parse category structure from metadata."""

def parse_category_tree((
            cat_data: dict[str, Any], 
            parent_id: int | None = None, 
            level: int = 0,
            path_prefix: str = ""
        )) -> None:

def _parse_articles_from_categories((
        self, 
        metadata: dict[str, Any], 
        categories: list[Category]
    )) -> list[Article]:
    """Parse articles from category metadata."""

def extract_articles_from_category((cat_data: dict[str, Any], category_id: int | str)) -> None:

def _parse_article_metadata((self, art_data: dict[str, Any], category_id: int | str)) -> Article:
    """Parse article metadata into d361 canonical model."""

def _load_article_content((self, articles: list[Article])) -> None:
    """Load article content from markdown files."""

def _parse_markdown_file((self, md_file: Path)) -> tuple[dict[str, Any] | None, str]:
    """Parse markdown file with frontmatter."""

def _strip_numeric_prefix((self, slug: str)) -> str:
    """Strip numeric prefixes from slugs (e.g., '001-article-name' -> 'article-name')."""

def get_statistics((self)) -> dict[str, Any]:
    """Get statistics about the parsed export."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/archive/parser.py
# Language: python

import hashlib
import json
import mimetypes
import tarfile
import zipfile
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Union, Iterator, BinaryIO
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from pydantic import BaseModel, Field, validator
from ..core.models import Article, Category, ProjectVersion
from ..core.transformers import ModelTransformer
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import fnmatch

class ArchiveFormat(s, t, r, ,,  , E, n, u, m):
    """Supported archive formats."""

class ContentType(s, t, r, ,,  , E, n, u, m):
    """Types of content found in archives."""

class ArchiveEntry:
    """Represents a single entry in an archive."""

class ArchiveParserConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for archive parsing operations."""

class ArchiveMetadata(B, a, s, e, M, o, d, e, l):
    """Metadata about a parsed archive."""

class ParsedArchive(B, a, s, e, M, o, d, e, l):
    """Complete parsed archive with metadata and content."""

class ArchiveParser:
    """ Parser for Document360 offline archives...."""
    def __init__((self, config: Optional[ArchiveParserConfig] = None)):
        """ Initialize the archive parser...."""
    def parse_archive((self, archive_path: Union[str, Path])) -> ParsedArchive:
        """ Parse a Document360 archive file...."""
    def _validate_archive_file((self, archive_path: Path)) -> None:
        """Validate archive file before processing."""
    def _detect_archive_format((self, archive_path: Path)) -> ArchiveFormat:
        """Detect archive format from file extension and content."""
    def _calculate_file_hash((self, archive_path: Path)) -> str:
        """Calculate SHA256 hash of archive file."""
    def _parse_archive_contents((
        self, 
        archive_path: Path, 
        archive_format: ArchiveFormat,
        metadata: ArchiveMetadata
    )) -> List[ArchiveEntry]:
        """Parse contents of archive file."""
    def _parse_zip_archive((self, archive_path: Path, metadata: ArchiveMetadata)) -> List[ArchiveEntry]:
        """Parse ZIP archive contents."""
    def _parse_tar_archive((self, archive_path: Path, metadata: ArchiveMetadata)) -> List[ArchiveEntry]:
        """Parse TAR/TAR.GZ archive contents."""
    def _should_include_file((self, filename: str)) -> bool:
        """Check if file should be included based on patterns."""
    def _analyze_entry_content((self, entry: ArchiveEntry)) -> None:
        """Analyze entry content to determine type and extract metadata."""
    def _decode_content((self, content: bytes)) -> Optional[str]:
        """Decode binary content to text."""
    def _determine_content_type((self, path: str, text_content: Optional[str])) -> ContentType:
        """Determine content type based on path and content."""
    def _extract_article_metadata((self, entry: ArchiveEntry, content: str)) -> None:
        """Extract metadata from article content."""
    def _extract_json_metadata((self, entry: ArchiveEntry, content: str)) -> None:
        """Extract metadata from JSON content."""
    def _extract_structured_data((
        self, 
        entries: List[ArchiveEntry]
    )) -> tuple[List[Article], List[Category], List[ProjectVersion]]:
        """Extract structured data objects from parsed entries."""
    def _create_article_from_entry((self, entry: ArchiveEntry)) -> Optional[Article]:
        """Create Article object from archive entry."""
    def _create_category_from_entry((self, entry: ArchiveEntry)) -> Optional[Category]:
        """Create Category object from archive entry."""
    def _create_project_from_entry((self, entry: ArchiveEntry)) -> Optional[ProjectVersion]:
        """Create ProjectVersion object from archive entry."""

def total_content_size((self)) -> int:
    """Calculate total size of all content."""

def success_rate((self)) -> float:
    """Calculate processing success rate."""

def __init__((self, config: Optional[ArchiveParserConfig] = None)):
    """ Initialize the archive parser...."""

def parse_archive((self, archive_path: Union[str, Path])) -> ParsedArchive:
    """ Parse a Document360 archive file...."""

def _validate_archive_file((self, archive_path: Path)) -> None:
    """Validate archive file before processing."""

def _detect_archive_format((self, archive_path: Path)) -> ArchiveFormat:
    """Detect archive format from file extension and content."""

def _calculate_file_hash((self, archive_path: Path)) -> str:
    """Calculate SHA256 hash of archive file."""

def _parse_archive_contents((
        self, 
        archive_path: Path, 
        archive_format: ArchiveFormat,
        metadata: ArchiveMetadata
    )) -> List[ArchiveEntry]:
    """Parse contents of archive file."""

def _parse_zip_archive((self, archive_path: Path, metadata: ArchiveMetadata)) -> List[ArchiveEntry]:
    """Parse ZIP archive contents."""

def _parse_tar_archive((self, archive_path: Path, metadata: ArchiveMetadata)) -> List[ArchiveEntry]:
    """Parse TAR/TAR.GZ archive contents."""

def _should_include_file((self, filename: str)) -> bool:
    """Check if file should be included based on patterns."""

def _analyze_entry_content((self, entry: ArchiveEntry)) -> None:
    """Analyze entry content to determine type and extract metadata."""

def _decode_content((self, content: bytes)) -> Optional[str]:
    """Decode binary content to text."""

def _determine_content_type((self, path: str, text_content: Optional[str])) -> ContentType:
    """Determine content type based on path and content."""

def _extract_article_metadata((self, entry: ArchiveEntry, content: str)) -> None:
    """Extract metadata from article content."""

def _extract_json_metadata((self, entry: ArchiveEntry, content: str)) -> None:
    """Extract metadata from JSON content."""

def _extract_structured_data((
        self, 
        entries: List[ArchiveEntry]
    )) -> tuple[List[Article], List[Category], List[ProjectVersion]]:
    """Extract structured data objects from parsed entries."""

def _create_article_from_entry((self, entry: ArchiveEntry)) -> Optional[Article]:
    """Create Article object from archive entry."""

def _create_category_from_entry((self, entry: ArchiveEntry)) -> Optional[Category]:
    """Create Category object from archive entry."""

def _create_project_from_entry((self, entry: ArchiveEntry)) -> Optional[ProjectVersion]:
    """Create ProjectVersion object from archive entry."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/archive/schema.py
# Language: python

import sqlite3
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional
from dataclasses import dataclass
from loguru import logger
from pydantic import BaseModel, Field
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity

class ArchiveSchema(B, a, s, e, M, o, d, e, l):
    """Schema configuration for archive database."""

class SchemaVersion:
    """Database schema version information."""

def create_archive_schema((db_path: Path, config: Optional[ArchiveSchema] = None)) -> None:
    """ Create complete archive database schema...."""

def _configure_database((cursor: sqlite3.Cursor, config: ArchiveSchema)) -> None:
    """Configure database settings."""

def _create_tables((cursor: sqlite3.Cursor, config: ArchiveSchema)) -> None:
    """Create database tables."""

def _create_indexes((cursor: sqlite3.Cursor)) -> None:
    """Create performance indexes."""

def _create_fts_tables((cursor: sqlite3.Cursor, config: ArchiveSchema)) -> None:
    """Create FTS tables and triggers."""

def _record_schema_version((cursor: sqlite3.Cursor, version: int)) -> None:
    """Record schema version in database."""

def migrate_archive_schema((db_path: Path, target_version: int = 1)) -> None:
    """ Migrate archive database schema to target version...."""

def _get_current_schema_version((cursor: sqlite3.Cursor)) -> int:
    """Get current schema version from database."""

def _migrate_to_version((cursor: sqlite3.Cursor, version: int)) -> None:
    """Migrate to specific schema version."""

def get_schema_info((db_path: Path)) -> Dict[str, Any]:
    """ Get information about the database schema...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/cli/__init__.py
# Language: python

from .main import D361CLI, main_cli


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/cli/main.py
# Language: python

import asyncio
import json
import logging
from pathlib import Path
from typing import Any, Optional
import fire
from rich import print as rprint
from rich.console import Console
from rich.progress import Progress, SpinnerColumn, TextColumn
from rich.table import Table
from ..plugins.manager import PluginManager
from ..providers.mock_provider import MockProvider
import traceback
import traceback

class D361CLI:
    """Document360 unified toolkit CLI application."""
    def __init__((self)):
        """Initialize CLI with global state."""
    def _setup_logging((self, debug: bool = False, verbose: bool = False)) -> None:
        """Set up logging based on debug/verbose flags."""
    def sync((
        self,
        source: str = "api",
        tokens: Optional[str] = None,
        output: str = "./docs",
        format: str = "markdown",  # noqa: A002
        category_id: Optional[int] = None,
        verbose: bool = False,
        debug: bool = False,
        config: Optional[str] = None,
    )) -> None:
        """Sync content from Document360 to local files."""
    def _sync_with_provider((
        self,
        provider: Any,
        output_dir: Path,
        output_format: str,
        category_id: Optional[int] = None,
    )) -> dict[str, Any]:
        """Perform sync operation with the given provider."""
    def convert((
        self,
        input_path: str,
        output: Optional[str] = None,
        from_format: str = "html",
        to_format: str = "markdown",
        plugin: Optional[str] = None,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
        """Convert content between formats using plugins."""
    def status((
        self,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
        """Show system status and health information."""
    def plugins((
        self,
        list_all: bool = False,
        show_formats: bool = False,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
        """Manage and view information about plugins."""
    def migrate((
        self,
        from_system: str,
        config: Optional[str] = None,
        output: Optional[str] = None,
        dry_run: bool = False,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
        """Migrate from legacy Document360 implementations."""

def __init__((self)):
    """Initialize CLI with global state."""

def _setup_logging((self, debug: bool = False, verbose: bool = False)) -> None:
    """Set up logging based on debug/verbose flags."""

def sync((
        self,
        source: str = "api",
        tokens: Optional[str] = None,
        output: str = "./docs",
        format: str = "markdown",  # noqa: A002
        category_id: Optional[int] = None,
        verbose: bool = False,
        debug: bool = False,
        config: Optional[str] = None,
    )) -> None:
    """Sync content from Document360 to local files."""

def _sync_with_provider((
        self,
        provider: Any,
        output_dir: Path,
        output_format: str,
        category_id: Optional[int] = None,
    )) -> dict[str, Any]:
    """Perform sync operation with the given provider."""

def convert((
        self,
        input_path: str,
        output: Optional[str] = None,
        from_format: str = "html",
        to_format: str = "markdown",
        plugin: Optional[str] = None,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
    """Convert content between formats using plugins."""

def status((
        self,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
    """Show system status and health information."""

def plugins((
        self,
        list_all: bool = False,
        show_formats: bool = False,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
    """Manage and view information about plugins."""

def migrate((
        self,
        from_system: str,
        config: Optional[str] = None,
        output: Optional[str] = None,
        dry_run: bool = False,
        verbose: bool = False,
        debug: bool = False,
    )) -> None:
    """Migrate from legacy Document360 implementations."""

def main_cli(()) -> None:
    """Entry point for the CLI application."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/__init__.py
# Language: python

from .schema import (
    # Enums
    Environment,
    LogLevel,
    CacheEvictionPolicy,
    SecretProvider,
    
    # Configuration Models
    AppConfig,
    ApiConfig,
    ArchiveConfig,
    ScrapingConfig,
    CacheConfig,
    MonitoringConfig,
    SecurityConfig,
    
    # Global Configuration Functions
    get_config,
    set_config,
    reset_config,
)
from .environment import (
    # Environment Loading
    EnvironmentLoader,
    ConfigFileHandler,
)
from .secrets import (
    # Secret Types and Models
    SecretType,
    SecretMetadata,
    SecretValue,
    
    # Provider Base Class
    SecretsProvider,
    
    # Concrete Providers
    EnvironmentSecretsProvider,
    LocalFileSecretsProvider,
    HashiCorpVaultProvider,
    
    # Provider Registry
    PROVIDER_REGISTRY,
    create_secrets_provider,
)
from .secrets_manager import (
    # Secrets Management
    SecretsManager,
    
    # Global Functions
    get_secrets_manager,
    set_secrets_manager,
    reset_secrets_manager,
)
from .loader import (
    # Configuration Loading
    ConfigLoader,
    ConfigValidator,
    
    # Global Functions
    get_config_loader,
    set_config_loader,
    reset_config_loader,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/environment.py
# Language: python

import os
import time
from pathlib import Path
from typing import Any, Dict, List, Optional, Union, Callable
from threading import Thread, Event
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler, FileModifiedEvent
from loguru import logger
from pydantic_settings import BaseSettings
from pydantic import BaseSettings
from .schema import AppConfig, Environment
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import json
import yaml

class ConfigFileHandler(F, i, l, e, S, y, s, t, e, m, E, v, e, n, t, H, a, n, d, l, e, r):
    """Handler for configuration file changes."""
    def __init__((self, config_paths: List[Path], callback: Callable[[Path], None])):
        """ Initialize file change handler...."""
    def on_modified((self, event)):
        """Handle file modification events."""

class EnvironmentLoader:
    """ Environment configuration loader with multiple source support...."""
    def __init__((
        self,
        base_config_dir: Optional[Path] = None,
        environment_override: Optional[str] = None
    )):
        """ Initialize environment loader...."""
    def detect_environment((self)) -> Environment:
        """ Detect the current deployment environment...."""
    def load_dotenv_file((self, env_file: Path)) -> Dict[str, str]:
        """ Load environment variables from .env file...."""
    def get_config_file_paths((self, environment: Environment)) -> List[Path]:
        """ Get configuration file paths for the environment...."""
    def get_env_file_paths((self, environment: Environment)) -> List[Path]:
        """ Get .env file paths for the environment...."""
    def load_from_files((self, environment: Environment)) -> Dict[str, Any]:
        """ Load configuration from files...."""
    def _load_config_file((self, config_path: Path)) -> Dict[str, Any]:
        """Load configuration from a specific file."""
    def merge_env_vars((self, base_data: Dict[str, Any], environment: Environment)) -> Dict[str, Any]:
        """ Merge environment variables into configuration data...."""
    def load_configuration((self, environment: Optional[Environment] = None)) -> AppConfig:
        """ Load complete configuration from all sources...."""
    def start_hot_reload((
        self,
        reload_callback: Callable[[AppConfig], None],
        poll_interval: float = 1.0
    )) -> None:
        """ Start hot-reloading configuration files for development...."""
    def stop_hot_reload((self)) -> None:
        """Stop hot-reloading configuration files."""
    def _handle_file_change((self, file_path: Path)) -> None:
        """Handle configuration file changes."""
    def get_config_summary((self)) -> Dict[str, Any]:
        """ Get summary of configuration loading...."""
    def __enter__((self)):
        """Context manager entry."""
    def __exit__((self, exc_type, exc_val, exc_tb)):
        """Context manager exit - cleanup resources."""

def __init__((self, config_paths: List[Path], callback: Callable[[Path], None])):
    """ Initialize file change handler...."""

def on_modified((self, event)):
    """Handle file modification events."""

def __init__((
        self,
        base_config_dir: Optional[Path] = None,
        environment_override: Optional[str] = None
    )):
    """ Initialize environment loader...."""

def detect_environment((self)) -> Environment:
    """ Detect the current deployment environment...."""

def load_dotenv_file((self, env_file: Path)) -> Dict[str, str]:
    """ Load environment variables from .env file...."""

def get_config_file_paths((self, environment: Environment)) -> List[Path]:
    """ Get configuration file paths for the environment...."""

def get_env_file_paths((self, environment: Environment)) -> List[Path]:
    """ Get .env file paths for the environment...."""

def load_from_files((self, environment: Environment)) -> Dict[str, Any]:
    """ Load configuration from files...."""

def _load_config_file((self, config_path: Path)) -> Dict[str, Any]:
    """Load configuration from a specific file."""

def merge_env_vars((self, base_data: Dict[str, Any], environment: Environment)) -> Dict[str, Any]:
    """ Merge environment variables into configuration data...."""

def load_configuration((self, environment: Optional[Environment] = None)) -> AppConfig:
    """ Load complete configuration from all sources...."""

def start_hot_reload((
        self,
        reload_callback: Callable[[AppConfig], None],
        poll_interval: float = 1.0
    )) -> None:
    """ Start hot-reloading configuration files for development...."""

def stop_hot_reload((self)) -> None:
    """Stop hot-reloading configuration files."""

def _handle_file_change((self, file_path: Path)) -> None:
    """Handle configuration file changes."""

def get_config_summary((self)) -> Dict[str, Any]:
    """ Get summary of configuration loading...."""

def __enter__((self)):
    """Context manager entry."""

def __exit__((self, exc_type, exc_val, exc_tb)):
    """Context manager exit - cleanup resources."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/loader.py
# Language: python

import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Tuple, Callable
from datetime import datetime
from loguru import logger
from pydantic import ValidationError
from .schema import AppConfig, Environment
from .environment import EnvironmentLoader
from .secrets_manager import SecretsManager
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity

class ConfigValidator:
    """ Configuration validator for production-specific rules...."""
    def __init__((self, environment: Environment)):
        """ Initialize configuration validator...."""
    def _add_default_rules((self)) -> None:
        """Add default validation rules."""
    def _validate_production_debug((self, config: AppConfig)) -> List[str]:
        """Validate debug settings for production."""
    def _validate_production_secrets((self, config: AppConfig)) -> List[str]:
        """Validate secrets configuration for production."""
    def _validate_production_monitoring((self, config: AppConfig)) -> List[str]:
        """Validate monitoring settings for production."""
    def _validate_production_security((self, config: AppConfig)) -> List[str]:
        """Validate security settings for production."""
    def _validate_resource_limits((self, config: AppConfig)) -> List[str]:
        """Validate resource limit settings."""
    def _validate_network_settings((self, config: AppConfig)) -> List[str]:
        """Validate network and timeout settings."""
    def _validate_database_settings((self, config: AppConfig)) -> List[str]:
        """Validate database and storage settings."""
    def validate((self, config: AppConfig)) -> List[str]:
        """ Validate configuration against all rules...."""
    def add_rule((self, rule: Callable[[AppConfig], List[str]])) -> None:
        """ Add a custom validation rule...."""

class ConfigLoader:
    """ Configuration orchestrator with hierarchical loading and validation...."""
    def __init__((
        self,
        base_config_dir: Optional[Path] = None,
        environment_override: Optional[str] = None,
        enable_secrets: bool = True,
        enable_hot_reload: bool = True
    )):
        """ Initialize configuration loader...."""
    def load_configuration((
        self,
        environment: Optional[Environment] = None,
        validate: bool = True,
        fail_on_validation_errors: bool = None
    )) -> AppConfig:
        """ Load complete configuration with validation...."""
    def _initialize_secrets_manager((self, security_config)) -> None:
        """Initialize secrets manager."""
    def _inject_secrets((self, config: AppConfig)) -> AppConfig:
        """Inject secrets into configuration."""
    def _validate_configuration((
        self,
        config: AppConfig,
        fail_on_errors: bool
    )) -> List[str]:
        """Validate configuration."""
    def _start_hot_reload((self, config: AppConfig)) -> None:
        """Start configuration hot-reloading."""
    def _handle_config_reload((self, new_config: AppConfig)) -> None:
        """Handle configuration reload."""
    def get_current_config((self)) -> Optional[AppConfig]:
        """Get the current configuration."""
    def reload_configuration((
        self,
        validate: bool = True,
        fail_on_validation_errors: bool = None
    )) -> AppConfig:
        """ Manually reload configuration...."""
    def get_config_summary((self)) -> Dict[str, Any]:
        """ Get summary of configuration loading...."""
    def cleanup((self)) -> None:
        """Cleanup configuration loader resources."""
    def __aenter__((self)):
        """Async context manager entry."""
    def __aexit__((self, exc_type, exc_val, exc_tb)):
        """Async context manager exit."""

def __init__((self, environment: Environment)):
    """ Initialize configuration validator...."""

def _add_default_rules((self)) -> None:
    """Add default validation rules."""

def _validate_production_debug((self, config: AppConfig)) -> List[str]:
    """Validate debug settings for production."""

def _validate_production_secrets((self, config: AppConfig)) -> List[str]:
    """Validate secrets configuration for production."""

def _validate_production_monitoring((self, config: AppConfig)) -> List[str]:
    """Validate monitoring settings for production."""

def _validate_production_security((self, config: AppConfig)) -> List[str]:
    """Validate security settings for production."""

def _validate_resource_limits((self, config: AppConfig)) -> List[str]:
    """Validate resource limit settings."""

def _validate_network_settings((self, config: AppConfig)) -> List[str]:
    """Validate network and timeout settings."""

def _validate_database_settings((self, config: AppConfig)) -> List[str]:
    """Validate database and storage settings."""

def validate((self, config: AppConfig)) -> List[str]:
    """ Validate configuration against all rules...."""

def add_rule((self, rule: Callable[[AppConfig], List[str]])) -> None:
    """ Add a custom validation rule...."""

def __init__((
        self,
        base_config_dir: Optional[Path] = None,
        environment_override: Optional[str] = None,
        enable_secrets: bool = True,
        enable_hot_reload: bool = True
    )):
    """ Initialize configuration loader...."""

def load_configuration((
        self,
        environment: Optional[Environment] = None,
        validate: bool = True,
        fail_on_validation_errors: bool = None
    )) -> AppConfig:
    """ Load complete configuration with validation...."""

def _initialize_secrets_manager((self, security_config)) -> None:
    """Initialize secrets manager."""

def _inject_secrets((self, config: AppConfig)) -> AppConfig:
    """Inject secrets into configuration."""

def _validate_configuration((
        self,
        config: AppConfig,
        fail_on_errors: bool
    )) -> List[str]:
    """Validate configuration."""

def _start_hot_reload((self, config: AppConfig)) -> None:
    """Start configuration hot-reloading."""

def _handle_config_reload((self, new_config: AppConfig)) -> None:
    """Handle configuration reload."""

def get_current_config((self)) -> Optional[AppConfig]:
    """Get the current configuration."""

def reload_configuration((
        self,
        validate: bool = True,
        fail_on_validation_errors: bool = None
    )) -> AppConfig:
    """ Manually reload configuration...."""

def get_config_summary((self)) -> Dict[str, Any]:
    """ Get summary of configuration loading...."""

def cleanup((self)) -> None:
    """Cleanup configuration loader resources."""

def __aenter__((self)):
    """Async context manager entry."""

def __aexit__((self, exc_type, exc_val, exc_tb)):
    """Async context manager exit."""

def get_config_loader((
    base_config_dir: Optional[Path] = None,
    environment_override: Optional[str] = None
)) -> ConfigLoader:
    """ Get the global configuration loader instance...."""

def set_config_loader((loader: ConfigLoader)) -> None:
    """ Set the global configuration loader instance...."""

def reset_config_loader(()) -> None:
    """Reset the global configuration loader instance."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/schema.py
# Language: python

import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Union
from enum import Enum
from loguru import logger
from pydantic_settings import BaseSettings
from pydantic import Field, field_validator, model_validator
from pydantic import BaseSettings, Field
from pydantic import validator as field_validator, root_validator as model_validator
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import json
import yaml
import json
import yaml

class Environment(s, t, r, ,,  , E, n, u, m):
    """Deployment environments."""

class LogLevel(s, t, r, ,,  , E, n, u, m):
    """Logging levels."""

class CacheEvictionPolicy(s, t, r, ,,  , E, n, u, m):
    """Cache eviction policies."""

class SecretProvider(s, t, r, ,,  , E, n, u, m):
    """Secret management providers."""

class ApiConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for API client operations."""

class Config:

class ArchiveConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for archive processing operations."""

class Config:

class ScrapingConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for web scraping operations."""

class Config:

class CacheConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for caching operations."""

class Config:

class MonitoringConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for monitoring and observability."""

class Config:

class SecurityConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """Configuration for security settings."""

class Config:

class AppConfig(B, a, s, e, S, e, t, t, i, n, g, s):
    """ Main application configuration with comprehensive settings...."""
    def is_development((self)) -> bool:
        """Check if running in development environment."""
    def is_production((self)) -> bool:
        """Check if running in production environment."""
    def is_testing((self)) -> bool:
        """Check if running in testing environment."""
    def get_feature_flag((self, feature_name: str, default: bool = False)) -> bool:
        """Get feature flag value with default fallback."""
    def validate_configuration((self)) -> List[str]:
        """ Validate the entire configuration and return list of issues...."""
    def to_dict((self, exclude_secrets: bool = True)) -> Dict[str, Any]:
        """ Convert configuration to dictionary...."""
    def save_to_file((self, config_path: Path, exclude_secrets: bool = True)) -> None:
        """ Save configuration to file...."""

class Config:

def validate_paths((cls, v)):
    """Validate and create directories if needed."""

def validate_disk_cache_dir((cls, v)):
    """Validate and create cache directory."""

def validate_and_create_directories((cls, v)):
    """Validate and create application directories."""

def validate_production_settings((self)):
    """Validate production-specific settings."""

def validate_component_consistency((self)):
    """Validate consistency across component configurations."""

def is_development((self)) -> bool:
    """Check if running in development environment."""

def is_production((self)) -> bool:
    """Check if running in production environment."""

def is_testing((self)) -> bool:
    """Check if running in testing environment."""

def get_feature_flag((self, feature_name: str, default: bool = False)) -> bool:
    """Get feature flag value with default fallback."""

def validate_configuration((self)) -> List[str]:
    """ Validate the entire configuration and return list of issues...."""

def to_dict((self, exclude_secrets: bool = True)) -> Dict[str, Any]:
    """ Convert configuration to dictionary...."""

def load_from_file((cls, config_path: Path)) -> AppConfig:
    """ Load configuration from file...."""

def save_to_file((self, config_path: Path, exclude_secrets: bool = True)) -> None:
    """ Save configuration to file...."""

def get_config(()) -> AppConfig:
    """ Get the global configuration instance...."""

def set_config((config: AppConfig)) -> None:
    """ Set the global configuration instance...."""

def reset_config(()) -> None:
    """Reset the global configuration instance."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/secrets.py
# Language: python

import json
import os
from abc import ABC, abstractmethod
from pathlib import Path
from typing import Any, Dict, List, Optional, Union, Set
from dataclasses import dataclass
from enum import Enum
from datetime import datetime, timedelta
from loguru import logger
from pydantic import BaseModel, Field, validator
from .schema import SecretProvider
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import base64
import base64
import base64
import base64
import hvac

class SecretType(s, t, r, ,,  , E, n, u, m):
    """Types of secrets that can be managed."""

class SecretMetadata:
    """Metadata associated with a secret."""
    def __post_init__((self)):
    def is_expired((self)) -> bool:
        """Check if the secret has expired."""
    def expires_soon((self, threshold_hours: int = 24)) -> bool:
        """Check if the secret expires within the threshold."""

class SecretValue(B, a, s, e, M, o, d, e, l):
    """Container for secret values with metadata."""
    def is_valid((self)) -> bool:
        """Check if the secret is valid (not expired)."""

class Config:

class SecretsProvider(A, B, C):
    """ Abstract base class for pluggable secrets management providers...."""
    def __init__((self, config: Dict[str, Any])):
        """ Initialize the secrets provider...."""
    def cleanup((self)) -> None:
        """Cleanup resources on provider shutdown."""

class EnvironmentSecretsProvider(S, e, c, r, e, t, s, P, r, o, v, i, d, e, r):
    """ Secrets provider that uses environment variables...."""
    def __init__((self, config: Dict[str, Any])):
    def initialize((self)) -> None:
        """Initialize environment provider."""
    def get_secret((self, secret_id: str)) -> SecretValue:
        """Get secret from environment variable."""
    def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
        """Set secret as environment variable."""
    def delete_secret((self, secret_id: str)) -> bool:
        """Delete secret from environment."""
    def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
        """List secrets from environment variables."""
    def health_check((self)) -> bool:
        """Environment provider is always healthy."""

class LocalFileSecretsProvider(S, e, c, r, e, t, s, P, r, o, v, i, d, e, r):
    """ Secrets provider that uses encrypted local JSON files...."""
    def __init__((self, config: Dict[str, Any])):
    def initialize((self)) -> None:
        """Initialize local file provider."""
    def _get_secret_file_path((self, secret_id: str)) -> Path:
        """Get the file path for a secret."""
    def _encrypt_value((self, value: str)) -> str:
        """Encrypt a secret value (placeholder implementation)."""
    def _decrypt_value((self, encrypted_value: str)) -> str:
        """Decrypt a secret value (placeholder implementation)."""
    def get_secret((self, secret_id: str)) -> SecretValue:
        """Get secret from local file."""
    def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
        """Store secret in local file."""
    def delete_secret((self, secret_id: str)) -> bool:
        """Delete secret file."""
    def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
        """List secrets from local files."""
    def health_check((self)) -> bool:
        """Check if secrets directory is accessible."""

class HashiCorpVaultProvider(S, e, c, r, e, t, s, P, r, o, v, i, d, e, r):
    """ Secrets provider for HashiCorp Vault...."""
    def __init__((self, config: Dict[str, Any])):
    def initialize((self)) -> None:
        """Initialize Vault client."""
    def _get_vault_path((self, secret_id: str)) -> str:
        """Get the Vault path for a secret."""
    def get_secret((self, secret_id: str)) -> SecretValue:
        """Get secret from Vault."""
    def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
        """Store secret in Vault."""
    def delete_secret((self, secret_id: str)) -> bool:
        """Delete secret from Vault."""
    def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
        """List secrets from Vault."""
    def health_check((self)) -> bool:
        """Check Vault health."""

def __post_init__((self)):

def is_expired((self)) -> bool:
    """Check if the secret has expired."""

def expires_soon((self, threshold_hours: int = 24)) -> bool:
    """Check if the secret expires within the threshold."""

def is_valid((self)) -> bool:
    """Check if the secret is valid (not expired)."""

def __init__((self, config: Dict[str, Any])):
    """ Initialize the secrets provider...."""

def initialize((self)) -> None:
    """Initialize the provider connection and authentication."""

def get_secret((self, secret_id: str)) -> SecretValue:
    """ Get a secret by ID...."""

def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
    """ Store a secret...."""

def delete_secret((self, secret_id: str)) -> bool:
    """ Delete a secret...."""

def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
    """ List available secrets...."""

def health_check((self)) -> bool:
    """ Check if the provider is healthy...."""

def cleanup((self)) -> None:
    """Cleanup resources on provider shutdown."""

def __init__((self, config: Dict[str, Any])):

def initialize((self)) -> None:
    """Initialize environment provider."""

def get_secret((self, secret_id: str)) -> SecretValue:
    """Get secret from environment variable."""

def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
    """Set secret as environment variable."""

def delete_secret((self, secret_id: str)) -> bool:
    """Delete secret from environment."""

def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
    """List secrets from environment variables."""

def health_check((self)) -> bool:
    """Environment provider is always healthy."""

def __init__((self, config: Dict[str, Any])):

def initialize((self)) -> None:
    """Initialize local file provider."""

def _get_secret_file_path((self, secret_id: str)) -> Path:
    """Get the file path for a secret."""

def _encrypt_value((self, value: str)) -> str:
    """Encrypt a secret value (placeholder implementation)."""

def _decrypt_value((self, encrypted_value: str)) -> str:
    """Decrypt a secret value (placeholder implementation)."""

def get_secret((self, secret_id: str)) -> SecretValue:
    """Get secret from local file."""

def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
    """Store secret in local file."""

def delete_secret((self, secret_id: str)) -> bool:
    """Delete secret file."""

def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
    """List secrets from local files."""

def health_check((self)) -> bool:
    """Check if secrets directory is accessible."""

def __init__((self, config: Dict[str, Any])):

def initialize((self)) -> None:
    """Initialize Vault client."""

def _get_vault_path((self, secret_id: str)) -> str:
    """Get the Vault path for a secret."""

def get_secret((self, secret_id: str)) -> SecretValue:
    """Get secret from Vault."""

def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
    """Store secret in Vault."""

def delete_secret((self, secret_id: str)) -> bool:
    """Delete secret from Vault."""

def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
    """List secrets from Vault."""

def health_check((self)) -> bool:
    """Check Vault health."""

def create_secrets_provider((provider_type: SecretProvider, config: Dict[str, Any])) -> SecretsProvider:
    """ Factory function to create a secrets provider...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/config/secrets_manager.py
# Language: python

import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Tuple
from datetime import datetime
from loguru import logger
from .schema import SecretProvider, SecurityConfig
from .secrets import (
    SecretsProvider,
    SecretValue,
    SecretMetadata,
    SecretType,
    create_secrets_provider,
    PROVIDER_REGISTRY
)
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import hvac
import boto3

class SecretsManager:
    """ Central secrets management orchestrator with auto-detection...."""
    def __init__((self, config: Optional[SecurityConfig] = None)):
        """ Initialize secrets manager...."""
    def initialize((self)) -> None:
        """Initialize the secrets manager and providers."""
    def _initialize_primary_provider((self)) -> None:
        """Initialize the primary secrets provider."""
    def _initialize_fallback_providers((self)) -> None:
        """Initialize fallback providers for redundancy."""
    def _get_fallback_config((self, provider_type: SecretProvider)) -> Dict[str, Any]:
        """Get basic configuration for fallback providers."""
    def _detect_best_provider((self)) -> SecretProvider:
        """ Auto-detect the best available secrets provider...."""
    def _is_vault_available((self)) -> bool:
        """Check if HashiCorp Vault is available."""
    def _is_aws_available((self)) -> bool:
        """Check if AWS Secrets Manager is available."""
    def get_secret((self, secret_id: str)) -> SecretValue:
        """ Get a secret with automatic fallback...."""
    def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
        """ Store a secret using the primary provider...."""
    def delete_secret((self, secret_id: str)) -> bool:
        """ Delete a secret from the primary provider...."""
    def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
        """ List secrets from the primary provider...."""
    def health_check((self)) -> Dict[str, bool]:
        """ Check health of all providers...."""
    def get_provider_info((self)) -> Dict[str, Any]:
        """ Get information about configured providers...."""
    def rotate_secrets((
        self,
        secret_ids: Optional[List[str]] = None,
        secret_types: Optional[List[SecretType]] = None
    )) -> Dict[str, bool]:
        """ Rotate secrets based on IDs or types...."""
    def cleanup((self)) -> None:
        """Cleanup all providers."""
    def __aenter__((self)):
        """Async context manager entry."""
    def __aexit__((self, exc_type, exc_val, exc_tb)):
        """Async context manager exit."""

def __init__((self, config: Optional[SecurityConfig] = None)):
    """ Initialize secrets manager...."""

def initialize((self)) -> None:
    """Initialize the secrets manager and providers."""

def _initialize_primary_provider((self)) -> None:
    """Initialize the primary secrets provider."""

def _initialize_fallback_providers((self)) -> None:
    """Initialize fallback providers for redundancy."""

def _get_fallback_config((self, provider_type: SecretProvider)) -> Dict[str, Any]:
    """Get basic configuration for fallback providers."""

def _detect_best_provider((self)) -> SecretProvider:
    """ Auto-detect the best available secrets provider...."""

def _is_vault_available((self)) -> bool:
    """Check if HashiCorp Vault is available."""

def _is_aws_available((self)) -> bool:
    """Check if AWS Secrets Manager is available."""

def get_secret((self, secret_id: str)) -> SecretValue:
    """ Get a secret with automatic fallback...."""

def set_secret((
        self,
        secret_id: str,
        value: str,
        secret_type: SecretType,
        metadata: Optional[Dict[str, Any]] = None
    )) -> SecretMetadata:
    """ Store a secret using the primary provider...."""

def delete_secret((self, secret_id: str)) -> bool:
    """ Delete a secret from the primary provider...."""

def list_secrets((
        self,
        secret_type: Optional[SecretType] = None,
        tags: Optional[Dict[str, str]] = None
    )) -> List[SecretMetadata]:
    """ List secrets from the primary provider...."""

def health_check((self)) -> Dict[str, bool]:
    """ Check health of all providers...."""

def get_provider_info((self)) -> Dict[str, Any]:
    """ Get information about configured providers...."""

def rotate_secrets((
        self,
        secret_ids: Optional[List[str]] = None,
        secret_types: Optional[List[SecretType]] = None
    )) -> Dict[str, bool]:
    """ Rotate secrets based on IDs or types...."""

def cleanup((self)) -> None:
    """Cleanup all providers."""

def __aenter__((self)):
    """Async context manager entry."""

def __aexit__((self, exc_type, exc_val, exc_tb)):
    """Async context manager exit."""

def get_secrets_manager((config: Optional[SecurityConfig] = None)) -> SecretsManager:
    """ Get the global secrets manager instance...."""

def set_secrets_manager((manager: SecretsManager)) -> None:
    """ Set the global secrets manager instance...."""

def reset_secrets_manager(()) -> None:
    """Reset the global secrets manager instance."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/core/interfaces.py
# Language: python

from abc import abstractmethod
from typing import Any, AsyncIterator, Protocol, runtime_checkable
from pydantic import BaseModel
from .models import Article, Category, ProjectVersion

class DataProvider(P, r, o, t, o, c, o, l):
    """Protocol for data providers that can fetch Document360 content."""

class ContentWriter(P, r, o, t, o, c, o, l):
    """Protocol for content writers that can output content in various formats."""

class ConvertedContent(B, a, s, e, M, o, d, e, l):
    """Result of a content conversion operation."""

class ConverterPlugin(P, r, o, t, o, c, o, l):
    """Protocol for converter plugins that transform content between formats."""

class CacheProvider(P, r, o, t, o, c, o, l):
    """Protocol for cache providers that can store and retrieve cached data."""

class SecretsProvider(P, r, o, t, o, c, o, l):
    """Protocol for secrets providers that can retrieve sensitive configuration."""

def get_article((self, article_id: int, **kwargs: Any)) -> Article:
    """Fetch a single article by ID."""

def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
    """List articles with optional filtering."""

def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream all articles for memory-efficient processing."""

def get_category((self, category_id: int, **kwargs: Any)) -> Category:
    """Fetch a single category by ID."""

def list_categories((self, **kwargs: Any)) -> list[Category]:
    """List all categories."""

def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
    """Get project version information."""

def write_article((self, article: Article, destination: str, **kwargs: Any)) -> bool:
    """Write an article to the specified destination."""

def write_articles_batch((
        self, articles: list[Article], destination: str, **kwargs: Any
    )) -> dict[str, bool]:
    """Write multiple articles in a batch operation."""

def convert((self, content: str, **options: Any)) -> ConvertedContent:
    """Convert content from one format to another."""

def supported_formats((self)) -> tuple[str, str]:
    """Get the supported format conversion pair."""

def plugin_name((self)) -> str:
    """Get the plugin name for identification."""

def get((self, key: str)) -> Any | None:
    """Get a value from the cache."""

def set((self, key: str, value: Any, ttl: int | None = None)) -> bool:
    """Set a value in the cache."""

def delete((self, key: str)) -> bool:
    """Delete a value from the cache."""

def clear((self)) -> bool:
    """Clear all cached values."""

def get_secret((self, key: str)) -> str | None:
    """Retrieve a secret value."""

def list_secrets((self, prefix: str = "")) -> list[str]:
    """List available secret keys."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/core/models.py
# Language: python

from datetime import datetime
from enum import Enum
from typing import Any, Union
from pydantic import BaseModel, ConfigDict, Field, computed_field
import re

class ContentType(s, t, r, ,,  , E, n, u, m):
    """Enumeration of supported content types."""

class PublishStatus(s, t, r, ,,  , E, n, u, m):
    """Enumeration of publication statuses."""

class Article(B, a, s, e, M, o, d, e, l):
    """Canonical article model representing a Document360 article."""
    def __str__((self)) -> str:

class Category(B, a, s, e, M, o, d, e, l):
    """Canonical category model representing a Document360 category."""
    def __str__((self)) -> str:

class ProjectVersion(B, a, s, e, M, o, d, e, l):
    """Canonical project version model representing Document360 project metadata."""
    def __str__((self)) -> str:

class SearchResult(B, a, s, e, M, o, d, e, l):
    """Model for search results containing multiple content types."""
    def __str__((self)) -> str:

class BulkOperation(B, a, s, e, M, o, d, e, l):
    """Model for tracking bulk operations on content."""
    def __str__((self)) -> str:

def word_count((self)) -> int:
    """Calculate word count from content."""

def reading_time_minutes((self)) -> int:
    """Estimate reading time in minutes (assuming 200 words per minute)."""

def is_published((self)) -> bool:
    """Check if article is in published state."""

def __str__((self)) -> str:

def is_root_category((self)) -> bool:
    """Check if this is a root-level category."""

def full_name((self)) -> str:
    """Get the full hierarchical name."""

def __str__((self)) -> str:

def full_project_name((self)) -> str:
    """Get the full project name with version."""

def __str__((self)) -> str:

def has_results((self)) -> bool:
    """Check if search returned any results."""

def __str__((self)) -> str:

def progress_percentage((self)) -> float:
    """Calculate completion percentage."""

def is_completed((self)) -> bool:
    """Check if operation is completed."""

def success_rate((self)) -> float:
    """Calculate success rate as percentage."""

def __str__((self)) -> str:


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/core/transformers.py
# Language: python

import re
from datetime import datetime
from typing import Any
from .models import Article, Category, ProjectVersion, PublishStatus

class ModelTransformer:
    """Centralized transformer for converting data into canonical models."""

def from_api_response((data: dict[str, Any], content_type: str = "article")) -> Article | Category | ProjectVersion:
    """Transform API response data into canonical models."""

def _transform_api_article((data: dict[str, Any])) -> Article:
    """Transform API article response to canonical Article model."""

def _transform_api_category((data: dict[str, Any])) -> Category:
    """Transform API category response to canonical Category model."""

def _transform_api_project((data: dict[str, Any])) -> ProjectVersion:
    """Transform API project response to canonical ProjectVersion model."""

def from_archive_metadata((data: dict[str, Any], content_type: str = "article")) -> Article | Category | ProjectVersion:
    """Transform archive metadata into canonical models."""

def _transform_archive_article((data: dict[str, Any])) -> Article:
    """Transform archive article data to canonical Article model."""

def _transform_archive_category((data: dict[str, Any])) -> Category:
    """Transform archive category data to canonical Category model."""

def _transform_archive_project((data: dict[str, Any])) -> ProjectVersion:
    """Transform archive project data to canonical ProjectVersion model."""

def to_legacy_format((model: Article | Category | ProjectVersion, format_name: str)) -> dict[str, Any]:
    """Transform canonical models to legacy formats for backward compatibility."""

def _article_to_legacy((article: Article, format_name: str)) -> dict[str, Any]:
    """Convert Article model to legacy format."""

def _category_to_legacy((category: Category, format_name: str)) -> dict[str, Any]:
    """Convert Category model to legacy format."""

def _project_to_legacy((project: ProjectVersion, format_name: str)) -> dict[str, Any]:
    """Convert ProjectVersion model to legacy format."""

def _parse_timestamp((value: Any)) -> datetime:
    """Parse various timestamp formats into datetime objects."""

def _parse_tags((tags: Any)) -> list[str]:
    """Parse tags from various formats into a list of strings."""


<document index="44">
<source>src/d361/edit/SPEC.md</source>
<document_content>
# A Human-Friendly Python Package for Document360: `d361util`

This document outlines the design and specification for a Python package, `d361util`, built on top of the auto-generated `d361api` package.  The goal of `d361util` is to provide a simplified, user-friendly interface for interacting with a Document360 knowledge base, abstracting away the complexities of the raw API and presenting a filesystem-like structure for managing articles and categories. This will allow users to easily synchronize local Markdown files with their Document360 cloud storage.


</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/http/__init__.py
# Language: python

from .client import (
    HttpMethod,
    HttpResponse, 
    RetryConfig,
    RequestMetrics,
    UnifiedHttpClient,
    create_http_client,
)
from .client import (
    HttpError,
    HttpClientError,
    HttpServerError,
    HttpTimeoutError,
    HttpNetworkError,
)
from .compatibility import (
    AiohttpResponse,
    AiohttpSession,
    ClientSession,
    MigrationHelper,
    session,
)

def get((url: str, **kwargs)) -> HttpResponse:
    """ Convenience function for making GET requests...."""

def post((url: str, **kwargs)) -> HttpResponse:
    """ Convenience function for making POST requests...."""

def put((url: str, **kwargs)) -> HttpResponse:
    """ Convenience function for making PUT requests...."""

def delete((url: str, **kwargs)) -> HttpResponse:
    """ Convenience function for making DELETE requests...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/http/client.py
# Language: python

import asyncio
import time
from contextlib import asynccontextmanager
from contextvars import ContextVar
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, AsyncGenerator, Dict, List, Optional, Union
import httpx
from loguru import logger
from pydantic import BaseModel, Field
from tenacity import (
    AsyncRetrying,
    retry_if_exception_type,
    stop_after_attempt,
    wait_exponential,
)
import json

class HttpMethod(s, t, r, ,,  , E, n, u, m):
    """Supported HTTP methods."""

class RetryConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for retry behavior."""

class RequestMetrics(B, a, s, e, M, o, d, e, l):
    """Metrics captured for each HTTP request."""

class HttpResponse:
    """Enhanced response wrapper with additional metadata."""

class HttpError(E, x, c, e, p, t, i, o, n):
    """Base exception for HTTP operations."""
    def __init__((self, message: str, response: Optional[HttpResponse] = None)):

class HttpClientError(H, t, t, p, E, r, r, o, r):
    """Exception for 4xx client errors."""

class HttpServerError(H, t, t, p, E, r, r, o, r):
    """Exception for 5xx server errors."""

class HttpTimeoutError(H, t, t, p, E, r, r, o, r):
    """Exception for timeout errors."""

class HttpNetworkError(H, t, t, p, E, r, r, o, r):
    """Exception for network connectivity errors."""

class UnifiedHttpClient:
    """ Enterprise-grade HTTP client with retries, logging, and middleware...."""
    def __init__((
        self,
        base_url: Optional[str] = None,
        timeout: float = 30.0,
        retry_config: Optional[RetryConfig] = None,
        default_headers: Optional[Dict[str, str]] = None,
        verify_ssl: bool = True,
        follow_redirects: bool = True,
        max_connections: int = 100,
        max_keepalive_connections: int = 20,
    )):
    def __aenter__((self)):
        """Async context manager entry."""
    def __aexit__((self, exc_type, exc_val, exc_tb)):
        """Async context manager exit."""
    def close((self)):
        """Close the underlying HTTP client."""
    def add_request_middleware((self, middleware: callable)):
        """Add middleware that processes requests before sending."""
    def add_response_middleware((self, middleware: callable)):
        """Add middleware that processes responses after receiving."""
    def _apply_request_middleware((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Apply all request middleware in order."""
    def _apply_response_middleware((self, response: HttpResponse)) -> HttpResponse:
        """Apply all response middleware in order."""
    def _call_middleware((self, middleware: callable, data: Any)) -> Any:
        """Call middleware function, handling both sync and async."""
    def _should_retry((self, exception: Exception, response: Optional[HttpResponse] = None)) -> bool:
        """Determine if request should be retried based on config."""
    def _make_request((
        self,
        method: HttpMethod,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        params: Optional[Dict[str, Any]] = None,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        files: Optional[Dict[str, Any]] = None,
        **kwargs,
    )) -> HttpResponse:
        """ Make HTTP request with retries, logging, and error handling...."""
    def get((
        self,
        url: str,
        params: Optional[Dict[str, Any]] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make GET request."""
    def post((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make POST request."""
    def put((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make PUT request."""
    def patch((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make PATCH request."""
    def delete((
        self,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make DELETE request."""
    def head((
        self,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
        """Make HEAD request."""

def is_success((self)) -> bool:
    """Check if response indicates success."""

def is_client_error((self)) -> bool:
    """Check if response indicates client error."""

def is_server_error((self)) -> bool:
    """Check if response indicates server error."""

def __init__((self, message: str, response: Optional[HttpResponse] = None)):

def __init__((
        self,
        base_url: Optional[str] = None,
        timeout: float = 30.0,
        retry_config: Optional[RetryConfig] = None,
        default_headers: Optional[Dict[str, str]] = None,
        verify_ssl: bool = True,
        follow_redirects: bool = True,
        max_connections: int = 100,
        max_keepalive_connections: int = 20,
    )):

def __aenter__((self)):
    """Async context manager entry."""

def __aexit__((self, exc_type, exc_val, exc_tb)):
    """Async context manager exit."""

def close((self)):
    """Close the underlying HTTP client."""

def add_request_middleware((self, middleware: callable)):
    """Add middleware that processes requests before sending."""

def add_response_middleware((self, middleware: callable)):
    """Add middleware that processes responses after receiving."""

def _apply_request_middleware((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Apply all request middleware in order."""

def _apply_response_middleware((self, response: HttpResponse)) -> HttpResponse:
    """Apply all response middleware in order."""

def _call_middleware((self, middleware: callable, data: Any)) -> Any:
    """Call middleware function, handling both sync and async."""

def _should_retry((self, exception: Exception, response: Optional[HttpResponse] = None)) -> bool:
    """Determine if request should be retried based on config."""

def _make_request((
        self,
        method: HttpMethod,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        params: Optional[Dict[str, Any]] = None,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        files: Optional[Dict[str, Any]] = None,
        **kwargs,
    )) -> HttpResponse:
    """ Make HTTP request with retries, logging, and error handling...."""

def get((
        self,
        url: str,
        params: Optional[Dict[str, Any]] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make GET request."""

def post((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make POST request."""

def put((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make PUT request."""

def patch((
        self,
        url: str,
        json_data: Optional[Dict[str, Any]] = None,
        data: Optional[Any] = None,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make PATCH request."""

def delete((
        self,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make DELETE request."""

def head((
        self,
        url: str,
        headers: Optional[Dict[str, str]] = None,
        **kwargs,
    )) -> HttpResponse:
    """Make HEAD request."""

def session((self)) -> AsyncGenerator[UnifiedHttpClient, None]:
    """Create a session context for multiple requests."""

def create_http_client((
    base_url: Optional[str] = None,
    timeout: float = 30.0,
    max_retries: int = 3,
    verify_ssl: bool = True,
    retry_config: Optional[RetryConfig] = None,
    **kwargs,
)) -> UnifiedHttpClient:
    """ Factory function to create configured HTTP client...."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/http/compatibility.py
# Language: python

import asyncio
import warnings
from contextlib import asynccontextmanager
from typing import Any, AsyncGenerator, Dict, List, Optional, Union
from urllib.parse import urljoin
from loguru import logger
from .client import HttpResponse, UnifiedHttpClient, create_http_client
import json
from .client import HttpClientError
from .client import HttpServerError
from .client import HttpMethod

class AiohttpResponse:
    """ Compatibility wrapper that mimics aiohttp.ClientResponse interface...."""
    def __init__((self, http_response: HttpResponse)):
    def ok((self)) -> bool:
        """Check if response is successful."""
    def text((self, encoding: Optional[str] = None)) -> str:
        """Get response text."""
    def json((self, **kwargs)) -> Any:
        """Get response JSON."""
    def read((self)) -> bytes:
        """Get response content as bytes."""
    def raise_for_status((self)) -> None:
        """Raise exception for HTTP error status."""
    def __aenter__((self)):
    def __aexit__((self, exc_type, exc_val, exc_tb)):
    def close((self)):
        """Close the response."""

class AiohttpSession:
    """ Compatibility wrapper that mimics aiohttp.ClientSession interface...."""
    def __init__((
        self,
        base_url: Optional[str] = None,
        timeout: Optional[Union[float, Dict[str, float]]] = None,
        headers: Optional[Dict[str, str]] = None,
        trust_env: bool = True,
        connector: Optional[Any] = None,
        **kwargs,
    )):
    def __aenter__((self)):
    def __aexit__((self, exc_type, exc_val, exc_tb)):
    def close((self)):
        """Close the session."""
    def _ensure_not_closed((self)):
        """Ensure session is not closed."""
    def _make_request((
        self,
        method: str,
        url: str,
        **kwargs,
    )) -> AiohttpResponse:
        """Make request and wrap response in compatibility layer."""
    def get((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make GET request."""
    def post((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make POST request."""
    def put((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make PUT request."""
    def patch((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make PATCH request."""
    def delete((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make DELETE request."""
    def head((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make HEAD request."""
    def options((self, url: str, **kwargs)) -> AiohttpResponse:
        """Make OPTIONS request."""
    def request((self, method: str, url: str, **kwargs)) -> AiohttpResponse:
        """Make request with specified method."""

class MigrationHelper:
    """Helper class for migrating from aiohttp to UnifiedHttpClient."""

def __init__((self, http_response: HttpResponse)):

def status((self)) -> int:
    """HTTP status code."""

def headers((self)) -> Dict[str, str]:
    """Response headers."""

def url((self)) -> str:
    """Response URL."""

def content_type((self)) -> str:
    """Content type from headers."""

def charset((self)) -> Optional[str]:
    """Character encoding from content type."""

def content_length((self)) -> Optional[int]:
    """Content length from headers."""

def closed((self)) -> bool:
    """Whether response is closed."""

def ok((self)) -> bool:
    """Check if response is successful."""

def text((self, encoding: Optional[str] = None)) -> str:
    """Get response text."""

def json((self, **kwargs)) -> Any:
    """Get response JSON."""

def read((self)) -> bytes:
    """Get response content as bytes."""

def raise_for_status((self)) -> None:
    """Raise exception for HTTP error status."""

def __aenter__((self)):

def __aexit__((self, exc_type, exc_val, exc_tb)):

def close((self)):
    """Close the response."""

def __init__((
        self,
        base_url: Optional[str] = None,
        timeout: Optional[Union[float, Dict[str, float]]] = None,
        headers: Optional[Dict[str, str]] = None,
        trust_env: bool = True,
        connector: Optional[Any] = None,
        **kwargs,
    )):

def closed((self)) -> bool:
    """Whether session is closed."""

def __aenter__((self)):

def __aexit__((self, exc_type, exc_val, exc_tb)):

def close((self)):
    """Close the session."""

def _ensure_not_closed((self)):
    """Ensure session is not closed."""

def _make_request((
        self,
        method: str,
        url: str,
        **kwargs,
    )) -> AiohttpResponse:
    """Make request and wrap response in compatibility layer."""

def get((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make GET request."""

def post((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make POST request."""

def put((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make PUT request."""

def patch((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make PATCH request."""

def delete((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make DELETE request."""

def head((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make HEAD request."""

def options((self, url: str, **kwargs)) -> AiohttpResponse:
    """Make OPTIONS request."""

def request((self, method: str, url: str, **kwargs)) -> AiohttpResponse:
    """Make request with specified method."""

def ClientSession((*args, **kwargs)) -> AiohttpSession:
    """ Create AiohttpSession for backward compatibility...."""

def session((*args, **kwargs)) -> AsyncGenerator[AiohttpSession, None]:
    """ Context manager for creating aiohttp-compatible session...."""

def convert_aiohttp_timeout((aiohttp_timeout: Any)) -> float:
    """Convert aiohttp timeout to simple timeout value."""

def get_migration_guide(()) -> str:
    """Get migration guide text."""

def log_migration_suggestion((context: str)):
    """Log suggestion to migrate from compatibility layer."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/http/middleware.py
# Language: python

import time
import uuid
from typing import Any, Dict, Optional
from urllib.parse import urlparse
from loguru import logger
from .client import HttpResponse, RequestMetrics
import base64
import json
import asyncio

class AuthenticationMiddleware:
    """Middleware for handling various authentication methods."""
    def __init__((
        self,
        auth_type: str = "bearer",
        token: Optional[str] = None,
        api_key: Optional[str] = None,
        api_key_header: str = "X-API-Key",
        username: Optional[str] = None,
        password: Optional[str] = None,
    )):
    def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Add authentication headers to request."""

class RequestIdMiddleware:
    """Middleware for adding unique request IDs for correlation."""
    def __init__((self, header_name: str = "X-Request-ID")):
    def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Add unique request ID to headers."""

class UserAgentMiddleware:
    """Middleware for setting consistent User-Agent headers."""
    def __init__((self, user_agent: str = "d361-http-client/1.0")):
    def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Set User-Agent header."""

class SecurityHeadersMiddleware:
    """Middleware for adding security-related headers."""
    def __init__((self, enable_all: bool = True)):
    def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Add security headers to request."""

class LoggingMiddleware:
    """Middleware for detailed request/response logging."""
    def __init__((
        self, 
        log_requests: bool = True,
        log_responses: bool = True,
        log_body: bool = False,
        max_body_size: int = 1000,
    )):
    def log_request((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Log outgoing request details."""
    def log_response((self, response: HttpResponse)) -> HttpResponse:
        """Log incoming response details."""
    def __call__((self, data: Any)) -> Any:
        """Handle both request and response logging."""

class MetricsMiddleware:
    """Middleware for collecting HTTP request metrics."""
    def __init__((self)):
    def __call__((self, response: HttpResponse)) -> HttpResponse:
        """Collect metrics from response."""
    def get_metrics((self)) -> Dict[str, Any]:
        """Get current metrics summary."""

class RateLimitMiddleware:
    """Middleware for simple rate limiting."""
    def __init__((self, max_requests: int = 60, time_window: int = 60)):
    def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
        """Check rate limit before making request."""

class RetryMetricsMiddleware:
    """Middleware for tracking retry statistics."""
    def __init__((self)):
    def __call__((self, response: HttpResponse)) -> HttpResponse:
        """Track retry metrics from response."""
    def _get_url_pattern((self, url: str)) -> str:
        """Extract URL pattern for grouping."""
    def get_retry_stats((self)) -> Dict[str, Any]:
        """Get retry statistics."""

def __init__((
        self,
        auth_type: str = "bearer",
        token: Optional[str] = None,
        api_key: Optional[str] = None,
        api_key_header: str = "X-API-Key",
        username: Optional[str] = None,
        password: Optional[str] = None,
    )):

def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Add authentication headers to request."""

def __init__((self, header_name: str = "X-Request-ID")):

def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Add unique request ID to headers."""

def __init__((self, user_agent: str = "d361-http-client/1.0")):

def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Set User-Agent header."""

def __init__((self, enable_all: bool = True)):

def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Add security headers to request."""

def __init__((
        self, 
        log_requests: bool = True,
        log_responses: bool = True,
        log_body: bool = False,
        max_body_size: int = 1000,
    )):

def log_request((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Log outgoing request details."""

def log_response((self, response: HttpResponse)) -> HttpResponse:
    """Log incoming response details."""

def __call__((self, data: Any)) -> Any:
    """Handle both request and response logging."""

def __init__((self)):

def __call__((self, response: HttpResponse)) -> HttpResponse:
    """Collect metrics from response."""

def get_metrics((self)) -> Dict[str, Any]:
    """Get current metrics summary."""

def __init__((self, max_requests: int = 60, time_window: int = 60)):

def __call__((self, request_data: Dict[str, Any])) -> Dict[str, Any]:
    """Check rate limit before making request."""

def __init__((self)):

def __call__((self, response: HttpResponse)) -> HttpResponse:
    """Track retry metrics from response."""

def _get_url_pattern((self, url: str)) -> str:
    """Extract URL pattern for grouping."""

def get_retry_stats((self)) -> Dict[str, Any]:
    """Get retry statistics."""

def create_auth_middleware((
    auth_type: str = "bearer",
    token: Optional[str] = None,
    **kwargs,
)) -> AuthenticationMiddleware:
    """Create authentication middleware with given configuration."""

def create_logging_middleware((
    log_requests: bool = True,
    log_responses: bool = True,
    log_body: bool = False,
)) -> LoggingMiddleware:
    """Create logging middleware with given configuration."""

def create_metrics_middleware(()) -> MetricsMiddleware:
    """Create metrics collection middleware."""

def create_security_middleware(()) -> SecurityHeadersMiddleware:
    """Create security headers middleware."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/__init__.py
# Language: python

from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.mkdocs.exporters.navigation_builder import NavigationBuilder
from d361.mkdocs.exporters.theme_optimizer import ThemeOptimizer
from d361.mkdocs.processors.markdown_processor import MarkdownProcessor
from d361.mkdocs.processors.content_enhancer import ContentEnhancer
from d361.mkdocs.processors.cross_reference_resolver import CrossReferenceResolver, LinkReference, AnchorReference
from d361.mkdocs.processors.asset_manager import AssetManager, AssetReference, OptimizationResult
from d361.mkdocs.processors.plugin_manager import (
    PluginManager,
    PluginConfig,
    PluginSet,
    MarkdownExtensionManager,
)
from d361.mkdocs.processors.seo_optimizer import (
    SEOOptimizer,
    SEOMetadata,
    StructuredData,
)
from d361.mkdocs.processors.accessibility_optimizer import (
    AccessibilityOptimizer,
    AccessibilityReport,
    AccessibilityIssue,
    WCAGLevel,
    ContrastRatio,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/exporters/__init__.py
# Language: python

from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.mkdocs.exporters.navigation_builder import NavigationBuilder
from d361.mkdocs.exporters.theme_optimizer import ThemeOptimizer


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/exporters/config_generator.py
# Language: python

import yaml
from pathlib import Path
from typing import Dict, Any, List, Optional, Union
from jinja2 import Environment, PackageLoader, select_autoescape, Template, TemplateError, TemplateSyntaxError
from loguru import logger
from d361.api.errors import Document360Error, ErrorCategory, ErrorSeverity

class ConfigGenerator:
    """Generate MkDocs configuration files with theme and plugin support."""
    def __init__((
        self,
        theme: str = "material",
        enable_plugins: bool = True,
        template_dir: Optional[Path] = None,
    )) -> None:
        """Initialize configuration generator."""
    def _yaml_filter((self, obj: Any)) -> str:
        """Convert object to YAML string for templates."""
    def generate_config((
        self,
        site_name: str,
        navigation: List[Dict[str, Any]],
        output_path: Path,
        site_url: Optional[str] = None,
        site_description: Optional[str] = None,
        repo_url: Optional[str] = None,
        edit_uri: Optional[str] = None,
        custom_config: Optional[Dict[str, Any]] = None,
    )) -> str:
        """Generate MkDocs configuration YAML."""
    def _build_base_config((
        self,
        site_name: str,
        site_url: Optional[str] = None,
        site_description: Optional[str] = None,
        repo_url: Optional[str] = None,
        edit_uri: Optional[str] = None,
    )) -> Dict[str, Any]:
        """Build base MkDocs configuration."""
    def _build_theme_config((self)) -> Dict[str, Any]:
        """Build theme configuration."""
    def _build_material_theme_config((self)) -> Dict[str, Any]:
        """Build Material theme configuration with all features."""
    def _build_readthedocs_theme_config((self)) -> Dict[str, Any]:
        """Build Read the Docs theme configuration."""
    def _build_plugins_config((self)) -> List[Dict[str, Any]]:
        """Build plugins configuration."""
    def _build_markdown_extensions((self)) -> List[Dict[str, Any] | str]:
        """Build Markdown extensions configuration."""
    def _build_extra_config((self)) -> Dict[str, Any]:
        """Build extra configuration."""
    def _merge_configs((
        self, 
        base_config: Dict[str, Any], 
        custom_config: Dict[str, Any]
    )) -> Dict[str, Any]:
        """Merge custom configuration with base configuration."""
    def generate_config_from_template((
        self,
        template_name: str,
        context: Dict[str, Any],
        validate_output: bool = True,
    )) -> str:
        """Generate configuration from Jinja2 template with validation."""
    def _validate_template_exists((self, template_name: str)) -> None:
        """Validate that template file exists."""
    def _validate_template_context((self, template_name: str, context: Dict[str, Any])) -> None:
        """Validate template context variables."""
    def _validate_generated_config((self, config_content: str, template_name: str)) -> None:
        """Validate generated YAML configuration."""
    def _validate_mkdocs_structure((self, config: Dict[str, Any], template_name: str)) -> None:
        """Validate basic MkDocs configuration structure."""
    def _validate_theme_config((self, theme_config: Union[str, Dict[str, Any]], template_name: str)) -> None:
        """Validate theme configuration."""
    def _validate_plugin_configs((self, plugins: List[Any], template_name: str)) -> None:
        """Validate plugin configurations."""
    def _get_available_templates((self)) -> List[str]:
        """Get list of available template names."""
    def validate_final_config((self, config_yaml: str)) -> Dict[str, Any]:
        """Validate a final MkDocs configuration and return validation results."""

def __init__((
        self,
        theme: str = "material",
        enable_plugins: bool = True,
        template_dir: Optional[Path] = None,
    )) -> None:
    """Initialize configuration generator."""

def _yaml_filter((self, obj: Any)) -> str:
    """Convert object to YAML string for templates."""

def generate_config((
        self,
        site_name: str,
        navigation: List[Dict[str, Any]],
        output_path: Path,
        site_url: Optional[str] = None,
        site_description: Optional[str] = None,
        repo_url: Optional[str] = None,
        edit_uri: Optional[str] = None,
        custom_config: Optional[Dict[str, Any]] = None,
    )) -> str:
    """Generate MkDocs configuration YAML."""

def _build_base_config((
        self,
        site_name: str,
        site_url: Optional[str] = None,
        site_description: Optional[str] = None,
        repo_url: Optional[str] = None,
        edit_uri: Optional[str] = None,
    )) -> Dict[str, Any]:
    """Build base MkDocs configuration."""

def _build_theme_config((self)) -> Dict[str, Any]:
    """Build theme configuration."""

def _build_material_theme_config((self)) -> Dict[str, Any]:
    """Build Material theme configuration with all features."""

def _build_readthedocs_theme_config((self)) -> Dict[str, Any]:
    """Build Read the Docs theme configuration."""

def _build_plugins_config((self)) -> List[Dict[str, Any]]:
    """Build plugins configuration."""

def _build_markdown_extensions((self)) -> List[Dict[str, Any] | str]:
    """Build Markdown extensions configuration."""

def _build_extra_config((self)) -> Dict[str, Any]:
    """Build extra configuration."""

def _merge_configs((
        self, 
        base_config: Dict[str, Any], 
        custom_config: Dict[str, Any]
    )) -> Dict[str, Any]:
    """Merge custom configuration with base configuration."""

def deep_merge((base: Dict[str, Any], custom: Dict[str, Any])) -> Dict[str, Any]:
    """Recursively merge dictionaries."""

def generate_config_from_template((
        self,
        template_name: str,
        context: Dict[str, Any],
        validate_output: bool = True,
    )) -> str:
    """Generate configuration from Jinja2 template with validation."""

def _validate_template_exists((self, template_name: str)) -> None:
    """Validate that template file exists."""

def _validate_template_context((self, template_name: str, context: Dict[str, Any])) -> None:
    """Validate template context variables."""

def _validate_generated_config((self, config_content: str, template_name: str)) -> None:
    """Validate generated YAML configuration."""

def _validate_mkdocs_structure((self, config: Dict[str, Any], template_name: str)) -> None:
    """Validate basic MkDocs configuration structure."""

def _validate_theme_config((self, theme_config: Union[str, Dict[str, Any]], template_name: str)) -> None:
    """Validate theme configuration."""

def _validate_plugin_configs((self, plugins: List[Any], template_name: str)) -> None:
    """Validate plugin configurations."""

def _get_available_templates((self)) -> List[str]:
    """Get list of available template names."""

def validate_final_config((self, config_yaml: str)) -> Dict[str, Any]:
    """Validate a final MkDocs configuration and return validation results."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/exporters/mkdocs_exporter.py
# Language: python

import asyncio
from pathlib import Path
from typing import Any, Optional, Dict, List
from loguru import logger
from d361.core.interfaces import DataProvider
from d361.core.models import Article, Category
from d361.providers.archive_provider import ArchiveProvider
from d361.providers.api_provider import ApiProvider
from d361.providers.hybrid_provider import HybridProvider
from d361.scraping.content_processor import ContentProcessor
from d361.config.schema import AppConfig
from d361.utils.logging import setup_logging
from d361.utils.performance import PerformanceOptimizer
from contextlib import contextmanager
import time
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.mkdocs.exporters.navigation_builder import NavigationBuilder
from d361.mkdocs.exporters.theme_optimizer import ThemeOptimizer
from d361.mkdocs.processors.markdown_processor import MarkdownProcessor
from d361.mkdocs.processors.content_enhancer import ContentEnhancer
from d361.mkdocs.processors.asset_manager import AssetManager
from d361.mkdocs.processors.cross_reference_resolver import CrossReferenceResolver

class SimplePerformanceMonitor:
    """Simple performance monitoring for MkDocs export operations."""
    def __init__((self)):
    def get_metrics((self)) -> dict:
        """Get collected metrics."""

class MkDocsExporter:
    """Primary orchestrator for Document360 → MkDocs conversion."""
    def __init__((
        self,
        source: str = "archive",
        archive_path: Optional[Path] = None,
        api_token: Optional[str] = None,
        api_base_url: Optional[str] = None,
        output_path: Path = Path("mkdocs_output"),
        theme: str = "material",
        enable_plugins: bool = True,
        parallel_processing: bool = True,
        max_workers: int = 4,
        config_path: Optional[Path] = None,
    )) -> None:
        """Initialize MkDocs exporter."""
    def _initialize_provider((self)) -> None:
        """Initialize data provider based on source type."""
    def export((self)) -> Dict[str, Any]:
        """Execute complete MkDocs export process."""
    def _load_content((self)) -> tuple[List[Article], List[Category]]:
        """Load content from configured data source."""
    def _process_content((self, articles: List[Article])) -> List[Article]:
        """Process articles for MkDocs conversion."""
    def _process_single_article((self, article: Article)) -> Article:
        """Process a single article for MkDocs."""
    def _process_categories((self, categories: List[Category])) -> List[Category]:
        """Process categories for MkDocs navigation."""
    def _generate_mkdocs_structure((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> None:
        """Generate MkDocs directory structure and files."""
    def _write_article_file((self, article: Article, docs_dir: Path)) -> None:
        """Write individual article to MkDocs format."""
    def _generate_category_indexes((
        self, 
        categories: List[Category], 
        docs_dir: Path
    )) -> None:
        """Generate index pages for categories."""
    def _copy_assets((self, docs_dir: Path)) -> None:
        """Copy processed assets to docs directory."""
    def _generate_config((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> Path:
        """Generate MkDocs configuration file."""
    def _optimize_theme((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> None:
        """Apply theme-specific optimizations."""
    def _validate_export((self)) -> Dict[str, Any]:
        """Validate the generated MkDocs export."""
    def _generate_export_results((
        self, 
        config_path: Path, 
        validation_results: Dict[str, Any]
    )) -> Dict[str, Any]:
        """Generate export results summary."""

def __init__((self)):

def measure((self, operation_name: str)):
    """Context manager to measure operation duration."""

def get_metrics((self)) -> dict:
    """Get collected metrics."""

def __init__((
        self,
        source: str = "archive",
        archive_path: Optional[Path] = None,
        api_token: Optional[str] = None,
        api_base_url: Optional[str] = None,
        output_path: Path = Path("mkdocs_output"),
        theme: str = "material",
        enable_plugins: bool = True,
        parallel_processing: bool = True,
        max_workers: int = 4,
        config_path: Optional[Path] = None,
    )) -> None:
    """Initialize MkDocs exporter."""

def _initialize_provider((self)) -> None:
    """Initialize data provider based on source type."""

def export((self)) -> Dict[str, Any]:
    """Execute complete MkDocs export process."""

def _load_content((self)) -> tuple[List[Article], List[Category]]:
    """Load content from configured data source."""

def _process_content((self, articles: List[Article])) -> List[Article]:
    """Process articles for MkDocs conversion."""

def _process_single_article((self, article: Article)) -> Article:
    """Process a single article for MkDocs."""

def _process_categories((self, categories: List[Category])) -> List[Category]:
    """Process categories for MkDocs navigation."""

def _generate_mkdocs_structure((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> None:
    """Generate MkDocs directory structure and files."""

def _write_article_file((self, article: Article, docs_dir: Path)) -> None:
    """Write individual article to MkDocs format."""

def _generate_category_indexes((
        self, 
        categories: List[Category], 
        docs_dir: Path
    )) -> None:
    """Generate index pages for categories."""

def _copy_assets((self, docs_dir: Path)) -> None:
    """Copy processed assets to docs directory."""

def _generate_config((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> Path:
    """Generate MkDocs configuration file."""

def _optimize_theme((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> None:
    """Apply theme-specific optimizations."""

def _validate_export((self)) -> Dict[str, Any]:
    """Validate the generated MkDocs export."""

def _generate_export_results((
        self, 
        config_path: Path, 
        validation_results: Dict[str, Any]
    )) -> Dict[str, Any]:
    """Generate export results summary."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/exporters/navigation_builder.py
# Language: python

from typing import List, Dict, Any, Optional, Set
from pathlib import Path
import re
import asyncio
from dataclasses import dataclass
from loguru import logger
from d361.core.models import Article, Category

class NavigationItem:
    """Represents a navigation item with metadata."""
    def __post_init__((self)):

class NavigationAnalytics:
    """Navigation analytics and metrics."""
    def __post_init__((self)):

class NavigationBuilder:
    """Build MkDocs navigation from Document360 structure."""
    def __init__((
        self,
        use_category_indexes: bool = True,
        sort_by_order: bool = True,
        include_hidden: bool = False,
        max_depth: int = 5,
        # Phase 2 enhancements
        enable_literate_nav: bool = True,
        generate_section_indexes: bool = True,
        smart_ordering: bool = True,
        enable_navigation_analytics: bool = True,
        auto_generate_titles: bool = True,
        enable_breadcrumbs: bool = True,
        navigation_validation: bool = True,
        optimize_for_mobile: bool = True,
    )) -> None:
        """Initialize navigation builder."""
    def build_navigation((
        self,
        articles: List[Article],
        categories: List[Category],
    )) -> Dict[str, Any]:
        """Build navigation structure from articles and categories."""
    def _build_category_tree((self, categories: List[Category])) -> List[Category]:
        """Build hierarchical category tree."""
    def _map_articles_to_categories((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> Dict[str, List[Article]]:
        """Map articles to their categories."""
    def _build_category_navigation((
        self,
        category: Category,
        article_map: Dict[str, List[Article]],
        depth: int = 0,
    )) -> Optional[Dict[str, Any]]:
        """Build navigation for a category."""
    def _find_home_article((self, articles: List[Article])) -> Optional[Article]:
        """Find article to use as home page."""
    def _find_orphaned_articles((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> List[Article]:
        """Find articles not assigned to any category."""
    def generate_literate_nav((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
    )) -> Path:
        """Generate SUMMARY.md file for mkdocs-literate-nav plugin."""
    def _nav_item_to_literate((
        self, 
        nav_item: Dict[str, Any] | str, 
        level: int = 0
    )) -> List[str]:
        """Convert navigation item to literate nav format."""
    def validate_navigation((
        self,
        navigation: List[Dict[str, Any]],
        docs_path: Path,
    )) -> Dict[str, Any]:
        """Validate navigation structure and file references."""
    def _apply_smart_ordering((self, articles: List[Article])) -> List[Article]:
        """Apply intelligent ordering to articles based on content analysis."""
    def _apply_smart_category_ordering((self, categories: List[Category])) -> List[Category]:
        """Apply intelligent ordering to categories."""
    def _generate_section_indexes((self, categories: List[Category], articles: List[Article])) -> Dict[str, str]:
        """Generate section index pages for categories."""
    def _create_section_index_content((self, category: Category, articles: List[Article])) -> str:
        """Create content for a section index page."""
    def _build_enhanced_category_navigation((
        self,
        category: Category,
        article_map: Dict[str, List[Article]],
        section_indexes: Dict[str, str],
        depth: int = 0,
    )) -> Optional[NavigationItem]:
        """Build enhanced navigation for a category with Phase 2 features."""
    def _classify_article_type((self, article: Article)) -> str:
        """Classify article type based on title and content analysis."""
    def _generate_breadcrumbs((self, navigation_items: List[NavigationItem])) -> Dict[str, List[Dict[str, str]]]:
        """Generate breadcrumb navigation for all articles."""
    def _validate_navigation((self, navigation_items: List[NavigationItem], articles: List[Article])) -> Dict[str, Any]:
        """Validate navigation structure for common issues."""
    def _convert_to_mkdocs_format((self, navigation_items: List[NavigationItem])) -> List[Dict[str, Any]]:
        """Convert NavigationItem objects to standard MkDocs navigation format."""
    def _generate_literate_nav((self, navigation_items: List[NavigationItem])) -> str:
        """Generate mkdocs-literate-nav compatible SUMMARY.md content."""
    def _calculate_max_depth((self, navigation_items: List[NavigationItem])) -> int:
        """Calculate maximum depth of navigation tree."""
    def get_navigation_analytics((self)) -> Dict[str, Any]:
        """Get comprehensive navigation analytics."""

def __post_init__((self)):

def __post_init__((self)):

def __init__((
        self,
        use_category_indexes: bool = True,
        sort_by_order: bool = True,
        include_hidden: bool = False,
        max_depth: int = 5,
        # Phase 2 enhancements
        enable_literate_nav: bool = True,
        generate_section_indexes: bool = True,
        smart_ordering: bool = True,
        enable_navigation_analytics: bool = True,
        auto_generate_titles: bool = True,
        enable_breadcrumbs: bool = True,
        navigation_validation: bool = True,
        optimize_for_mobile: bool = True,
    )) -> None:
    """Initialize navigation builder."""

def build_navigation((
        self,
        articles: List[Article],
        categories: List[Category],
    )) -> Dict[str, Any]:
    """Build navigation structure from articles and categories."""

def _build_category_tree((self, categories: List[Category])) -> List[Category]:
    """Build hierarchical category tree."""

def _map_articles_to_categories((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> Dict[str, List[Article]]:
    """Map articles to their categories."""

def _build_category_navigation((
        self,
        category: Category,
        article_map: Dict[str, List[Article]],
        depth: int = 0,
    )) -> Optional[Dict[str, Any]]:
    """Build navigation for a category."""

def _find_home_article((self, articles: List[Article])) -> Optional[Article]:
    """Find article to use as home page."""

def _find_orphaned_articles((
        self, 
        articles: List[Article], 
        categories: List[Category]
    )) -> List[Article]:
    """Find articles not assigned to any category."""

def generate_literate_nav((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
    )) -> Path:
    """Generate SUMMARY.md file for mkdocs-literate-nav plugin."""

def _nav_item_to_literate((
        self, 
        nav_item: Dict[str, Any] | str, 
        level: int = 0
    )) -> List[str]:
    """Convert navigation item to literate nav format."""

def validate_navigation((
        self,
        navigation: List[Dict[str, Any]],
        docs_path: Path,
    )) -> Dict[str, Any]:
    """Validate navigation structure and file references."""

def validate_nav_item((item: Dict[str, Any] | str, path_prefix: str = "")):
    """Recursively validate navigation items."""

def _apply_smart_ordering((self, articles: List[Article])) -> List[Article]:
    """Apply intelligent ordering to articles based on content analysis."""

def calculate_article_weight((article: Article)) -> int:

def _apply_smart_category_ordering((self, categories: List[Category])) -> List[Category]:
    """Apply intelligent ordering to categories."""

def calculate_category_weight((category: Category)) -> int:

def _generate_section_indexes((self, categories: List[Category], articles: List[Article])) -> Dict[str, str]:
    """Generate section index pages for categories."""

def _create_section_index_content((self, category: Category, articles: List[Article])) -> str:
    """Create content for a section index page."""

def _build_enhanced_category_navigation((
        self,
        category: Category,
        article_map: Dict[str, List[Article]],
        section_indexes: Dict[str, str],
        depth: int = 0,
    )) -> Optional[NavigationItem]:
    """Build enhanced navigation for a category with Phase 2 features."""

def _classify_article_type((self, article: Article)) -> str:
    """Classify article type based on title and content analysis."""

def _generate_breadcrumbs((self, navigation_items: List[NavigationItem])) -> Dict[str, List[Dict[str, str]]]:
    """Generate breadcrumb navigation for all articles."""

def build_breadcrumbs((item: NavigationItem, path: List[Dict[str, str]] = None)):

def _validate_navigation((self, navigation_items: List[NavigationItem], articles: List[Article])) -> Dict[str, Any]:
    """Validate navigation structure for common issues."""

def validate_item((item: NavigationItem, depth: int = 0)):

def _convert_to_mkdocs_format((self, navigation_items: List[NavigationItem])) -> List[Dict[str, Any]]:
    """Convert NavigationItem objects to standard MkDocs navigation format."""

def convert_item((item: NavigationItem)) -> Dict[str, Any] | str:

def _generate_literate_nav((self, navigation_items: List[NavigationItem])) -> str:
    """Generate mkdocs-literate-nav compatible SUMMARY.md content."""

def add_nav_item((item: NavigationItem, level: int = 0)):

def _calculate_max_depth((self, navigation_items: List[NavigationItem])) -> int:
    """Calculate maximum depth of navigation tree."""

def get_depth((item: NavigationItem)) -> int:

def get_navigation_analytics((self)) -> Dict[str, Any]:
    """Get comprehensive navigation analytics."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/exporters/theme_optimizer.py
# Language: python

from pathlib import Path
from typing import List, Dict, Any, Optional
import shutil
from loguru import logger
from d361.core.models import Article, Category

class ThemeOptimizer:
    """Apply theme-specific optimizations to MkDocs exports."""
    def __init__((
        self,
        theme: str = "material",
        custom_css: Optional[List[str]] = None,
        custom_js: Optional[List[str]] = None,
        enable_customizations: bool = True,
    )) -> None:
        """Initialize theme optimizer."""
    def _get_theme_settings((self)) -> Dict[str, Any]:
        """Get theme-specific settings and configurations."""
    def optimize((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
    )) -> Dict[str, Any]:
        """Apply theme-specific optimizations to MkDocs export."""
    def _optimize_material_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
        """Apply Material theme specific optimizations."""
    def _create_material_css((self, output_path: Path, results: Dict[str, Any])) -> None:
        """Create custom CSS for Material theme."""
    def _create_material_js((self, output_path: Path, results: Dict[str, Any])) -> None:
        """Create custom JavaScript for Material theme."""
    def _setup_material_social_cards((self, output_path: Path, results: Dict[str, Any])) -> None:
        """Setup social cards assets for Material theme."""
    def _create_material_templates((self, output_path: Path, results: Dict[str, Any])) -> None:
        """Create custom templates for Material theme if needed."""
    def _optimize_material_content((
        self, 
        articles: List[Article], 
        output_path: Path, 
        results: Dict[str, Any]
    )) -> None:
        """Optimize content for Material theme features."""
    def _optimize_readthedocs_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
        """Apply Read the Docs theme specific optimizations."""
    def _optimize_generic_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
        """Apply generic theme optimizations."""
    def _apply_common_optimizations((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
        """Apply optimizations common to all themes."""
    def get_theme_config_updates((self)) -> Dict[str, Any]:
        """Get configuration updates needed for the theme."""

def __init__((
        self,
        theme: str = "material",
        custom_css: Optional[List[str]] = None,
        custom_js: Optional[List[str]] = None,
        enable_customizations: bool = True,
    )) -> None:
    """Initialize theme optimizer."""

def _get_theme_settings((self)) -> Dict[str, Any]:
    """Get theme-specific settings and configurations."""

def optimize((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
    )) -> Dict[str, Any]:
    """Apply theme-specific optimizations to MkDocs export."""

def _optimize_material_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
    """Apply Material theme specific optimizations."""

def _create_material_css((self, output_path: Path, results: Dict[str, Any])) -> None:
    """Create custom CSS for Material theme."""

def _create_material_js((self, output_path: Path, results: Dict[str, Any])) -> None:
    """Create custom JavaScript for Material theme."""

def _setup_material_social_cards((self, output_path: Path, results: Dict[str, Any])) -> None:
    """Setup social cards assets for Material theme."""

def _create_material_templates((self, output_path: Path, results: Dict[str, Any])) -> None:
    """Create custom templates for Material theme if needed."""

def _optimize_material_content((
        self, 
        articles: List[Article], 
        output_path: Path, 
        results: Dict[str, Any]
    )) -> None:
    """Optimize content for Material theme features."""

def _optimize_readthedocs_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
    """Apply Read the Docs theme specific optimizations."""

def _optimize_generic_theme((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
    """Apply generic theme optimizations."""

def _apply_common_optimizations((
        self,
        articles: List[Article],
        categories: List[Category],
        output_path: Path,
        results: Dict[str, Any],
    )) -> None:
    """Apply optimizations common to all themes."""

def get_theme_config_updates((self)) -> Dict[str, Any]:
    """Get configuration updates needed for the theme."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/__init__.py
# Language: python

from d361.mkdocs.processors.markdown_processor import MarkdownProcessor
from d361.mkdocs.processors.content_enhancer import ContentEnhancer
from d361.mkdocs.processors.asset_manager import AssetManager
from d361.mkdocs.processors.cross_reference_resolver import CrossReferenceResolver
from d361.mkdocs.processors.plugin_manager import (
    PluginManager,
    PluginConfig,
    PluginSet,
    MarkdownExtensionManager,
)
from d361.mkdocs.processors.seo_optimizer import (
    SEOOptimizer,
    SEOMetadata,
    StructuredData,
)
from d361.mkdocs.processors.accessibility_optimizer import (
    AccessibilityOptimizer,
    AccessibilityReport,
    AccessibilityIssue,
    WCAGLevel,
    ContrastRatio,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/accessibility_optimizer.py
# Language: python

import re
from typing import Dict, Any, List, Optional, Tuple
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from d361.api.errors import Document360Error, ErrorCategory, ErrorSeverity

class WCAGLevel(E, n, u, m):
    """WCAG compliance levels."""

class ContrastRatio(E, n, u, m):
    """Minimum contrast ratios for WCAG compliance."""

class AccessibilityIssue:
    """Represents an accessibility issue found during analysis."""

class AccessibilityReport:
    """Comprehensive accessibility audit report."""
    def add_issue((self, issue: AccessibilityIssue)) -> None:
        """Add an accessibility issue to the report."""
    def is_compliant((self)) -> bool:
        """Check if the content meets the target WCAG compliance level."""

class AccessibilityOptimizer:
    """Comprehensive accessibility optimization for MkDocs sites."""
    def __init__((
        self,
        wcag_level: WCAGLevel = WCAGLevel.AA,
        auto_fix: bool = True,
        generate_alt_text: bool = True,
        enhance_links: bool = True,
    )) -> None:
        """Initialize accessibility optimizer."""
    def enhance_content((
        self,
        content: str,
        page_title: str,
        base_url: Optional[str] = None,
    )) -> Tuple[str, AccessibilityReport]:
        """Enhance content for accessibility compliance."""
    def _enhance_headings((self, content: str, report: AccessibilityReport)) -> str:
        """Enhance heading structure for accessibility."""
    def _enhance_images((self, content: str, report: AccessibilityReport)) -> str:
        """Enhance images for accessibility."""
    def _enhance_links((self, content: str, report: AccessibilityReport, base_url: Optional[str])) -> str:
        """Enhance links for accessibility."""
    def _enhance_tables((self, content: str, report: AccessibilityReport)) -> str:
        """Enhance tables for accessibility."""
    def _enhance_lists((self, content: str, report: AccessibilityReport)) -> str:
        """Enhance lists for accessibility."""
    def _validate_content_structure((self, content: str, report: AccessibilityReport)) -> None:
        """Validate overall content structure for accessibility."""
    def generate_accessibility_config((self)) -> Dict[str, Any]:
        """Generate accessibility configuration for MkDocs theme."""
    def generate_content_guidelines((self)) -> Dict[str, List[str]]:
        """Generate content accessibility guidelines."""
    def audit_full_site((
        self,
        pages: List[Dict[str, Any]],
        site_config: Dict[str, Any],
    )) -> Dict[str, Any]:
        """Perform comprehensive accessibility audit of entire site."""
    def _audit_site_config((self, config: Dict[str, Any])) -> List[AccessibilityIssue]:
        """Audit site configuration for accessibility issues."""

def add_issue((self, issue: AccessibilityIssue)) -> None:
    """Add an accessibility issue to the report."""

def is_compliant((self)) -> bool:
    """Check if the content meets the target WCAG compliance level."""

def __init__((
        self,
        wcag_level: WCAGLevel = WCAGLevel.AA,
        auto_fix: bool = True,
        generate_alt_text: bool = True,
        enhance_links: bool = True,
    )) -> None:
    """Initialize accessibility optimizer."""

def enhance_content((
        self,
        content: str,
        page_title: str,
        base_url: Optional[str] = None,
    )) -> Tuple[str, AccessibilityReport]:
    """Enhance content for accessibility compliance."""

def _enhance_headings((self, content: str, report: AccessibilityReport)) -> str:
    """Enhance heading structure for accessibility."""

def _enhance_images((self, content: str, report: AccessibilityReport)) -> str:
    """Enhance images for accessibility."""

def enhance_image((match)):

def _enhance_links((self, content: str, report: AccessibilityReport, base_url: Optional[str])) -> str:
    """Enhance links for accessibility."""

def enhance_link((match)):

def _enhance_tables((self, content: str, report: AccessibilityReport)) -> str:
    """Enhance tables for accessibility."""

def _enhance_lists((self, content: str, report: AccessibilityReport)) -> str:
    """Enhance lists for accessibility."""

def _validate_content_structure((self, content: str, report: AccessibilityReport)) -> None:
    """Validate overall content structure for accessibility."""

def generate_accessibility_config((self)) -> Dict[str, Any]:
    """Generate accessibility configuration for MkDocs theme."""

def generate_content_guidelines((self)) -> Dict[str, List[str]]:
    """Generate content accessibility guidelines."""

def audit_full_site((
        self,
        pages: List[Dict[str, Any]],
        site_config: Dict[str, Any],
    )) -> Dict[str, Any]:
    """Perform comprehensive accessibility audit of entire site."""

def _audit_site_config((self, config: Dict[str, Any])) -> List[AccessibilityIssue]:
    """Audit site configuration for accessibility issues."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/asset_manager.py
# Language: python

import asyncio
import hashlib
import mimetypes
from pathlib import Path
from typing import Dict, List, Optional, Tuple, Any, Set
from urllib.parse import urlparse, urljoin
from dataclasses import dataclass
import re
from loguru import logger
import httpx
from PIL import Image, ImageOps, ImageDraw, ImageFont
from PIL import ImageFilter
import textwrap
import io
import base64

class AssetReference:
    """Represents an asset reference in content."""

class OptimizationResult:
    """Results of asset optimization."""

class AssetManager:
    """Manage assets for Document360 → MkDocs conversion."""
    def __init__((
        self,
        output_dir: Path,
        enable_optimization: bool = True,
        generate_responsive: bool = False,
        cdn_prefix: Optional[str] = None,
        max_image_width: int = 1200,
        image_quality: int = 85,
        convert_to_webp: bool = False,
        enable_lazy_loading: bool = True,
        download_external_assets: bool = False,
        # Phase 2 enhancements
        generate_social_cards: bool = False,
        social_card_template: str = "material",
        social_card_size: Tuple[int, int] = (1200, 630),
        social_card_background_color: str = "#ffffff",
        social_card_text_color: str = "#333333",
        social_card_accent_color: str = "#1976d2",
        social_card_font_family: Optional[str] = None,
        social_card_logo_path: Optional[str] = None,
        enable_social_card_caching: bool = True,
    )) -> None:
        """Initialize asset manager."""
    def process_assets((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
        """Process all assets in content."""
    def update_asset_references((self, content: str, assets: List[AssetReference])) -> str:
        """Update content with optimized asset references."""
    def _extract_and_process_images((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
        """Extract and process image assets."""
    def _extract_and_process_documents((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
        """Extract and process document assets."""
    def _process_single_image((self, asset: AssetReference, article_context: Optional[Dict] = None)) -> AssetReference:
        """Process a single image asset."""
    def _process_single_document((self, asset: AssetReference, article_context: Optional[Dict] = None)) -> AssetReference:
        """Process a single document asset."""
    def _download_asset((self, asset: AssetReference, target_dir: Path)) -> Optional[Path]:
        """Download asset to local storage."""
    def _optimize_image((self, image_path: Path, asset: AssetReference)) -> Optional[Path]:
        """Optimize image file."""
    def _generate_responsive_variants((self, image_path: Path, asset: AssetReference)) -> List[str]:
        """Generate responsive image variants."""
    def _optimize_d360_image_url((self, url: str)) -> str:
        """Optimize Document360 image URL with CDN parameters."""
    def _optimize_d360_document_url((self, url: str)) -> str:
        """Optimize Document360 document URL."""
    def _generate_filename((self, url: str, content_type: Optional[str] = None)) -> str:
        """Generate appropriate filename from URL."""
    def _generate_asset_url((self, file_path: Path)) -> str:
        """Generate URL for asset file."""
    def _is_external_url((self, url: str)) -> bool:
        """Check if URL is external."""
    def _is_document360_url((self, url: str)) -> bool:
        """Check if URL is a Document360 CDN URL."""
    def get_asset_report((self)) -> Dict[str, Any]:
        """Generate comprehensive asset processing report."""
    def _generate_social_card((self, article_context: Dict[str, Any], content: str)) -> Optional[AssetReference]:
        """Generate a social card for the article."""
    def _extract_social_description((self, content: str, article_context: Dict[str, Any])) -> str:
        """Extract description for social card from content."""
    def _create_social_card_image((
        self,
        title: str,
        description: str,
        article_context: Dict[str, Any],
        cache_key: str
    )) -> Optional[Path]:
        """Create the actual social card image."""
    def _load_font((self, size: int)) -> ImageFont.FreeTypeFont:
        """Load font for text rendering."""
    def _wrap_text((self, text: str, max_width: int, font: ImageFont.FreeTypeFont, draw: ImageDraw.Draw)) -> List[str]:
        """Wrap text to fit within specified width."""
    def _draw_material_background((self, draw: ImageDraw.Draw, width: int, height: int)) -> None:
        """Draw Material Design inspired background."""
    def _draw_logo((self, draw: ImageDraw.Draw, logo_path: Path, x: int, y: int, max_height: int = 80)) -> int:
        """Draw logo on social card."""
    def _lighten_color((self, hex_color: str, factor: float = 0.7)) -> str:
        """Lighten a hex color."""
    def _hex_to_rgb((self, hex_color: str)) -> Tuple[int, int, int]:
        """Convert hex color to RGB tuple."""
    def get_social_cards_report((self)) -> Dict[str, Any]:
        """Get report on generated social cards."""
    def cleanup((self)):
        """Clean up resources."""

def __init__((
        self,
        output_dir: Path,
        enable_optimization: bool = True,
        generate_responsive: bool = False,
        cdn_prefix: Optional[str] = None,
        max_image_width: int = 1200,
        image_quality: int = 85,
        convert_to_webp: bool = False,
        enable_lazy_loading: bool = True,
        download_external_assets: bool = False,
        # Phase 2 enhancements
        generate_social_cards: bool = False,
        social_card_template: str = "material",
        social_card_size: Tuple[int, int] = (1200, 630),
        social_card_background_color: str = "#ffffff",
        social_card_text_color: str = "#333333",
        social_card_accent_color: str = "#1976d2",
        social_card_font_family: Optional[str] = None,
        social_card_logo_path: Optional[str] = None,
        enable_social_card_caching: bool = True,
    )) -> None:
    """Initialize asset manager."""

def process_assets((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
    """Process all assets in content."""

def update_asset_references((self, content: str, assets: List[AssetReference])) -> str:
    """Update content with optimized asset references."""

def replace_image((match)):

def replace_document((match)):

def _extract_and_process_images((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
    """Extract and process image assets."""

def _extract_and_process_documents((self, content: str, article_context: Optional[Dict] = None)) -> List[AssetReference]:
    """Extract and process document assets."""

def _process_single_image((self, asset: AssetReference, article_context: Optional[Dict] = None)) -> AssetReference:
    """Process a single image asset."""

def _process_single_document((self, asset: AssetReference, article_context: Optional[Dict] = None)) -> AssetReference:
    """Process a single document asset."""

def _download_asset((self, asset: AssetReference, target_dir: Path)) -> Optional[Path]:
    """Download asset to local storage."""

def _optimize_image((self, image_path: Path, asset: AssetReference)) -> Optional[Path]:
    """Optimize image file."""

def _generate_responsive_variants((self, image_path: Path, asset: AssetReference)) -> List[str]:
    """Generate responsive image variants."""

def _optimize_d360_image_url((self, url: str)) -> str:
    """Optimize Document360 image URL with CDN parameters."""

def _optimize_d360_document_url((self, url: str)) -> str:
    """Optimize Document360 document URL."""

def _generate_filename((self, url: str, content_type: Optional[str] = None)) -> str:
    """Generate appropriate filename from URL."""

def _generate_asset_url((self, file_path: Path)) -> str:
    """Generate URL for asset file."""

def _is_external_url((self, url: str)) -> bool:
    """Check if URL is external."""

def _is_document360_url((self, url: str)) -> bool:
    """Check if URL is a Document360 CDN URL."""

def get_asset_report((self)) -> Dict[str, Any]:
    """Generate comprehensive asset processing report."""

def _generate_social_card((self, article_context: Dict[str, Any], content: str)) -> Optional[AssetReference]:
    """Generate a social card for the article."""

def _extract_social_description((self, content: str, article_context: Dict[str, Any])) -> str:
    """Extract description for social card from content."""

def _create_social_card_image((
        self,
        title: str,
        description: str,
        article_context: Dict[str, Any],
        cache_key: str
    )) -> Optional[Path]:
    """Create the actual social card image."""

def _load_font((self, size: int)) -> ImageFont.FreeTypeFont:
    """Load font for text rendering."""

def _wrap_text((self, text: str, max_width: int, font: ImageFont.FreeTypeFont, draw: ImageDraw.Draw)) -> List[str]:
    """Wrap text to fit within specified width."""

def _draw_material_background((self, draw: ImageDraw.Draw, width: int, height: int)) -> None:
    """Draw Material Design inspired background."""

def _draw_logo((self, draw: ImageDraw.Draw, logo_path: Path, x: int, y: int, max_height: int = 80)) -> int:
    """Draw logo on social card."""

def _lighten_color((self, hex_color: str, factor: float = 0.7)) -> str:
    """Lighten a hex color."""

def _hex_to_rgb((self, hex_color: str)) -> Tuple[int, int, int]:
    """Convert hex color to RGB tuple."""

def get_social_cards_report((self)) -> Dict[str, Any]:
    """Get report on generated social cards."""

def cleanup((self)):
    """Clean up resources."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/content_enhancer.py
# Language: python

import re
from typing import Dict, Any, Optional, List, Tuple, Union
from pathlib import Path
from datetime import datetime
import asyncio
from urllib.parse import urlparse, urljoin
from loguru import logger
from d361.core.models import Article, Category
import html2text
from bs4 import BeautifulSoup
import requests
import markdown
from markdown.extensions import admonition, codehilite, tables, toc

class ContentEnhancer:
    """Enhance Document360 content for optimal MkDocs presentation."""
    def __init__((
        self,
        site_url: Optional[str] = None,
        enable_seo: bool = True,
        validate_links: bool = True,
        add_edit_links: bool = True,
        enable_social_cards: bool = False,
        custom_css_classes: Optional[Dict[str, str]] = None,
        # Phase 2 enhancements
        enable_html_conversion: bool = True,
        mkdocs_extensions: Optional[List[str]] = None,
        enable_admonitions: bool = True,
        enable_superfences: bool = True,
        enable_tabbed_content: bool = True,
        enable_task_lists: bool = True,
        validate_content_quality: bool = True,
        check_broken_links: bool = False,
        reading_time_estimation: bool = True,
    )) -> None:
        """Initialize content enhancer."""
    def enhance_article((self, article: Article)) -> Dict[str, Any]:
        """Enhance a single article for MkDocs."""
    def _generate_frontmatter((self, article: Article)) -> Dict[str, Any]:
        """Generate YAML frontmatter for the article."""
    def _process_content((self, content: str)) -> str:
        """Process and enhance markdown content."""
    def _normalize_headings((self, content: str)) -> str:
        """Normalize heading structure for better MkDocs navigation."""
    def _process_links((self, content: str)) -> str:
        """Process and validate links in content."""
    def _process_images((self, content: str)) -> str:
        """Process images for optimal MkDocs display."""
    def _enhance_code_blocks((self, content: str)) -> str:
        """Enhance code blocks with better formatting and features."""
    def _add_css_classes((self, content: str)) -> str:
        """Add custom CSS classes to content elements."""
    def _clean_whitespace((self, content: str)) -> str:
        """Clean up excessive whitespace in content."""
    def _assess_quality((self, content: str)) -> Dict[str, Any]:
        """Assess content quality for MkDocs optimization."""
    def _generate_navigation_hints((self, article: Article)) -> Dict[str, Any]:
        """Generate navigation hints for MkDocs."""
    def _generate_file_path((self, article: Article)) -> str:
        """Generate appropriate file path for the article."""
    def _has_html_content((self, content: str)) -> bool:
        """Check if content contains HTML tags."""
    def _convert_html_to_markdown((self, content: str)) -> str:
        """Convert HTML content to Markdown using html2text."""
    def _preprocess_html((self, html_content: str)) -> str:
        """Preprocess HTML before conversion."""
    def _postprocess_converted_markdown((self, markdown_content: str)) -> str:
        """Post-process converted Markdown content."""
    def _convert_to_admonitions((self, content: str)) -> str:
        """Convert various callout formats to MkDocs admonitions."""
    def _enhance_code_blocks_superfences((self, content: str)) -> str:
        """Enhance code blocks with superfences features."""
    def _convert_to_tabbed_content((self, content: str)) -> str:
        """Convert sections to tabbed content where appropriate."""
    def _convert_to_task_lists((self, content: str)) -> str:
        """Convert list items to GitHub-style task lists where appropriate."""
    def _assess_quality_advanced((self, content: str, article: Article)) -> Dict[str, Any]:
        """Advanced content quality assessment for Phase 2."""
    def _detect_broken_links((self, content: str)) -> List[Dict[str, Any]]:
        """Detect potentially broken links in content."""
    def _calculate_reading_time((self, content: str)) -> int:
        """Calculate estimated reading time in minutes."""
    def _get_used_extensions((self, content: str)) -> List[str]:
        """Identify which MkDocs extensions are being used in content."""
    def _has_introduction((self, content: str)) -> bool:
        """Check if content has a proper introduction."""
    def _has_conclusion((self, content: str)) -> bool:
        """Check if content has a proper conclusion."""
    def _analyze_heading_structure((self, content: str)) -> int:
        """Analyze heading structure quality (0-100)."""
    def _analyze_content_depth((self, content: str)) -> int:
        """Analyze content depth and comprehensiveness (0-100)."""
    def _analyze_internal_linking((self, content: str)) -> int:
        """Analyze internal linking quality (0-100)."""
    def _analyze_code_examples((self, content: str)) -> int:
        """Analyze code example quality (0-100)."""
    def _analyze_media_richness((self, content: str)) -> int:
        """Analyze media richness (images, videos, etc.) (0-100)."""
    def _calculate_readability_score((self, content: str)) -> int:
        """Calculate readability score (simplified) (0-100)."""
    def _analyze_seo_optimization((self, content: str, article: Article)) -> int:
        """Analyze SEO optimization (0-100)."""
    def _analyze_mkdocs_compatibility((self, content: str)) -> int:
        """Analyze MkDocs compatibility score (0-100)."""
    def _generate_quality_recommendations((self, metrics: Dict[str, Any])) -> List[str]:
        """Generate recommendations based on quality metrics."""
    def _extract_description((self, content: str)) -> str:
        """Extract description from content."""
    def _extract_tags((self, article: Article)) -> List[str]:
        """Extract tags from article metadata."""
    def _generate_seo_metadata((self, article: Article)) -> Dict[str, str]:
        """Generate SEO metadata."""
    def _generate_social_card_metadata((self, article: Article)) -> Dict[str, str]:
        """Generate social card metadata."""
    def _determine_template((self, article: Article)) -> Optional[str]:
        """Determine appropriate MkDocs template."""
    def _is_internal_d360_link((self, url: str)) -> bool:
        """Check if URL is an internal Document360 link."""
    def _convert_internal_link((self, url: str)) -> str:
        """Convert Document360 internal link to MkDocs format."""
    def _is_external_link((self, url: str)) -> bool:
        """Check if URL is external."""
    def _process_d360_image_url((self, src: str)) -> str:
        """Process Document360 CDN image URLs."""
    def _is_large_image_url((self, src: str)) -> bool:
        """Check if image URL likely points to a large image."""
    def _detect_code_language((self, code: str)) -> str:
        """Detect programming language from code content."""
    def _determine_quality_level((self, score: int)) -> str:
        """Determine quality level from score."""
    def _generate_nav_title((self, title: str)) -> str:
        """Generate navigation-friendly title."""
    def _generate_breadcrumb_path((self, article: Article)) -> List[str]:
        """Generate breadcrumb path."""
    def _calculate_navigation_weight((self, article: Article)) -> int:
        """Calculate navigation weight for ordering."""
    def _generate_edit_url((self, article: Article)) -> Optional[str]:
        """Generate edit URL for the article."""

def __init__((
        self,
        site_url: Optional[str] = None,
        enable_seo: bool = True,
        validate_links: bool = True,
        add_edit_links: bool = True,
        enable_social_cards: bool = False,
        custom_css_classes: Optional[Dict[str, str]] = None,
        # Phase 2 enhancements
        enable_html_conversion: bool = True,
        mkdocs_extensions: Optional[List[str]] = None,
        enable_admonitions: bool = True,
        enable_superfences: bool = True,
        enable_tabbed_content: bool = True,
        enable_task_lists: bool = True,
        validate_content_quality: bool = True,
        check_broken_links: bool = False,
        reading_time_estimation: bool = True,
    )) -> None:
    """Initialize content enhancer."""

def enhance_article((self, article: Article)) -> Dict[str, Any]:
    """Enhance a single article for MkDocs."""

def _generate_frontmatter((self, article: Article)) -> Dict[str, Any]:
    """Generate YAML frontmatter for the article."""

def _process_content((self, content: str)) -> str:
    """Process and enhance markdown content."""

def _normalize_headings((self, content: str)) -> str:
    """Normalize heading structure for better MkDocs navigation."""

def replace_heading((match)):

def _process_links((self, content: str)) -> str:
    """Process and validate links in content."""

def replace_link((match)):

def _process_images((self, content: str)) -> str:
    """Process images for optimal MkDocs display."""

def replace_image((match)):

def _enhance_code_blocks((self, content: str)) -> str:
    """Enhance code blocks with better formatting and features."""

def replace_code_block((match)):

def _add_css_classes((self, content: str)) -> str:
    """Add custom CSS classes to content elements."""

def _clean_whitespace((self, content: str)) -> str:
    """Clean up excessive whitespace in content."""

def _assess_quality((self, content: str)) -> Dict[str, Any]:
    """Assess content quality for MkDocs optimization."""

def _generate_navigation_hints((self, article: Article)) -> Dict[str, Any]:
    """Generate navigation hints for MkDocs."""

def _generate_file_path((self, article: Article)) -> str:
    """Generate appropriate file path for the article."""

def _has_html_content((self, content: str)) -> bool:
    """Check if content contains HTML tags."""

def _convert_html_to_markdown((self, content: str)) -> str:
    """Convert HTML content to Markdown using html2text."""

def _preprocess_html((self, html_content: str)) -> str:
    """Preprocess HTML before conversion."""

def _postprocess_converted_markdown((self, markdown_content: str)) -> str:
    """Post-process converted Markdown content."""

def _convert_to_admonitions((self, content: str)) -> str:
    """Convert various callout formats to MkDocs admonitions."""

def _enhance_code_blocks_superfences((self, content: str)) -> str:
    """Enhance code blocks with superfences features."""

def enhance_code_block((match)):

def _convert_to_tabbed_content((self, content: str)) -> str:
    """Convert sections to tabbed content where appropriate."""

def replace_with_tabs((match)):

def _convert_to_task_lists((self, content: str)) -> str:
    """Convert list items to GitHub-style task lists where appropriate."""

def _assess_quality_advanced((self, content: str, article: Article)) -> Dict[str, Any]:
    """Advanced content quality assessment for Phase 2."""

def _detect_broken_links((self, content: str)) -> List[Dict[str, Any]]:
    """Detect potentially broken links in content."""

def _calculate_reading_time((self, content: str)) -> int:
    """Calculate estimated reading time in minutes."""

def _get_used_extensions((self, content: str)) -> List[str]:
    """Identify which MkDocs extensions are being used in content."""

def _has_introduction((self, content: str)) -> bool:
    """Check if content has a proper introduction."""

def _has_conclusion((self, content: str)) -> bool:
    """Check if content has a proper conclusion."""

def _analyze_heading_structure((self, content: str)) -> int:
    """Analyze heading structure quality (0-100)."""

def _analyze_content_depth((self, content: str)) -> int:
    """Analyze content depth and comprehensiveness (0-100)."""

def _analyze_internal_linking((self, content: str)) -> int:
    """Analyze internal linking quality (0-100)."""

def _analyze_code_examples((self, content: str)) -> int:
    """Analyze code example quality (0-100)."""

def _analyze_media_richness((self, content: str)) -> int:
    """Analyze media richness (images, videos, etc.) (0-100)."""

def _calculate_readability_score((self, content: str)) -> int:
    """Calculate readability score (simplified) (0-100)."""

def _analyze_seo_optimization((self, content: str, article: Article)) -> int:
    """Analyze SEO optimization (0-100)."""

def _analyze_mkdocs_compatibility((self, content: str)) -> int:
    """Analyze MkDocs compatibility score (0-100)."""

def _generate_quality_recommendations((self, metrics: Dict[str, Any])) -> List[str]:
    """Generate recommendations based on quality metrics."""

def _extract_description((self, content: str)) -> str:
    """Extract description from content."""

def _extract_tags((self, article: Article)) -> List[str]:
    """Extract tags from article metadata."""

def _generate_seo_metadata((self, article: Article)) -> Dict[str, str]:
    """Generate SEO metadata."""

def _generate_social_card_metadata((self, article: Article)) -> Dict[str, str]:
    """Generate social card metadata."""

def _determine_template((self, article: Article)) -> Optional[str]:
    """Determine appropriate MkDocs template."""

def _is_internal_d360_link((self, url: str)) -> bool:
    """Check if URL is an internal Document360 link."""

def _convert_internal_link((self, url: str)) -> str:
    """Convert Document360 internal link to MkDocs format."""

def _is_external_link((self, url: str)) -> bool:
    """Check if URL is external."""

def _process_d360_image_url((self, src: str)) -> str:
    """Process Document360 CDN image URLs."""

def _is_large_image_url((self, src: str)) -> bool:
    """Check if image URL likely points to a large image."""

def _detect_code_language((self, code: str)) -> str:
    """Detect programming language from code content."""

def _determine_quality_level((self, score: int)) -> str:
    """Determine quality level from score."""

def _generate_nav_title((self, title: str)) -> str:
    """Generate navigation-friendly title."""

def _generate_breadcrumb_path((self, article: Article)) -> List[str]:
    """Generate breadcrumb path."""

def _calculate_navigation_weight((self, article: Article)) -> int:
    """Calculate navigation weight for ordering."""

def _generate_edit_url((self, article: Article)) -> Optional[str]:
    """Generate edit URL for the article."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/cross_reference_resolver.py
# Language: python

import re
from typing import Dict, List, Set, Optional, Tuple, Any
from pathlib import Path
from urllib.parse import urlparse, unquote
from dataclasses import dataclass
from loguru import logger
from d361.core.models import Article, Category
import httpx
import asyncio
from concurrent.futures import ThreadPoolExecutor

class LinkReference:
    """Represents a link reference in content."""

class AnchorReference:
    """Represents an anchor/heading reference."""

class CrossReferenceResolver:
    """Resolve cross-references for Document360 → MkDocs conversion."""
    def __init__((
        self,
        articles: List[Article],
        categories: Optional[List[Category]] = None,
        base_url: Optional[str] = None,
        validate_external: bool = True,
        generate_autorefs: bool = True,
        create_redirects: bool = True,
        # Phase 2 enhancements
        enable_autorefs_plugin: bool = True,
        autorefs_plugin_config: Optional[Dict[str, Any]] = None,
        enable_http_validation: bool = False,
        validation_timeout: int = 10,
        max_concurrent_validations: int = 10,
        generate_reference_index: bool = True,
        smart_link_suggestions: bool = True,
        broken_link_reporting: bool = True,
        enable_link_analytics: bool = True,
    )) -> None:
        """Initialize cross-reference resolver."""
    def resolve_references((self, content: str, current_article: Article)) -> Dict[str, Any]:
        """Resolve cross-references in article content."""
    def generate_link_report((self)) -> Dict[str, Any]:
        """Generate comprehensive link analysis report."""
    def get_redirect_mappings((self)) -> Dict[str, str]:
        """Get redirect mappings for MkDocs configuration."""
    def get_autoref_suggestions((self)) -> Dict[str, List[str]]:
        """Generate autoref suggestions for cross-referencing."""
    def _build_article_index((self)) -> Dict[str, Article]:
        """Build article index for quick lookup."""
    def _build_category_index((self)) -> Dict[str, Category]:
        """Build category index for quick lookup."""
    def _build_url_mappings((self)) -> Dict[str, str]:
        """Build URL mappings from Document360 to MkDocs format."""
    def _extract_anchors((self, content: str, article_id: str)) -> List[AnchorReference]:
        """Extract heading anchors from content."""
    def _extract_links((self, content: str)) -> List[LinkReference]:
        """Extract all links from content."""
    def _resolve_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
        """Resolve a single link reference."""
    def _resolve_anchor_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
        """Resolve anchor link within current article."""
    def _resolve_external_link((self, link: LinkReference)) -> LinkReference:
        """Resolve external link with optional validation."""
    def _resolve_d360_link((self, link: LinkReference)) -> LinkReference:
        """Resolve Document360 internal link."""
    def _resolve_relative_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
        """Resolve relative link."""
    def _apply_link_resolutions((self, content: str, links: List[LinkReference])) -> str:
        """Apply link resolutions to content."""
    def _add_autorefs((self, content: str, current_article: Article)) -> str:
        """Add automatic cross-references to content."""
    def _generate_anchor_id((self, heading_text: str)) -> str:
        """Generate anchor ID from heading text."""
    def _generate_article_url((self, article: Article)) -> str:
        """Generate MkDocs URL for article."""
    def _is_document360_link((self, url: str)) -> bool:
        """Check if URL is a Document360 link."""
    def _extract_keywords((self, title: str)) -> List[str]:
        """Extract keywords from article title."""
    def _calculate_success_rate((self)) -> float:
        """Calculate link validation success rate."""
    def _get_common_errors((self)) -> List[Dict[str, Any]]:
        """Get most common validation errors."""
    def _extract_autorefs((self, content: str)) -> List[Dict[str, Any]]:
        """Extract mkdocs-autorefs patterns from content."""
    def _validate_external_links_batch((self, external_links: List[LinkReference])) -> None:
        """Validate external links in batches using HTTP requests."""
    def _validate_external_link_http((self, link: LinkReference)) -> None:
        """Validate a single external link via HTTP."""
    def _track_link_analytics((self, link: LinkReference, current_article: Article)) -> None:
        """Track link analytics and metrics."""
    def _process_autorefs((self, content: str, autorefs: List[Dict[str, Any]], current_article: Article)) -> str:
        """Process mkdocs-autorefs patterns and generate appropriate links."""
    def _resolve_autoref_identifier((self, identifier: str)) -> Optional[str]:
        """Resolve an autoref identifier to a link."""
    def _update_reference_index((self, resolved_links: List[LinkReference], current_article: Article)) -> None:
        """Update the reference index with article relationships."""
    def _generate_smart_suggestions((self, current_article: Article, content: str)) -> List[Dict[str, Any]]:
        """Generate intelligent link suggestions based on content analysis."""
    def _calculate_content_relevance((self, content: str, article: Article)) -> float:
        """Calculate content relevance score between current content and article."""
    def _generate_suggestion_explanation((self, current_article: Article, suggested_article: Article, relevance_score: float)) -> str:
        """Generate explanation for why an article is suggested."""
    def _get_validation_summary((self, links: List[LinkReference])) -> Dict[str, Any]:
        """Get validation summary for resolved links."""
    def _get_analytics_summary((self, links: List[LinkReference])) -> Dict[str, Any]:
        """Get analytics summary for processed links."""
    def _get_most_referenced_urls((self)) -> List[Dict[str, Any]]:
        """Get the most frequently referenced URLs."""
    def _get_reference_graph_data((self, current_article: Article)) -> Dict[str, Any]:
        """Get reference graph data for the current article."""
    def cleanup((self)):
        """Clean up resources including HTTP client."""

def __init__((
        self,
        articles: List[Article],
        categories: Optional[List[Category]] = None,
        base_url: Optional[str] = None,
        validate_external: bool = True,
        generate_autorefs: bool = True,
        create_redirects: bool = True,
        # Phase 2 enhancements
        enable_autorefs_plugin: bool = True,
        autorefs_plugin_config: Optional[Dict[str, Any]] = None,
        enable_http_validation: bool = False,
        validation_timeout: int = 10,
        max_concurrent_validations: int = 10,
        generate_reference_index: bool = True,
        smart_link_suggestions: bool = True,
        broken_link_reporting: bool = True,
        enable_link_analytics: bool = True,
    )) -> None:
    """Initialize cross-reference resolver."""

def resolve_references((self, content: str, current_article: Article)) -> Dict[str, Any]:
    """Resolve cross-references in article content."""

def generate_link_report((self)) -> Dict[str, Any]:
    """Generate comprehensive link analysis report."""

def get_redirect_mappings((self)) -> Dict[str, str]:
    """Get redirect mappings for MkDocs configuration."""

def get_autoref_suggestions((self)) -> Dict[str, List[str]]:
    """Generate autoref suggestions for cross-referencing."""

def _build_article_index((self)) -> Dict[str, Article]:
    """Build article index for quick lookup."""

def _build_category_index((self)) -> Dict[str, Category]:
    """Build category index for quick lookup."""

def _build_url_mappings((self)) -> Dict[str, str]:
    """Build URL mappings from Document360 to MkDocs format."""

def _extract_anchors((self, content: str, article_id: str)) -> List[AnchorReference]:
    """Extract heading anchors from content."""

def _extract_links((self, content: str)) -> List[LinkReference]:
    """Extract all links from content."""

def _resolve_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
    """Resolve a single link reference."""

def _resolve_anchor_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
    """Resolve anchor link within current article."""

def _resolve_external_link((self, link: LinkReference)) -> LinkReference:
    """Resolve external link with optional validation."""

def _resolve_d360_link((self, link: LinkReference)) -> LinkReference:
    """Resolve Document360 internal link."""

def _resolve_relative_link((self, link: LinkReference, current_article: Article)) -> LinkReference:
    """Resolve relative link."""

def _apply_link_resolutions((self, content: str, links: List[LinkReference])) -> str:
    """Apply link resolutions to content."""

def _add_autorefs((self, content: str, current_article: Article)) -> str:
    """Add automatic cross-references to content."""

def replace_match((match)):

def _generate_anchor_id((self, heading_text: str)) -> str:
    """Generate anchor ID from heading text."""

def _generate_article_url((self, article: Article)) -> str:
    """Generate MkDocs URL for article."""

def _is_document360_link((self, url: str)) -> bool:
    """Check if URL is a Document360 link."""

def _extract_keywords((self, title: str)) -> List[str]:
    """Extract keywords from article title."""

def _calculate_success_rate((self)) -> float:
    """Calculate link validation success rate."""

def _get_common_errors((self)) -> List[Dict[str, Any]]:
    """Get most common validation errors."""

def _extract_autorefs((self, content: str)) -> List[Dict[str, Any]]:
    """Extract mkdocs-autorefs patterns from content."""

def _validate_external_links_batch((self, external_links: List[LinkReference])) -> None:
    """Validate external links in batches using HTTP requests."""

def validate_single_link((link: LinkReference)):

def _validate_external_link_http((self, link: LinkReference)) -> None:
    """Validate a single external link via HTTP."""

def _track_link_analytics((self, link: LinkReference, current_article: Article)) -> None:
    """Track link analytics and metrics."""

def _process_autorefs((self, content: str, autorefs: List[Dict[str, Any]], current_article: Article)) -> str:
    """Process mkdocs-autorefs patterns and generate appropriate links."""

def _resolve_autoref_identifier((self, identifier: str)) -> Optional[str]:
    """Resolve an autoref identifier to a link."""

def _update_reference_index((self, resolved_links: List[LinkReference], current_article: Article)) -> None:
    """Update the reference index with article relationships."""

def _generate_smart_suggestions((self, current_article: Article, content: str)) -> List[Dict[str, Any]]:
    """Generate intelligent link suggestions based on content analysis."""

def _calculate_content_relevance((self, content: str, article: Article)) -> float:
    """Calculate content relevance score between current content and article."""

def _generate_suggestion_explanation((self, current_article: Article, suggested_article: Article, relevance_score: float)) -> str:
    """Generate explanation for why an article is suggested."""

def _get_validation_summary((self, links: List[LinkReference])) -> Dict[str, Any]:
    """Get validation summary for resolved links."""

def _get_analytics_summary((self, links: List[LinkReference])) -> Dict[str, Any]:
    """Get analytics summary for processed links."""

def _get_most_referenced_urls((self)) -> List[Dict[str, Any]]:
    """Get the most frequently referenced URLs."""

def _get_reference_graph_data((self, current_article: Article)) -> Dict[str, Any]:
    """Get reference graph data for the current article."""

def cleanup((self)):
    """Clean up resources including HTTP client."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/markdown_processor.py
# Language: python

import re
from typing import Dict, Any, List, Optional
from pathlib import Path
from loguru import logger

class MarkdownProcessor:
    """Process Document360 content for optimal MkDocs presentation."""
    def __init__((
        self,
        enable_extensions: bool = True,
        code_highlighting: bool = True,
        responsive_images: bool = True,
        table_optimization: bool = True,
    )) -> None:
        """Initialize Markdown processor."""
    def convert((self, content: str)) -> str:
        """Convert content to MkDocs-optimized Markdown."""
    def _reset_stats((self)) -> None:
        """Reset conversion statistics."""
    def _convert_d360_elements((self, content: str)) -> str:
        """Convert Document360 specific elements to Markdown."""
    def _convert_d360_callouts((self, content: str)) -> str:
        """Convert Document360 callout boxes to MkDocs admonitions."""
    def _convert_d360_code_blocks((self, content: str)) -> str:
        """Convert Document360 code blocks to MkDocs format."""
    def _convert_d360_tables((self, content: str)) -> str:
        """Convert Document360 tables to Markdown format."""
    def _html_table_to_markdown((self, table_html: str)) -> str:
        """Convert HTML table to Markdown table format."""
    def _convert_d360_images((self, content: str)) -> str:
        """Convert Document360 images to Markdown format."""
    def _html_to_markdown((self, content: str)) -> str:
        """Convert remaining HTML elements to Markdown."""
    def _process_code_blocks((self, content: str)) -> str:
        """Enhance code blocks for MkDocs."""
    def _process_tables((self, content: str)) -> str:
        """Optimize tables for MkDocs."""
    def _process_images((self, content: str)) -> str:
        """Process images for MkDocs."""
    def _process_links((self, content: str)) -> str:
        """Process and normalize links."""
    def _apply_mkdocs_extensions((self, content: str)) -> str:
        """Apply MkDocs extension formatting."""
    def _convert_to_tabs((self, content: str)) -> str:
        """Convert appropriate content to tabbed format."""
    def _enhance_admonitions((self, content: str)) -> str:
        """Enhance admonitions with better formatting."""
    def _final_cleanup((self, content: str)) -> str:
        """Perform final content cleanup."""
    def get_conversion_stats((self)) -> Dict[str, int]:
        """Get conversion statistics."""

def __init__((
        self,
        enable_extensions: bool = True,
        code_highlighting: bool = True,
        responsive_images: bool = True,
        table_optimization: bool = True,
    )) -> None:
    """Initialize Markdown processor."""

def convert((self, content: str)) -> str:
    """Convert content to MkDocs-optimized Markdown."""

def _reset_stats((self)) -> None:
    """Reset conversion statistics."""

def _convert_d360_elements((self, content: str)) -> str:
    """Convert Document360 specific elements to Markdown."""

def _convert_d360_callouts((self, content: str)) -> str:
    """Convert Document360 callout boxes to MkDocs admonitions."""

def _convert_d360_code_blocks((self, content: str)) -> str:
    """Convert Document360 code blocks to MkDocs format."""

def _convert_d360_tables((self, content: str)) -> str:
    """Convert Document360 tables to Markdown format."""

def _html_table_to_markdown((self, table_html: str)) -> str:
    """Convert HTML table to Markdown table format."""

def _convert_d360_images((self, content: str)) -> str:
    """Convert Document360 images to Markdown format."""

def _html_to_markdown((self, content: str)) -> str:
    """Convert remaining HTML elements to Markdown."""

def _process_code_blocks((self, content: str)) -> str:
    """Enhance code blocks for MkDocs."""

def _process_tables((self, content: str)) -> str:
    """Optimize tables for MkDocs."""

def _process_images((self, content: str)) -> str:
    """Process images for MkDocs."""

def _process_links((self, content: str)) -> str:
    """Process and normalize links."""

def _apply_mkdocs_extensions((self, content: str)) -> str:
    """Apply MkDocs extension formatting."""

def _convert_to_tabs((self, content: str)) -> str:
    """Convert appropriate content to tabbed format."""

def _enhance_admonitions((self, content: str)) -> str:
    """Enhance admonitions with better formatting."""

def _final_cleanup((self, content: str)) -> str:
    """Perform final content cleanup."""

def get_conversion_stats((self)) -> Dict[str, int]:
    """Get conversion statistics."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/plugin_manager.py
# Language: python

from typing import Dict, Any, List, Optional, Set
from dataclasses import dataclass, field
from pathlib import Path
import yaml
from loguru import logger
from d361.api.errors import Document360Error, ErrorCategory, ErrorSeverity
import asyncio

class PluginConfig:
    """Configuration for a specific MkDocs plugin."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert plugin config to MkDocs format."""

class PluginSet:
    """A collection of related plugins."""

class PluginManager:
    """Advanced MkDocs plugin management system."""
    def __init__((
        self,
        theme: str = "material",
        site_url: Optional[str] = None,
        enable_offline: bool = False,
    )) -> None:
        """Initialize plugin manager."""
    def _init_core_plugins((self)) -> PluginSet:
        """Initialize core essential plugins."""
    def _init_seo_plugins((self)) -> PluginSet:
        """Initialize SEO and social media plugins."""
    def _init_performance_plugins((self)) -> PluginSet:
        """Initialize performance optimization plugins."""
    def _init_accessibility_plugins((self)) -> PluginSet:
        """Initialize accessibility enhancement plugins."""
    def _init_advanced_plugins((self)) -> PluginSet:
        """Initialize advanced feature plugins."""
    def get_optimal_plugins((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
        custom_plugins: Optional[List[PluginConfig]] = None,
    )) -> List[Dict[str, Any]]:
        """Get optimal plugin configuration for the current setup."""
    def get_plugin_dependencies((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
    )) -> Dict[str, List[str]]:
        """Get all plugin dependencies for installation."""
    def get_installation_guide((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
    )) -> Dict[str, Any]:
        """Get installation guide for required dependencies."""
    def validate_plugin_configuration((self, plugins_config: List[Any])) -> Dict[str, Any]:
        """Validate plugin configuration for common issues."""

class MarkdownExtensionManager:
    """Advanced Markdown extension management for MkDocs."""
    def __init__((self, theme: str = "material")) -> None:
        """Initialize Markdown extension manager."""
    def get_core_extensions((self)) -> List[Dict[str, Any] | str]:
        """Get core Markdown extensions."""
    def get_enhanced_extensions((self)) -> List[Dict[str, Any] | str]:
        """Get enhanced Markdown extensions with advanced configurations."""
    def get_advanced_extensions((self)) -> List[Dict[str, Any] | str]:
        """Get advanced Markdown extensions for specialized content."""
    def get_optimal_extensions((
        self,
        include_advanced: bool = True,
        include_math: bool = True,
        include_diagrams: bool = True,
    )) -> List[Dict[str, Any] | str]:
        """Get optimal Markdown extensions configuration."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert plugin config to MkDocs format."""

def __init__((
        self,
        theme: str = "material",
        site_url: Optional[str] = None,
        enable_offline: bool = False,
    )) -> None:
    """Initialize plugin manager."""

def _init_core_plugins((self)) -> PluginSet:
    """Initialize core essential plugins."""

def _init_seo_plugins((self)) -> PluginSet:
    """Initialize SEO and social media plugins."""

def _init_performance_plugins((self)) -> PluginSet:
    """Initialize performance optimization plugins."""

def _init_accessibility_plugins((self)) -> PluginSet:
    """Initialize accessibility enhancement plugins."""

def _init_advanced_plugins((self)) -> PluginSet:
    """Initialize advanced feature plugins."""

def get_optimal_plugins((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
        custom_plugins: Optional[List[PluginConfig]] = None,
    )) -> List[Dict[str, Any]]:
    """Get optimal plugin configuration for the current setup."""

def get_plugin_dependencies((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
    )) -> Dict[str, List[str]]:
    """Get all plugin dependencies for installation."""

def get_installation_guide((
        self,
        enable_seo: bool = True,
        enable_performance: bool = True,
        enable_accessibility: bool = True,
        enable_advanced: bool = False,
    )) -> Dict[str, Any]:
    """Get installation guide for required dependencies."""

def validate_plugin_configuration((self, plugins_config: List[Any])) -> Dict[str, Any]:
    """Validate plugin configuration for common issues."""

def __init__((self, theme: str = "material")) -> None:
    """Initialize Markdown extension manager."""

def get_core_extensions((self)) -> List[Dict[str, Any] | str]:
    """Get core Markdown extensions."""

def get_enhanced_extensions((self)) -> List[Dict[str, Any] | str]:
    """Get enhanced Markdown extensions with advanced configurations."""

def get_advanced_extensions((self)) -> List[Dict[str, Any] | str]:
    """Get advanced Markdown extensions for specialized content."""

def get_optimal_extensions((
        self,
        include_advanced: bool = True,
        include_math: bool = True,
        include_diagrams: bool = True,
    )) -> List[Dict[str, Any] | str]:
    """Get optimal Markdown extensions configuration."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/mkdocs/processors/seo_optimizer.py
# Language: python

import json
from typing import Dict, Any, List, Optional, Union
from dataclasses import dataclass, field
from pathlib import Path
from datetime import datetime, timezone
from urllib.parse import urljoin, urlparse
from loguru import logger
from d361.api.errors import Document360Error, ErrorCategory, ErrorSeverity
import re

class SEOMetadata:
    """SEO metadata for a page or site."""
    def to_frontmatter((self)) -> Dict[str, Any]:
        """Convert to MkDocs frontmatter format."""

class StructuredData:
    """Structured data for JSON-LD generation."""
    def to_json_ld((self)) -> str:
        """Generate JSON-LD structured data."""

class SEOOptimizer:
    """Comprehensive SEO optimization for MkDocs sites."""
    def __init__((
        self,
        site_url: str,
        site_name: str,
        site_description: Optional[str] = None,
        default_author: Optional[str] = None,
        default_og_image: Optional[str] = None,
        organization_name: Optional[str] = None,
        organization_logo: Optional[str] = None,
    )) -> None:
        """Initialize SEO optimizer."""
    def generate_page_metadata((
        self,
        title: str,
        content: str,
        url_path: str,
        author: Optional[str] = None,
        tags: Optional[List[str]] = None,
        published_date: Optional[datetime] = None,
        modified_date: Optional[datetime] = None,
        og_image: Optional[str] = None,
        schema_type: str = "Article",
    )) -> SEOMetadata:
        """Generate comprehensive SEO metadata for a page."""
    def _generate_description((self, content: str, title: str, max_length: int = 155)) -> str:
        """Generate SEO-optimized description from content."""
    def generate_structured_data((
        self,
        metadata: SEOMetadata,
        content: str,
        breadcrumbs: Optional[List[Dict[str, str]]] = None,
    )) -> StructuredData:
        """Generate structured data for a page."""
    def generate_social_media_config((self)) -> Dict[str, Any]:
        """Generate social media optimization configuration."""
    def generate_analytics_config((
        self,
        google_analytics: Optional[str] = None,
        google_tag_manager: Optional[str] = None,
        enable_feedback: bool = True,
    )) -> Dict[str, Any]:
        """Generate analytics and feedback configuration."""
    def generate_performance_config((self)) -> Dict[str, Any]:
        """Generate performance optimization configuration."""
    def generate_accessibility_config((self)) -> Dict[str, Any]:
        """Generate accessibility enhancement configuration."""
    def validate_seo_config((self, config: Dict[str, Any])) -> Dict[str, Any]:
        """Validate SEO configuration and provide recommendations."""
    def generate_sitemap_urls((
        self,
        pages: List[Dict[str, Any]],
        priority_map: Optional[Dict[str, float]] = None,
        changefreq_map: Optional[Dict[str, str]] = None,
    )) -> List[Dict[str, Any]]:
        """Generate sitemap URL entries."""

def to_frontmatter((self)) -> Dict[str, Any]:
    """Convert to MkDocs frontmatter format."""

def to_json_ld((self)) -> str:
    """Generate JSON-LD structured data."""

def __init__((
        self,
        site_url: str,
        site_name: str,
        site_description: Optional[str] = None,
        default_author: Optional[str] = None,
        default_og_image: Optional[str] = None,
        organization_name: Optional[str] = None,
        organization_logo: Optional[str] = None,
    )) -> None:
    """Initialize SEO optimizer."""

def generate_page_metadata((
        self,
        title: str,
        content: str,
        url_path: str,
        author: Optional[str] = None,
        tags: Optional[List[str]] = None,
        published_date: Optional[datetime] = None,
        modified_date: Optional[datetime] = None,
        og_image: Optional[str] = None,
        schema_type: str = "Article",
    )) -> SEOMetadata:
    """Generate comprehensive SEO metadata for a page."""

def _generate_description((self, content: str, title: str, max_length: int = 155)) -> str:
    """Generate SEO-optimized description from content."""

def generate_structured_data((
        self,
        metadata: SEOMetadata,
        content: str,
        breadcrumbs: Optional[List[Dict[str, str]]] = None,
    )) -> StructuredData:
    """Generate structured data for a page."""

def generate_social_media_config((self)) -> Dict[str, Any]:
    """Generate social media optimization configuration."""

def generate_analytics_config((
        self,
        google_analytics: Optional[str] = None,
        google_tag_manager: Optional[str] = None,
        enable_feedback: bool = True,
    )) -> Dict[str, Any]:
    """Generate analytics and feedback configuration."""

def generate_performance_config((self)) -> Dict[str, Any]:
    """Generate performance optimization configuration."""

def generate_accessibility_config((self)) -> Dict[str, Any]:
    """Generate accessibility enhancement configuration."""

def validate_seo_config((self, config: Dict[str, Any])) -> Dict[str, Any]:
    """Validate SEO configuration and provide recommendations."""

def generate_sitemap_urls((
        self,
        pages: List[Dict[str, Any]],
        priority_map: Optional[Dict[str, float]] = None,
        changefreq_map: Optional[Dict[str, str]] = None,
    )) -> List[Dict[str, Any]]:
    """Generate sitemap URL entries."""


<document index="45">
<source>src/d361/mkdocs/templates/material_theme.yml.j2</source>
<document_content>
# Material Theme MkDocs Configuration Template
# Generated by d361 MkDocs Export System
# this_file: external/int_folders/d361/src/d361/mkdocs/templates/material_theme.yml.j2

# Basic site configuration
site_name: {{ site_name | default('Document360 Export') }}
{% if site_url %}site_url: {{ site_url }}{% endif %}
{% if site_author %}site_author: {{ site_author }}{% endif %}
{% if site_description %}site_description: {{ site_description }}{% endif %}
{% if repo_url %}repo_url: {{ repo_url }}{% endif %}
{% if repo_name %}repo_name: {{ repo_name }}{% endif %}

# Build directories
docs_dir: {{ docs_dir | default('docs') }}
site_dir: {{ site_dir | default('site') }}

# Material theme configuration
theme:
  name: material
  {% if language %}language: {{ language }}{% endif %}
  {% if custom_dir %}custom_dir: {{ custom_dir }}{% endif %}
  
  # Theme features
  features:
    - navigation.instant
    - navigation.instant.prefetch
    - navigation.tracking
    - navigation.tabs
    - navigation.tabs.sticky
    - navigation.sections
    - navigation.expand
    - navigation.path
    - navigation.prune
    - navigation.indexes
    - navigation.top
    - search.suggest
    - search.highlight
    - search.share
    - header.autohide
    - content.action.edit
    - content.action.view
    - content.code.copy
    - content.code.select
    - content.tooltips
    {% if enable_tabs | default(false) %}- content.tabs.link{% endif %}
    {% if enable_feedback | default(false) %}- content.feedback.back
    - content.feedback.general{% endif %}

  # Color palette
  palette:
    {% if color_scheme == 'auto' %}
    - media: "(prefers-color-scheme: light)"
      scheme: default
      primary: {{ primary_color | default('indigo') }}
      accent: {{ accent_color | default('indigo') }}
      toggle:
        icon: material/brightness-7
        name: Switch to dark mode
    - media: "(prefers-color-scheme: dark)"
      scheme: slate
      primary: {{ primary_color | default('indigo') }}
      accent: {{ accent_color | default('indigo') }}
      toggle:
        icon: material/brightness-4
        name: Switch to light mode
    {% else %}
    - scheme: {{ color_scheme | default('default') }}
      primary: {{ primary_color | default('indigo') }}
      accent: {{ accent_color | default('indigo') }}
    {% endif %}

  # Typography
  font:
    text: {{ text_font | default('Roboto') }}
    code: {{ code_font | default('Roboto Mono') }}

  # Icons
  {% if logo %}logo: {{ logo }}{% endif %}
  {% if favicon %}favicon: {{ favicon }}{% endif %}
  icon:
    repo: {{ repo_icon | default('fontawesome/brands/github') }}
    {% if enable_edit %}edit: material/pencil{% endif %}
    {% if enable_view %}view: material/eye{% endif %}

# Navigation
{% if navigation %}
nav:
{% for item in navigation %}
  {{ item | indent(2, true) }}
{% endfor %}
{% endif %}

# Enhanced Markdown extensions for Material
markdown_extensions:
  # Built-in extensions
  - abbr
  - admonition
  - attr_list
  - def_list
  - footnotes
  - md_in_html
  - tables
  - toc:
      permalink: true
      toc_depth: {{ toc_depth | default(3) }}
      permalink_title: Anchor link to this section for reference

  # PyMdown Extensions
  - pymdownx.arithmatex:
      generic: true
  - pymdownx.betterem:
      smart_enable: all
  - pymdownx.caret
  - pymdownx.details
  - pymdownx.emoji:
      emoji_generator: !!python/name:material.extensions.emoji.to_svg
      emoji_index: !!python/name:material.extensions.emoji.twemoji
  - pymdownx.highlight:
      anchor_linenums: true
      line_spans: __span
      pygments_lang_class: true
  - pymdownx.inlinehilite
  - pymdownx.keys
  - pymdownx.magiclink:
      normalize_issue_symbols: true
      repo_url_shorthand: true
      user: {{ github_user | default('') }}
      repo: {{ github_repo | default('') }}
  - pymdownx.mark
  - pymdownx.smartsymbols
  - pymdownx.snippets:
      check_paths: true
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
  - pymdownx.tabbed:
      alternate_style: true
      combine_header_slug: true
      slugify: !!python/object/apply:pymdownx.slugs.slugify
        kwds:
          case: lower
  - pymdownx.tasklist:
      custom_checkbox: true
  - pymdownx.tilde

# Enhanced plugins for Material
plugins:
  - search:
      lang: {{ search_lang | default(['en']) }}
      separator: '[\s\u200b\-_,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
  {% if enable_autorefs | default(true) %}- autorefs{% endif %}
  {% if enable_section_index | default(true) %}- section-index{% endif %}
  {% if enable_social_cards | default(false) %}- social:
      cards_layout_options:
        background_color: {{ social_cards_background | default('#1976d2') }}
        color: {{ social_cards_color | default('#ffffff') }}{% endif %}
  {% if enable_tags | default(false) %}- tags:
      tags_file: {{ tags_file | default('tags.md') }}{% endif %}
  {% if enable_redirects and redirects %}- redirects:
      redirect_maps:
        {% for old_path, new_path in redirects.items() %}
        {{ old_path }}: {{ new_path }}
        {% endfor %}{% endif %}
  {% if enable_minify | default(false) %}- minify:
      minify_html: true
      minify_css: true
      minify_js: true
      htmlmin_opts:
        remove_comments: true
      cache_safe: true{% endif %}

# Extra configuration for Material
extra:
  generator: 'd361 MkDocs Export System'
  export_date: '{{ export_date }}'
  
  # Material-specific features
  {% if homepage %}homepage: {{ homepage }}{% endif %}
  {% if analytics %}
  analytics:
    provider: {{ analytics.provider | default('google') }}
    property: {{ analytics.property }}
    {% if analytics.feedback %}
    feedback:
      title: Was this page helpful?
      ratings:
        - icon: material/emoticon-happy-outline
          name: This page was helpful
          data: 1
          note: >-
            Thanks for your feedback!
        - icon: material/emoticon-sad-outline
          name: This page could be improved
          data: 0
          note: >-
            Thanks for your feedback! Help us improve this page by
            using our <a href="{{ analytics.feedback_url }}" target="_blank" rel="noopener">feedback form</a>.
    {% endif %}
  {% endif %}
  
  # Social links
  {% if social %}
  social:
    {% for item in social %}
    - icon: {{ item.icon }}
      link: {{ item.link }}
      {% if item.name %}name: {{ item.name }}{% endif %}
    {% endfor %}
  {% endif %}

  # Version information
  {% if version %}
  version:
    provider: {{ version.provider | default('mike') }}
    {% if version.default %}default: {{ version.default }}{% endif %}
    {% if version.alias %}alias: {{ version.alias }}{% endif %}
  {% endif %}

  # Consent for GDPR compliance
  {% if consent | default(false) %}
  consent:
    title: Cookie consent
    description: >- 
      We use cookies to recognize your repeated visits and preferences, as well
      as to measure the effectiveness of our documentation and whether users
      find what they're searching for. With your consent, you're helping us to
      make our documentation better.
  {% endif %}

# Copyright
{% if copyright %}copyright: {{ copyright }}{% endif %}

# Additional CSS/JS
{% if extra_css %}
extra_css:
  {% for css in extra_css %}
  - {{ css }}
  {% endfor %}
{% endif %}

{% if extra_javascript %}
extra_javascript:
  {% if enable_mathjax | default(false) %}
  - javascripts/mathjax.js
  - https://polyfill.io/v3/polyfill.min.js?features=es6
  - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
  {% endif %}
  {% for js in extra_javascript %}
  - {{ js }}
  {% endfor %}
{% endif %}

# Development server configuration
dev_addr: {{ dev_addr | default('127.0.0.1:8000') }}
use_directory_urls: {{ use_directory_urls | default(true) | lower }}
strict: {{ strict_mode | default(false) | lower }}

# Build configuration
{% if edit_uri %}edit_uri: {{ edit_uri }}{% endif %}
{% if edit_uri_template %}edit_uri_template: {{ edit_uri_template }}{% endif %}

# Validation
validation:
  omitted_files: warn
  absolute_links: warn
  unrecognized_links: warn
  anchors: warn
  nav:
    omitted_files: warn
    not_found: warn
    absolute_links: warn
</document_content>
</document>

<document index="46">
<source>src/d361/mkdocs/templates/mkdocs_base.yml.j2</source>
<document_content>
# Base MkDocs Configuration Template
# Generated by d361 MkDocs Export System
# this_file: external/int_folders/d361/src/d361/mkdocs/templates/mkdocs_base.yml.j2

# Basic site configuration
site_name: {{ site_name | default('Document360 Export') }}
{% if site_url %}site_url: {{ site_url }}{% endif %}
{% if site_author %}site_author: {{ site_author }}{% endif %}
{% if site_description %}site_description: {{ site_description }}{% endif %}
{% if repo_url %}repo_url: {{ repo_url }}{% endif %}
{% if repo_name %}repo_name: {{ repo_name }}{% endif %}

# Build directories
docs_dir: {{ docs_dir | default('docs') }}
site_dir: {{ site_dir | default('site') }}

# Theme configuration
theme:
  name: {{ theme_name | default('mkdocs') }}
  {% if theme_name == 'readthedocs' %}
  highlightjs: true
  hljs_languages:
    - yaml
    - python
    - javascript
    - bash
  {% endif %}

# Navigation
{% if navigation %}
nav:
{% for item in navigation %}
  {{ item | indent(2, true) }}
{% endfor %}
{% endif %}

# Markdown extensions
markdown_extensions:
  - toc:
      permalink: true
      toc_depth: {{ toc_depth | default(3) }}
  - admonition
  - codehilite:
      guess_lang: false
  - def_list
  - footnotes
  - meta
  - tables
  {% if enable_task_lists | default(false) %}- pymdownx.tasklist:
      custom_checkbox: true{% endif %}
  {% if enable_superfences | default(false) %}- pymdownx.superfences{% endif %}

# Plugins
plugins:
  - search:
      lang: {{ search_lang | default(['en']) }}
      separator: '[\s\-\.]+'
  {% if enable_autorefs | default(false) %}- autorefs{% endif %}
  {% if enable_section_index | default(false) %}- section-index{% endif %}
  {% if enable_redirects and redirects %}- redirects:
      redirect_maps:
        {% for old_path, new_path in redirects.items() %}
        {{ old_path }}: {{ new_path }}
        {% endfor %}{% endif %}

# Extra configuration
extra:
  generator: 'd361 MkDocs Export System'
  export_date: '{{ export_date }}'
  {% if social %}
  social:
    {% for item in social %}
    - icon: {{ item.icon }}
      link: {{ item.link }}
      {% if item.name %}name: {{ item.name }}{% endif %}
    {% endfor %}
  {% endif %}

# Copyright
{% if copyright %}copyright: {{ copyright }}{% endif %}

# Additional CSS/JS
{% if extra_css %}
extra_css:
  {% for css in extra_css %}
  - {{ css }}
  {% endfor %}
{% endif %}

{% if extra_javascript %}
extra_javascript:
  {% for js in extra_javascript %}
  - {{ js }}
  {% endfor %}
{% endif %}

# Development server configuration
dev_addr: {{ dev_addr | default('127.0.0.1:8000') }}
use_directory_urls: {{ use_directory_urls | default(true) | lower }}
strict: {{ strict_mode | default(false) | lower }}

# Build configuration
{% if edit_uri %}edit_uri: {{ edit_uri }}{% endif %}
{% if google_analytics %}
google_analytics:
  - {{ google_analytics }}
  - auto
{% endif %}
</document_content>
</document>

<document index="47">
<source>src/d361/mkdocs/templates/plugin_configs.yml.j2</source>
<document_content>
# MkDocs Plugin Configurations Template
# Generated by d361 MkDocs Export System
# this_file: external/int_folders/d361/src/d361/mkdocs/templates/plugin_configs.yml.j2

# Core plugins configuration
plugins:
  # Search plugin (always enabled)
  - search:
      lang: {{ search_lang | default(['en']) }}
      separator: '[\s\u200b\-_,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
      min_search_length: {{ min_search_length | default(2) }}
      prebuild_index: {{ prebuild_search_index | default(false) | lower }}
      indexing: 
        - content
        - headings
        {% if index_titles | default(true) %}- titles{% endif %}

  # Core navigation plugins
  {% if enable_autorefs | default(true) %}
  - autorefs:
      external_links: {{ autorefs_external_links | default(false) | lower }}
  {% endif %}

  {% if enable_section_index | default(true) %}
  - section-index
  {% endif %}

  {% if enable_literate_nav | default(false) %}
  - literate-nav:
      nav_file: {{ literate_nav_file | default('SUMMARY.md') }}
      implicit_index: {{ literate_nav_implicit_index | default(true) | lower }}
  {% endif %}

  # Content generation plugins
  {% if enable_gen_files | default(false) %}
  - gen-files:
      scripts:
        {% for script in gen_files_scripts | default([]) %}
        - {{ script }}
        {% endfor %}
  {% endif %}

  {% if enable_macros | default(false) %}
  - macros:
      modules: {{ macros_modules | default([]) }}
      include_dir: {{ macros_include_dir | default('includes') }}
      include_yaml: {{ macros_include_yaml | default([]) }}
  {% endif %}

  # Content enhancement plugins
  {% if enable_include_markdown | default(false) %}
  - include-markdown:
      opening_tag: {{ include_opening_tag | default('{%') }}
      closing_tag: {{ include_closing_tag | default('%}') }}
      preserve_includer_indent: {{ preserve_includer_indent | default(true) | lower }}
  {% endif %}

  # Navigation enhancement plugins
  {% if enable_awesome_pages | default(false) %}
  - awesome-pages:
      filename: {{ awesome_pages_filename | default('.pages') }}
      collapse_single_pages: {{ awesome_pages_collapse | default(false) | lower }}
      strict: {{ awesome_pages_strict | default(true) | lower }}
  {% endif %}

  # Site management plugins
  {% if enable_redirects and redirects %}
  - redirects:
      redirect_maps:
        {% for old_path, new_path in redirects.items() %}
        {{ old_path }}: {{ new_path }}
        {% endfor %}
  {% endif %}

  # Development and debugging plugins
  {% if enable_print_site | default(false) %}
  - print-site:
      add_to_navigation: {{ print_site_add_nav | default(false) | lower }}
      print_page_title: {{ print_site_title | default('Print Site') }}
      add_table_of_contents: {{ print_site_toc | default(true) | lower }}
      add_full_urls: {{ print_site_full_urls | default(false) | lower }}
  {% endif %}

  # Performance optimization plugins
  {% if enable_minify | default(false) %}
  - minify:
      minify_html: {{ minify_html | default(true) | lower }}
      minify_css: {{ minify_css | default(true) | lower }}
      minify_js: {{ minify_js | default(true) | lower }}
      htmlmin_opts:
        remove_comments: {{ minify_remove_comments | default(true) | lower }}
        remove_empty_space: {{ minify_remove_empty_space | default(false) | lower }}
        remove_all_empty_space: {{ minify_remove_all_empty_space | default(false) | lower }}
        strip_whitespaces: {{ minify_strip_whitespace | default(true) | lower }}
        reduce_boolean_attributes: {{ minify_reduce_boolean_attrs | default(false) | lower }}
      cache_safe: {{ minify_cache_safe | default(true) | lower }}
  {% endif %}

  {% if enable_optimize | default(false) %}
  - optimize:
      enabled: !ENV [OPTIMIZE, false]
      optimize_png: {{ optimize_png | default(true) | lower }}
      optimize_jpg: {{ optimize_jpg | default(true) | lower }}
      optimize_svg: {{ optimize_svg | default(true) | lower }}
      cache_dir: {{ optimize_cache_dir | default('.cache/plugins/optimize') }}
      print_gain: {{ optimize_print_gain | default(true) | lower }}
  {% endif %}

  # Material theme specific plugins
  {% if theme_name == 'material' %}
  
  {% if enable_social_cards | default(false) %}
  - social:
      cards: {{ social_cards_enabled | default(true) | lower }}
      cards_dir: {{ social_cards_dir | default('assets/images/social') }}
      cards_layout: {{ social_cards_layout | default('default') }}
      cards_layout_options:
        background_color: {{ social_cards_background | default('#1976d2') }}
        background_image: {{ social_cards_background_image | default('') }}
        color: {{ social_cards_color | default('#ffffff') }}
        font_family: {{ social_cards_font | default('Roboto') }}
      debug: {{ social_cards_debug | default(false) | lower }}
  {% endif %}

  {% if enable_tags | default(false) %}
  - tags:
      tags_file: {{ tags_file | default('tags.md') }}
      tags_extra_files:
        {% for tag_file in tags_extra_files | default([]) %}
        - {{ tag_file }}
        {% endfor %}
  {% endif %}

  {% if enable_blog | default(false) %}
  - blog:
      blog_dir: {{ blog_dir | default('blog') }}
      blog_toc: {{ blog_toc | default(true) | lower }}
      post_dir: {{ blog_post_dir | default('{blog}/posts') }}
      post_date_format: {{ blog_date_format | default('full') }}
      post_url_date_format: {{ blog_url_date_format | default('yyyy/MM/dd') }}
      post_url_format: {{ blog_url_format | default('{date}/{slug}') }}
      post_excerpt: {{ blog_excerpt | default('optional') }}
      post_excerpt_max_authors: {{ blog_excerpt_max_authors | default(1) }}
      post_excerpt_max_categories: {{ blog_excerpt_max_categories | default(5) }}
      post_readtime: {{ blog_readtime | default(true) | lower }}
      post_readtime_words_per_minute: {{ blog_readtime_wpm | default(265) }}
      archive: {{ blog_archive | default(true) | lower }}
      archive_name: {{ blog_archive_name | default('Archive') }}
      archive_date_format: {{ blog_archive_date_format | default('yyyy') }}
      archive_url_date_format: {{ blog_archive_url_date_format | default('yyyy') }}
      archive_url_format: {{ blog_archive_url_format | default('archive/{date}') }}
      archive_toc: {{ blog_archive_toc | default(true) | lower }}
      categories: {{ blog_categories | default(true) | lower }}
      categories_name: {{ blog_categories_name | default('Categories') }}
      categories_url_format: {{ blog_categories_url_format | default('category/{slug}') }}
      categories_toc: {{ blog_categories_toc | default(true) | lower }}
      authors: {{ blog_authors | default(true) | lower }}
      authors_file: {{ blog_authors_file | default('{blog}/.authors.yml') }}
      draft: {{ blog_draft | default(false) | lower }}
      draft_if_future_date: {{ blog_draft_future | default(false) | lower }}
      draft_on_serve: {{ blog_draft_on_serve | default(true) | lower }}
      pagination: {{ blog_pagination | default(true) | lower }}
      pagination_per_page: {{ blog_pagination_per_page | default(10) }}
      pagination_url_format: {{ blog_pagination_url_format | default('page/{page}') }}
      pagination_format: {{ blog_pagination_format | default('~2~') }}
      pagination_keep_content: {{ blog_pagination_keep_content | default(false) | lower }}
  {% endif %}

  {% if enable_offline | default(false) %}
  - offline:
      enabled: !ENV [OFFLINE, false]
  {% endif %}

  {% if enable_privacy | default(false) %}
  - privacy:
      enabled: !ENV [PRIVACY, false]
      cache: {{ privacy_cache | default(true) | lower }}
      cache_dir: {{ privacy_cache_dir | default('.cache/plugins/privacy') }}
      assets: {{ privacy_assets | default(true) | lower }}
      assets_fetch: {{ privacy_assets_fetch | default(true) | lower }}
      assets_fetch_dir: {{ privacy_assets_fetch_dir | default('assets/external') }}
      links: {{ privacy_links | default(true) | lower }}
      links_attr_map:
        target: {{ privacy_links_target | default('_blank') }}
        rel: {{ privacy_links_rel | default('noopener') }}
  {% endif %}

  {% endif %}

  # API documentation plugins
  {% if enable_mkdocstrings | default(false) %}
  - mkdocstrings:
      default_handler: {{ mkdocstrings_handler | default('python') }}
      handlers:
        python:
          paths: {{ mkdocstrings_paths | default(['src']) }}
          options:
            docstring_style: {{ mkdocstrings_docstring_style | default('google') }}
            docstring_options:
              ignore_init_summary: {{ mkdocstrings_ignore_init_summary | default(true) | lower }}
            merge_init_into_class: {{ mkdocstrings_merge_init | default(true) | lower }}
            show_submodules: {{ mkdocstrings_show_submodules | default(true) | lower }}
            show_source: {{ mkdocstrings_show_source | default(true) | lower }}
            show_root_heading: {{ mkdocstrings_show_root_heading | default(false) | lower }}
            show_root_toc_entry: {{ mkdocstrings_show_root_toc | default(true) | lower }}
            show_root_full_path: {{ mkdocstrings_show_root_full_path | default(false) | lower }}
            show_object_full_path: {{ mkdocstrings_show_object_full_path | default(false) | lower }}
            show_category_heading: {{ mkdocstrings_show_category_heading | default(false) | lower }}
            show_if_no_docstring: {{ mkdocstrings_show_if_no_docstring | default(false) | lower }}
            show_signature: {{ mkdocstrings_show_signature | default(true) | lower }}
            show_signature_annotations: {{ mkdocstrings_show_signature_annotations | default(false) | lower }}
            separate_signature: {{ mkdocstrings_separate_signature | default(false) | lower }}
            group_by_category: {{ mkdocstrings_group_by_category | default(true) | lower }}
            heading_level: {{ mkdocstrings_heading_level | default(2) }}
  {% endif %}

  # Additional specialized plugins
  {% if enable_git_revision_date_localized | default(false) %}
  - git-revision-date-localized:
      type: {{ git_revision_date_type | default('date') }}
      timezone: {{ git_revision_date_timezone | default('UTC') }}
      locale: {{ git_revision_date_locale | default('en') }}
      fallback_to_build_date: {{ git_revision_date_fallback | default(false) | lower }}
      enable_creation_date: {{ git_revision_date_creation | default(true) | lower }}
  {% endif %}

  {% if enable_rss | default(false) %}
  - rss:
      match_path: {{ rss_match_path | default('.*') }}
      date_from_meta:
        as_creation: {{ rss_date_creation_meta | default('date') }}
        as_update: {{ rss_date_update_meta | default('git') }}
      categories:
        {% for category in rss_categories | default([]) %}
        - {{ category }}
        {% endfor %}
      comments_path: {{ rss_comments_path | default('') }}
      description: {{ rss_description | default('') }}
      feed_ttl: {{ rss_feed_ttl | default(1440) }}
      image: {{ rss_image | default('') }}
      length: {{ rss_length | default(20) }}
      pretty_print: {{ rss_pretty_print | default(false) | lower }}
      url_parameters:
        utm_source: {{ rss_utm_source | default('documentation') }}
        utm_medium: {{ rss_utm_medium | default('RSS') }}
        utm_campaign: {{ rss_utm_campaign | default('feed-syndication') }}
  {% endif %}

  # Custom plugins (user-defined)
  {% if custom_plugins %}
  {% for plugin in custom_plugins %}
  - {{ plugin.name }}{% if plugin.config %}:
      {% for key, value in plugin.config.items() %}
      {{ key }}: {{ value }}
      {% endfor %}{% endif %}
  {% endfor %}
  {% endif %}
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/__init__.py
# Language: python

from .__main__ import CLI, main
from .config import Config
from .d361_offline import D361Offline


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/__main__.py
# Language: python

import asyncio
import sys
from pathlib import Path
from typing import Any
import fire
from loguru import logger
from .config import Config
from .d361_offline import D361Offline
import json
import json
import traceback

class CLI:
    """Command-line interface for D361Offline."""
    def __init__((self)) -> None:
        """Initialize CLI."""
    def prep((
        self,
        map_url: str = "https://docs.document360.com/sitemap-en.xml",
        nav_url: str = "",
        output_dir: str = "",
        style: str = "",
        effort: int = 1,
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        wait: int = 0,
    )) -> dict[str, Any]:
        """Prepare for documentation generation by extracting sitemap and navigation."""
    def fetch((
        self,
        prep_file: str = "",
        output_dir: str = "",
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        wait: int = 0,
    )) -> dict[str, Any]:
        """Fetch content for all URLs in the prep file."""
    def build((
        self,
        fetch_file: str = "",
        output_dir: str = "",
        style: str = "",
        verbose: bool = False,
    )) -> None:
        """Build HTML and Markdown output from fetched content."""
    def all((
        self,
        map_url: str = "https://docs.document360.com/sitemap-en.xml",
        nav_url: str = "",
        output_dir: str = "",
        style: str = "",
        effort: int = 1,
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        pause: int = 0,
    )) -> None:
        """Run the entire process: prep, fetch, and build."""

def __init__((self)) -> None:
    """Initialize CLI."""

def prep((
        self,
        map_url: str = "https://docs.document360.com/sitemap-en.xml",
        nav_url: str = "",
        output_dir: str = "",
        style: str = "",
        effort: int = 1,
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        wait: int = 0,
    )) -> dict[str, Any]:
    """Prepare for documentation generation by extracting sitemap and navigation."""

def fetch((
        self,
        prep_file: str = "",
        output_dir: str = "",
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        wait: int = 0,
    )) -> dict[str, Any]:
    """Fetch content for all URLs in the prep file."""

def build((
        self,
        fetch_file: str = "",
        output_dir: str = "",
        style: str = "",
        verbose: bool = False,
    )) -> None:
    """Build HTML and Markdown output from fetched content."""

def all((
        self,
        map_url: str = "https://docs.document360.com/sitemap-en.xml",
        nav_url: str = "",
        output_dir: str = "",
        style: str = "",
        effort: int = 1,
        parallel: int = 3,
        retries: int = 2,
        timeout: int = 60,
        verbose: bool = False,
        test: bool = False,
        pause: int = 0,
    )) -> None:
    """Run the entire process: prep, fetch, and build."""

def main(()) -> None:
    """Entry point for the CLI."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/browser.py
# Language: python

from loguru import logger
from playwright.async_api import Browser, BrowserContext, Page
from playwright.async_api import async_playwright

def setup_browser((headless: bool = True)) -> tuple[Browser, BrowserContext]:
    """Set up browser for web scraping."""

def scroll_to_bottom((page: Page, selector: str, max_scrolls: int = 30)) -> None:
    """Scroll through a tree view to load all virtual scroll items."""

def expand_all_items((page: Page, selector: str, max_attempts: int = 12)) -> int:
    """Recursively expand all items in a tree view by clicking collapsed triangle icons."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/config.py
# Language: python

from pathlib import Path
from typing import Any
from urllib.parse import urlparse
from pydantic import AnyHttpUrl, BaseModel, Field, TypeAdapter, computed_field

class Config(B, a, s, e, M, o, d, e, l):
    """Configuration model for d361_offline."""
    def model_post_init((self, __context: Any)) -> None:
        """Post-initialization logic."""
    def model_dump((self, **kwargs: Any)) -> dict[str, Any]:
        """Override model_dump to ensure all fields are JSON serializable."""

def root_domain((self)) -> str:
    """Extracts the root domain from the map_url."""

def prep_filename((self)) -> str:

def fetch_filename((self)) -> str:

def nav_json_filename((self)) -> str:

def nav_html_filename((self)) -> str:

def nav_md_filename((self)) -> str:

def all_docs_html_filename((self)) -> str:

def all_docs_md_filename((self)) -> str:

def html_dir((self)) -> Path:

def md_dir((self)) -> Path:

def prep_file((self)) -> Path:

def fetch_file((self)) -> Path:

def model_post_init((self, __context: Any)) -> None:
    """Post-initialization logic."""

def model_dump((self, **kwargs: Any)) -> dict[str, Any]:
    """Override model_dump to ensure all fields are JSON serializable."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/content.py
# Language: python

from loguru import logger
from markdownify import markdownify as md
from playwright.async_api import Page
from tenacity import retry, stop_after_attempt, wait_exponential

def extract_page_content((page: Page)) -> dict[str, str] | None:
    """Extract title, HTML content, and Markdown from a page."""


<document index="48">
<source>src/d361/offline/d361_offline.css</source>
<document_content>
:root {
    --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
    --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    --font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
    
    --color-background: #ffffff;
    --color-text: #333333;
    --color-text-muted: #666666;
    --color-link: #0366d6;
    --color-link-hover: #2188ff;
    --color-border: #e1e4e8;
    --color-heading: #24292e;
    --color-code-bg: #f6f8fa;
    --color-blockquote: #f0f4f8;
    --color-sidebar-bg: #f8f9fa;
    
    --spacing-unit: 16px;
    --content-width: 760px;
    --sidebar-width: 280px;
}

@media (prefers-color-scheme: dark) {
    :root {
        --color-background: #0d1117;
        --color-text: #c9d1d9;
        --color-text-muted: #8b949e;
        --color-link: #58a6ff;
        --color-link-hover: #79c0ff;
        --color-border: #30363d;
        --color-heading: #e6edf3;
        --color-code-bg: #161b22;
        --color-blockquote: #161b22;
        --color-sidebar-bg: #0d1117;
    }
}

html {
    box-sizing: border-box;
    font-size: 16px;
    -webkit-text-size-adjust: 100%;
}

*, *:before, *:after {
    box-sizing: inherit;
}

body {
    margin: 0;
    padding: 0;
    font-family: var(--font-sans);
    line-height: 1.6;
    color: var(--color-text);
    background-color: var(--color-background);
    display: flex;
    min-height: 100vh;
    font-size: 1rem;
}

/* Layout */
aside {
    position: fixed;
    width: var(--sidebar-width);
    height: 100vh;
    overflow-y: auto;
    padding: var(--spacing-unit);
    border-right: 1px solid var(--color-border);
    background-color: var(--color-sidebar-bg);
}

aside nav ul {
    padding-left: 0;
    list-style-type: none;
}

aside nav li {
    margin-bottom: calc(var(--spacing-unit) / 2);
}

aside nav li a {
    display: block;
    padding: calc(var(--spacing-unit) / 4) 0;
    text-decoration: none;
    color: var(--color-text);
    border-radius: 4px;
    transition: color 0.2s ease;
}

aside nav li a:hover {
    color: var(--color-link-hover);
}

main {
    flex: 1;
    padding: var(--spacing-unit) var(--spacing-unit) var(--spacing-unit) calc(var(--sidebar-width) + var(--spacing-unit));
    max-width: calc(var(--content-width) + var(--sidebar-width) + var(--spacing-unit));
    margin: 0 auto;
}

/* Typography */
h1, h2, h3, h4, h5, h6 {
    margin-top: calc(var(--spacing-unit) * 2);
    margin-bottom: var(--spacing-unit);
    font-weight: 600;
    line-height: 1.25;
    color: var(--color-heading);
}

h1 { font-size: 2em; border-bottom: 1px solid var(--color-border); padding-bottom: calc(var(--spacing-unit) / 2); }
h2 { font-size: 1.5em; border-bottom: 1px solid var(--color-border); padding-bottom: calc(var(--spacing-unit) / 2); }
h3 { font-size: 1.25em; }
h4 { font-size: 1em; }
h5 { font-size: 0.875em; }
h6 { font-size: 0.85em; color: var(--color-text-muted); }

p, ul, ol, dl, blockquote, table, pre {
    margin-top: 0;
    margin-bottom: var(--spacing-unit);
}

a {
    color: var(--color-link);
    text-decoration: none;
    transition: color 0.2s ease;
}

a:hover {
    color: var(--color-link-hover);
    text-decoration: underline;
}

code, pre {
    font-family: var(--font-mono);
    font-size: 0.9em;
    background-color: var(--color-code-bg);
    border-radius: 3px;
}

code {
    padding: 0.2em 0.4em;
}

pre {
    padding: var(--spacing-unit);
    overflow-x: auto;
    line-height: 1.45;
    border-radius: 6px;
}

pre code {
    padding: 0;
    background-color: transparent;
}

blockquote {
    margin-left: 0;
    padding: var(--spacing-unit);
    background-color: var(--color-blockquote);
    border-left: 4px solid var(--color-border);
}

table {
    border-collapse: collapse;
    width: 100%;
}

table th, table td {
    padding: 8px 12px;
    border: 1px solid var(--color-border);
}

table th {
    background-color: var(--color-code-bg);
    font-weight: 600;
}

img {
    max-width: 100%;
    height: auto;
}

/* Custom styles for article content */
#articleContent {
    margin-bottom: calc(var(--spacing-unit) * 3);
}

/* Responsive adjustments */
@media screen and (max-width: 900px) {
    :root {
        --sidebar-width: 220px;
    }
    
    body {
        font-size: 0.95rem;
    }
}

@media screen and (max-width: 768px) {
    body {
        flex-direction: column;
    }
    
    aside {
        position: static;
        width: 100%;
        height: auto;
        border-right: none;
        border-bottom: 1px solid var(--color-border);
    }
    
    main {
        padding: var(--spacing-unit);
        max-width: var(--content-width);
        margin: 0 auto;
    }
} 
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/d361_offline.py
# Language: python

import asyncio
import json
import os
import re
import shutil
from datetime import datetime, timezone
from pathlib import Path
from typing import Any
from loguru import logger
from playwright.async_api import Browser, BrowserContext
from .browser import setup_browser
from .config import Config
from .content import extract_page_content
from .navigation import extract_navigation
from .parser import parse_sitemap
import re
from urllib.parse import urlparse

class D361Offline:
    """Main Document360 offline documentation generator class."""
    def __init__((self, config: Config)) -> None:
        """Initialize with configuration."""
    def prep((self)) -> dict[str, Any]:
        """Prepare for documentation generation by extracting sitemap and navigation."""
    def _generate_nav_html((self, nav_structure: dict[str, Any])) -> str:
        """Generate HTML navigation from navigation structure."""
    def process_url((
        self, url: str, browser: Browser, context: BrowserContext
    )) -> dict[str, Any] | None:
        """Process a single URL: fetch content and save to file."""
    def _get_slug((self, url: str)) -> str:
        """Generate a slug from a URL for use in filenames."""
    def fetch((self, prep_file: Path | None = None)) -> dict[str, Any]:
        """Fetch content for all URLs in the prep file."""
    def build((self, fetch_file: Path | None = None)) -> None:
        """Build HTML and Markdown output from fetched content."""
    def _generate_combined_files((
        self,
        content_map: dict[str, Any],
        navigation: dict[str, Any],
        css_path: Path | None = None,
    )) -> None:
        """ Generate combined HTML and Markdown files from individual files...."""
    def _extract_ordered_urls_from_nav((
        self, navigation: dict[str, Any], content_map: dict[str, Any]
    )) -> list[str]:
        """ Extract ordered URLs from navigation structure...."""
    def all((self, prep_file: Path | None = None)) -> None:
        """Run the entire process: prep, fetch, and build."""

def __init__((self, config: Config)) -> None:
    """Initialize with configuration."""

def prep((self)) -> dict[str, Any]:
    """Prepare for documentation generation by extracting sitemap and navigation."""

def write_items((
                        items: list[dict[str, Any]], level: int = 0
                    )) -> None:

def _generate_nav_html((self, nav_structure: dict[str, Any])) -> str:
    """Generate HTML navigation from navigation structure."""

def process_items((items: list[dict[str, Any]])) -> None:

def process_url((
        self, url: str, browser: Browser, context: BrowserContext
    )) -> dict[str, Any] | None:
    """Process a single URL: fetch content and save to file."""

def _get_slug((self, url: str)) -> str:
    """Generate a slug from a URL for use in filenames."""

def fetch((self, prep_file: Path | None = None)) -> dict[str, Any]:
    """Fetch content for all URLs in the prep file."""

def process_with_semaphore((url: str)) -> None:
    """Process a URL with a semaphore to limit concurrency."""

def build((self, fetch_file: Path | None = None)) -> None:
    """Build HTML and Markdown output from fetched content."""

def _generate_combined_files((
        self,
        content_map: dict[str, Any],
        navigation: dict[str, Any],
        css_path: Path | None = None,
    )) -> None:
    """ Generate combined HTML and Markdown files from individual files...."""

def extract_urls_from_nav((items: list[dict[str, Any]])) -> None:

def _extract_ordered_urls_from_nav((
        self, navigation: dict[str, Any], content_map: dict[str, Any]
    )) -> list[str]:
    """ Extract ordered URLs from navigation structure...."""

def extract_urls_from_nav((items: list[dict[str, Any]])) -> None:

def all((self, prep_file: Path | None = None)) -> None:
    """Run the entire process: prep, fetch, and build."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/generator.py
# Language: python

import os
import shutil
from pathlib import Path
from typing import Any
import aiofiles
from loguru import logger
from markdownify import markdownify

def create_output_directory((
    output_dir: Path, css_file: Path | None = None
)) -> None:
    """Create output directory structure and copy assets."""

def generate_html_file((
    url: str,
    content: dict[str, str],
    output_dir: Path,
    nav_html: str,
    css_filename: str,
)) -> Path:
    """Generate HTML file for a page."""

def generate_markdown_file((
    url: str, content: dict[str, str], output_dir: Path
)) -> Path:
    """Generate Markdown file for a page."""

def generate_navigation_html((nav_structure: dict[str, Any])) -> str:
    """Generate HTML representation of the navigation structure."""

def render_items((items: list[dict[str, Any]])) -> None:


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/navigation.py
# Language: python

from typing import Any
from urllib.parse import urljoin
from loguru import logger
from playwright.async_api import Page
from .browser import expand_all_items, scroll_to_bottom

def extract_navigation((
    page: Page, nav_url: str, test: bool = False
)) -> dict[str, Any]:
    """Extract navigation structure from Document360 page."""

def expand_navigation_tree((page: Page, test: bool = False)) -> None:
    """Expand the navigation tree to show all items."""

def extract_tree_structure((page: Page, tree_selector: str)) -> dict[str, Any]:
    """Extract the navigation tree structure."""

def extract_fallback_nav_structure((page: Page)) -> dict[str, Any]:
    """Fallback method to extract navigation by looking for other navigation elements."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/offline/parser.py
# Language: python

import asyncio
import random
import re
from typing import Any
import aiohttp
from bs4 import BeautifulSoup
from loguru import logger
from playwright.async_api import BrowserContext, Page, async_playwright

def parse_sitemap((
    sitemap_url: str, test: bool = False, pause: int = 0
)) -> set[str]:
    """Parse a sitemap XML to extract all URLs."""

def _setup_stealth_context(()) -> tuple[Any, BrowserContext]:
    """Create a stealthy browser context to avoid detection."""

def _parse_with_playwright_direct((sitemap_url: str)) -> set[str]:
    """Parse sitemap using Playwright with direct navigation."""

def _parse_with_playwright_stealth((sitemap_url: str)) -> set[str]:
    """Parse sitemap using Playwright with advanced stealth techniques."""

def _parse_with_aiohttp_direct((sitemap_url: str)) -> set[str]:
    """Parse sitemap using direct HTTP request with aiohttp."""

def _parse_with_playwright_via_robots((sitemap_url: str)) -> set[str]:
    """Try to find sitemap URL in robots.txt and then parse it."""

def _extract_urls_from_content((
    content: str, page: Page | None = None
)) -> set[str]:
    """Extract URLs from XML or HTML content."""

def _extract_urls_from_xml((content: str)) -> set[str]:
    """Extract URLs from XML content using BeautifulSoup."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/plugins/__init__.py
# Language: python

from .manager import PluginManager


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/plugins/manager.py
# Language: python

import importlib
import importlib.metadata
from typing import Any, Dict, List, Type
from loguru import logger
from ..core.interfaces import ConvertedContent, ConverterPlugin

class PluginManager:
    """Manager for plugin discovery, loading, and execution."""
    def __init__((self)) -> None:
        """Initialize the plugin manager."""
    def _discover_plugins((self)) -> None:
        """Discover and register plugins via entry points."""
    def _validate_converter_plugin((self, plugin_class: Type[Any])) -> bool:
        """Validate that a class implements the ConverterPlugin protocol."""
    def get_converter_plugin((self, plugin_name: str)) -> Type[ConverterPlugin] | None:
        """Get a converter plugin by name."""
    def list_converter_plugins((self)) -> List[str]:
        """List all registered converter plugin names."""
    def get_plugins_for_format((self, source_format: str, target_format: str)) -> List[str]:
        """Find plugins that can convert between specified formats."""
    def convert((
        self,
        content: str,
        from_format: str,
        to_format: str,
        plugin_name: str | None = None,
        **options: Any,
    )) -> ConvertedContent:
        """Convert content using appropriate plugin."""
    def reload_plugins((self)) -> None:
        """Reload all plugins from entry points."""
    def register_converter_plugin((
        self, 
        name: str, 
        plugin_class: Type[ConverterPlugin]
    )) -> None:
        """Manually register a converter plugin."""
    def unregister_plugin((self, name: str)) -> bool:
        """Unregister a plugin by name."""

def __init__((self)) -> None:
    """Initialize the plugin manager."""

def _discover_plugins((self)) -> None:
    """Discover and register plugins via entry points."""

def _validate_converter_plugin((self, plugin_class: Type[Any])) -> bool:
    """Validate that a class implements the ConverterPlugin protocol."""

def get_converter_plugin((self, plugin_name: str)) -> Type[ConverterPlugin] | None:
    """Get a converter plugin by name."""

def list_converter_plugins((self)) -> List[str]:
    """List all registered converter plugin names."""

def get_plugins_for_format((self, source_format: str, target_format: str)) -> List[str]:
    """Find plugins that can convert between specified formats."""

def convert((
        self,
        content: str,
        from_format: str,
        to_format: str,
        plugin_name: str | None = None,
        **options: Any,
    )) -> ConvertedContent:
    """Convert content using appropriate plugin."""

def reload_plugins((self)) -> None:
    """Reload all plugins from entry points."""

def register_converter_plugin((
        self, 
        name: str, 
        plugin_class: Type[ConverterPlugin]
    )) -> None:
    """Manually register a converter plugin."""

def unregister_plugin((self, name: str)) -> bool:
    """Unregister a plugin by name."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/providers/__init__.py
# Language: python

from .api_provider import ApiProvider
from .archive_provider import ArchiveProvider
from .hybrid_provider import HybridProvider
from .mock_provider import MockProvider


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/providers/api_provider.py
# Language: python

import asyncio
from datetime import datetime
from typing import Any, AsyncIterator
from urllib.parse import urljoin
from loguru import logger
from ..api.client import Document360ApiClient
from ..api.token_manager import TokenManager
from ..core.interfaces import DataProvider
from ..core.models import Article, Category, ProjectVersion
from ..http.client import UnifiedHttpClient

class ApiProvider:
    """API provider for Document360 REST API access."""
    def __init__((
        self,
        tokens: list[str],
        base_url: str = "https://apidocs.document360.com",
        rate_limit: int = 60,
        **kwargs: Any,
    )) -> None:
        """Initialize the API provider."""
    def get_article((self, article_id: int, **kwargs: Any)) -> Article:
        """Fetch a single article by ID."""
    def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
        """List articles with filtering."""
    def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
        """Stream all articles efficiently."""
    def get_category((self, category_id: int, **kwargs: Any)) -> Category:
        """Fetch a single category by ID."""
    def list_categories((
        self,
        parent_id: int | None = None,
        **kwargs: Any
    )) -> list[Category]:
        """List categories with optional parent filtering."""
    def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
        """Get project version information."""
    def _parse_datetime((self, date_str: str | None)) -> datetime | None:
        """Parse datetime string from API response."""
    def get_statistics((self)) -> dict[str, Any]:
        """Get provider statistics and health information."""
    def _get_http_stats((self)) -> dict[str, Any]:
        """Get HTTP client statistics."""

def __init__((
        self,
        tokens: list[str],
        base_url: str = "https://apidocs.document360.com",
        rate_limit: int = 60,
        **kwargs: Any,
    )) -> None:
    """Initialize the API provider."""

def get_article((self, article_id: int, **kwargs: Any)) -> Article:
    """Fetch a single article by ID."""

def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
    """List articles with filtering."""

def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream all articles efficiently."""

def get_category((self, category_id: int, **kwargs: Any)) -> Category:
    """Fetch a single category by ID."""

def list_categories((
        self,
        parent_id: int | None = None,
        **kwargs: Any
    )) -> list[Category]:
    """List categories with optional parent filtering."""

def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
    """Get project version information."""

def _parse_datetime((self, date_str: str | None)) -> datetime | None:
    """Parse datetime string from API response."""

def get_statistics((self)) -> dict[str, Any]:
    """Get provider statistics and health information."""

def _get_http_stats((self)) -> dict[str, Any]:
    """Get HTTP client statistics."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/providers/archive_provider.py
# Language: python

from pathlib import Path
from typing import Any, AsyncIterator
from ..core.interfaces import DataProvider
from ..core.models import Article, Category, ProjectVersion

class ArchiveProvider:
    """Provider for offline Document360 archive processing."""
    def __init__((
        self,
        archive_path: str | Path,
        enable_fts: bool = True,
        cache_dir: str | Path | None = None,
        **kwargs: Any,
    )) -> None:
        """Initialize the archive provider."""
    def get_article((self, article_id: int, **kwargs: Any)) -> Article:
        """Fetch a single article by ID from archive."""
    def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
        """List articles from archive with filtering."""
    def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
        """Stream articles from archive efficiently."""
    def get_category((self, category_id: int, **kwargs: Any)) -> Category:
        """Fetch a single category by ID from archive."""
    def list_categories((self, **kwargs: Any)) -> list[Category]:
        """List all categories from archive."""
    def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
        """Get project version from archive metadata."""
    def search_full_text((self, query: str, **kwargs: Any)) -> list[Article]:
        """Perform full-text search across archive content."""

def __init__((
        self,
        archive_path: str | Path,
        enable_fts: bool = True,
        cache_dir: str | Path | None = None,
        **kwargs: Any,
    )) -> None:
    """Initialize the archive provider."""

def get_article((self, article_id: int, **kwargs: Any)) -> Article:
    """Fetch a single article by ID from archive."""

def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
    """List articles from archive with filtering."""

def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream articles from archive efficiently."""

def get_category((self, category_id: int, **kwargs: Any)) -> Category:
    """Fetch a single category by ID from archive."""

def list_categories((self, **kwargs: Any)) -> list[Category]:
    """List all categories from archive."""

def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
    """Get project version from archive metadata."""

def search_full_text((self, query: str, **kwargs: Any)) -> list[Article]:
    """Perform full-text search across archive content."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/providers/hybrid_provider.py
# Language: python

import asyncio
from datetime import datetime, timedelta
from typing import Any, AsyncIterator, Dict, List, Optional, Union
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from pydantic import BaseModel, Field
from ..core.interfaces import DataProvider
from ..core.models import Article, Category, ProjectVersion
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
from .api_provider import ApiProvider
from .archive_provider import ArchiveProvider

class DataSource(s, t, r, ,,  , E, n, u, m):
    """Available data sources."""

class FreshnessRequirement(s, t, r, ,,  , E, n, u, m):
    """Data freshness requirements."""

class SourceMetrics:
    """Metrics for a data source."""

class DataRequest:
    """Request for data with sourcing preferences."""

class HybridConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for hybrid provider."""

class HybridProvider(D, a, t, a, P, r, o, v, i, d, e, r):
    """ Intelligent hybrid data provider...."""
    def __init__((
        self,
        config: Optional[HybridConfig] = None,
        api_provider: Optional[ApiProvider] = None,
        archive_provider: Optional[ArchiveProvider] = None,
        scraper_provider: Optional[Any] = None,  # ScraperProvider when implemented
    )) -> None:
        """Initialize the hybrid provider."""
    def get_article((self, article_id: int, **kwargs: Any)) -> Article:
        """Fetch article using the best available source."""
    def list_articles((
        self,
        category_id: Optional[int] = None,
        status: Optional[str] = None,
        **kwargs: Any,
    )) -> List[Article]:
        """List articles using the best available source."""
    def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
        """Stream articles from the most appropriate source."""
    def get_category((self, category_id: int, **kwargs: Any)) -> Category:
        """Fetch category using the best available source."""
    def list_categories((self, **kwargs: Any)) -> List[Category]:
        """List categories using the best available source."""
    def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
        """Get project version using the best available source."""
    def _fetch_with_strategy((
        self, 
        request: DataRequest, 
        fetch_func: Any
    )) -> Any:
        """Execute fetch with intelligent source strategy."""
    def _fetch_parallel((
        self,
        request: DataRequest,
        fetch_func: Any,
        sources: List[DataSource]
    )) -> Any:
        """Fetch from multiple sources in parallel."""
    def _fetch_sequential((
        self,
        request: DataRequest,
        fetch_func: Any,
        sources: List[DataSource]
    )) -> Any:
        """Fetch from sources sequentially."""
    def _fetch_from_source_with_metrics((
        self,
        source: DataSource,
        request: DataRequest,
        fetch_func: Any
    )) -> Any:
        """Fetch from source with metrics tracking."""
    def _determine_source_priority((
        self,
        freshness: FreshnessRequirement,
        preferred: List[DataSource] = None,
        fallback: List[DataSource] = None
    )) -> List[DataSource]:
        """Determine source priority based on requirements."""
    def _is_source_available((self, source: DataSource)) -> bool:
        """Check if a source is available."""
    def _source_meets_freshness((self, source: DataSource, freshness: FreshnessRequirement)) -> bool:
        """Check if source can meet freshness requirements."""
    def _get_cached_data((self, request: DataRequest)) -> Optional[Any]:
        """Get cached data if available and fresh enough."""
    def _cache_data((self, request: DataRequest, data: Any)) -> None:
        """Cache fetched data."""
    def _fetch_article_from_source((self, source: DataSource, request: DataRequest)) -> Article:
        """Fetch article from specific source."""
    def _fetch_articles_list_from_source((
        self,
        source: DataSource,
        request: DataRequest,
        category_id: Optional[int],
        status: Optional[str],
        **kwargs: Any
    )) -> List[Article]:
        """Fetch articles list from specific source."""
    def _fetch_category_from_source((self, source: DataSource, request: DataRequest)) -> Category:
        """Fetch category from specific source."""
    def _fetch_categories_list_from_source((self, source: DataSource, request: DataRequest)) -> List[Category]:
        """Fetch categories list from specific source."""
    def _fetch_project_version_from_source((self, source: DataSource, request: DataRequest)) -> ProjectVersion:
        """Fetch project version from specific source."""
    def _stream_from_source((self, source: DataSource, **kwargs: Any)) -> AsyncIterator[Article]:
        """Stream articles from specific source."""
    def get_source_metrics((self)) -> Dict[DataSource, SourceMetrics]:
        """Get current metrics for all sources."""
    def clear_cache((self)) -> None:
        """Clear internal cache."""

def __init__((
        self,
        config: Optional[HybridConfig] = None,
        api_provider: Optional[ApiProvider] = None,
        archive_provider: Optional[ArchiveProvider] = None,
        scraper_provider: Optional[Any] = None,  # ScraperProvider when implemented
    )) -> None:
    """Initialize the hybrid provider."""

def get_article((self, article_id: int, **kwargs: Any)) -> Article:
    """Fetch article using the best available source."""

def list_articles((
        self,
        category_id: Optional[int] = None,
        status: Optional[str] = None,
        **kwargs: Any,
    )) -> List[Article]:
    """List articles using the best available source."""

def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream articles from the most appropriate source."""

def get_category((self, category_id: int, **kwargs: Any)) -> Category:
    """Fetch category using the best available source."""

def list_categories((self, **kwargs: Any)) -> List[Category]:
    """List categories using the best available source."""

def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
    """Get project version using the best available source."""

def _fetch_with_strategy((
        self, 
        request: DataRequest, 
        fetch_func: Any
    )) -> Any:
    """Execute fetch with intelligent source strategy."""

def _fetch_parallel((
        self,
        request: DataRequest,
        fetch_func: Any,
        sources: List[DataSource]
    )) -> Any:
    """Fetch from multiple sources in parallel."""

def _fetch_sequential((
        self,
        request: DataRequest,
        fetch_func: Any,
        sources: List[DataSource]
    )) -> Any:
    """Fetch from sources sequentially."""

def _fetch_from_source_with_metrics((
        self,
        source: DataSource,
        request: DataRequest,
        fetch_func: Any
    )) -> Any:
    """Fetch from source with metrics tracking."""

def _determine_source_priority((
        self,
        freshness: FreshnessRequirement,
        preferred: List[DataSource] = None,
        fallback: List[DataSource] = None
    )) -> List[DataSource]:
    """Determine source priority based on requirements."""

def _is_source_available((self, source: DataSource)) -> bool:
    """Check if a source is available."""

def _source_meets_freshness((self, source: DataSource, freshness: FreshnessRequirement)) -> bool:
    """Check if source can meet freshness requirements."""

def _get_cached_data((self, request: DataRequest)) -> Optional[Any]:
    """Get cached data if available and fresh enough."""

def _cache_data((self, request: DataRequest, data: Any)) -> None:
    """Cache fetched data."""

def _fetch_article_from_source((self, source: DataSource, request: DataRequest)) -> Article:
    """Fetch article from specific source."""

def _fetch_articles_list_from_source((
        self,
        source: DataSource,
        request: DataRequest,
        category_id: Optional[int],
        status: Optional[str],
        **kwargs: Any
    )) -> List[Article]:
    """Fetch articles list from specific source."""

def _fetch_category_from_source((self, source: DataSource, request: DataRequest)) -> Category:
    """Fetch category from specific source."""

def _fetch_categories_list_from_source((self, source: DataSource, request: DataRequest)) -> List[Category]:
    """Fetch categories list from specific source."""

def _fetch_project_version_from_source((self, source: DataSource, request: DataRequest)) -> ProjectVersion:
    """Fetch project version from specific source."""

def _stream_from_source((self, source: DataSource, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream articles from specific source."""

def get_source_metrics((self)) -> Dict[DataSource, SourceMetrics]:
    """Get current metrics for all sources."""

def clear_cache((self)) -> None:
    """Clear internal cache."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/providers/mock_provider.py
# Language: python

import asyncio
from datetime import datetime
from typing import Any, AsyncIterator
from ..core.interfaces import DataProvider
from ..core.models import Article, Category, ProjectVersion, PublishStatus
import random

class MockProvider:
    """Mock provider for testing and development."""
    def __init__((
        self,
        simulate_delays: bool = False,
        delay_ms: int = 100,
        fail_probability: float = 0.0,
        **kwargs: Any,
    )) -> None:
        """Initialize the mock provider."""
    def get_article((self, article_id: int, **kwargs: Any)) -> Article:
        """Fetch a mock article by ID."""
    def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
        """List mock articles with optional filtering."""
    def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
        """Stream mock articles."""
    def get_category((self, category_id: int, **kwargs: Any)) -> Category:
        """Fetch a mock category by ID."""
    def list_categories((self, **kwargs: Any)) -> list[Category]:
        """List all mock categories."""
    def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
        """Get mock project version."""
    def _generate_mock_articles((self)) -> list[Article]:
        """Generate mock article data."""
    def _generate_mock_categories((self)) -> list[Category]:
        """Generate mock category data."""
    def _generate_mock_project((self)) -> ProjectVersion:
        """Generate mock project version data."""
    def _simulate_operation((self)) -> None:
        """Simulate operation delays and failures if configured."""

def __init__((
        self,
        simulate_delays: bool = False,
        delay_ms: int = 100,
        fail_probability: float = 0.0,
        **kwargs: Any,
    )) -> None:
    """Initialize the mock provider."""

def get_article((self, article_id: int, **kwargs: Any)) -> Article:
    """Fetch a mock article by ID."""

def list_articles((
        self,
        category_id: int | None = None,
        status: str | None = None,
        **kwargs: Any,
    )) -> list[Article]:
    """List mock articles with optional filtering."""

def stream_articles((self, **kwargs: Any)) -> AsyncIterator[Article]:
    """Stream mock articles."""

def get_category((self, category_id: int, **kwargs: Any)) -> Category:
    """Fetch a mock category by ID."""

def list_categories((self, **kwargs: Any)) -> list[Category]:
    """List all mock categories."""

def get_project_version((self, **kwargs: Any)) -> ProjectVersion:
    """Get mock project version."""

def _generate_mock_articles((self)) -> list[Article]:
    """Generate mock article data."""

def _generate_mock_categories((self)) -> list[Category]:
    """Generate mock category data."""

def _generate_mock_project((self)) -> ProjectVersion:
    """Generate mock project version data."""

def _simulate_operation((self)) -> None:
    """Simulate operation delays and failures if configured."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/__init__.py
# Language: python

from .scraper import (
    Document360Scraper, ScrapingConfig, ScrapedPage, ScrapingSession,
    BrowserType, ScrapingMode, UserAgent
)
from .extractor import (
    ContentExtractor, ExtractionConfig, ExtractedContent, ContentBlock,
    ContentType, ExtractionQuality
)
from .converter import (
    MarkdownConverter, ConversionConfig, ConversionResult, ConversionStats,
    MarkdownStyle, LinkHandling, Document360MarkdownConverter
)
from .deduplicator import (
    ContentDeduplicator, DeduplicationConfig, DuplicateStatus, SimilarityScore,
    SimilarityAlgorithm, DuplicateGroup
)
from .content_processor import ContentProcessor, Document360ContentProcessor


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/content_processor.py
# Language: python

import asyncio
import re
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime
from pathlib import Path
from typing import Any, Optional
from urllib.parse import unquote, urlparse
from loguru import logger
from ..core.models import Article, Category
from ..core.interfaces import DataProvider
from .converter import Document360MarkdownConverter, ConversionConfig
from .deduplicator import ContentDeduplicator, DeduplicationConfig

class ContentProcessor:
    """Generic content processing utilities for Document360 content."""
    def __init__((self, image_base_url: str | None = None)) -> None:
        """Initialize content processor."""
    def clean_content((self, content: str)) -> str:
        """Clean and normalize Document360 content."""
    def convert_image_urls((self, content: str)) -> str:
        """Convert Document360 image URLs to use base URL."""
    def clean_slug((self, slug: str)) -> str:
        """Clean and normalize slug for use in URLs."""
    def strip_numeric_prefix((self, text: str)) -> str:
        """Strip numeric prefixes from text."""
    def extract_metadata_from_content((self, content: str)) -> dict[str, Any]:
        """Extract metadata from Document360 content."""
    def _remove_d360_artifacts((self, content: str)) -> str:
        """Remove Document360-specific artifacts from content."""
    def _normalize_whitespace((self, content: str)) -> str:
        """Normalize whitespace in content."""
    def _clean_markdown_formatting((self, content: str)) -> str:
        """Clean up common markdown formatting issues."""
    def analyze_content_quality((self, content: str)) -> dict[str, Any]:
        """Analyze content quality metrics."""

class Document360ContentProcessor(C, o, n, t, e, n, t, P, r, o, c, e, s, s, o, r):
    """Advanced Document360 content processor for cross-platform functionality."""
    def __init__((self, image_base_url: str | None = None, max_workers: int = 4)):
        """Initialize the advanced content processor."""
    def load_and_merge_content((
        self,
        archive_provider: Optional[DataProvider] = None,
        api_provider: Optional[DataProvider] = None,
        data_source: str = "hybrid"
    )) -> tuple[list[Article], list[Category]]:
        """Load and intelligently merge content from multiple data sources."""
    def _merge_content_intelligently((
        self, 
        archive_provider: DataProvider, 
        api_provider: DataProvider
    )) -> tuple[list[Article], list[Category]]:
        """Merge content from archive and API providers using intelligent conflict resolution."""
    def _merge_articles_with_conflict_resolution((
        self, 
        archive_articles: list[Article], 
        api_articles: list[Article]
    )) -> list[Article]:
        """Merge articles using intelligent conflict resolution."""
    def _merge_categories_with_conflict_resolution((
        self,
        archive_categories: list[Category],
        api_categories: list[Category]
    )) -> list[Category]:
        """Merge categories using intelligent conflict resolution."""
    def _merge_single_article((self, archive_article: Article, api_article: Article)) -> Article:
        """Merge two articles using intelligent conflict resolution."""
    def _merge_single_category((self, archive_category: Category, api_category: Category)) -> Category:
        """Merge two categories using intelligent conflict resolution."""
    def enhance_content_with_advanced_processing((
        self, 
        articles: list[Article],
        use_parallel: bool = True
    )) -> list[Article]:
        """Enhance article content using d361's advanced processing capabilities."""
    def _enhance_content_sequential((self, articles: list[Article])) -> list[Article]:
        """Enhance article content sequentially."""
    def _enhance_content_parallel((self, articles: list[Article])) -> list[Article]:
        """Enhance article content in parallel."""
    def _enhance_single_article_sync((self, article: Article)) -> Article:
        """Synchronous wrapper for single article enhancement (for ThreadPoolExecutor)."""
    def _enhance_single_article_content((self, article: Article)) -> Article:
        """Enhance a single article's content using d361's advanced processing."""
    def _content_needs_advanced_processing((self, content: str)) -> bool:
        """Check if content would benefit from d361's advanced processing."""
    def resolve_duplicates_with_advanced_detection((
        self, 
        articles: list[Article]
    )) -> list[Article]:
        """Resolve duplicates using d361's advanced ContentDeduplicator."""
    def _process_duplicate_detection_results((
        self, 
        original_articles: list[Article],
        duplicate_groups: list, 
        article_map: dict
    )) -> list[Article]:
        """Process results from d361 ContentDeduplicator."""
    def _merge_similar_article_metadata((
        self, 
        primary_article: Article, 
        similar_articles: list[Article], 
        similarity_score: float
    )) -> Article:
        """Merge similar articles' metadata into a primary article."""
    def get_processing_statistics((self)) -> dict[str, Any]:
        """Get processing statistics."""
    def reset_statistics((self)) -> None:
        """Reset processing statistics."""

def __init__((self, image_base_url: str | None = None)) -> None:
    """Initialize content processor."""

def clean_content((self, content: str)) -> str:
    """Clean and normalize Document360 content."""

def convert_image_urls((self, content: str)) -> str:
    """Convert Document360 image URLs to use base URL."""

def replace_image_url((match)):

def clean_slug((self, slug: str)) -> str:
    """Clean and normalize slug for use in URLs."""

def strip_numeric_prefix((self, text: str)) -> str:
    """Strip numeric prefixes from text."""

def extract_metadata_from_content((self, content: str)) -> dict[str, Any]:
    """Extract metadata from Document360 content."""

def _remove_d360_artifacts((self, content: str)) -> str:
    """Remove Document360-specific artifacts from content."""

def _normalize_whitespace((self, content: str)) -> str:
    """Normalize whitespace in content."""

def _clean_markdown_formatting((self, content: str)) -> str:
    """Clean up common markdown formatting issues."""

def analyze_content_quality((self, content: str)) -> dict[str, Any]:
    """Analyze content quality metrics."""

def __init__((self, image_base_url: str | None = None, max_workers: int = 4)):
    """Initialize the advanced content processor."""

def load_and_merge_content((
        self,
        archive_provider: Optional[DataProvider] = None,
        api_provider: Optional[DataProvider] = None,
        data_source: str = "hybrid"
    )) -> tuple[list[Article], list[Category]]:
    """Load and intelligently merge content from multiple data sources."""

def _merge_content_intelligently((
        self, 
        archive_provider: DataProvider, 
        api_provider: DataProvider
    )) -> tuple[list[Article], list[Category]]:
    """Merge content from archive and API providers using intelligent conflict resolution."""

def _merge_articles_with_conflict_resolution((
        self, 
        archive_articles: list[Article], 
        api_articles: list[Article]
    )) -> list[Article]:
    """Merge articles using intelligent conflict resolution."""

def _merge_categories_with_conflict_resolution((
        self,
        archive_categories: list[Category],
        api_categories: list[Category]
    )) -> list[Category]:
    """Merge categories using intelligent conflict resolution."""

def _merge_single_article((self, archive_article: Article, api_article: Article)) -> Article:
    """Merge two articles using intelligent conflict resolution."""

def _merge_single_category((self, archive_category: Category, api_category: Category)) -> Category:
    """Merge two categories using intelligent conflict resolution."""

def enhance_content_with_advanced_processing((
        self, 
        articles: list[Article],
        use_parallel: bool = True
    )) -> list[Article]:
    """Enhance article content using d361's advanced processing capabilities."""

def _enhance_content_sequential((self, articles: list[Article])) -> list[Article]:
    """Enhance article content sequentially."""

def _enhance_content_parallel((self, articles: list[Article])) -> list[Article]:
    """Enhance article content in parallel."""

def _enhance_single_article_sync((self, article: Article)) -> Article:
    """Synchronous wrapper for single article enhancement (for ThreadPoolExecutor)."""

def _enhance_single_article_content((self, article: Article)) -> Article:
    """Enhance a single article's content using d361's advanced processing."""

def _content_needs_advanced_processing((self, content: str)) -> bool:
    """Check if content would benefit from d361's advanced processing."""

def resolve_duplicates_with_advanced_detection((
        self, 
        articles: list[Article]
    )) -> list[Article]:
    """Resolve duplicates using d361's advanced ContentDeduplicator."""

def _process_duplicate_detection_results((
        self, 
        original_articles: list[Article],
        duplicate_groups: list, 
        article_map: dict
    )) -> list[Article]:
    """Process results from d361 ContentDeduplicator."""

def _merge_similar_article_metadata((
        self, 
        primary_article: Article, 
        similar_articles: list[Article], 
        similarity_score: float
    )) -> Article:
    """Merge similar articles' metadata into a primary article."""

def get_processing_statistics((self)) -> dict[str, Any]:
    """Get processing statistics."""

def reset_statistics((self)) -> None:
    """Reset processing statistics."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/converter.py
# Language: python

import re
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Callable, Union
from dataclasses import dataclass, field
from enum import Enum
from urllib.parse import urljoin, urlparse
from loguru import logger
from pydantic import BaseModel, Field, validator
from bs4 import BeautifulSoup, Tag
import markdownify
from markdownify import MarkdownConverter as BaseMarkdownConverter
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity

class MarkdownStyle(s, t, r, ,,  , E, n, u, m):
    """Markdown formatting styles."""

class LinkHandling(s, t, r, ,,  , E, n, u, m):
    """Link processing strategies."""

class ConversionStats:
    """Statistics from markdown conversion."""

class ConversionConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for HTML to Markdown conversion."""

class ConversionResult:
    """Result of HTML to Markdown conversion."""

class Document360MarkdownConverter(B, a, s, e, M, a, r, k, d, o, w, n, C, o, n, v, e, r, t, e, r):
    """ Custom MarkdownConverter optimized for Document360 content...."""
    def __init__((self, **options)):
    def convert_hn((self, n, el, text, convert_as_inline)):
        """Enhanced heading conversion with ID preservation."""
    def convert_code((self, el, text, convert_as_inline)):
        """Enhanced code conversion with language detection."""
    def convert_pre((self, el, text, convert_as_inline)):
        """Enhanced pre block conversion."""
    def convert_table((self, el, text, convert_as_inline)):
        """Enhanced table conversion with proper markdown formatting."""
    def convert_img((self, el, text, convert_as_inline)):
        """Enhanced image conversion with alt text and title support."""
    def convert_a((self, el, text, convert_as_inline)):
        """Enhanced link conversion with title support."""

class MarkdownConverter:
    """ HTML to Markdown converter with Document360 optimizations...."""
    def __init__((self, config: Optional[ConversionConfig] = None)):
        """ Initialize markdown converter...."""
    def convert((self, html: str, title: Optional[str] = None)) -> ConversionResult:
        """ Convert HTML to Markdown...."""
    def _preprocess_html((self, soup: BeautifulSoup, stats: ConversionStats)) -> BeautifulSoup:
        """Preprocess HTML before conversion."""
    def _normalize_whitespace((self, soup: BeautifulSoup)) -> None:
        """Normalize whitespace in HTML."""
    def _enhance_code_blocks((self, soup: BeautifulSoup, stats: ConversionStats)) -> None:
        """Enhance code block detection and formatting."""
    def _detect_code_language((self, element: Tag)) -> Optional[str]:
        """Detect programming language from code block."""
    def _postprocess_markdown((self, markdown: str, stats: ConversionStats)) -> str:
        """Post-process generated markdown."""
    def _fix_list_formatting((self, markdown: str)) -> str:
        """Fix common list formatting issues."""
    def _fix_table_formatting((self, markdown: str)) -> str:
        """Fix markdown table formatting issues."""
    def _wrap_lines((self, markdown: str, max_length: int)) -> str:
        """Wrap long lines to specified length."""
    def _validate_markdown((self, markdown: str)) -> List[str]:
        """Validate generated markdown for common issues."""
    def _extract_images((self, soup: BeautifulSoup)) -> List[Dict[str, str]]:
        """Extract image information from HTML."""
    def _extract_links((self, soup: BeautifulSoup)) -> List[Dict[str, str]]:
        """Extract link information from HTML."""
    def _assess_conversion_quality((self, html: str, markdown: str, stats: ConversionStats)) -> float:
        """Assess the quality of the conversion."""
    def _get_converter_options((self)) -> Dict[str, Any]:
        """Get converter options based on configuration."""

def is_high_quality((self)) -> bool:
    """Check if conversion is high quality."""

def compression_ratio((self)) -> float:
    """Calculate compression ratio (markdown size / html size)."""

def __init__((self, **options)):

def convert_hn((self, n, el, text, convert_as_inline)):
    """Enhanced heading conversion with ID preservation."""

def convert_code((self, el, text, convert_as_inline)):
    """Enhanced code conversion with language detection."""

def convert_pre((self, el, text, convert_as_inline)):
    """Enhanced pre block conversion."""

def convert_table((self, el, text, convert_as_inline)):
    """Enhanced table conversion with proper markdown formatting."""

def convert_img((self, el, text, convert_as_inline)):
    """Enhanced image conversion with alt text and title support."""

def convert_a((self, el, text, convert_as_inline)):
    """Enhanced link conversion with title support."""

def __init__((self, config: Optional[ConversionConfig] = None)):
    """ Initialize markdown converter...."""

def convert((self, html: str, title: Optional[str] = None)) -> ConversionResult:
    """ Convert HTML to Markdown...."""

def _preprocess_html((self, soup: BeautifulSoup, stats: ConversionStats)) -> BeautifulSoup:
    """Preprocess HTML before conversion."""

def _normalize_whitespace((self, soup: BeautifulSoup)) -> None:
    """Normalize whitespace in HTML."""

def _enhance_code_blocks((self, soup: BeautifulSoup, stats: ConversionStats)) -> None:
    """Enhance code block detection and formatting."""

def _detect_code_language((self, element: Tag)) -> Optional[str]:
    """Detect programming language from code block."""

def _postprocess_markdown((self, markdown: str, stats: ConversionStats)) -> str:
    """Post-process generated markdown."""

def _fix_list_formatting((self, markdown: str)) -> str:
    """Fix common list formatting issues."""

def _fix_table_formatting((self, markdown: str)) -> str:
    """Fix markdown table formatting issues."""

def _wrap_lines((self, markdown: str, max_length: int)) -> str:
    """Wrap long lines to specified length."""

def _validate_markdown((self, markdown: str)) -> List[str]:
    """Validate generated markdown for common issues."""

def _extract_images((self, soup: BeautifulSoup)) -> List[Dict[str, str]]:
    """Extract image information from HTML."""

def _extract_links((self, soup: BeautifulSoup)) -> List[Dict[str, str]]:
    """Extract link information from HTML."""

def _assess_conversion_quality((self, html: str, markdown: str, stats: ConversionStats)) -> float:
    """Assess the quality of the conversion."""

def _get_converter_options((self)) -> Dict[str, Any]:
    """Get converter options based on configuration."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/deduplicator.py
# Language: python

import hashlib
import re
from datetime import datetime
from typing import Any, Dict, List, Optional, Set, Tuple, Union
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from pydantic import BaseModel, Field, validator
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity
import random

class DuplicateStatus(s, t, r, ,,  , E, n, u, m):
    """Status of duplicate detection."""

class SimilarityAlgorithm(s, t, r, ,,  , E, n, u, m):
    """Similarity detection algorithms."""

class SimilarityScore:
    """Similarity score between two pieces of content."""

class DuplicateGroup:
    """Group of duplicate or similar content items."""

class DeduplicationConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for content deduplication."""

class ContentDeduplicator:
    """ Content deduplication with multiple similarity algorithms...."""
    def __init__((self, config: Optional[DeduplicationConfig] = None)):
        """ Initialize content deduplicator...."""
    def find_duplicates((
        self, 
        content_items: Dict[str, str],
        return_groups: bool = True
    )) -> Union[List[DuplicateGroup], Dict[str, DuplicateStatus]]:
        """ Find duplicate content in a collection...."""
    def calculate_similarity((
        self, 
        content1: str, 
        content2: str,
        algorithm: Optional[SimilarityAlgorithm] = None
    )) -> SimilarityScore:
        """ Calculate similarity between two pieces of content...."""
    def _cache_normalized_content((self, content_items: Dict[str, str])) -> None:
        """Cache normalized content for efficiency."""
    def _normalize_content((self, content: str)) -> str:
        """Normalize content for comparison."""
    def _find_similar_pairs((self, content_items: Dict[str, str])) -> List[Tuple[str, str, float]]:
        """Find similar pairs using the primary algorithm."""
    def _verify_with_secondary_algorithms((
        self, 
        similar_pairs: List[Tuple[str, str, float]],
        content_items: Dict[str, str]
    )) -> List[Tuple[str, str, float]]:
        """Verify similarity with secondary algorithms."""
    def _group_duplicates((self, similar_pairs: List[Tuple[str, str, float]])) -> List[DuplicateGroup]:
        """Group similar items into duplicate groups."""
    def _create_status_dict((
        self, 
        duplicate_groups: List[DuplicateGroup],
        content_items: Dict[str, str]
    )) -> Dict[str, DuplicateStatus]:
        """Create status dictionary for all items."""
    def _exact_hash_similarity((self, content1: str, content2: str)) -> float:
        """Calculate exact hash similarity."""
    def _content_hash_similarity((self, content1: str, content2: str)) -> float:
        """Calculate content-based hash similarity."""
    def _jaccard_similarity((self, content1: str, content2: str)) -> float:
        """Calculate Jaccard similarity."""
    def _shingle_similarity((self, content1: str, content2: str)) -> float:
        """Calculate n-gram shingle similarity."""
    def _levenshtein_similarity((self, content1: str, content2: str)) -> float:
        """Calculate Levenshtein distance similarity."""
    def clear_cache((self)) -> None:
        """Clear internal caches."""

def is_duplicate((self)) -> bool:
    """Check if score indicates duplicate content."""

def is_similar((self)) -> bool:
    """Check if score indicates similar content."""

def size((self)) -> int:
    """Number of items in the group."""

def average_similarity((self)) -> float:
    """Average similarity score in the group."""

def __init__((self, config: Optional[DeduplicationConfig] = None)):
    """ Initialize content deduplicator...."""

def find_duplicates((
        self, 
        content_items: Dict[str, str],
        return_groups: bool = True
    )) -> Union[List[DuplicateGroup], Dict[str, DuplicateStatus]]:
    """ Find duplicate content in a collection...."""

def calculate_similarity((
        self, 
        content1: str, 
        content2: str,
        algorithm: Optional[SimilarityAlgorithm] = None
    )) -> SimilarityScore:
    """ Calculate similarity between two pieces of content...."""

def _cache_normalized_content((self, content_items: Dict[str, str])) -> None:
    """Cache normalized content for efficiency."""

def _normalize_content((self, content: str)) -> str:
    """Normalize content for comparison."""

def _find_similar_pairs((self, content_items: Dict[str, str])) -> List[Tuple[str, str, float]]:
    """Find similar pairs using the primary algorithm."""

def _verify_with_secondary_algorithms((
        self, 
        similar_pairs: List[Tuple[str, str, float]],
        content_items: Dict[str, str]
    )) -> List[Tuple[str, str, float]]:
    """Verify similarity with secondary algorithms."""

def _group_duplicates((self, similar_pairs: List[Tuple[str, str, float]])) -> List[DuplicateGroup]:
    """Group similar items into duplicate groups."""

def find((x)):

def union((x, y)):

def _create_status_dict((
        self, 
        duplicate_groups: List[DuplicateGroup],
        content_items: Dict[str, str]
    )) -> Dict[str, DuplicateStatus]:
    """Create status dictionary for all items."""

def _exact_hash_similarity((self, content1: str, content2: str)) -> float:
    """Calculate exact hash similarity."""

def _content_hash_similarity((self, content1: str, content2: str)) -> float:
    """Calculate content-based hash similarity."""

def _jaccard_similarity((self, content1: str, content2: str)) -> float:
    """Calculate Jaccard similarity."""

def _shingle_similarity((self, content1: str, content2: str)) -> float:
    """Calculate n-gram shingle similarity."""

def get_shingles((text: str, k: int)) -> Set[str]:

def _levenshtein_similarity((self, content1: str, content2: str)) -> float:
    """Calculate Levenshtein distance similarity."""

def clear_cache((self)) -> None:
    """Clear internal caches."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/extractor.py
# Language: python

import re
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Union
from dataclasses import dataclass, field
from enum import Enum
from urllib.parse import urljoin, urlparse
from loguru import logger
from pydantic import BaseModel, Field, validator
from bs4 import BeautifulSoup, Tag, NavigableString
from bs4.formatter import HTMLFormatter
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity

class ContentType(s, t, r, ,,  , E, n, u, m):
    """Types of content that can be extracted."""

class ExtractionQuality(s, t, r, ,,  , E, n, u, m):
    """Quality levels for content extraction."""

class ContentBlock:
    """Individual content block with metadata."""

class ExtractionConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for content extraction operations."""

class ExtractedContent:
    """Complete extracted content with metadata and quality assessment."""

class ContentExtractor:
    """ Content extraction and processing for HTML content...."""
    def __init__((self, config: Optional[ExtractionConfig] = None)):
        """ Initialize content extractor...."""
    def extract((self, html: str, url: str)) -> ExtractedContent:
        """ Extract structured content from HTML...."""
    def _clean_html((self, soup: BeautifulSoup)) -> None:
        """Remove unwanted elements from HTML."""
    def _extract_title((self, soup: BeautifulSoup)) -> str:
        """Extract page title."""
    def _extract_article_content((self, soup: BeautifulSoup)) -> Optional[Tag]:
        """Extract main article content container."""
    def _extract_text((self, element: Tag)) -> str:
        """Extract clean text from HTML element."""
    def _detect_content_type((self, title: str, content: str, soup: BeautifulSoup)) -> ContentType:
        """Detect the type of content based on various signals."""
    def _assess_quality((self, title: str, content: str, soup: BeautifulSoup)) -> tuple[ExtractionQuality, float]:
        """Assess extraction quality and confidence."""
    def _extract_metadata((self, soup: BeautifulSoup, url: str)) -> Dict[str, Any]:
        """Extract metadata from HTML."""
    def _parse_date((self, date_string: str)) -> Optional[datetime]:
        """Parse date string to datetime object."""
    def _extract_headings((self, element: Tag)) -> List[Dict[str, str]]:
        """Extract headings structure."""
    def _extract_content_blocks((self, element: Tag)) -> List[ContentBlock]:
        """Extract structured content blocks."""
    def _extract_links((self, soup: BeautifulSoup, base_url: str)) -> List[Dict[str, str]]:
        """Extract and categorize links."""
    def _extract_images((self, soup: BeautifulSoup, base_url: str)) -> List[Dict[str, str]]:
        """Extract image metadata."""
    def _detect_language((self, content: str)) -> Optional[str]:
        """Basic language detection."""

def is_significant((self)) -> bool:
    """Check if content block is significant (not just whitespace)."""

def is_high_quality((self)) -> bool:
    """Check if extraction is high quality."""

def summary((self)) -> str:
    """Generate a summary of the extracted content."""

def __init__((self, config: Optional[ExtractionConfig] = None)):
    """ Initialize content extractor...."""

def extract((self, html: str, url: str)) -> ExtractedContent:
    """ Extract structured content from HTML...."""

def _clean_html((self, soup: BeautifulSoup)) -> None:
    """Remove unwanted elements from HTML."""

def _extract_title((self, soup: BeautifulSoup)) -> str:
    """Extract page title."""

def _extract_article_content((self, soup: BeautifulSoup)) -> Optional[Tag]:
    """Extract main article content container."""

def _extract_text((self, element: Tag)) -> str:
    """Extract clean text from HTML element."""

def _detect_content_type((self, title: str, content: str, soup: BeautifulSoup)) -> ContentType:
    """Detect the type of content based on various signals."""

def _assess_quality((self, title: str, content: str, soup: BeautifulSoup)) -> tuple[ExtractionQuality, float]:
    """Assess extraction quality and confidence."""

def _extract_metadata((self, soup: BeautifulSoup, url: str)) -> Dict[str, Any]:
    """Extract metadata from HTML."""

def _parse_date((self, date_string: str)) -> Optional[datetime]:
    """Parse date string to datetime object."""

def _extract_headings((self, element: Tag)) -> List[Dict[str, str]]:
    """Extract headings structure."""

def _extract_content_blocks((self, element: Tag)) -> List[ContentBlock]:
    """Extract structured content blocks."""

def _extract_links((self, soup: BeautifulSoup, base_url: str)) -> List[Dict[str, str]]:
    """Extract and categorize links."""

def _extract_images((self, soup: BeautifulSoup, base_url: str)) -> List[Dict[str, str]]:
    """Extract image metadata."""

def _detect_language((self, content: str)) -> Optional[str]:
    """Basic language detection."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/scraping/scraper.py
# Language: python

import asyncio
import random
import time
from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Dict, List, Optional, Set, Union, AsyncIterator
from urllib.parse import urljoin, urlparse
from dataclasses import dataclass, field
from enum import Enum
from loguru import logger
from pydantic import BaseModel, Field, validator
from playwright.async_api import async_playwright, Browser, BrowserContext, Page
from ..api.errors import Document360Error, ErrorCategory, ErrorSeverity

class BrowserType(s, t, r, ,,  , E, n, u, m):
    """Supported browser types."""

class ScrapingMode(s, t, r, ,,  , E, n, u, m):
    """Scraping operation modes."""

class UserAgent:
    """User agent configuration."""

class ScrapingConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for web scraping operations."""

class ScrapedPage:
    """Results from scraping a single page."""

class ScrapingSession(B, a, s, e, M, o, d, e, l):
    """Scraping session with statistics."""

class Document360Scraper:
    """ Document360 web scraper with Playwright browser automation...."""
    def __init__((self, config: Optional[ScrapingConfig] = None)):
        """ Initialize Document360 scraper...."""
    def start((self)) -> None:
        """Start the scraper and initialize browser."""
    def stop((self)) -> None:
        """Stop the scraper and cleanup resources."""
    def scrape_url((self, url: str)) -> ScrapedPage:
        """ Scrape a single URL...."""
    def scrape_multiple((self, urls: List[str])) -> List[ScrapedPage]:
        """ Scrape multiple URLs with concurrency control...."""
    def _respect_rate_limits((self, url: str)) -> None:
        """Implement rate limiting."""
    def _get_random_user_agent((self)) -> UserAgent:
        """Get a random user agent for anti-detection."""
    def _configure_page((self, page: Page)) -> None:
        """Configure page for scraping."""
    def _setup_ad_blocking((self)) -> None:
        """Setup ad blocking and tracking protection."""
    def _block_requests((self, route, request)) -> None:
        """Block ads and tracking requests."""
    def _dismiss_cookie_banners((self, page: Page)) -> None:
        """Attempt to dismiss cookie consent banners."""
    def _extract_page_content((
        self, 
        page: Page, 
        url: str, 
        load_time_ms: float,
        status_code: int
    )) -> ScrapedPage:
        """Extract content from a page."""
    def _save_screenshot((self, page: Page, url: str)) -> Path:
        """Save page screenshot."""
    def get_session_stats((self)) -> Optional[ScrapingSession]:
        """Get current session statistics."""
    def __aenter__((self)):
        """Async context manager entry."""
    def __aexit__((self, exc_type, exc_val, exc_tb)):
        """Async context manager exit."""

def success_rate((self)) -> float:
    """Calculate scraping success rate."""

def duration_seconds((self)) -> float:
    """Calculate session duration."""

def __init__((self, config: Optional[ScrapingConfig] = None)):
    """ Initialize Document360 scraper...."""

def start((self)) -> None:
    """Start the scraper and initialize browser."""

def stop((self)) -> None:
    """Stop the scraper and cleanup resources."""

def scrape_url((self, url: str)) -> ScrapedPage:
    """ Scrape a single URL...."""

def scrape_multiple((self, urls: List[str])) -> List[ScrapedPage]:
    """ Scrape multiple URLs with concurrency control...."""

def scrape_with_semaphore((url: str)) -> ScrapedPage:

def _respect_rate_limits((self, url: str)) -> None:
    """Implement rate limiting."""

def _get_random_user_agent((self)) -> UserAgent:
    """Get a random user agent for anti-detection."""

def _configure_page((self, page: Page)) -> None:
    """Configure page for scraping."""

def _setup_ad_blocking((self)) -> None:
    """Setup ad blocking and tracking protection."""

def _block_requests((self, route, request)) -> None:
    """Block ads and tracking requests."""

def _dismiss_cookie_banners((self, page: Page)) -> None:
    """Attempt to dismiss cookie consent banners."""

def _extract_page_content((
        self, 
        page: Page, 
        url: str, 
        load_time_ms: float,
        status_code: int
    )) -> ScrapedPage:
    """Extract content from a page."""

def _save_screenshot((self, page: Page, url: str)) -> Path:
    """Save page screenshot."""

def get_session_stats((self)) -> Optional[ScrapingSession]:
    """Get current session statistics."""

def __aenter__((self)):
    """Async context manager entry."""

def __aexit__((self, exc_type, exc_val, exc_tb)):
    """Async context manager exit."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/utils/__init__.py
# Language: python

from .logging import (
    LogLevel,
    LogFormat,
    LogContext,
    LoggingManager,
    LoggingConfig,
    LogHandlerConfig,
    get_logging_manager,
    get_logger,
    setup_logging,
    setup_development_logging,
    setup_production_logging,
    set_correlation_id,
    set_user_id,
    set_request_id,
    clear_log_context,
)
from .dependency_injection import (
    ServiceLifecycle,
    ServiceContainer,
    ServiceDescriptor,
    ServiceScope,
    ServiceError,
    ServiceNotFoundError,
    CircularDependencyError,
    ServiceRegistrationError,
    injectable,
    get_container,
    set_container,
    resolve,
    register_singleton,
    register_transient,
    register_scoped,
)
from .performance import (
    CacheStrategy,
    BatchStrategy,
    CacheConfig,
    BatchConfig,
    PerformanceMetrics,
    AsyncCache,
    BatchProcessor,
    PerformanceOptimizer,
    get_optimizer,
    set_optimizer,
    async_cache,
    batch_processor,
    performance_monitor,
)
from .validation import (
    ValidationException,
    ValidationHelper,
    MigrationHelper,
    ValidatedBaseModel,
    validate_url_field,
    validate_email_field,
    validate_slug_field,
    validate_api_token_field,
    validate_function_inputs,
)


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/utils/dependency_injection.py
# Language: python

import inspect
import threading
from contextlib import contextmanager
from dataclasses import dataclass, field
from enum import Enum
from functools import wraps
from typing import Any, Callable, Dict, List, Optional, Type, TypeVar, Union, get_origin, get_args
from loguru import logger

class ServiceLifecycle(s, t, r, ,,  , E, n, u, m):
    """Service lifecycle management modes."""

class ServiceError(E, x, c, e, p, t, i, o, n):
    """Base exception for dependency injection operations."""

class ServiceNotFoundError(S, e, r, v, i, c, e, E, r, r, o, r):
    """Exception raised when a requested service is not registered."""

class CircularDependencyError(S, e, r, v, i, c, e, E, r, r, o, r):
    """Exception raised when circular dependencies are detected."""

class ServiceRegistrationError(S, e, r, v, i, c, e, E, r, r, o, r):
    """Exception raised when service registration fails."""

class ServiceDescriptor:
    """Descriptor for registered services."""
    def __post_init__((self)):
        """Extract dependencies from implementation if it's a class."""
    def _extract_dependencies((self, cls: Type)) -> List[Type]:
        """Extract constructor dependencies from a class."""

class ServiceScope:
    """Service scope for managing scoped service lifetimes."""
    def __init__((self, name: str = "default")):
    def get_instance((self, service_type: Type)) -> Optional[Any]:
        """Get scoped instance if it exists."""
    def set_instance((self, service_type: Type, instance: Any)) -> None:
        """Store scoped instance."""
    def clear((self)) -> None:
        """Clear all scoped instances."""

class ServiceContainer:
    """ Dependency injection container with service lifecycle management...."""
    def __init__((self)):
    def register_singleton((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], T, Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
        """ Register a service with singleton lifecycle...."""
    def register_transient((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
        """ Register a service with transient lifecycle...."""
    def register_scoped((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
        """ Register a service with scoped lifecycle...."""
    def _register((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], T, Callable[..., T]], 
        lifecycle: ServiceLifecycle, 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
        """Internal registration method."""
    def resolve((self, service_type: Type[T])) -> T:
        """ Resolve a service instance...."""
    def _resolve((self, service_type: Type[T], resolving_stack: set)) -> T:
        """Internal resolution method with circular dependency detection."""
    def _create_instance((self, descriptor: ServiceDescriptor, resolving_stack: set)) -> Any:
        """Create a new service instance."""
    def _resolve_dependencies((self, func: Callable, resolving_stack: set)) -> Dict[str, Any]:
        """Resolve dependencies for a function or constructor."""
    def is_registered((self, service_type: Type)) -> bool:
        """Check if a service type is registered."""
    def get_registered_services((self)) -> List[Type]:
        """Get list of all registered service types."""
    def clear_scope((self, scope_name: str = None)) -> None:
        """Clear instances in a specific scope."""

def __post_init__((self)):
    """Extract dependencies from implementation if it's a class."""

def _extract_dependencies((self, cls: Type)) -> List[Type]:
    """Extract constructor dependencies from a class."""

def __init__((self, name: str = "default")):

def get_instance((self, service_type: Type)) -> Optional[Any]:
    """Get scoped instance if it exists."""

def set_instance((self, service_type: Type, instance: Any)) -> None:
    """Store scoped instance."""

def clear((self)) -> None:
    """Clear all scoped instances."""

def __init__((self)):

def register_singleton((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], T, Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
    """ Register a service with singleton lifecycle...."""

def register_transient((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
    """ Register a service with transient lifecycle...."""

def register_scoped((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], Callable[..., T]], 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
    """ Register a service with scoped lifecycle...."""

def _register((
        self, 
        service_type: Type[T], 
        implementation: Union[Type[T], T, Callable[..., T]], 
        lifecycle: ServiceLifecycle, 
        factory: Optional[Callable] = None
    )) -> ServiceContainer:
    """Internal registration method."""

def resolve((self, service_type: Type[T])) -> T:
    """ Resolve a service instance...."""

def _resolve((self, service_type: Type[T], resolving_stack: set)) -> T:
    """Internal resolution method with circular dependency detection."""

def _create_instance((self, descriptor: ServiceDescriptor, resolving_stack: set)) -> Any:
    """Create a new service instance."""

def _resolve_dependencies((self, func: Callable, resolving_stack: set)) -> Dict[str, Any]:
    """Resolve dependencies for a function or constructor."""

def is_registered((self, service_type: Type)) -> bool:
    """Check if a service type is registered."""

def get_registered_services((self)) -> List[Type]:
    """Get list of all registered service types."""

def scope((self, scope_name: str = None)):
    """ Create a new service scope context manager...."""

def clear_scope((self, scope_name: str = None)) -> None:
    """Clear instances in a specific scope."""

def get_container(()) -> ServiceContainer:
    """Get the global service container instance."""

def set_container((container: ServiceContainer)) -> None:
    """Set the global service container instance."""

def injectable((
    service_type: Optional[Type] = None,
    lifecycle: ServiceLifecycle = ServiceLifecycle.TRANSIENT,
    container: Optional[ServiceContainer] = None,
)) -> Callable[[Type[T]], Type[T]]:
    """ Decorator for automatic service registration...."""

def decorator((cls: Type[T])) -> Type[T]:

def resolve((service_type: Type[T], container: Optional[ServiceContainer] = None)) -> T:
    """Resolve a service from the container."""

def register_singleton((
    service_type: Type[T], 
    implementation: Union[Type[T], T, Callable[..., T]], 
    container: Optional[ServiceContainer] = None
)) -> None:
    """Register a singleton service."""

def register_transient((
    service_type: Type[T], 
    implementation: Union[Type[T], Callable[..., T]], 
    container: Optional[ServiceContainer] = None
)) -> None:
    """Register a transient service."""

def register_scoped((
    service_type: Type[T], 
    implementation: Union[Type[T], Callable[..., T]], 
    container: Optional[ServiceContainer] = None
)) -> None:
    """Register a scoped service."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/utils/logging.py
# Language: python

import json
import sys
from contextvars import ContextVar
from dataclasses import dataclass, field
from enum import Enum
from pathlib import Path
from typing import Any, Dict, List, Optional, Union
from loguru import logger
from pydantic import BaseModel, Field

class LogLevel(s, t, r, ,,  , E, n, u, m):
    """Supported log levels."""

class LogFormat(s, t, r, ,,  , E, n, u, m):
    """Supported log output formats."""

class LogHandlerConfig(B, a, s, e, M, o, d, e, l):
    """Configuration for a log handler."""

class LoggingConfig(B, a, s, e, M, o, d, e, l):
    """Complete logging configuration."""

class LogContext:
    """Context information for log correlation."""
    def to_dict((self)) -> Dict[str, Any]:
        """Convert context to dictionary."""

class LoggingManager:
    """ Centralized logging manager using loguru...."""
    def __init__((self, config: Optional[LoggingConfig] = None)):
    def initialize((self)) -> None:
        """Initialize logging system with configuration."""
    def _add_handler((self, handler_config: LogHandlerConfig)) -> None:
        """Add a log handler with the given configuration."""
    def _add_default_handlers((self)) -> None:
        """Add default handlers based on configuration."""
    def _get_format((self)) -> str:
        """Get log format string based on configuration."""
    def _get_console_format((self)) -> str:
        """Get human-readable console format."""
    def _get_json_format((self)) -> str:
        """Get JSON format for structured logging."""
    def _get_structured_format((self)) -> str:
        """Get structured format (JSON-like but more readable)."""
    def _configure_correlation((self)) -> None:
        """Configure correlation context integration."""
    def set_level((self, level: LogLevel)) -> None:
        """Change global log level."""
    def add_handler((
        self,
        sink: Union[str, object],
        level: LogLevel = LogLevel.INFO,
        format_type: Optional[LogFormat] = None,
        **kwargs,
    )) -> None:
        """Add a new log handler."""
    def _format_for_type((self, format_type: LogFormat)) -> str:
        """Get format string for specific format type."""
    def create_context((
        self,
        correlation_id: str = "",
        user_id: str = "",
        request_id: str = "",
        **kwargs,
    )) -> LogContext:
        """Create a new log context."""
    def set_context((self, context: LogContext)) -> None:
        """Set context variables for correlation tracking."""
    def clear_context((self)) -> None:
        """Clear all context variables."""
    def get_logger((self, name: str)) -> object:
        """Get a logger instance with the given name."""
    def shutdown((self)) -> None:
        """Shutdown logging system and cleanup resources."""

def to_dict((self)) -> Dict[str, Any]:
    """Convert context to dictionary."""

def __init__((self, config: Optional[LoggingConfig] = None)):

def initialize((self)) -> None:
    """Initialize logging system with configuration."""

def _add_handler((self, handler_config: LogHandlerConfig)) -> None:
    """Add a log handler with the given configuration."""

def _add_default_handlers((self)) -> None:
    """Add default handlers based on configuration."""

def _get_format((self)) -> str:
    """Get log format string based on configuration."""

def _get_console_format((self)) -> str:
    """Get human-readable console format."""

def _get_json_format((self)) -> str:
    """Get JSON format for structured logging."""

def _get_structured_format((self)) -> str:
    """Get structured format (JSON-like but more readable)."""

def _configure_correlation((self)) -> None:
    """Configure correlation context integration."""

def correlation_filter((record)):
    """Add correlation context to log record."""

def set_level((self, level: LogLevel)) -> None:
    """Change global log level."""

def add_handler((
        self,
        sink: Union[str, object],
        level: LogLevel = LogLevel.INFO,
        format_type: Optional[LogFormat] = None,
        **kwargs,
    )) -> None:
    """Add a new log handler."""

def _format_for_type((self, format_type: LogFormat)) -> str:
    """Get format string for specific format type."""

def create_context((
        self,
        correlation_id: str = "",
        user_id: str = "",
        request_id: str = "",
        **kwargs,
    )) -> LogContext:
    """Create a new log context."""

def set_context((self, context: LogContext)) -> None:
    """Set context variables for correlation tracking."""

def clear_context((self)) -> None:
    """Clear all context variables."""

def get_logger((self, name: str)) -> object:
    """Get a logger instance with the given name."""

def shutdown((self)) -> None:
    """Shutdown logging system and cleanup resources."""

def get_logging_manager(()) -> LoggingManager:
    """Get the global logging manager instance."""

def setup_logging((
    level: LogLevel = LogLevel.INFO,
    format_type: LogFormat = LogFormat.CONSOLE,
    log_file: Optional[Path] = None,
    enable_correlation: bool = True,
)) -> LoggingManager:
    """ Setup logging with common configuration...."""

def get_logger((name: str)) -> object:
    """ Get a logger instance for the specified component...."""

def set_correlation_id((correlation_id: str)) -> None:
    """Set correlation ID in context."""

def set_user_id((user_id: str)) -> None:
    """Set user ID in context."""

def set_request_id((request_id: str)) -> None:
    """Set request ID in context."""

def clear_log_context(()) -> None:
    """Clear all log context variables."""

def setup_development_logging((log_file: Optional[Path] = None)) -> LoggingManager:
    """Setup logging optimized for development."""

def setup_production_logging((log_file: Path)) -> LoggingManager:
    """Setup logging optimized for production."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/utils/performance.py
# Language: python

import asyncio
import functools
import hashlib
import inspect
import json
import time
from collections import defaultdict, deque
from concurrent.futures import ThreadPoolExecutor
from contextlib import asynccontextmanager
from dataclasses import dataclass, field
from enum import Enum
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, TypeVar, Union
from weakref import WeakKeyDictionary
import diskcache
from loguru import logger
from pydantic import BaseModel, Field
import psutil
import psutil

class CacheStrategy(s, t, r, ,,  , E, n, u, m):
    """Cache eviction strategies."""

class BatchStrategy(s, t, r, ,,  , E, n, u, m):
    """Batch processing strategies."""

class CacheConfig:
    """Configuration for cache behavior."""
    def __post_init__((self)):
        """Ensure directory is Path object."""

class BatchConfig:
    """Configuration for batch processing."""

class PerformanceMetrics:
    """Performance metrics tracking."""
    def add_processing_time((self, duration: float)) -> None:
        """Add a processing time measurement."""

class AsyncCache:
    """High-performance async cache with disk persistence."""
    def __init__((self, config: CacheConfig)):
    def get((self, key: str)) -> Optional[Any]:
        """Get value from cache."""
    def set((self, key: str, value: Any, timeout: Optional[float] = None)) -> None:
        """Set value in cache."""
    def delete((self, key: str)) -> bool:
        """Delete key from cache."""
    def clear((self)) -> None:
        """Clear all cache entries."""
    def _update_access_stats((self, key: str)) -> None:
        """Update access statistics for cache key."""
    def get_stats((self)) -> Dict[str, Any]:
        """Get cache statistics."""

class BatchProcessor:
    """Async batch processor with configurable strategies."""
    def __init__((self, config: BatchConfig)):
    def add_item((self, item: Any, processor: Callable[[List[Any]], Any])) -> Any:
        """Add item to batch for processing."""
    def _should_trigger_batch((self)) -> bool:
        """Determine if batch should be triggered."""
    def _wait_for_timeout((self, processor: Callable[[List[Any]], Any])) -> None:
        """Wait for timeout and trigger batch processing."""
    def _process_batch((self, processor: Callable[[List[Any]], Any])) -> None:
        """Process current batch of items."""
    def flush((self, processor: Callable[[List[Any]], Any])) -> None:
        """Force process any pending items."""
    def shutdown((self)) -> None:
        """Shutdown the batch processor."""

class PerformanceOptimizer:
    """ Main performance optimization utility class...."""
    def __init__((
        self,
        cache_config: Optional[CacheConfig] = None,
        batch_config: Optional[BatchConfig] = None,
    )):
    def get_cache((self, name: str = "default")) -> AsyncCache:
        """Get or create named cache instance."""
    def get_batch_processor((self, func: Callable)) -> BatchProcessor:
        """Get or create batch processor for function."""
    def clear_all_caches((self)) -> None:
        """Clear all cache instances."""
    def get_global_metrics((self)) -> Dict[str, Any]:
        """Get combined metrics from all components."""

def __post_init__((self)):
    """Ensure directory is Path object."""

def hit_rate((self)) -> float:
    """Calculate cache hit rate."""

def add_processing_time((self, duration: float)) -> None:
    """Add a processing time measurement."""

def __init__((self, config: CacheConfig)):

def get((self, key: str)) -> Optional[Any]:
    """Get value from cache."""

def set((self, key: str, value: Any, timeout: Optional[float] = None)) -> None:
    """Set value in cache."""

def delete((self, key: str)) -> bool:
    """Delete key from cache."""

def clear((self)) -> None:
    """Clear all cache entries."""

def _update_access_stats((self, key: str)) -> None:
    """Update access statistics for cache key."""

def get_stats((self)) -> Dict[str, Any]:
    """Get cache statistics."""

def __init__((self, config: BatchConfig)):

def add_item((self, item: Any, processor: Callable[[List[Any]], Any])) -> Any:
    """Add item to batch for processing."""

def _should_trigger_batch((self)) -> bool:
    """Determine if batch should be triggered."""

def _wait_for_timeout((self, processor: Callable[[List[Any]], Any])) -> None:
    """Wait for timeout and trigger batch processing."""

def _process_batch((self, processor: Callable[[List[Any]], Any])) -> None:
    """Process current batch of items."""

def flush((self, processor: Callable[[List[Any]], Any])) -> None:
    """Force process any pending items."""

def shutdown((self)) -> None:
    """Shutdown the batch processor."""

def __init__((
        self,
        cache_config: Optional[CacheConfig] = None,
        batch_config: Optional[BatchConfig] = None,
    )):

def get_cache((self, name: str = "default")) -> AsyncCache:
    """Get or create named cache instance."""

def get_batch_processor((self, func: Callable)) -> BatchProcessor:
    """Get or create batch processor for function."""

def clear_all_caches((self)) -> None:
    """Clear all cache instances."""

def get_global_metrics((self)) -> Dict[str, Any]:
    """Get combined metrics from all components."""

def get_optimizer(()) -> PerformanceOptimizer:
    """Get global performance optimizer instance."""

def set_optimizer((optimizer: PerformanceOptimizer)) -> None:
    """Set global performance optimizer instance."""

def async_cache((
    cache_name: str = "default",
    timeout: Optional[float] = None,
    key_func: Optional[Callable[..., str]] = None,
    optimizer: Optional[PerformanceOptimizer] = None,
)) -> Callable[[F], F]:
    """ Decorator for async function caching...."""

def decorator((func: F)) -> F:

def default_key_func((*args, **kwargs)) -> str:
    """Default key generation from function arguments."""

def wrapper((*args, **kwargs)):

def batch_processor((
    max_size: int = 100,
    max_wait: float = 1.0,
    strategy: BatchStrategy = BatchStrategy.HYBRID,
    optimizer: Optional[PerformanceOptimizer] = None,
)) -> Callable[[F], F]:
    """ Decorator for batch processing of function calls...."""

def decorator((func: F)) -> F:

def wrapper((item)):

def performance_monitor((
    track_timing: bool = True,
    track_memory: bool = False,
    log_slow_calls: bool = True,
    slow_threshold: float = 1.0,
)) -> Callable[[F], F]:
    """ Decorator for monitoring function performance...."""

def decorator((func: F)) -> F:

def async_wrapper((*args, **kwargs)):

def sync_wrapper((*args, **kwargs)):


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/src/d361/utils/validation.py
# Language: python

import re
from datetime import datetime, timezone
from functools import wraps
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Type, TypeVar, Union
from urllib.parse import urlparse
from loguru import logger
from pydantic import BaseModel, Field, ValidationError, field_validator, model_validator
from pydantic import EmailStr, HttpUrl
from pydantic.types import EmailStr, HttpUrl
from pydantic import HttpUrl
import html
import inspect

class ValidationException(E, x, c, e, p, t, i, o, n):
    """Enhanced validation error with detailed context."""
    def __init__((self, message: str, field: Optional[str] = None, value: Any = None, errors: Optional[List[Dict]] = None)):

class ValidationHelper:
    """ Comprehensive validation helper for common data validation tasks...."""

class MigrationHelper:
    """ Helper class for migrating from Pydantic v1 to v2...."""

class ValidatedBaseModel(B, a, s, e, M, o, d, e, l):
    """ Enhanced base model with common validation patterns...."""
    def to_dict((self, exclude_none: bool = True)) -> Dict[str, Any]:
        """ Convert model to dictionary with customizable options...."""

class Article(V, a, l, i, d, a, t, e, d, B, a, s, e, M, o, d, e, l):
    """ Enhanced Article model with comprehensive validation...."""

def __init__((self, message: str, field: Optional[str] = None, value: Any = None, errors: Optional[List[Dict]] = None)):

def validate_url((cls, value: Any, allow_relative: bool = False)) -> str:
    """ Validate URL format with optional relative URL support...."""

def validate_email((cls, value: Any)) -> str:
    """ Validate email address format...."""

def validate_slug((cls, value: Any, allow_empty: bool = False)) -> str:
    """ Validate slug format (lowercase alphanumeric with hyphens and underscores)...."""

def validate_version((cls, value: Any)) -> str:
    """ Validate semantic version format (e.g., 1.2.3, 1.0.0-beta.1)...."""

def validate_uuid((cls, value: Any)) -> str:
    """ Validate UUID format...."""

def validate_api_token((cls, value: Any, min_length: int = 20)) -> str:
    """ Validate API token format...."""

def validate_file_path((cls, value: Any, must_exist: bool = False, must_be_file: bool = True)) -> Path:
    """ Validate file path...."""

def validate_date_string((cls, value: Any, format: str = "%Y-%m-%d")) -> datetime:
    """ Validate and parse date string...."""

def validate_json_dict((cls, value: Any, required_keys: Optional[List[str]] = None)) -> Dict[str, Any]:
    """ Validate JSON dictionary with optional required keys...."""

def clean_html_content((cls, value: Any, allow_basic_tags: bool = True)) -> str:
    """ Clean HTML content for safe storage and display...."""

def validate_url_field((allow_relative: bool = False)):
    """Field validator decorator for URL validation."""

def validator((cls, v)):

def validate_email_field(()):
    """Field validator decorator for email validation."""

def validator((cls, v)):

def validate_slug_field((allow_empty: bool = False)):
    """Field validator decorator for slug validation."""

def validator((cls, v)):

def validate_api_token_field((min_length: int = 20)):
    """Field validator decorator for API token validation."""

def validator((cls, v)):

def validate_function_inputs((**field_validators: Dict[str, Callable])):
    """ Decorator to validate function inputs using ValidationHelper...."""

def decorator((func: F)) -> F:

def wrapper((*args, **kwargs)):

def convert_v1_field_to_v2((
        v1_field: Any,
        field_name: str,
        default: Any = None,
        description: Optional[str] = None,
        **extra_kwargs
    )):
    """ Convert Pydantic v1 Field definition to v2 Field...."""

def create_migration_report((model_class: Type[BaseModel])) -> Dict[str, Any]:
    """ Generate a migration report for a Pydantic model...."""

def from_dict((cls, data: Dict[str, Any])) -> 'ValidatedBaseModel':
    """ Create model instance from dictionary with enhanced error handling...."""

def to_dict((self, exclude_none: bool = True)) -> Dict[str, Any]:
    """ Convert model to dictionary with customizable options...."""

def validate_dict_input((cls, values)):
    """Ensure input is processed correctly."""

def validate_slug((cls, v)):

def validate_tags((cls, v)):

def validate_article_consistency((self)):
    """Ensure article data is consistent."""


<document index="49">
<source>templates/d361.toml.example</source>
<document_content>
# Configuration for standalone Python package

[project]
# List of packages to initialize
packages = [
    "d361"  # Your package name
]

# Output directory (optional, defaults to current directory)
output_dir = "."

[author]
name = "AUTHOR_NAME"
email = "adam+github@twardoch.com"
github_username = "twardoch"

[package]
description = ""
min_python = "3.10"
license = "MIT"
development_status = "4 - Beta"

[package.options]
include_cli = true        # Include CLI boilerplate
include_logging = true    # Include logging setup
use_pydantic = true      # Use Pydantic for data validation
use_rich = true          # Use Rich for terminal output

[features]
mkdocs = false           # Enable MkDocs documentation
vcs = true              # Initialize Git repository
github_actions = true   # Add GitHub Actions workflows 
</document_content>
</document>

<document index="50">
<source>templates/d361api.toml.example</source>
<document_content>
# Configuration for standalone Python package

[project]
# List of packages to initialize
packages = [
    "d361api"  # Your package name
]

# Output directory (optional, defaults to current directory)
output_dir = "."

[author]
name = "AUTHOR_NAME"
email = "adam+github@twardoch.com"
github_username = "twardoch"

[package]
description = ""
min_python = "3.10"
license = "MIT"
development_status = "4 - Beta"

[package.options]
include_cli = true        # Include CLI boilerplate
include_logging = true    # Include logging setup
use_pydantic = true      # Use Pydantic for data validation
use_rich = true          # Use Rich for terminal output

[features]
mkdocs = false           # Enable MkDocs documentation
vcs = true              # Initialize Git repository
github_actions = true   # Add GitHub Actions workflows 
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_api_client.py
# Language: python

import asyncio
import sys
from pathlib import Path
from d361.api import Document360ApiClient, ApiConfig
from d361.api.errors import ValidationError, AuthenticationError
from d361.api.errors import ErrorHandler, ErrorSeverity, ErrorCategory
from d361.http.client import HttpResponse
from d361.api.errors import RateLimitError

class MockResponse:
    def __init__((self, status_code, json_data=None, text="", url="https://test.com", headers=None)):

def test_api_client(()):
    """Test Document360ApiClient functionality."""

def test_error_classification(()):
    """Test error classification and handling."""

def __init__((self, status_code, json_data=None, text="", url="https://test.com", headers=None)):

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_chunked_download.py
# Language: python

import asyncio
import sys
from pathlib import Path
from d361.api import Document360ApiClient, ApiConfig
from d361.api.chunked_download import (
    ChunkedDownloader,
    DownloadConfig,
    DownloadStatus,
    ChunkStatus,
    DownloadChunk,
    DownloadProgress,
    DownloadState
)

def test_download_config(()):
    """Test download configuration validation."""

def test_download_chunk(()):
    """Test download chunk functionality."""

def test_download_progress(()):
    """Test download progress tracking."""

def test_download_state(()):
    """Test download state management."""

def test_chunked_downloader(()):
    """Test ChunkedDownloader initialization and basic functionality."""

def test_progress_callback(()):
    """Test progress callback functionality."""

def progress_callback((progress: DownloadProgress)):

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_circuit_breaker.py
# Language: python

import asyncio
import sys
import time
from pathlib import Path
from d361.api.circuit_breaker import (
    CircuitBreaker,
    CircuitBreakerConfig,
    CircuitBreakerError,
    CircuitState,
    CircuitMetrics,
    CircuitBreakerRegistry,
    circuit_breaker,
    get_circuit_breaker,
    get_registry
)

class TestException(E, x, c, e, p, t, i, o, n):
    """Test exception for circuit breaker testing."""

def test_circuit_breaker_config(()):
    """Test circuit breaker configuration."""

def test_circuit_metrics(()):
    """Test circuit breaker metrics."""

def test_circuit_breaker_states(()):
    """Test circuit breaker state transitions."""

def failing_function(()):

def successful_function(()):

def test_circuit_breaker_recovery(()):
    """Test circuit breaker recovery mechanism."""

def failing_function(()):

def successful_function(()):

def test_circuit_breaker_decorator(()):
    """Test circuit breaker decorator."""

def test_function((should_fail=False)):

def test_circuit_breaker_registry(()):
    """Test circuit breaker registry."""

def test_circuit_breaker_error(()):
    """Test circuit breaker error handling."""

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_data_sync.py
# Language: python

import asyncio
import sys
import tempfile
from datetime import datetime, timedelta
from pathlib import Path
from d361.api import Document360ApiClient, ApiConfig
from d361.api.data_sync import (
    DataSyncManager,
    SyncConfig,
    SyncStrategy,
    DeduplicationStrategy,
    ContentFingerprint,
    ChangeRecord,
    ChangeType,
    SyncState
)
from d361.core.models import Article, PublishStatus

def test_content_fingerprint(()):
    """Test content fingerprinting functionality."""

def test_sync_config(()):
    """Test sync configuration."""

def test_change_record(()):
    """Test change record functionality."""

def test_sync_state(()):
    """Test sync state management."""

def test_data_sync_manager(()):
    """Test DataSyncManager initialization and basic functionality."""

def test_callback((change_record: ChangeRecord)):

def test_deduplication_logic(()):
    """Test deduplication logic."""

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_metrics.py
# Language: python

import asyncio
import sys
import time
from datetime import datetime, timedelta
from pathlib import Path
from d361.api.metrics import (
    ApiMetrics,
    MetricsConfig,
    MetricType,
    MetricPoint,
    MetricSeries,
    TimeWindow,
    get_metrics,
    configure_metrics
)
import json

def test_metric_point(()):
    """Test metric point creation and serialization."""

def test_metric_series(()):
    """Test metric series functionality."""

def test_metrics_config(()):
    """Test metrics configuration."""

def test_api_metrics(()):
    """Test ApiMetrics functionality."""

def test_metrics_export(()):
    """Test metrics export functionality."""

def test_alerts_system(()):
    """Test metrics alerting system."""

def test_alert_callback((metric_name: str, alert_data: dict)):

def test_global_metrics(()):
    """Test global metrics instance."""

def test_metrics_performance(()):
    """Test metrics performance under load."""

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/test_streaming_bulk.py
# Language: python

import asyncio
import sys
from pathlib import Path
from d361.api import Document360ApiClient, ApiConfig
from d361.api.bulk_operations import (
    BulkOperationManager,
    BulkOperationConfig,
    OperationType,
    OperationRequest,
    SmartBulkProcessor
)
from d361.api.errors import ValidationError
from d361.api.bulk_operations import BulkOperationResult
from datetime import datetime

def test_streaming_operations(()):
    """Test streaming operations functionality."""

def test_bulk_operations(()):
    """Test bulk operations functionality."""

def test_operation_requests(()):
    """Test operation request creation and validation."""

def test_bulk_result_tracking(()):
    """Test bulk operation result tracking."""

def main(()):
    """Run all tests."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/conftest.py
# Language: python

import asyncio
import os
import tempfile
from pathlib import Path
from typing import AsyncGenerator, Dict, Generator, Optional, Any
from unittest.mock import AsyncMock, Mock, patch
import pytest
from loguru import logger
from d361.core.models import Article, Category, ProjectVersion
from d361.core.transformers import ModelTransformer
from d361.config import AppConfig, Environment, ConfigLoader, SecretsManager
from d361.providers import MockProvider
from d361.archive import SqliteCache, ArchiveParser
from d361.api import Document360ApiClient, TokenManager
from d361.utils import ServiceContainer, LoggingManager, PerformanceOptimizer
from d361.plugins import PluginManager
from d361.archive.schema import create_archive_schema
import zipfile
import json
import json
import yaml
import time

class TestHelpers:
    """Helper utilities for testing."""

def event_loop(()):
    """Create event loop for async tests."""

def test_data_dir(()) -> Generator[Path, None, None]:
    """Create temporary directory for test data."""

def test_config((test_data_dir: Path)) -> AppConfig:
    """Create test configuration with isolated paths."""

def test_database((test_data_dir: Path)) -> AsyncGenerator[Path, None]:
    """Create isolated test database."""

def sqlite_cache((test_database: Path, test_config: AppConfig)) -> AsyncGenerator[SqliteCache, None]:
    """Create SQLite cache for testing."""

def mock_api_client(()) -> Mock:
    """Create mock API client for testing."""

def mock_token_manager(()) -> Mock:
    """Create mock token manager for testing."""

def mock_secrets_manager(()) -> AsyncMock:
    """Create mock secrets manager for testing."""

def mock_get_secret((secret_id: str)):

def config_loader((test_data_dir: Path)) -> AsyncGenerator[ConfigLoader, None]:
    """Create configuration loader for testing."""

def mock_provider(()) -> MockProvider:
    """Create mock provider with test data."""

def model_transformer(()) -> ModelTransformer:
    """Create model transformer for testing."""

def plugin_manager(()) -> PluginManager:
    """Create plugin manager for testing."""

def service_container(()) -> Generator[ServiceContainer, None, None]:
    """Create service container for dependency injection testing."""

def performance_optimizer((test_data_dir: Path)) -> PerformanceOptimizer:
    """Create performance optimizer for testing."""

def logging_manager((test_data_dir: Path)) -> Generator[LoggingManager, None, None]:
    """Create logging manager for testing."""

def sample_article(()) -> Article:
    """Create sample article for testing."""

def sample_category(()) -> Category:
    """Create sample category for testing."""

def sample_articles(()) -> list[Article]:
    """Create list of sample articles for testing."""

def test_environment_vars(()) -> Generator[Dict[str, str], None, None]:
    """Set up test environment variables."""

def mock_archive_file((test_data_dir: Path)) -> Path:
    """Create mock archive file for testing."""

def archive_parser((test_data_dir: Path)) -> ArchiveParser:
    """Create archive parser for testing."""

def create_test_config_file((config_dir: Path, filename: str, config_data: Dict[str, Any])) -> Path:
    """Create test configuration file."""

def create_test_env_file((config_dir: Path, env_vars: Dict[str, str])) -> Path:
    """Create test .env file."""

def wait_for_condition((condition_func, timeout: float = 5.0, interval: float = 0.1)):
    """Wait for a condition to become true."""

def test_helpers(()) -> TestHelpers:
    """Provide test helper utilities."""

def pytest_configure((config)):
    """Configure pytest with custom markers."""

def pytest_collection_modifyitems((config, items)):
    """Modify test collection to add markers automatically."""

def anyio_backend(()):
    """Configure anyio backend for async testing."""


<document index="51">
<source>tests/data/v1_categories_articles.json</source>
<document_content>
{"Slug":"v1","Workspace":"v1","ResourcePath":"https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation","Languages":["en"],"Categories":[{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"d8a6d418-a7d4-4ccb-99cb-e78d988353ff","Path":"balanced-strokes-1.md","Order":4},{"Id":"fc5ec1c0-eacb-471a-a419-e1fdd7061af6","Path":"extrapolated-1.md","Order":5},{"Id":"dcc687c1-9a40-4ca1-976f-a238b8e79a91","Path":"handmade-creating-1.md","Order":1},{"Id":"52aa4a13-db52-4461-88cf-ccc30fe7028c","Path":"blending-strokes-1.md","Order":3},{"Id":"77de5ee4-5f22-40eb-82a5-722ddb680eb0","Path":"manual-1.md","Order":2},{"Id":"f27bae0c-e7d3-4647-bb80-2a77bfe2b2e4","Path":"mask-strokes-1.md","Order":6}],"Id":"9c5c9828-0e95-43e2-ae8d-c4d2ca9c4b23","Path":"handmade-fills.md","Order":14,"CategoryType":1,"Icon":null,"Title":"Handmade Fills","Languages":[{"Code":"en","Title":"Handmade Fills","Slug":"handmade-fills","ContentType":0,"SeoTitle":"Halftone","Description":null}]}],"Articles":[{"Id":"532a5620-54ee-4754-900a-d1b22cbc200c","Path":"trace.md","Order":9},{"Id":"17bb59f9-04a6-4815-8514-f22de876b1d0","Path":"creating-new-fill.md","Order":2},{"Id":"575c42d6-c240-4958-9a57-1a6288c82ff9","Path":"understanding-fill-types.md","Order":1},{"Id":"fcfae55b-f449-4c37-90c9-c26a42303603","Path":"radial.md","Order":5},{"Id":"24e4cd74-5a00-4f96-8f98-9940919537f3","Path":"linear.md","Order":3},{"Id":"cd147a52-7f04-49bd-b6ec-9e9d788d4f55","Path":"wireframe.md","Order":10},{"Id":"310d077b-0f7b-43f6-89d5-e007b8e64523","Path":"fractals.md","Order":13},{"Id":"956e920d-083d-4f45-a8b4-a037021f5992","Path":"units.md","Order":15},{"Id":"14bd8051-696c-47c8-849b-a141f6fcdd7e","Path":"spiral.md","Order":7},{"Id":"954ca4cd-07f2-4784-8438-b071be94316e","Path":"text-2.md","Order":12},{"Id":"68c0794a-c5a3-4ce4-adeb-c446e8d92b08","Path":"wave.md","Order":4},{"Id":"cb1ff674-d722-4b63-b6c6-057e026a4350","Path":"circular.md","Order":6},{"Id":"90366d55-dcf3-4b5a-8383-740416ae9ecf","Path":"halftone.md","Order":8},{"Id":"13bf6467-c2f6-4889-afac-1076246e6f13","Path":"scribble.md","Order":11}],"Id":"90b0e327-f05a-4893-96ce-0b2acf6b6d99","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Fills","Languages":[{"Code":"en","Title":"Fills","Slug":"fills","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7fe540cc-05f8-4bf4-bd8b-2d58621a74c4","Path":"system-requirements-2.md","Order":2},{"Id":"a3cb3f84-bd40-47f5-875c-15b9e47afdc3","Path":"what-is-vexy-lines.md","Order":1}],"Id":"48006562-278a-4b9d-aa07-8c76ba23aa1e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Introduction","Languages":[{"Code":"en","Title":"Introduction","Slug":"introduction","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"67fc3d26-2faf-4d16-864a-4896d2790a89","Path":"phase-shift.md","Order":7},{"Id":"ea1caee8-863e-4ec6-85b2-beacf321aaca","Path":"randomization.md","Order":2},{"Id":"47b61d24-130a-4eed-93fd-d019412232fe","Path":"wave-fading.md","Order":8},{"Id":"d86adec9-ecfb-4c07-881b-e2796a8ae1c6","Path":"curviness.md","Order":9},{"Id":"3d638a8a-fd58-444f-839a-6d2e8929aaf1","Path":"angle.md","Order":4},{"Id":"63caebaf-0115-44ab-97ed-6b53fa565e14","Path":"interval.md","Order":1},{"Id":"4c03ab40-5a7e-4770-ac05-30a00f4db0c9","Path":"wave-height.md","Order":5},{"Id":"fe5b671d-64b9-4c97-8538-5098d1f75d11","Path":"shift.md","Order":3},{"Id":"72336515-7f2b-452a-a701-1d54bbb9bdc6","Path":"wave-width.md","Order":6}],"Id":"5db64d3b-05af-4590-ae3d-2396db673c1d","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Fill parameters","Languages":[{"Code":"en","Title":"Fill parameters","Slug":"fill-parameters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"22014b64-79c7-414f-8fa7-920f69c9d90e","Path":"image-threshold-draft.md","Order":3},{"Id":"92cc91ce-c31b-41ea-883e-b68a5e2f4835","Path":"stroke-caps-draft.md","Order":6},{"Id":"99b7e95e-7e8e-475f-bd54-93b9291762ab","Path":"fill-properties.md","Order":1},{"Id":"71e7f76b-23ea-45db-8973-6e09248bcc0b","Path":"align-and-arrange-draft.md","Order":10},{"Id":"e6f32c39-b8eb-4874-b832-9af6588c7ede","Path":"color-1.md","Order":2},{"Id":"d832a358-b4ea-4aae-bf80-549c992461c3","Path":"transfom-draft.md","Order":9},{"Id":"59912802-c636-4237-a9ee-e957d714d9ed","Path":"dashed-line-draft.md","Order":5},{"Id":"f8bc9a4d-d4b1-4e7a-a2a8-ef97f6d3f5df","Path":"stroke-thickness-draft.md","Order":4},{"Id":"fd5c5422-5c85-4edb-8841-caef3b9a408e","Path":"mesh-2.md","Order":11},{"Id":"4b2a7350-3503-40ca-9ed9-28320be03763","Path":"overlap-control-draft.md","Order":12},{"Id":"9b477d02-c071-4577-976e-bd98e1e0e6a5","Path":"view-1.md","Order":13},{"Id":"f41cac1c-610f-4471-85f2-e3606d03b959","Path":"emboss-draft.md","Order":7},{"Id":"b57eb7e2-1e04-4ad4-9f15-3aa4ebe07eed","Path":"smooth-mask.md","Order":8}],"Id":"2ea06353-5d08-422e-bb6b-6297ede17fca","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Properties","Languages":[{"Code":"en","Title":"Properties","Slug":"properties","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"84737f12-2223-462c-8a81-41b5c3e57b78","Path":"layer-1.md","Order":3},{"Id":"3f717b1b-0edf-4bb4-b62f-d57c7b895c54","Path":"group.md","Order":6},{"Id":"80005406-8831-47a6-a687-8173f204506c","Path":"mask.md","Order":4},{"Id":"e18e6850-3d8c-48e9-a00e-66c6d53ec348","Path":"source.md","Order":1},{"Id":"d81c59af-5819-4d0b-93aa-f5dc65d403cd","Path":"fills-2.md","Order":2},{"Id":"33ed916a-0bd5-4427-8ef5-472726507397","Path":"refreshing.md","Order":7},{"Id":"d96fe67a-86ba-4de0-9532-549d2cd9936b","Path":"clone.md","Order":8},{"Id":"418ae2ec-1e5d-468a-8e19-ad4dc10393e9","Path":"mesh.md","Order":5}],"Id":"d88e376d-5e77-4525-bc21-220992f11f78","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Basic terms","Languages":[{"Code":"en","Title":"Basic terms","Slug":"basic-terms","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d6771706-bf22-4ce2-a044-bda648d681b4","Path":"zooming.md","Order":5},{"Id":"0c733405-7ed4-49c0-be14-58d5ca241347","Path":"import.md","Order":9},{"Id":"1819dc5b-d703-4a19-b1a5-cb948e171c92","Path":"open-document-and-images.md","Order":4},{"Id":"62f3e30e-4eba-41f1-9be7-a2c85d03d4cb","Path":"export-2.md","Order":10},{"Id":"ad54c246-1ef8-4056-bcf5-1efe80099f1e","Path":"panscroll-the-document-view.md","Order":6},{"Id":"63539f6c-ad8b-42b9-827f-7046091d1a97","Path":"system-requirements.md","Order":1},{"Id":"8bfa3084-3597-4219-8578-672bb36ac1e1","Path":"new-from-clipboard.md","Order":3},{"Id":"87397752-2648-4c3e-87d4-cd975752f045","Path":"create-new-document.md","Order":2},{"Id":"4d35fdbf-a00a-4ce0-8afa-06606fe27897","Path":"save-1.md","Order":8},{"Id":"47144d0e-0291-4bc8-9da6-102f371be902","Path":"close.md","Order":11},{"Id":"c7c6c1b3-60eb-453a-a39e-b1e8642cc528","Path":"open.md","Order":7}],"Id":"d97a3c99-a2f9-47ce-9890-88963c63ea5a","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Getting started","Languages":[{"Code":"en","Title":"Getting started","Slug":"getting-started","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6af30d54-b5c6-492b-8a69-269f8797561c","Path":"knife-draft.md","Order":4},{"Id":"8de084b0-0404-498d-88a3-d88cbd4f65d9","Path":"pencil-draft.md","Order":3},{"Id":"6c85814f-160e-43ab-b78e-4e4042cbca1f","Path":"meter-draft.md","Order":2},{"Id":"7516a608-5185-4d6f-a9b7-ad7920cd3fe5","Path":"editor-draft.md","Order":1},{"Id":"19fe2574-e33a-4000-a5a4-b3e299f3a7ba","Path":"transform.md","Order":5},{"Id":"e0c2f157-8094-4dfa-9e5f-50cb438a032f","Path":"mask-tools.md","Order":7},{"Id":"929d9579-5b09-45d9-8515-88cd72e452b8","Path":"mesh-1.md","Order":6}],"Id":"03364b4e-a370-4598-87ce-3d6d0b11fc6f","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Tools","Languages":[{"Code":"en","Title":"Tools","Slug":"tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3a8c7e18-1a56-4c12-b9df-ec409a580c7e","Path":"layers-1.md","Order":2},{"Id":"19ccf987-bb2b-4979-92a1-992c384e0945","Path":"properties-1.md","Order":3},{"Id":"e6e145fd-ec50-418b-a50d-314cca02be6c","Path":"history.md","Order":5},{"Id":"857d5d8b-b86a-435a-84cc-a4c3322ee60c","Path":"preview-1.md","Order":4},{"Id":"32eaccd8-0a31-4e24-91e2-c808983f7d89","Path":"keyboard-shortcuts-1.md","Order":7},{"Id":"76940e4d-6463-47d1-aeaa-31207474a429","Path":"workspace.md","Order":1},{"Id":"c3c5ecaa-659e-4ce7-a4df-5e0ab4af5a82","Path":"preferences-2.md","Order":6}],"Id":"96c65e9a-8c7b-41be-a3d3-968ff3bb302c","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"User interface","Languages":[{"Code":"en","Title":"User interface","Slug":"user-interface","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"ef14312b-5437-45b8-b7ae-ae330d1de2a9","Path":"fills-1.md","Order":2},{"Id":"e3e79c37-cc3c-4248-b9d2-985113562e43","Path":"customize-filling.md","Order":3},{"Id":"d104c434-d7ff-43c1-8317-60720af6c180","Path":"keys.md","Order":1}],"Id":"6ad56bf7-6f89-48c6-8d94-40f2b416bd1f","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"__Draft","Languages":[{"Code":"en","Title":"__Draft","Slug":"draft","ContentType":0,"SeoTitle":"Draft","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4fde2ff6-b9c5-48bd-bf33-4902500add59","Path":"view.md","Order":12},{"Id":"008cc96e-7d5e-4a4a-af76-a31d995fd295","Path":"emboss.md","Order":6},{"Id":"22e4034b-f006-4de3-b13f-e83f8f19157c","Path":"color-strokes.md","Order":1},{"Id":"7570e22f-b245-4c41-945d-1ad50068ea72","Path":"stroke-caps.md","Order":5},{"Id":"c89909b6-4611-40dd-ab6b-4cfcf7665e6e","Path":"stroke-thickness.md","Order":3},{"Id":"6a482743-a4de-4bda-b3c5-9d8b5d5f1aaa","Path":"dashed-line.md","Order":4},{"Id":"25901b1c-b803-4d9e-9786-89d47b024ab6","Path":"image-threshold.md","Order":2},{"Id":"da08c8ef-f849-44e4-ab82-0d1b52406ae1","Path":"align-and-arrange.md","Order":9},{"Id":"654a4823-1cce-4922-9280-a2defe77ac40","Path":"mesh-4.md","Order":10},{"Id":"70db60ae-5c52-4ba1-a49b-3c16ad68b165","Path":"overlap-control.md","Order":11},{"Id":"7e5f5e98-a21e-4a20-ab6a-f67f30e89db0","Path":"smooth-mask-1.md","Order":7},{"Id":"3161ab6f-3c0e-4aef-9d31-041094afbe73","Path":"transform-2.md","Order":8}],"Id":"f86c81fe-0b47-4ab8-bd7c-be261b1830ec","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Strokes","Languages":[{"Code":"en","Title":"Strokes","Slug":"common-properties","ContentType":0,"SeoTitle":"Common Properties","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0169c3d2-424b-44f3-9dfa-d20124ed4c4b","Path":"document-structure.md","Order":1},{"Id":"992cc19f-9e7d-4aad-9a94-767522ae14e5","Path":"document-properties.md","Order":2},{"Id":"db675911-863c-4107-97a7-bb5685b51179","Path":"view-modes.md","Order":3}],"Id":"96a7a605-4719-415e-b4d8-fadb557de24b","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Working with Documents","Languages":[{"Code":"en","Title":"Working with Documents","Slug":"working-with-documents","ContentType":0,"SeoTitle":"Working with Documents","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"674daba8-90bb-4e7c-bfa6-dadf6401be0a","Path":"transform-tool.md","Order":6},{"Id":"1c8d4af4-869b-467c-85ad-d6b8fae1492b","Path":"knife.md","Order":5},{"Id":"8bfd386c-6ecd-4e43-8c49-b51b442c8a43","Path":"freeform.md","Order":10},{"Id":"79259166-72ad-4de0-9dda-51d4c1c96159","Path":"editor.md","Order":2},{"Id":"e4de7bd3-7055-448c-89db-05594858de94","Path":"pencil.md","Order":4},{"Id":"757abdb7-3e62-40cb-8da4-1f15e630629d","Path":"ellipse.md","Order":9},{"Id":"b17ca525-c01d-41d8-9314-d250c14294d4","Path":"toolbar.md","Order":1},{"Id":"4aca33aa-d089-4b79-a67d-531b411e4c76","Path":"meter.md","Order":3},{"Id":"00279b48-8d77-4c28-ba8b-9b4d1784de24","Path":"brush.md","Order":7},{"Id":"5eb95bcd-b1f4-49ba-af9b-d911152a2010","Path":"rectangle.md","Order":8}],"Id":"42fd3a09-a3d6-4549-a79a-8038a90bdb42","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Tools","Languages":[{"Code":"en","Title":"Tools","Slug":"tools-3","ContentType":0,"SeoTitle":"Tools","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3cc24c83-6508-4b7e-bf15-c39d29fc158b","Path":"objects-group.md","Order":8},{"Id":"bf94836c-9283-40dc-9d98-d15b5d0617b8","Path":"layers-2.md","Order":2},{"Id":"eacdd97d-9517-4c3c-8e9a-1fcfea65ad83","Path":"objects-clone.md","Order":7},{"Id":"8dd63758-7ae8-4637-aef5-a4f680c505a4","Path":"mesh-3.md","Order":6},{"Id":"62fc1274-4250-4831-8f90-29dd612be27a","Path":"objects-layer.md","Order":4},{"Id":"84036311-cd0c-4912-a734-95b2e2e36d33","Path":"source-images.md","Order":3},{"Id":"45b51443-83b2-4dd1-a2e8-2f786d8eae1e","Path":"objects-mask.md","Order":5},{"Id":"232e2968-605b-41e9-958d-4f516e3b3808","Path":"selecting-objects.md","Order":1}],"Id":"e29231ce-34c5-45e9-9698-c63cde3262f9","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Objects, Layers and Groups","Languages":[{"Code":"en","Title":"Objects, Layers and Groups","Slug":"object-control","ContentType":0,"SeoTitle":"Object control","Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"ff1184dc-65eb-4c0f-93cb-f4d3fc83fb71","Path":"edit.md","Order":2},{"Id":"8f94392e-2b03-4b79-9c2f-dacc66c338ec","Path":"layer.md","Order":4},{"Id":"3bd9d83d-a94b-4b54-8807-1288a12f3c72","Path":"fill.md","Order":5},{"Id":"d17c9a58-f615-4391-9838-7ec2a51c4bb9","Path":"tools-2.md","Order":6},{"Id":"bc7bfd5e-6f39-4133-9529-f65f3992ab2e","Path":"help.md","Order":8},{"Id":"4188e43e-955a-48b0-bb31-c72a17483461","Path":"window.md","Order":7},{"Id":"b4e1c4de-04c0-4f5d-9fee-11a8ba8a31cf","Path":"file.md","Order":1},{"Id":"21f50257-ecb9-4c27-902c-ce17882344e2","Path":"menu-view.md","Order":3}],"Id":"823f0dc2-555e-4420-a4f3-4ded4648bef1","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Menu","Languages":[{"Code":"en","Title":"Menu","Slug":"menu","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"3358a138-6444-43f5-822f-0772b96a0846","Path":"zooming-1.md","Order":2},{"Id":"2c692a20-e313-4e2a-a022-4bf4fec03e1f","Path":"preview.md","Order":3},{"Id":"bcdf65fa-13f5-41a1-aa22-f918ed055238","Path":"preferences-1.md","Order":5},{"Id":"73931869-e0be-45ae-881f-34a30a717909","Path":"history-1.md","Order":4}],"Id":"e769949d-f1ce-4e63-8815-21032891d6dd","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"User Interface","Languages":[{"Code":"en","Title":"User Interface","Slug":"user-interface-2","ContentType":0,"SeoTitle":"User Interface","Description":null}]}],"Articles":[{"Id":"77e24fcb-f14e-4a03-8d35-81f4456d7fa6","Path":"app-installing-and-activation.md","Order":1}],"Id":"b44e3ec8-c803-46df-8a2c-f08541a1fd9e","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Getting Started","Languages":[{"Code":"en","Title":"Getting Started","Slug":"getting-started-2","ContentType":0,"SeoTitle":"Getting Started","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8bea4217-00a3-4db7-baaa-bec546c1e053","Path":"creating-new-document.md","Order":1},{"Id":"a4b744a3-0ead-4aaf-952a-d5760cddf8db","Path":"export.md","Order":7},{"Id":"4d87d2c3-8b39-49fb-aa92-f912bcb58694","Path":"clipboard-operations.md","Order":6},{"Id":"eb6a89ab-5a9d-42c4-823e-7857df6433ec","Path":"opening-an-existing-document.md","Order":2},{"Id":"4c9989dd-d92e-4fc0-9a66-a2ea69cd9d8f","Path":"saving-your-work.md","Order":3},{"Id":"038ef1f8-3eff-46e7-acb1-ca01aa1f301b","Path":"accessing-recent-files.md","Order":4},{"Id":"380dbdc9-2c47-49cb-8148-945158f89a24","Path":"import-1.md","Order":5}],"Id":"aa9ed1ad-11f6-46dd-b012-9ec46c509106","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"File Management","Languages":[{"Code":"en","Title":"File Management","Slug":"document-management","ContentType":0,"SeoTitle":"Document Management","Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"a3dd7bfc-f68e-462e-ac1b-b3739d50c513","Path":"libzip-1.md","Order":7},{"Id":"c8c4bf81-58ce-4244-aff7-ebf97c43f601","Path":"libjpeg.md","Order":5},{"Id":"1c18b527-3eca-4b5c-80e8-094675a0ead9","Path":"openssl-1.md","Order":9},{"Id":"670d945b-7d10-4ada-ac29-cca12620dd88","Path":"standard-license-texts-1.md","Order":15},{"Id":"d5a2b888-9e4e-4bbc-98dc-308ad6ee4f0a","Path":"cmark-gfm-1.md","Order":1},{"Id":"a62b3fa4-439f-4496-8639-e87cd87d5c2b","Path":"expat-1.md","Order":2},{"Id":"2c2eb225-4755-4707-a5d7-826f5a3293cb","Path":"qtnproperty-1.md","Order":12},{"Id":"35a2fc55-09d1-4dcc-b734-8bca046d7aa8","Path":"sparkle-1.md","Order":13},{"Id":"e21c55b2-5a0c-4985-b339-67ca680d0bf9","Path":"opencv.md","Order":14},{"Id":"2ee49480-785b-4f3c-bb29-2cd79c035f71","Path":"freetype-ttfautohint-1.md","Order":3},{"Id":"cdb1e259-ebef-4898-8685-357f078c012f","Path":"qt-1.md","Order":11},{"Id":"eae48aba-a83c-4dee-b7ca-53fb35a193e3","Path":"harfbuzz-1.md","Order":4},{"Id":"d8cecce5-8158-4f43-bf8a-19cd08aa74b1","Path":"muparser-1.md","Order":8},{"Id":"a4fb583b-05ac-4217-b9fe-e053b710d347","Path":"libpng-1.md","Order":6},{"Id":"9b75ab94-a005-4f15-8f31-ed5f73d65798","Path":"podofo-1.md","Order":10}],"Id":"65d9c488-f772-4181-9003-d8416bec46b6","Path":"fontlab-third-party-licenses-1.md","Order":3,"CategoryType":1,"Icon":null,"Title":"FontLab Third-Party Licenses","Languages":[{"Code":"en","Title":"FontLab Third-Party Licenses","Slug":"fontlab-third-party-licenses-1","ContentType":0,"SeoTitle":"FontLab Third-Party Licenses","Description":null}]}],"Articles":[{"Id":"074b62fb-4878-43ff-b922-b69405b89c87","Path":"vexy-lines-software-end-user-license-agreement-eula.md","Order":5},{"Id":"04ea70f1-f76d-4a06-800c-66f9a2f00ff0","Path":"fontlab-user-guide-license-agreement.md","Order":2}],"Id":"311b572f-dfa7-4a92-a4da-b90f4a720b2a","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Licenses","Languages":[{"Code":"en","Title":"Licenses","Slug":"licenses-1","ContentType":0,"SeoTitle":"Licenses","Description":null}]}],"Articles":[],"Id":"f5f607b5-c9f9-4c53-9930-ac25029c04bd","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Vexy Lines 1","Languages":[{"Code":"en","Title":"Vexy Lines 1","Slug":"vexy-lines-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b4298bd0-0e2e-4763-90de-39741253ef61","Path":"custom-keyboard-shortcuts-with-alt-and-shiftalt.md","Order":1},{"Id":"8e2c6ea1-e3f4-412c-b2ba-e1b0bede4feb","Path":"enter-key-in-commands-shortcuts.md","Order":2}],"Id":"9410ed2b-baae-43d2-a93a-1607355335bd","Path":"commands-shortcuts-dialog.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Commands & Shortcuts dialog","Languages":[{"Code":"en","Title":"Commands & Shortcuts dialog","Slug":"commands-shortcuts-dialog","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"df8421ec-7f36-4f9a-b701-93fbdcc5a4c8","Path":"using-previous-versions.md","Order":9},{"Id":"f571ca1a-7359-4b49-83ed-9a1d33bb98ed","Path":"validation.md","Order":4},{"Id":"eab008e5-9fe6-4d66-bacf-959a497046c6","Path":"academic-licenses.md","Order":5},{"Id":"ed0c92a1-132d-470f-96b9-e3a272a7e55b","Path":"trial-period.md","Order":2},{"Id":"3e9ced5a-c49a-4320-9ca7-e4cc8a2c06fa","Path":"updates.md","Order":8},{"Id":"c1669ed4-f506-48d9-b3a6-f60dc809c0a1","Path":"silent-installation-on-windows.md","Order":10},{"Id":"c421ed0a-bc99-4825-9869-2c9ec5c7ffad","Path":"system-requirements-1.md","Order":1},{"Id":"ebf2d1c0-3211-4acd-a568-3e8b1d0fcef5","Path":"first-run-on-macos.md","Order":7},{"Id":"ec7c40f0-adf6-4183-9193-50a9d3c7e819","Path":"installing.md","Order":6},{"Id":"7ee132be-3272-4963-a5f6-da9ae026b87f","Path":"demo-mode.md","Order":3}],"Id":"f1bae13e-5402-46d0-8931-0aefc2c31ad5","Path":"setting-up.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Setting Up","Languages":[{"Code":"en","Title":"Setting Up","Slug":"setting-up","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"de467429-f625-4635-80d5-402ca6a08bdf","Path":"how-to-reopen-a-report.md","Order":4},{"Id":"9b9110b8-0e65-4303-9a24-b2fefc983bf9","Path":"user-requests.md","Order":5},{"Id":"b8402ed4-9dcb-4d78-8ee1-3d3853517526","Path":"when-should-i-report.md","Order":3},{"Id":"97b9c1e7-9190-45c8-878b-18276d3b75aa","Path":"attaching-files.md","Order":2},{"Id":"f7ae8938-9e27-4074-bbe8-8b5fba905872","Path":"submitting-a-report.md","Order":1}],"Id":"97413029-d5fe-4b27-b169-f052df7f06a9","Path":"support.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Support","Languages":[{"Code":"en","Title":"Support","Slug":"support","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"c84829b2-0750-420d-a97a-cd571388e116","Path":"what-is-fontlab.md","Order":1},{"Id":"49f6fbe2-2e8e-4f2e-8ea4-1c50341408ec","Path":"why-fontlab.md","Order":2},{"Id":"6ed3657f-68bb-4a65-8368-cbe1f099b8e1","Path":"quick-help-and-help-panel.md","Order":5}],"Id":"cd9df8e0-4f3c-416f-a6f6-a6f8798a5ab8","Path":"getting-started-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Getting started","Languages":[{"Code":"en","Title":"Getting started","Slug":"getting-started-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"87ef72a1-1f02-421d-a2f4-c49526e20ae8","Path":"change-stroke-in-multiple-elements.md","Order":7},{"Id":"a0d4765f-86bb-4158-a8d1-946fc640303e","Path":"stroke-join-properties.md","Order":3},{"Id":"f89c14d1-060e-44f5-ba25-9d585391c580","Path":"stroke-cap-properties.md","Order":2},{"Id":"876d2a7b-e0f9-4d1a-a229-d91ebb790e06","Path":"stroke-location.md","Order":4},{"Id":"db8d3cad-9859-4fd9-afb0-b614cd004e92","Path":"stroke-thickness-and-color.md","Order":1},{"Id":"f57b8d27-d86d-4d71-9784-76f6c4e8fa99","Path":"additional-stroke-properties.md","Order":5},{"Id":"50dd8cf9-c396-40af-9734-ffa8b9094ec3","Path":"stroke-operations.md","Order":6}],"Id":"8f1439a2-2337-4dfc-976a-967779f44d8c","Path":"stroke-panel.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Stroke panel","Languages":[{"Code":"en","Title":"Stroke panel","Slug":"stroke-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"6a62ae91-3571-4e94-a47b-c90e4366e1e7","Path":"stroke-vs-brush.md","Order":1},{"Id":"d40ef401-0b70-445f-8c2c-0c03d115ba53","Path":"local-stroke-properties-for-the-node-in-the-node-panel.md","Order":5},{"Id":"c8b6c5e5-b75b-4453-b717-2ff2b205803c","Path":"simple-stroke-vs-power-stroke.md","Order":2},{"Id":"1c2a7365-f19f-49c0-bdc9-acbdbcc34682","Path":"merge-stroke-into-the-body-contour.md","Order":3}],"Id":"d25d80b6-879d-4b08-8f3f-b3a0070ff774","Path":"stroke.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Stroke","Languages":[{"Code":"en","Title":"Stroke","Slug":"stroke","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5018f4e3-66f2-4eb1-873d-b83125257d35","Path":"import-sketchboard.md","Order":3},{"Id":"a208c245-f491-4119-bc39-d92fb0970333","Path":"export-sketchboard.md","Order":4},{"Id":"c4431829-954d-434e-959c-74fd12c9dcf5","Path":"introduction-2.md","Order":1},{"Id":"4e657a7a-0527-4aaa-b535-685e32f568d1","Path":"open-sketchboard.md","Order":2}],"Id":"bd578a2b-c016-4993-8569-cf41d51dd9a7","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Sketchboard","Languages":[{"Code":"en","Title":"Sketchboard","Slug":"sketchboard","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"8dc1cdc3-55a4-493f-b7c1-b5fe1eeddc18","Path":"brush-stroke-modulation-with-the-brush-panel.md","Order":1}],"Id":"c0848a4e-6514-4c57-9fd6-6bc5835080d8","Path":"brush-panel.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Brush panel","Languages":[{"Code":"en","Title":"Brush panel","Slug":"brush-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7b9570f9-d933-4fea-9ff0-deb0bf92242b","Path":"soft-brush.md","Order":1}],"Id":"c0ab2afb-dc2f-4395-a737-e51c2ad73685","Path":"brush-tool.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Brush tool","Languages":[{"Code":"en","Title":"Brush tool","Slug":"brush-tool","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"cd446f12-2140-4476-812d-1e1cb18cf022","Path":"brush-stroke-modulation-with-the-thickness-tool.md","Order":3}],"Id":"3443f317-90ca-4ab1-ac1c-a88875b8f7ad","Path":"brush-power-brush.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Brush & Power Brush","Languages":[{"Code":"en","Title":"Brush & Power Brush","Slug":"brush-power-brush","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9ef323ce-0d95-435f-bf7f-f4225a6951e1","Path":"default-drawing-with-pen.md","Order":1},{"Id":"bc7e50e1-4489-4c2c-8623-89c9f0537a0a","Path":"simplified-drawing-with-pen.md","Order":3},{"Id":"319b713f-3eca-4add-ac21-a18c34ebcda5","Path":"editing-existing-contours.md","Order":2},{"Id":"173c765c-8566-45b2-a146-e7065b228c2e","Path":"editing-handles-of-existing-segments.md","Order":4},{"Id":"021fab72-bc24-4014-96cd-637ad60fbefd","Path":"preview-next-segment.md","Order":5}],"Id":"8d7d0d6c-9080-4c8f-b7a5-ffe09247ea06","Path":"pen-tool.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Pen tool","Languages":[{"Code":"en","Title":"Pen tool","Slug":"pen-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fa89279b-2b04-4e02-98cd-3ceaea6aa6c9","Path":"smart-pencil.md","Order":2},{"Id":"11e86b2c-bb52-45ec-b2d5-b4ea86bcbe55","Path":"simple-pencil.md","Order":3},{"Id":"ba363bdb-5d07-4d50-b1da-f497b4dcda29","Path":"soft-pencil.md","Order":1}],"Id":"06f22806-824a-4936-bb02-70f7ddbcf001","Path":"pencil-tool.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Pencil tool","Languages":[{"Code":"en","Title":"Pencil tool","Slug":"pencil-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ae281bdb-7535-413c-b6e3-af4b8cc7b02b","Path":"adjusting-nodes-and-tension-points-with-rapid-tool.md","Order":6},{"Id":"ae84ae3c-752d-44ef-a46f-c415fd8b61b4","Path":"adding-rapid-tension-points.md","Order":5},{"Id":"69bf9407-8ccf-4e1a-aec2-18d6a7bcd6f0","Path":"drawing-tangent-nodes.md","Order":2},{"Id":"3a0eeebd-2f4f-49f5-9cb7-6247b4cdf7cc","Path":"drawing-sharp-and-smooth-nodes.md","Order":1},{"Id":"1cc9466f-c818-4331-8383-3541c8180abd","Path":"closing-rapid-contours.md","Order":3},{"Id":"9c2bdd39-a295-4675-8d0a-6360d23b9b68","Path":"curve-segments-1.md","Order":4}],"Id":"0debd1b0-b0ad-43ed-a4c8-31394aea43c7","Path":"rapid-tool.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Rapid tool","Languages":[{"Code":"en","Title":"Rapid tool","Slug":"rapid-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"11c7ff8b-9d15-48ba-bc6f-d04f4b0fef3a","Path":"distance-suggestions.md","Order":2},{"Id":"d6bfed48-a61e-45bc-8263-3c04d7572043","Path":"adjusting-brush-and-stroke-thickness.md","Order":3},{"Id":"3f1b7764-4ca6-4b6b-9046-66eb8290bd40","Path":"stroke-thickness-and-stem-suggestions.md","Order":1}],"Id":"57fc1586-f465-44ae-8b5e-42cdce2fca8b","Path":"thickness-tool.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Thickness tool","Languages":[{"Code":"en","Title":"Thickness tool","Slug":"thickness-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"a5b8b2ec-02eb-4ba8-9353-04df7f5464e1","Path":"substitution.md","Order":3},{"Id":"55c21939-36f9-41b0-9dbc-82ae160fef9a","Path":"feature.md","Order":1},{"Id":"e58d943f-0a5d-45dc-aa8f-c7564b2844a9","Path":"positioning.md","Order":4},{"Id":"471dc513-f54e-4ab8-b808-1f737044acfa","Path":"lookup.md","Order":2}],"Id":"3b5e4890-cdd8-4168-8e72-10f9a7fa0b12","Path":"opentype.md","Order":11,"CategoryType":1,"Icon":null,"Title":"OpenType","Languages":[{"Code":"en","Title":"OpenType","Slug":"opentype","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"eb064dcf-7ba9-4857-8216-ba3fae96b1fb","Path":"sidebearings-1.md","Order":3},{"Id":"d4de82a8-589f-4776-9500-9c2d8044e64d","Path":"kerning-5.md","Order":4},{"Id":"b6564a0d-14b7-4817-8859-d7cccfc22c1e","Path":"advance-width.md","Order":2},{"Id":"7dc01ac3-d3bb-4b33-ab42-1303e8762f2d","Path":"the-em-square.md","Order":1}],"Id":"03e3b497-800a-4cb7-8af9-4797c640cada","Path":"glyph-metrics.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Glyph metrics","Languages":[{"Code":"en","Title":"Glyph metrics","Slug":"glyph-metrics","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"802a1ef2-0904-46f5-838a-3cee0ea218a2","Path":"layers-and-masters-1.md","Order":10},{"Id":"8bedf6b9-726e-4d08-a185-3b31823f2441","Path":"character-vs-glyph.md","Order":4},{"Id":"4e2dfcab-f5d1-4112-8c6e-f6399d53a362","Path":"metrics-and-dimensions.md","Order":8},{"Id":"fbaac300-237f-4387-9de4-3dedfc7fe59f","Path":"font-family.md","Order":2},{"Id":"16c83759-926a-4794-81ca-39368a0c939a","Path":"component.md","Order":6},{"Id":"10434e7d-415b-4d05-9430-2a3781fdee38","Path":"element.md","Order":7},{"Id":"89502de4-772f-4990-951b-4968801e8999","Path":"contour-node-point-and-handle.md","Order":5},{"Id":"0f8bba69-1637-40fc-9216-d087ac40f81b","Path":"script.md","Order":3},{"Id":"6625096b-7826-4185-8b47-86a73ea5be9c","Path":"font-1.md","Order":1}],"Id":"69a4ed62-6883-4892-92c9-871ce6cc502c","Path":"basic-concepts.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Basic concepts","Languages":[{"Code":"en","Title":"Basic concepts","Slug":"basic-concepts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"7e93bb18-1126-4d6f-9862-af1894987504","Path":"collapsed-panels.md","Order":2},{"Id":"71679d9a-504e-4037-bc62-2dbdf8ed85a3","Path":"opening-closing-and-activating-panels.md","Order":5},{"Id":"4218633a-52ef-427c-a682-e8d8d9795c30","Path":"open-the-right-panel-depending-on-current-tool-selection-or-highlight.md","Order":4},{"Id":"93fca503-b1ab-4c3b-bb81-a27ce6080ebc","Path":"panels-list-1.md","Order":3},{"Id":"8de4fc81-ddd9-4487-b85c-47ccd3048802","Path":"font-size-in-code-editors.md","Order":1},{"Id":"8a5079ee-c6e1-42a2-b5e9-d2f2612fc441","Path":"scrolling-panels.md","Order":6}],"Id":"2f239dec-7b42-4c60-b09b-bd5371fb98cf","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Panels","Languages":[{"Code":"en","Title":"Panels","Slug":"panels","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4c1bcccf-c5a3-4b63-848d-f8a389699f2e","Path":"grid-and-guides-1.md","Order":1}],"Id":"eb03c541-9c79-4d89-88b8-3fd6eaa75323","Path":"preferences.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Preferences","Languages":[{"Code":"en","Title":"Preferences","Slug":"preferences","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"5d9e2fe6-df18-4630-83e8-6563cc6162a4","Path":"dark-or-light-theme.md","Order":4},{"Id":"5eff8975-4215-4e40-b8c3-8e59e9bd1989","Path":"text-and-numeric-fields.md","Order":2},{"Id":"bfacc4a0-d927-446a-a023-d43f8fa39ef4","Path":"windows-and-tabs.md","Order":5}],"Id":"3b841594-30f3-4a01-94ca-793f56d895ee","Path":"user-interface-1.md","Order":3,"CategoryType":1,"Icon":null,"Title":"User Interface","Languages":[{"Code":"en","Title":"User Interface","Slug":"user-interface-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"ffd1cb45-4a6a-45e5-a257-10b3359ba09c","Path":"add-nodes.md","Order":1},{"Id":"63c82ff0-76ed-43fc-b99d-785420db94c8","Path":"break-contour.md","Order":2},{"Id":"a36cf131-c0f6-404d-94d4-e34b920b9a4b","Path":"slice-contour.md","Order":3}],"Id":"06d494fa-a076-409b-9aa7-7f92609a3e83","Path":"knife-tool.md","Order":8,"CategoryType":1,"Icon":null,"Title":"Knife tool","Languages":[{"Code":"en","Title":"Knife tool","Slug":"knife-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"777fd22b-0be0-4867-b16e-b2a21ff2c272","Path":"loop.md","Order":2},{"Id":"d877c68c-dac9-4031-88dc-7593939ec04d","Path":"ink-trap.md","Order":3},{"Id":"7d143f64-4826-4e4b-ad7d-514ff5839720","Path":"disconnect.md","Order":1}],"Id":"4e66850c-54f6-487f-b325-9687cdaa533b","Path":"scissors-tool.md","Order":10,"CategoryType":1,"Icon":null,"Title":"Scissors tool","Languages":[{"Code":"en","Title":"Scissors tool","Slug":"scissors-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3bb3134b-dcc4-48b4-b9ba-a7d9ac2b9d0d","Path":"switching-masters-now-keeps-the-contour-selection.md","Order":4},{"Id":"3f35e911-3855-4f27-a4ee-9af33c2473c3","Path":"store-contour-selections-in-selections-panel.md","Order":6},{"Id":"7229cc7b-91e1-4149-afb6-ab229e3131bc","Path":"add-node-to-selection-on-shiftdrag-preference.md","Order":1},{"Id":"a23b7c35-6bc2-4b30-b39f-8f3a565844aa","Path":"slanted-marquee-selection.md","Order":5},{"Id":"2cb6fa3b-0d2a-4f66-b4d4-14e8e2edd444","Path":"select-all-for-components-and-elements.md","Order":3},{"Id":"77a98d3e-14e3-44d2-acdf-f3212095cc9d","Path":"selecting-contours-with-cmd.md","Order":2}],"Id":"fdc6933f-d87a-4c7b-bb3d-f40e90ac0a39","Path":"selecting-contours.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Selecting contours","Languages":[{"Code":"en","Title":"Selecting contours","Slug":"selecting-contours","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9de0d2f1-8f0a-4ea3-afc5-6481915fb30c","Path":"numerical-adjustment-of-curve-tension-in-the-node-panel.md","Order":1},{"Id":"7703052b-4afb-4854-9f14-b46999f288e2","Path":"conversion-of-line-to-curve-segments.md","Order":2}],"Id":"681212a3-bc9d-4cc2-b3ca-0b9d73f46324","Path":"curve-segments.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Curve segments","Languages":[{"Code":"en","Title":"Curve segments","Slug":"curve-segments","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bd0b91aa-d8d6-4a43-9c11-c11d3ffecd72","Path":"quickly-reverse-contour-direction-with-fill-tool.md","Order":1},{"Id":"e8c6d77b-a28a-43b5-8470-00abd9e233d1","Path":"reordering-contours.md","Order":2},{"Id":"430eccfb-b1f1-4d97-b140-90a37cd2e2a8","Path":"paste-to-replace-selection.md","Order":5},{"Id":"4aedd7da-2633-4836-b5c5-bb4849cc9c93","Path":"nodes-at-extremes.md","Order":4},{"Id":"043d64f9-f513-4c16-aca5-e73752d6389c","Path":"contour-start-and-end-nodes-show-contour-direction.md","Order":3}],"Id":"3123f837-6997-4a00-90ad-c5f31658ab15","Path":"contours.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Contours","Languages":[{"Code":"en","Title":"Contours","Slug":"contours","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dfe98c1b-a7fc-4db2-aee4-7f899196ed64","Path":"nudge-proportionally-move-handles-as-you-drag-nodes.md","Order":3},{"Id":"b2747994-ccfe-492d-8763-c10d6d065065","Path":"toolbox-toggles.md","Order":1},{"Id":"7b0a42be-63ef-4d1f-9e96-873d859fc86e","Path":"harmonized-drag-adjust-segments-as-you-slide-a-smooth-node-pull-handles-as-you-move-a-sharp-node.md","Order":4},{"Id":"022cba14-fb40-4b6e-a1bd-dcc192988624","Path":"power-nudge-adjust-contours-smartly.md","Order":2},{"Id":"17f6a0e4-c5f4-47f0-8a9b-d53a1b338007","Path":"slide-move-or-extend-node-along-the-segment-while-preserving-shape.md","Order":5},{"Id":"cda5f350-bd20-453d-86af-24d6cb894525","Path":"contour-lever-drag-precisely.md","Order":6},{"Id":"1d2dde37-34b8-4f2e-9cd5-8c0fb5dc400a","Path":"fractional-coordinates.md","Order":7}],"Id":"3f9cc5b6-3a93-4d58-a7a4-c6b3a6f975ed","Path":"contour-tool.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Contour tool","Languages":[{"Code":"en","Title":"Contour tool","Slug":"contour-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"be4ad06c-f270-43f9-87e1-33a2495d1ac9","Path":"remove-points.md","Order":1},{"Id":"3dcb1e4b-6476-47ac-a27b-c98888ddb15b","Path":"lasso-eraser.md","Order":2},{"Id":"ee13df77-3ce3-45e3-9b1d-b5ab0c17a3c5","Path":"simplify-path.md","Order":3}],"Id":"6aa2c25b-7693-4542-9a1e-fcb93e1069b8","Path":"eraser-tool.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Eraser tool","Languages":[{"Code":"en","Title":"Eraser tool","Slug":"eraser-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e9acceea-8c91-4602-8cd1-91505631f392","Path":"select-all-tunni-lines.md","Order":1}],"Id":"462c14d6-781e-47ad-92ad-fd47445f00fe","Path":"tunni-lines.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Tunni Lines","Languages":[{"Code":"en","Title":"Tunni Lines","Slug":"tunni-lines","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0245e0f6-84f9-44e8-a795-8b072c2016af","Path":"undo-selection.md","Order":1}],"Id":"5475e895-074e-42c5-b42c-3eeacab5d98a","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Selecting Nodes","Languages":[{"Code":"en","Title":"Selecting Nodes","Slug":"selecting-nodes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"410e7ca1-c39b-45a5-96b4-09be9c00a750","Path":"hidden-node-names.md","Order":1},{"Id":"c6cd8e13-0d9a-48bb-a42b-3a18c501bfc3","Path":"usage-of-node-names.md","Order":2}],"Id":"4be59a67-1e0b-4095-8438-729f9958e7d4","Path":"node-names.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Node names","Languages":[{"Code":"en","Title":"Node names","Slug":"node-names","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"0ec05e12-6c48-435f-b208-cde00ca53d9f","Path":"collapse-points.md","Order":3},{"Id":"e8eae2d6-6917-4512-b2c8-f56acba94b08","Path":"spike-nodes.md","Order":1},{"Id":"1424b237-6f50-4354-81ea-87b22487c1d1","Path":"align-points.md","Order":2},{"Id":"537214d7-05c5-4e87-84ac-8f8d08022e1a","Path":"customize-the-distance-from-your-pointer-at-which-fontlab-shows-nodes-and-handles-if-they-are-hidden.md","Order":4},{"Id":"54d915d8-666c-4780-884c-311d558f21bf","Path":"lock-the-outline-to-disable-manual-editing-of-points-and-contours.md","Order":5}],"Id":"91ee480c-a8dd-4252-b4fa-dd9221a97b42","Path":"nodes-and-handles.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Nodes and handles","Languages":[{"Code":"en","Title":"Nodes and handles","Slug":"nodes-and-handles","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"52208d66-84f1-4f2e-91c3-ae13bf667ea2","Path":"vertical-slant.md","Order":1},{"Id":"5551ae99-8ce7-4ac3-b34b-99e68e64a708","Path":"increased-precision.md","Order":2}],"Id":"d19f94b1-eddb-4fe1-9068-0be857233c30","Path":"transform-panel.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Transform panel","Languages":[{"Code":"en","Title":"Transform panel","Slug":"transform-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"cb171461-6634-41e5-b82a-e00b50112362","Path":"transform-a-single-node.md","Order":2},{"Id":"3593cf81-cbea-4104-badd-6a5d93682fae","Path":"introduction-3.md","Order":3}],"Id":"1c1ff047-d4af-4f30-8d21-609ff4a12162","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Transformation","Languages":[{"Code":"en","Title":"Transformation","Slug":"transformation","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"fe814538-9cde-4401-80dc-177fe8478876","Path":"unified-controls-for-window-bars.md","Order":1}],"Id":"d4700a44-bd99-4d8d-a574-f677ebbde5b1","Path":"property-bar.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Property bar","Languages":[{"Code":"en","Title":"Property bar","Slug":"property-bar","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"42746bd2-1aac-4701-a1d9-a11b3f4a9caa","Path":"preferences-3.md","Order":2},{"Id":"3904747b-0973-4fa1-ba49-8002a0dcbd7e","Path":"sidebar.md","Order":5},{"Id":"c5f39263-24ca-4575-b829-9c1d008b75d8","Path":"tab-preview.md","Order":3},{"Id":"7e315598-d9de-498b-bfba-a42e738af0a0","Path":"toolbox.md","Order":1}],"Id":"74b5e154-045c-42b5-95d7-2b09417a0fe1","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Glyph Window","Languages":[{"Code":"en","Title":"Glyph Window","Slug":"glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"26ebc20c-564f-4b8e-8c25-c06e24735be1","Path":"window-zoom-preferences.md","Order":2},{"Id":"f8a5d1c4-9043-45d8-9b2a-77b91d15e7f1","Path":"zoom-tool-1.md","Order":1}],"Id":"969ee72a-a80f-4892-992e-5d6fefc63af0","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Zoom","Languages":[{"Code":"en","Title":"Zoom","Slug":"zoom","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"891248db-6b80-4446-a1ef-52309cd0c52a","Path":"default-smart-corner-tension.md","Order":1},{"Id":"e89c4354-8c3c-459c-8884-670d732c1c5b","Path":"smart-corners-always-produce-two-nodes.md","Order":2},{"Id":"36518813-fd79-482a-af90-56480eaaa4bb","Path":"apply-smart-corner-in-node-panel.md","Order":3}],"Id":"65577cbb-e8b6-4ab6-a993-3379ab2b5614","Path":null,"Order":22,"CategoryType":0,"Icon":null,"Title":"Smart corner","Languages":[{"Code":"en","Title":"Smart corner","Slug":"smart-corner","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"832a723f-3172-44fb-ac52-bfdf654f8938","Path":"pernode-settings-for-smart-ink-traps-and-smart-corners.md","Order":18},{"Id":"3455fc7e-3f72-4885-a22a-d4491b40a863","Path":"corner-and-smooth-nodes.md","Order":17},{"Id":"486075c5-13a2-4d71-b99d-a79448b72b75","Path":"contour-menu.md","Order":21},{"Id":"817f8001-6655-4781-8e93-8c6463afa100","Path":"knife-tool-2.md","Order":9},{"Id":"bb5288e7-2625-4362-ad4f-90669a646212","Path":"replace-with-corner.md","Order":23},{"Id":"37bf0be4-d06a-4e7e-a8c1-663878de6d71","Path":"view-panel-2.md","Order":16},{"Id":"39ea0a58-7eda-4f42-9ee5-fc811167fce2","Path":"joining-open-contours-with-keyboard.md","Order":19},{"Id":"197042f5-129a-45d9-8da4-04d661f92a03","Path":"number-of-nodes-and-points-in-a-contour.md","Order":20},{"Id":"d36e8ca8-7084-4576-9482-6ecd8c125436","Path":"view-menu.md","Order":15}],"Id":"ac63c681-0285-40eb-a81b-83df5304827e","Path":"edit-refine.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Edit & Refine","Languages":[{"Code":"en","Title":"Edit & Refine","Slug":"edit-refine","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"f6fdbe2a-54de-462e-9817-c777d5254a46","Path":"searching-actions.md","Order":1},{"Id":"c16af177-74ba-421a-9096-2be2449e0a04","Path":"action-sets.md","Order":2},{"Id":"414bbb51-4338-47fd-b18a-ea147dc7f3ac","Path":"action-status-bar.md","Order":3},{"Id":"49db3819-b033-4cc3-985a-fc43fac9db49","Path":"running-actions.md","Order":5},{"Id":"272882c5-7dfe-4929-b01b-16c6c44cc1be","Path":"actions-preview.md","Order":4}],"Id":"64618291-6d2a-47fc-b061-03bcfb50d02f","Path":"actions-dialog.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Actions dialog","Languages":[{"Code":"en","Title":"Actions dialog","Slug":"actions-dialog","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"e113d2ed-966a-4ab7-930c-f884cc2f040c","Path":"scribble-strokes-effect-action.md","Order":4},{"Id":"8e45366a-0c02-4efe-a2b9-2e62a8a2fdde","Path":"warp-effect-action.md","Order":5},{"Id":"921533da-de0f-4a47-b87f-c22756f4fee8","Path":"3d-extrude-action.md","Order":8},{"Id":"b1fc7d30-b666-4d05-acf5-adbaa21ad5e2","Path":"engrave-action.md","Order":9},{"Id":"3c95d3af-6092-4792-84c0-ca5cef37a3a6","Path":"shadow-action.md","Order":7},{"Id":"4193cb37-5631-4819-8eca-39b3b544d2c5","Path":"multiplemaster-actions.md","Order":2},{"Id":"a3eec449-930a-4179-83ff-1f0109d9b5b5","Path":"adjust-stems-action.md","Order":3},{"Id":"4c5c12a6-e17e-4238-9843-0d0d23512933","Path":"outline-action.md","Order":6}],"Id":"92dde174-aaf9-4037-ae44-10f8fa2da29a","Path":"actions.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Actions","Languages":[{"Code":"en","Title":"Actions","Slug":"actions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ff73c65b-2bd1-4cdd-b480-47032420312a","Path":"see-cousins-in-quick-preview-when-you-hold-space.md","Order":1}],"Id":"3a27e8e6-0b68-4646-97f8-03756c65032e","Path":"cousins.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Cousins","Languages":[{"Code":"en","Title":"Cousins","Slug":"cousins","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"407c81c8-1ce4-4682-bd59-5ec7cbc9a240","Path":"short-segment.md","Order":2},{"Id":"f47a24a8-9336-46a3-9049-cc3b4400eee4","Path":"fontaudit-action.md","Order":1}],"Id":"a115d1a4-244c-4521-ad52-fee37c6537e2","Path":"fontaudit.md","Order":3,"CategoryType":1,"Icon":null,"Title":"FontAudit","Languages":[{"Code":"en","Title":"FontAudit","Slug":"fontaudit","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"00646b1c-4d22-4733-8998-ccb0e94dbe13","Path":"quickly-customize-the-preview-panel.md","Order":1},{"Id":"ba1177f6-ad6e-43b9-9b14-9a49b474cd09","Path":"optical-size-opsz-axis-in-waterfall-modes-of-the-preview-panel.md","Order":4},{"Id":"9774991a-c6d2-4ace-a45b-961012d5ee9d","Path":"all-or-visible-masters-mode-of-the-preview-panel.md","Order":2},{"Id":"e5ae6f1f-619b-4866-b261-cf5dc3d9e284","Path":"preview-panel-colors-and-lightdark-preview.md","Order":5},{"Id":"35303a05-7a7f-4447-be69-372ddc2ccb3e","Path":"echo-text-in-text-waterfall-mode-of-the-preview-panel.md","Order":3}],"Id":"ce871a3e-46b6-4a6f-b7af-7c1e99ca9925","Path":"preview-panel.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Preview panel","Languages":[{"Code":"en","Title":"Preview panel","Slug":"preview-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"56e97964-b76c-4172-9d6d-28705e0c03d9","Path":"using-delta-filter-for-local-adjustments.md","Order":8},{"Id":"fece0a1a-2d0b-4a90-8dc0-5069db27d261","Path":"adding-a-delta-filter.md","Order":1},{"Id":"5cd71105-fb08-4651-9908-4c928decba10","Path":"attachment-delta.md","Order":4},{"Id":"e57b46fb-342a-4129-a017-34b32d47bd49","Path":"bidirectional-move-delta.md","Order":2},{"Id":"7bf780b8-a86a-416a-bc44-ceeba4312fd9","Path":"using-delta-filter-for-variations.md","Order":9},{"Id":"215ca3ea-33a0-43b7-85e1-a510108120d3","Path":"using-delta-filter-for-derived-glyphs.md","Order":10},{"Id":"09e7e6da-85ec-4629-8723-a476c947f667","Path":"converting-to-simple-contours.md","Order":7},{"Id":"09fd952c-e09f-480d-8ed4-6624206a44e3","Path":"editing-deltas.md","Order":5},{"Id":"47e7cfb6-0acf-48ea-91cf-07d6bac77184","Path":"unidirectional-horizontal-or-vertical-move-delta.md","Order":3},{"Id":"35247689-3304-4a1c-9b48-43b4bd450f30","Path":"adjusting-the-delta-strength.md","Order":6}],"Id":"578b9a1d-7b31-4bc4-865d-31e3120d1dbd","Path":"delta-filter.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Delta filter","Languages":[{"Code":"en","Title":"Delta filter","Slug":"delta-filter","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dd87c810-be0a-4524-abfa-c0d72a87bd88","Path":"printing-the-preview-panel-contents.md","Order":1}],"Id":"e6c69b30-8069-4318-83f7-883ec9bb9e07","Path":"printing.md","Order":8,"CategoryType":1,"Icon":null,"Title":"Printing","Languages":[{"Code":"en","Title":"Printing","Slug":"printing","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"a5e4c85e-d450-41f8-942c-0048737773d5","Path":"power-guides-1.md","Order":4}],"Id":"458d4147-4b78-4761-a28d-328c17422289","Path":"test-adjust.md","Order":10,"CategoryType":1,"Icon":null,"Title":"Test & adjust","Languages":[{"Code":"en","Title":"Test & adjust","Slug":"test-adjust","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"2a526056-9c29-49a9-bd32-5ba8adfd6c66","Path":"use-metrics-line-with-set-sidebearings-action.md","Order":1}],"Id":"88ade6f1-9ad0-46be-8404-69b21f495612","Path":"metrics-line.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Metrics Line","Languages":[{"Code":"en","Title":"Metrics Line","Slug":"metrics-line","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"dd205c3c-729d-47ba-9a0b-f3ded386d062","Path":"metrics-lever-precision-dragging-of-metrics.md","Order":2},{"Id":"62f81b05-724c-48aa-806f-7500c58c3d49","Path":"spacing-controls-visibility.md","Order":4},{"Id":"b149c3c9-7c32-40eb-a778-f81ee59e0f37","Path":"refined-dragging-of-sidebearings.md","Order":5},{"Id":"87a695fd-e529-406c-a35b-78f1fdb7f214","Path":"center-glyph-in-advance-width.md","Order":1},{"Id":"5fb312b4-b77b-4f01-adbb-837044c44b1b","Path":"rendering-of-spacing-controls.md","Order":3},{"Id":"355562d3-1bd4-49a0-9dab-654e11f82aa6","Path":"autospacing.md","Order":7},{"Id":"579e9961-62a7-4b98-a425-b09652529358","Path":"editing-of-optical-bounds.md","Order":8}],"Id":"11c9901e-6bd6-4269-8792-8f74a8e1ed9e","Path":"spacing.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Spacing","Languages":[{"Code":"en","Title":"Spacing","Slug":"spacing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"507258b3-2c69-4fde-97d4-c5b27d607020","Path":"visual-vs-logical-order-of-kerning-pairs.md","Order":2},{"Id":"a7459d59-fc51-4715-8460-d29f8a839895","Path":"bidirectionality-in-unicode.md","Order":1},{"Id":"ca0bc818-bec3-4739-8bb6-2da9a0a434e6","Path":"righttoleft-text-in-glyph-window.md","Order":3},{"Id":"27b49138-0cb7-415e-92ae-16cf1d8a64b3","Path":"righttoleft-kerning-support.md","Order":4}],"Id":"bf91a097-4a00-4740-be75-db8ebc85623f","Path":"right-to-left-and-bidirectional-kerning-in-opentype.md","Order":15,"CategoryType":1,"Icon":null,"Title":"Right-to-left and bidirectional kerning in OpenType","Languages":[{"Code":"en","Title":"Right-to-left and bidirectional kerning in OpenType","Slug":"right-to-left-and-bidirectional-kerning-in-opentype","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"def99fca-02b3-40e9-9288-3ef6eb2df95d","Path":"kerning-lever-precision-dragging-of-kerning.md","Order":1},{"Id":"a9ff9f89-f06f-43bf-9487-55bb24950697","Path":"copy-kerning-classes-between-masters.md","Order":13},{"Id":"57328134-b271-4e1b-b863-5ba1c852d0ee","Path":"remove-kerning-pairs-by-specified-criteria.md","Order":10},{"Id":"a5b05305-2b2b-49cd-8e6f-e52c96a69714","Path":"better-kerning-matching-across-masters.md","Order":14},{"Id":"51861352-b7ba-47e5-a7ac-f391b3cdc3ea","Path":"kerning-classes-arrangement-in-the-font-window.md","Order":6},{"Id":"efefdc46-87ed-4795-b871-f89fc526d60b","Path":"new-terminology-and-icons-for-kerning-classes.md","Order":3},{"Id":"a769c112-c8c5-43b2-af4b-f65445341b2d","Path":"kerning-classes-arrangement-in-glyph-panel.md","Order":5},{"Id":"24588ae6-6d96-448a-bb2b-76a6af742689","Path":"arrangement-of-kerning-class-assignment-boxes.md","Order":4},{"Id":"f42de2e3-a339-400d-8b8d-159756e06f2e","Path":"selective-audit-of-kerning-exceptions.md","Order":9},{"Id":"de648f6a-27b8-4fea-88b4-065fb98f858f","Path":"autokerning.md","Order":16},{"Id":"11752ef2-79ee-43ad-be98-510ee1366563","Path":"kern-to-distance.md","Order":11},{"Id":"b01adcb3-a24b-4538-a9dc-b97492332b98","Path":"copy-kerning-class-assignment-between-glyphs.md","Order":12},{"Id":"27382aef-aabf-451f-9e65-ec9741d07041","Path":"manually-create-class-kerning-exceptions.md","Order":8},{"Id":"1766a74a-dc7c-4f27-8821-f236a7c08c17","Path":"better-editing-of-kerning-classes.md","Order":7},{"Id":"a53d24ee-630a-455f-b6d4-26f82ad2bad5","Path":"hide-pointer-as-you-drag-in-kerning-mode.md","Order":2}],"Id":"eaa12960-ff29-473a-8ff8-ee98837c7c7f","Path":"kerning.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Kerning","Languages":[{"Code":"en","Title":"Kerning","Slug":"kerning","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"6c1a2d7e-45d6-4a95-b716-31dfd9f2fef9","Path":"table-text-wrap.md","Order":3},{"Id":"a94aea59-7aa8-4e3b-aa0a-02e015438d33","Path":"manual-text-wrap.md","Order":1},{"Id":"a40995db-7061-4fd1-ab0c-edec9b8eb7b9","Path":"apply-text-wrap.md","Order":4},{"Id":"752cc2fa-5426-4f6b-83b5-bdd574fb0978","Path":"auto-text-wrap.md","Order":2}],"Id":"6343c132-d9bf-4057-87f1-2d5453c498d1","Path":"text-wrapping-in-glyph-window.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Text wrapping in Glyph window","Languages":[{"Code":"en","Title":"Text wrapping in Glyph window","Slug":"text-wrapping-in-glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e147046c-6b8e-4d12-bfc6-dc5276d6276a","Path":"edit-duplicate-in-text-mode.md","Order":1},{"Id":"06140bdb-a511-4ac6-b893-95f71c2e2891","Path":"righttoleft-text.md","Order":2}],"Id":"29c07774-e97e-49fc-9819-e886167446e8","Path":"text-tool.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Text tool","Languages":[{"Code":"en","Title":"Text tool","Slug":"text-tool","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"bc2b71bd-67bd-409e-aa16-ed35a52c0daf","Path":"go-back-and-forward-between-changes-of-the-glyph-window-text.md","Order":5},{"Id":"7812a437-36bc-4bde-addb-79eed1a45009","Path":"title-case-text-conversion.md","Order":2},{"Id":"657292d7-8252-4b5c-ad5b-094f0e1944b2","Path":"wrap-text-in-glyph-window.md","Order":3}],"Id":"fa68a76c-47b3-42fb-9e75-bb1990f2042f","Path":"text.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Text","Languages":[{"Code":"en","Title":"Text","Slug":"text","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"3915cf1d-9cf2-456d-a335-2afd24a09974","Path":"showing-coordinates-for-key-nodes.md","Order":1},{"Id":"755028ee-44ab-46b9-ae02-c689b2b22444","Path":"showing-pointer-coordinates-on-canvas.md","Order":2},{"Id":"5cedf1c5-0077-4105-bd5b-63d720a848f6","Path":"scoreboard.md","Order":4},{"Id":"a5afa11e-fad4-4eb0-86c5-25fa4d88247a","Path":"choosing-when-to-see-coordinates.md","Order":3}],"Id":"4282a3a5-ac09-4467-be9f-14997eff278a","Path":"coordinates.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Coordinates","Languages":[{"Code":"en","Title":"Coordinates","Slug":"coordinates","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bb3aeb6f-db35-45fe-90f8-6ea7ad5f59c5","Path":"quick-measurement-between-elements-and-components.md","Order":4},{"Id":"bccce34d-8dc9-4cdf-84fa-534b31ff82a8","Path":"basic-quick-measurement-between-guides.md","Order":2},{"Id":"28b5d066-0a4b-417d-9fe7-3f0c0c755aeb","Path":"precision-of-quick-measurement.md","Order":1},{"Id":"ad002653-9fc2-4a85-b9c2-249409cf0878","Path":"show-node-offset-option-for-quick-measurement.md","Order":3}],"Id":"1727b978-2e50-465b-adbd-36af1e000954","Path":"quick-measurement.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Quick measurement","Languages":[{"Code":"en","Title":"Quick measurement","Slug":"quick-measurement","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"98aa079b-8d84-49a5-ba4e-6b2780e31a5b","Path":"ghost-hints-in-glyph-window.md","Order":1},{"Id":"fedcf849-b9f6-4b24-97f7-b5ecd58a53d2","Path":"adding-ghost-hints.md","Order":2}],"Id":"8c4cd015-66f4-457a-b27d-1a65865625a4","Path":"ghost-hints.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Ghost hints","Languages":[{"Code":"en","Title":"Ghost hints","Slug":"ghost-hints","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"d06ccf6d-bfe7-4e81-895e-74d1859aca8f","Path":"show-font-dimensions-zones-and-font-guides-in-current-glyph-only.md","Order":3},{"Id":"da95c14a-185c-4770-9da1-62762d27f071","Path":"locked-guides.md","Order":5},{"Id":"7fd032b9-13fc-4278-b59c-2f8b159f7e4c","Path":"converting-thick-guides-to-hints.md","Order":6},{"Id":"a2cbe2eb-5108-4dd9-b361-a7e9bccde5fa","Path":"color-opacity-of-font-glyph-and-element-guides-of-font-dimensions-hints-and-zones.md","Order":4},{"Id":"7f9a186e-5b1a-4b06-b133-8eb28657679f","Path":"hints-linked-to-nodes.md","Order":8},{"Id":"c395854f-c328-4f64-b12a-d0a84c8975c3","Path":"zones-in-glyph-window.md","Order":2},{"Id":"30aace4a-91da-4907-806f-2e7df33f89ae","Path":"add-stems-quickly.md","Order":9},{"Id":"89232182-d6fc-4021-bceb-48b1c72d66f0","Path":"zones-in-font-info.md","Order":1}],"Id":"477d7e44-3445-4384-8cf7-0583eac1fbd3","Path":"hints-zones-guides.md","Order":16,"CategoryType":1,"Icon":null,"Title":"Hints, zones, guides","Languages":[{"Code":"en","Title":"Hints, zones, guides","Slug":"hints-zones-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e1a517c1-56d0-4409-89c7-d3af4d6d7912","Path":"use-autometer-to-view-stem-widths.md","Order":1},{"Id":"e9b74594-afb9-4f8a-939b-9992c6455b6e","Path":"use-autometer-to-automatically-adjust-stems.md","Order":3},{"Id":"31b3fd39-f698-4705-bc0e-df33935ce889","Path":"use-autometer-to-view-height-or-width-of-counters.md","Order":4},{"Id":"5f2be991-ae57-4fc7-8a54-52f2465c8cfd","Path":"use-autometer-to-view-corner-angles.md","Order":5},{"Id":"43731281-d95d-4fe0-b8f5-85728b46123e","Path":"use-autometer-to-manually-adjust-stems.md","Order":2}],"Id":"029cbde4-6833-4e55-b462-6082838fcd2f","Path":"auto-meter-for-stems-counters-and-corner-angles.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Auto-meter for stems, counters, and corner angles","Languages":[{"Code":"en","Title":"Auto-meter for stems, counters, and corner angles","Slug":"auto-meter-for-stems-counters-and-corner-angles","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b0bac26f-8b1c-4236-94db-c35bbd68d4d0","Path":"autometer-for-corner-angles.md","Order":4},{"Id":"61a152f1-863d-44c7-8b3b-35e2b1353f41","Path":"freeform-measuring-of-angles.md","Order":7},{"Id":"9e44581d-4029-46c0-a892-fbd6c666c4dc","Path":"guides-in-guides-tool.md","Order":5},{"Id":"2246a1c9-83e2-4473-a3a1-1c052af8972e","Path":"context-menu-operations.md","Order":6},{"Id":"570c165a-da28-45f4-a49e-f2f2eab1a943","Path":"autometer-for-stem-widths.md","Order":3},{"Id":"3215e0fc-a795-4990-82cd-1cdaa920cbc8","Path":"length-of-line-segments-and-handle-vectors.md","Order":1},{"Id":"ba9a008e-d0ba-4533-80c5-72a3f295a273","Path":"visible-masters-and-master-relations.md","Order":8},{"Id":"eb248b47-5bf9-4b5c-9064-1de945785615","Path":"showing-curve-segment-tension.md","Order":2}],"Id":"063ed44a-8f22-401d-9aac-68d44a10c27c","Path":"guides-tool.md","Order":14,"CategoryType":1,"Icon":null,"Title":"Guides tool","Languages":[{"Code":"en","Title":"Guides tool","Slug":"guides-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b86023ca-b685-4a62-82ae-df33a82a41fd","Path":"suggest-lines.md","Order":2},{"Id":"d54c729c-e0d0-4ee1-bdfc-3ff57e39b680","Path":"distance-suggestions-with-open-contours.md","Order":3},{"Id":"a7ccefce-9e78-41be-b60a-8f64de2cffde","Path":"suggest-handles.md","Order":1}],"Id":"867f621d-23b5-4935-9db2-49b3e8f7f8f2","Path":"snapping-suggestions.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Snapping suggestions","Languages":[{"Code":"en","Title":"Snapping suggestions","Slug":"snapping-suggestions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a4b3952a-6239-4c1d-953b-e192bc7e077d","Path":"showing-the-length-of-line-segments-and-handle-vectors.md","Order":1},{"Id":"c18bd14a-3419-4dd0-a11f-20f51a91e5be","Path":"showing-the-tension-of-curve-segments.md","Order":2}],"Id":"01cafffc-bb33-41c2-95b5-eb9594a5e7b4","Path":"measuring-details-in-glyph-window.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Measuring details in Glyph window","Languages":[{"Code":"en","Title":"Measuring details in Glyph window","Slug":"measuring-details-in-glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8ccdec12-70f8-431b-bd2c-ed529a5707cc","Path":"delta-hints-in-the-tth-glyph-window-waterfall.md","Order":5},{"Id":"e90c2684-70e9-4b8c-a545-99cd2c45cb04","Path":"removing-tth-commands.md","Order":8},{"Id":"e29ebdfc-97d1-4931-a51b-e6a6d10bb675","Path":"remove-x-or-y-hints-only-with-tools-actions.md","Order":9},{"Id":"979db7db-1b3d-4633-96a2-14ded0c45875","Path":"truetype-hinting-preview-in-glyph-window.md","Order":2},{"Id":"440a979e-d777-49b8-97ea-e347444c47f4","Path":"import-tth-stems-and-tth-zones-from-font-info.md","Order":1},{"Id":"0443e00c-be62-4227-a4c9-cc5320542c92","Path":"tth-stems-dropdown-in-tth-tool-property-bar.md","Order":7},{"Id":"73aa8d19-ba75-40a9-ae6a-0bde091e2f7d","Path":"ppm-size-selector-in-the-tth-tool-property-bar.md","Order":6},{"Id":"5a93808e-8b50-427c-a0d9-fe734a5175a5","Path":"zoomable-preview-in-the-truetype-hinting-panel.md","Order":4},{"Id":"b1fa8744-7108-4b8c-94fc-ee8dc83f895d","Path":"preview-rasterized-glyphs-in-the-truetype-hinting-panel.md","Order":3}],"Id":"cd2e190a-3ada-4c83-8d02-7b687708f30b","Path":"truetype-hinting.md","Order":17,"CategoryType":1,"Icon":null,"Title":"TrueType Hinting","Languages":[{"Code":"en","Title":"TrueType Hinting","Slug":"truetype-hinting","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"c1c56d4e-964f-45c5-9558-b7794c5b9f11","Path":"view-distance-of-dragged-guides.md","Order":5},{"Id":"f1e4e004-7b7f-4a9c-a3d6-b5bd84db962c","Path":"align-points-to-grid.md","Order":7},{"Id":"0511ec4e-3e2f-4428-83b6-c9becd7964fd","Path":"long-and-short-guides.md","Order":4},{"Id":"233340b8-51df-4779-8b57-585e39a13c3b","Path":"align-points-to-guides.md","Order":6},{"Id":"f6984b26-b80d-4b73-9304-9a68aa859713","Path":"align-points-to-mask.md","Order":8},{"Id":"b6d5278f-5ce6-47b5-b23b-8c269d40f118","Path":"better-autohinting-settings.md","Order":9},{"Id":"e26d4334-3295-423e-ab1e-bc147f4df340","Path":"quick-measurement-for-guides-and-anchors.md","Order":3},{"Id":"09ba1a25-44e6-4d07-9bf0-a79b0e697d7d","Path":"number-of-stems-and-zones.md","Order":10}],"Id":"cedc16cf-bf70-45ef-ac06-570473117839","Path":"consistency-precision.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Consistency & precision","Languages":[{"Code":"en","Title":"Consistency & precision","Slug":"consistency-precision","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"41ee41b1-406a-446c-9a96-54f36aeabccb","Path":"font-info-add-master.md","Order":2},{"Id":"22595bc1-a299-4c61-bc9e-d91272bef7ae","Path":"use-font-info-axes-detect-axes-to-build-variation-axes-info-based-on-the-names-of-the-layers.md","Order":1}],"Id":"39cd8ae0-c423-4dd9-95ed-f784f65a01e9","Path":"variation-in-font-info.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Variation in **Font Info**","Languages":[{"Code":"en","Title":"Variation in **Font Info**","Slug":"variation-in-font-info","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"70b83fbf-ead8-4dc3-8bd7-a07018d04094","Path":"manually-matching-masters-with-matchmaker.md","Order":3},{"Id":"9f15039b-a5e3-4610-b379-7c5b93699f8c","Path":"match-masters-in-matchmaker-tool.md","Order":4},{"Id":"02c54d08-ebbe-45ae-aa1e-845a525d78c8","Path":"show-intermediates-turned-off.md","Order":2},{"Id":"a6e063dd-4019-4c01-81b1-742b891e5a63","Path":"contour-order-in-matchmaker-tool.md","Order":5},{"Id":"032916c7-00a9-4adf-9fd4-257b8b392b5a","Path":"start-points-in-matchmaker-tool.md","Order":6},{"Id":"98538c8a-8697-41e0-aeec-614941f47e66","Path":"contour-direction-in-matchmaker-tool.md","Order":7},{"Id":"52814f40-6cf0-4087-8fbc-f9c861ed4e76","Path":"show-intermediates-turned-on.md","Order":1}],"Id":"69d1ab1c-63c1-400c-b259-aef99f12dcac","Path":"matchmaker-tool.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Matchmaker tool","Languages":[{"Code":"en","Title":"Matchmaker tool","Slug":"matchmaker-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2bae4ae6-0bab-4a9a-9966-110996800408","Path":"choose-dynamic-instance-for-a-smart-variable-component.md","Order":1},{"Id":"0036ad4a-9440-4398-be29-7205d5871605","Path":"define-custom-glyph-axes-for-smart-variable-component-sources.md","Order":2},{"Id":"3e3cc4b9-9c5d-44d1-87f7-2dc81d2394fc","Path":"component-sources-that-have-fontless-masters.md","Order":3}],"Id":"aa649856-8f77-4353-aec6-a326b561e6de","Path":"smart-variable-components.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Smart variable components","Languages":[{"Code":"en","Title":"Smart variable components","Slug":"smart-variable-components","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"338b8182-587c-4aef-9b9d-4ff5b9d953f5","Path":"match-when-editing.md","Order":3},{"Id":"f54bf011-1f7b-48ce-9033-30c372cae272","Path":"make-variable-fonts-from-static-fonts.md","Order":1},{"Id":"f1ec02ce-5af2-4bd3-a1e3-9f3139513caf","Path":"add-variation-quickly.md","Order":2},{"Id":"20d4dc19-04e0-42fa-84e8-a1a710a5da4c","Path":"improved-match-masters.md","Order":5},{"Id":"96369836-890f-4989-918e-633bf369f050","Path":"set-variation-location-when-you-add-a-new-layer.md","Order":7},{"Id":"084b29e1-f704-4a9b-be34-30286dad425b","Path":"specify-location-of-fontless-masters.md","Order":6},{"Id":"2277ff87-8208-4c14-b59c-07885f2dbd62","Path":"tools-actions-adjust-by-variation.md","Order":10}],"Id":"f1fa706b-b8c1-4f60-8a39-a73ab093d464","Path":"variation.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Variation","Languages":[{"Code":"en","Title":"Variation","Slug":"variation","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"8fb7c08b-5106-48f3-88ca-d93b44a35df8","Path":"associated-layers.md","Order":2},{"Id":"432985ce-3c69-4673-8a35-59e3cb049e19","Path":"mask-layer.md","Order":1}],"Id":"a896c96d-5b39-445a-8d69-c90cf8675136","Path":"visual-grouping-of-layers-in-the-layers-masters-panel.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Visual grouping of layers in the **Layers & Masters** panel","Languages":[{"Code":"en","Title":"Visual grouping of layers in the **Layers & Masters** panel","Slug":"visual-grouping-of-layers-in-the-layers-masters-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"8f7c8d8c-effb-4ee8-86b6-7e09e7a095ec","Path":"inactive-layers-as-wireframes.md","Order":3},{"Id":"ff873b51-bd30-409c-9827-8ccca5a1992a","Path":"components-in-mask-layer.md","Order":2}],"Id":"e35ced50-5c4b-4ab6-8763-f72c05a4a650","Path":"layers.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Layers","Languages":[{"Code":"en","Title":"Layers","Slug":"layers","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"d7991556-4523-45b4-a787-317ad6e378a9","Path":"conditional-glyph-substitution-with-features-other-than-rvrn.md","Order":4},{"Id":"a0c3aaf4-7de2-432b-a19e-82d9837265b6","Path":"automatic-panning-of-glyph-window.md","Order":3}],"Id":"d9802a6f-5d18-4d35-8615-bfa93b3cba2c","Path":"families-variation.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Families & variation","Languages":[{"Code":"en","Title":"Families & variation","Slug":"families-variation","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"14e6ca9b-452e-4d13-a522-cbe488e0e8de","Path":"contour-convert-to-new-element.md","Order":2},{"Id":"14a90d38-6b2d-4b47-b90a-3de380e82824","Path":"element-references-and-filters.md","Order":5},{"Id":"f261916a-bd1f-4c95-8c4f-a367ba359a9e","Path":"adding-element-references.md","Order":6},{"Id":"b64981d1-52e4-44a7-b10a-dfefed8ddbd4","Path":"contour-convert-detect-element-reference.md","Order":3},{"Id":"1baa5f9e-d3c4-44fa-99fa-13c7074c8766","Path":"copypaste-live-transformation-between-elements.md","Order":4}],"Id":"f053daec-b6c9-45bf-a705-f4aa1491e128","Path":"elements-and-components.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Elements and components","Languages":[{"Code":"en","Title":"Elements and components","Slug":"elements-and-components","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"76704fee-b0fd-4632-8d7d-e0999b129994","Path":"applying-fusion.md","Order":2},{"Id":"fa318762-8c86-43f8-86ee-f02634f280df","Path":"editing-fusion.md","Order":1}],"Id":"27e5b425-e6ca-4673-bcc7-f0c97d60e108","Path":"fusion-filter.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Fusion filter","Languages":[{"Code":"en","Title":"Fusion filter","Slug":"fusion-filter","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c33cce1e-3589-4463-ae30-46a2a907803e","Path":"contour-overlap-subtract.md","Order":2},{"Id":"784d4f47-2900-49e8-adbd-7b6d61f63f26","Path":"contour-overlap-intersect.md","Order":3},{"Id":"6fe7190c-383a-4bd7-a325-7503fa043bbc","Path":"protecting-contours-from-contour-overlap-operations.md","Order":5},{"Id":"0c91a227-0ce4-41cf-ae3b-81652ce6822d","Path":"choosing-the-front-and-back-contours.md","Order":1},{"Id":"5877f827-1993-497f-be90-e002bc34e590","Path":"contour-overlap-exclude.md","Order":4}],"Id":"2fedcab4-81a9-41a3-b2b7-9911df12c3fb","Path":"contour-overlap-operations.md","Order":4,"CategoryType":1,"Icon":null,"Title":"**Contour: Overlap** operations","Languages":[{"Code":"en","Title":"**Contour: Overlap** operations","Slug":"contour-overlap-operations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0150f89d-1064-4a32-ad9e-097b17719421","Path":"inverted-glyphs-with-smart-fill.md","Order":1}],"Id":"e68d08bf-fe6e-4154-b8d1-8aea050616ba","Path":"fill-tool-and-filter.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Fill tool and filter","Languages":[{"Code":"en","Title":"Fill tool and filter","Slug":"fill-tool-and-filter","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"7d503de3-78d9-42c3-af64-f346def3091e","Path":"clipping-group.md","Order":3}],"Id":"a67c9c86-f44e-43cb-93b1-014f65df0958","Path":"boolean-operations.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Boolean operations","Languages":[{"Code":"en","Title":"Boolean operations","Slug":"boolean-operations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fe181c1e-267a-4e77-9cd1-872fd880d9f6","Path":"move-anchors-vertically-along-italic-angle.md","Order":3},{"Id":"1ebfccef-fb89-42e1-8fa7-f7c2bae8e24b","Path":"aligning-anchors.md","Order":4},{"Id":"dec8d3ca-91b6-437a-8f4b-9ac85c990d91","Path":"tools-actions-guides-anchors.md","Order":2}],"Id":"00100fc5-d393-468e-82ab-88bb4ff46a81","Path":"anchors.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Anchors","Languages":[{"Code":"en","Title":"Anchors","Slug":"anchors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7d5f3cc8-2106-40ec-aa8c-a0114c5bdcb3","Path":"contour-convert-detect-component.md","Order":3},{"Id":"6e569caa-19f4-4b97-ba33-892d483d1bb8","Path":"paste-glyph-as-component-with-edit-paste-special.md","Order":6},{"Id":"5f689956-06ec-47b3-86c7-8d9367de2625","Path":"contour-convert-to-new-component.md","Order":2},{"Id":"c85e0f11-7f62-4443-84d6-9ab808abccbc","Path":"build-glyphs-and-add-glyphs-from-catalog-in-the-font-menu.md","Order":1},{"Id":"1cd453bd-d70c-44a3-9f41-3ff769082077","Path":"copy-auto-layer-recipes.md","Order":7},{"Id":"816e61bb-0b26-4fab-9d7a-d46ccce4c5ab","Path":"do-not-inherit-mark-anchors-from-components-to-base-or-ligature-glyphs-on-export.md","Order":4},{"Id":"c8e0b8e9-b361-4804-b197-35c90576a37f","Path":"attached-components-and-auto-layers-with-exitentry-anchors.md","Order":8},{"Id":"ee5673e2-c899-47ca-aaad-4eb92a9ee6f6","Path":"do-not-inherit-any-anchors-from-components-when-building-an-auto-layer.md","Order":5}],"Id":"ad3bf2c6-d57a-4c9a-b035-1502caecd8be","Path":"components-auto-layers-mark-attachment.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Components, Auto layers, mark attachment","Languages":[{"Code":"en","Title":"Components, Auto layers, mark attachment","Slug":"components-auto-layers-mark-attachment","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0b5d07cc-04e7-4573-8636-8fbd2a78fa6f","Path":"segment-skin.md","Order":2},{"Id":"eda9abf0-12ee-48a7-80b9-9c5ca5c47d43","Path":"corner-skin.md","Order":4},{"Id":"4bf51f74-ccfe-4eda-bffa-9d9360a5bf1c","Path":"editing-skin.md","Order":6},{"Id":"fc9f55f9-a925-4874-ab31-4493acfffde7","Path":"add-anchor-for-skin-source-glyphs.md","Order":7},{"Id":"d3e9cfec-151f-4873-adbb-1bef4e6d7bb8","Path":"cap-skin.md","Order":5},{"Id":"1cb96af9-f5f0-44f0-bfd8-9efb76868446","Path":"dash-skin.md","Order":3},{"Id":"571d91fe-bbcb-49e3-8c19-7923863edf36","Path":"filter-glyphs-when-you-add-a-skin-filter.md","Order":1}],"Id":"9d05cd79-8491-4288-9750-0ada542024d4","Path":"skin-filter.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Skin Filter","Languages":[{"Code":"en","Title":"Skin Filter","Slug":"skin-filter","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fbcda2a1-e70d-4dc7-9f83-010a02895d2d","Path":"replacing-a-serif-with-a-corner-skin.md","Order":2},{"Id":"52b85efa-10b7-4a82-88ff-8c25e1977e18","Path":"replacing-a-serif-with-a-glued-element.md","Order":1}],"Id":"e1c9a384-bd67-42cc-889f-c2c73f4a33a8","Path":"skin-filter-vs-glue.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Skin Filter vs. Glue","Languages":[{"Code":"en","Title":"Skin Filter vs. Glue","Slug":"skin-filter-vs-glue","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fc301668-9b02-43b5-a75a-2e83c0c31d81","Path":"new-glue-filter.md","Order":1},{"Id":"dc76870a-750d-49e9-b6da-3e3676f7bb75","Path":"legacy-glue-filter.md","Order":2}],"Id":"0085aba1-2bf8-449f-8b50-0844329832f1","Path":"glue-filter.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Glue filter","Languages":[{"Code":"en","Title":"Glue filter","Slug":"glue-filter","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dcda5ea8-31d5-4ae7-9a44-97546987b0ed","Path":"the-element-itself.md","Order":1},{"Id":"bbee5c3e-7e60-402b-814f-83c33402e703","Path":"relationships-between-elements.md","Order":2},{"Id":"e1ad5335-aeb8-40f5-be43-1ceab7a7a894","Path":"design-with-live-filters.md","Order":3},{"Id":"9c50ba51-30f5-4a2d-be9d-8db15dd45367","Path":"images-and-color.md","Order":4}],"Id":"932b5f2d-a5ef-4395-bc1e-5f327e3971cc","Path":"element-menu.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Element menu","Languages":[{"Code":"en","Title":"Element menu","Slug":"element-menu","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"36c5cbe3-dd70-4945-af34-da1164a64715","Path":"automatic-detection-of-composites-and-element-references.md","Order":10}],"Id":"62b35e61-4bb3-46b9-83d3-0ec4f92d2654","Path":"build-assemble.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Build & assemble","Languages":[{"Code":"en","Title":"Build & assemble","Slug":"build-assemble","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"9a05a4c2-3f4e-4462-9a59-06bfaaee41e5","Path":"builtin-vs-custominstalled-fonttools.md","Order":1}],"Id":"37601bb2-c6da-4839-9e70-3a8b15623ca4","Path":"fonttools.md","Order":2,"CategoryType":1,"Icon":null,"Title":"fontTools","Languages":[{"Code":"en","Title":"fontTools","Slug":"fonttools","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"3b9e4448-1cef-466c-8fe1-c0676fe12450","Path":"typerig-1.md","Order":1}],"Id":"d43f21d2-adad-4e40-ac78-d74f68107f37","Path":"installing-and-using-scripts.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Installing and using scripts","Languages":[{"Code":"en","Title":"Installing and using scripts","Slug":"installing-and-using-scripts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fe68362f-0ab7-4a71-974e-09b722f2bd00","Path":"direct-access-to-preferences.md","Order":1},{"Id":"f344eeb8-9f23-48ed-9485-cb0e91a9ca51","Path":"extended-access-to-preferences.md","Order":2}],"Id":"daecf8d7-5fd1-41f7-aade-696a31ba6f89","Path":"preferences-in-python.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Preferences in Python","Languages":[{"Code":"en","Title":"Preferences in Python","Slug":"preferences-in-python","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3c124043-0c2b-4e75-8974-747a592838ba","Path":"html-in-output-panel.md","Order":1},{"Id":"60c0eb89-e1e3-4b6f-b646-e0e354399814","Path":"html-links-in-output-panel.md","Order":2}],"Id":"a33daf7e-c2ae-4408-aa89-df4fde329510","Path":"output-panel.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Output panel","Languages":[{"Code":"en","Title":"Output panel","Slug":"output-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b19e80fb-086d-48d2-8dfe-885a876c5473","Path":"run-current-script-from-collapsed-scripting-panel.md","Order":2},{"Id":"2fdd87c8-ccd0-416a-b81b-1d1525e1de92","Path":"clearing-output-panel-whenever-you-run-a-script.md","Order":1},{"Id":"0b71ced6-9280-4365-beab-fe943564f21d","Path":"find-next-1.md","Order":3}],"Id":"fdc04aa4-fbd7-423a-8bfb-b6ef8cbc2b5e","Path":"scripting-panel.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Scripting panel","Languages":[{"Code":"en","Title":"Scripting panel","Slug":"scripting-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"daf92776-2c62-43e5-8d64-7f4cd535d426","Path":"python-scripting-on-macos.md","Order":1},{"Id":"70ec10e5-d586-45fe-a30e-f1e77462e7da","Path":"troubleshooting-your-python-packages.md","Order":3},{"Id":"9eee485c-9cb3-4896-8d53-1a47d3548182","Path":"python-scripting-on-windows.md","Order":2}],"Id":"93d995c7-68b0-459b-b9d1-820c5ba7fc1a","Path":"python-311.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Python 3.11","Languages":[{"Code":"en","Title":"Python 3.11","Slug":"python-311","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"7ae60f94-275c-4acb-90ac-378b19d79f9a","Path":"run-actions-and-action-sets-in-python.md","Order":7},{"Id":"9c8d78f8-b1ed-47d3-b157-edaa9064d71d","Path":"integrated-libraries.md","Order":8},{"Id":"01b4ea06-7ece-4df9-82af-86422c52976e","Path":"python-hooks.md","Order":6}],"Id":"d50b223a-26d3-4c1f-a7a3-8f7fa6af7208","Path":"scripts-extensions.md","Order":14,"CategoryType":1,"Icon":null,"Title":"Scripts & extensions","Languages":[{"Code":"en","Title":"Scripts & extensions","Slug":"scripts-extensions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c31d575c-5a26-4892-8338-ee45d790a04d","Path":"color-and-gradient-bar.md","Order":2},{"Id":"77459883-48da-436e-92bc-ea9b9d5de45d","Path":"color-type-selector.md","Order":1},{"Id":"01e5ca14-9117-424d-8764-c725e279b394","Path":"text-color-selector.md","Order":7},{"Id":"4760bc4a-c995-438d-8694-20eb4f8f2502","Path":"system-color-selector.md","Order":8},{"Id":"3af09a50-44cf-44e4-a6ab-816edcdebbfe","Path":"transparency-selector.md","Order":6},{"Id":"6714ecb2-faa7-4291-8ddc-3604fb854e4a","Path":"apply-button.md","Order":9},{"Id":"d05ae763-e427-48b7-a668-d71bd0859e3c","Path":"color-editor.md","Order":4},{"Id":"df3cf85e-4468-484d-8ece-a7bd64763ad4","Path":"visual-gradient-editor.md","Order":3},{"Id":"7aa6346c-458b-4e01-b391-8f2bb732f47a","Path":"palettes-dialog.md","Order":5}],"Id":"70b4343a-dffe-4c9f-bae9-c410ab83f605","Path":"colors-panel.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Colors panel","Languages":[{"Code":"en","Title":"Colors panel","Slug":"colors-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"d0c58c8c-ee87-4a29-8af4-95d2a44f674e","Path":"copypaste-of-stroke-fill.md","Order":2}],"Id":"60cc9947-9ee9-450a-ad71-017685600129","Path":"color.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Color","Languages":[{"Code":"en","Title":"Color","Slug":"color","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"5024c7fe-1e7a-48e9-a9bd-8f549d6bff01","Path":"open-variable-installed-fonts.md","Order":1}],"Id":"3fe35e48-0b12-482f-af8e-1c0ea40621db","Path":"open-installed-fonts.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Open installed fonts","Languages":[{"Code":"en","Title":"Open installed fonts","Slug":"open-installed-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"905c1066-536e-4cf2-83f6-4901166ff0a2","Path":"exporting-current-layer-or-masters.md","Order":2},{"Id":"18029c54-bc9d-411c-93e8-91e3fde294f9","Path":"exporting-designspaceufo.md","Order":3},{"Id":"dcf51e29-c6b2-4bc2-9754-f104c8da30ea","Path":"better-handling-of-reserved-windows-filenames.md","Order":1}],"Id":"3546654d-ae12-4174-8f6b-e6bce2d613ef","Path":"exporting-ufo-or-designspaceufo.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Exporting UFO or DesignSpace+UFO","Languages":[{"Code":"en","Title":"Exporting UFO or DesignSpace+UFO","Slug":"exporting-ufo-or-designspaceufo","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"16fb0b66-40d4-42ba-9ccb-c96a1d43a07f","Path":"recover-autosaved-files.md","Order":1}],"Id":"926c365e-5326-4add-8d66-1c47e1602047","Path":"autosave.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Autosave","Languages":[{"Code":"en","Title":"Autosave","Slug":"autosave","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"20f2dc4a-2b9f-474f-b755-6c6ad86d8115","Path":"export-large-asian-opentype-fonts.md","Order":2},{"Id":"b1a33f10-1d55-4d9f-ab9e-46a758aa312b","Path":"exporting-opentypecolr.md","Order":3},{"Id":"194a8d28-4c4e-4a04-a120-2f6157b1b251","Path":"export-variable-colrv1-fonts.md","Order":4},{"Id":"ff613a9c-e67f-4192-b660-e2b67ed603bb","Path":"export-static-opentype-fonts-with-a-cubic-glyf-table.md","Order":1},{"Id":"6cc8be31-cbe6-4fef-bd73-f76ce3355a10","Path":"legacy-truetype-kern-table-only-includes-pairs-of-encoded-glyphs.md","Order":5}],"Id":"8d151afa-475c-4a25-89f3-8e64cf1768fd","Path":"exporting-opentype.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Exporting OpenType","Languages":[{"Code":"en","Title":"Exporting OpenType","Slug":"exporting-opentype","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"62204302-1a6f-4737-a332-f6f0caf864ef","Path":"exporting-glyphs-format-version-2-or-3.md","Order":1}],"Id":"803ca181-6532-4ba3-b57d-ba9c5b8fd4c4","Path":"exporting-glyphs.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Exporting `.glyphs`","Languages":[{"Code":"en","Title":"Exporting `.glyphs`","Slug":"exporting-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c4a9d8b3-0917-4413-97e9-1356926b9186","Path":"exporting-color-woff2.md","Order":2},{"Id":"d27367e6-0ad7-4b93-8e7a-07b9303ebe80","Path":"exporting-variable-woff2.md","Order":1},{"Id":"ead2fbd6-5566-4768-9de8-033794e85e7f","Path":"generating-supporting-html-css-files.md","Order":3}],"Id":"7fa856fc-c47d-417c-b10a-6e9b4b859850","Path":"exporting-webfonts.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Exporting Webfonts","Languages":[{"Code":"en","Title":"Exporting Webfonts","Slug":"exporting-webfonts","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"b334305b-0026-49ca-8bc0-7c1e6735764d","Path":"more-portable-vfj-saving-for-better-interchange.md","Order":5},{"Id":"1ebeb09f-b50f-43e6-aef1-4bb4a782286c","Path":"temporarily-install-exported-fonts.md","Order":6},{"Id":"ab032405-cc04-4124-b8f1-e98d1c7c3fab","Path":"exporting-with-same-as-source.md","Order":9},{"Id":"98bb98f5-8f6b-481f-8cb4-05428388dbef","Path":"save-and-export-confirmations.md","Order":10},{"Id":"ed1f286c-1680-4de1-8b74-11c64e6ec1ad","Path":"export-multiple-fonts-into-multiple-profiles-in-one-step.md","Order":8}],"Id":"6aa8045d-c71f-4842-95ba-b2145336937b","Path":"saving-and-exporting-fonts.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Saving and exporting fonts","Languages":[{"Code":"en","Title":"Saving and exporting fonts","Slug":"saving-and-exporting-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"24b182d0-6551-4938-8ee2-10b025e14337","Path":"storing-original-ufo-folder-and-filenames.md","Order":1},{"Id":"29882466-34e6-4d13-a89f-99a98d8d4249","Path":"singlemaster-axis.md","Order":2},{"Id":"192e8c8a-52e4-4530-b228-297ec7d109bb","Path":"caret-offset.md","Order":3}],"Id":"42e94be6-7d9e-42f9-adb3-5262bdab77ff","Path":"opening-ufo-or-designspaceufo.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Opening UFO or DesignSpace+UFO","Languages":[{"Code":"en","Title":"Opening UFO or DesignSpace+UFO","Slug":"opening-ufo-or-designspaceufo","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4beb5bd2-4003-4b58-87ee-4ca3f0df503b","Path":"opening-color-opentypesbix.md","Order":5},{"Id":"9a064b97-6569-4e10-9dfc-ec6476dfac00","Path":"open-opentype-fonts-with-cubic-glyf-table.md","Order":7},{"Id":"78f3d6cc-3747-4780-8e2c-407a8e61d7ca","Path":"open-variable-colrv1-fonts.md","Order":4},{"Id":"876831ad-6616-4ea4-9415-51244cf4f000","Path":"opening-multiflavor-color-opentype.md","Order":6},{"Id":"c6090601-7c82-4a05-b253-8b672a94800f","Path":"opening-color-opentypesvg.md","Order":3},{"Id":"1a7036f9-fadd-4010-beeb-2e4c0b983a25","Path":"decompilation-of-apple-aat-features.md","Order":10},{"Id":"d22d9dd6-e974-4bae-9281-6e2c814c7959","Path":"opening-truetypeflavored-opentype-ttf.md","Order":1},{"Id":"40281da3-a621-46ee-a5be-5a0f976031fa","Path":"opening-variable-opentype.md","Order":2},{"Id":"d3fe7e65-abb5-4227-b644-b425aec70e88","Path":"decompiling-features-for-complexscript-fonts.md","Order":8},{"Id":"6470eddd-c490-4c5c-bfb9-45e72b4bd312","Path":"better-decompilation-of-contextual-opentype-features.md","Order":9}],"Id":"1974eb87-94b5-4fdf-9a98-4e954fd8dbeb","Path":"opening-opentype.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Opening OpenType","Languages":[{"Code":"en","Title":"Opening OpenType","Slug":"opening-opentype","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"cb43b4bd-9855-499c-943f-fc60bcc7f8a5","Path":"opening-bdf-bitmap-fonts.md","Order":3},{"Id":"2251b636-03ac-416b-8d9c-cd158eea3ff5","Path":"opening-fonts-or-importing-artwork-with-fractional-coordinates.md","Order":4},{"Id":"aaedbc29-33a3-442a-a9af-36c2b38debbc","Path":"import-multiple-images.md","Order":5}],"Id":"a9aa6554-27d7-49f9-a5d0-09b44611647e","Path":"opening-files.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Opening files","Languages":[{"Code":"en","Title":"Opening files","Slug":"opening-files","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"3c057cb6-5ab9-4f1a-8d6d-59a25e75f56a","Path":"export-preview-panel-content-as-pdf.md","Order":6},{"Id":"943dfa1a-aac6-4826-83bc-134d355fbdc1","Path":"export-glyph-window-text-as-pdf-or-svg.md","Order":5},{"Id":"b413724f-ac66-408a-8d80-67b595b3bf06","Path":"export-multiple-glyphs-as-single-pdf-svg-or-png-images.md","Order":4},{"Id":"34a0f509-34ab-4b50-8047-035600c54a66","Path":"export-font-window-glyph-table-as-pdf.md","Order":7}],"Id":"30276b7f-589c-494a-be0f-495263fbf066","Path":"formats.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Formats","Languages":[{"Code":"en","Title":"Formats","Slug":"formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"a0bf1554-26e2-4ae1-8fd4-1ecfe2547723","Path":"global-keys.md","Order":3},{"Id":"b3bb9323-3728-413a-94fb-7fa38e404935","Path":"quick-find-glyph.md","Order":2},{"Id":"0ed447db-c3ac-448c-8f55-49ea883603ea","Path":"scrolling-to-browse-glyphs-and-layers-in-glyph-window.md","Order":1}],"Id":"319b8848-3b16-4078-9e84-dc0a6e80dfc8","Path":"navigating-glyphs.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Navigating glyphs","Languages":[{"Code":"en","Title":"Navigating glyphs","Slug":"navigating-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d89d151a-1bd1-46d8-b33a-d35f27e7db37","Path":"synonyms-in-preview-panel.md","Order":3},{"Id":"0dac200e-237d-4248-b1d4-4b72259dac5e","Path":"renaming-alternate-glyphs-when-renaming-a-glyph.md","Order":4},{"Id":"5ee9051f-35ad-4c95-8573-a764490c1485","Path":"copy-glyph-name-in-glyph-window-property-bar.md","Order":1},{"Id":"a22856c0-f843-4eca-ab39-1ff177eef8d0","Path":"long-glyph-names.md","Order":2}],"Id":"8d7c39b6-d9de-4d3b-b643-50c25d81344b","Path":"renaming-glyphs.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Renaming glyphs","Languages":[{"Code":"en","Title":"Renaming glyphs","Slug":"renaming-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"51ec98e1-c237-45b4-825d-770821c015c0","Path":"font-color-flags.md","Order":2},{"Id":"a39eab24-14fa-4f7b-99cc-7adb72e87b46","Path":"color-flags-intensity.md","Order":4},{"Id":"8201d6a8-fa2c-46d9-ae6b-54a3ec806d62","Path":"color-flag-selectors.md","Order":5},{"Id":"4f1561f0-1f9d-4f28-aba1-12bad574e4a3","Path":"kerning-pair-color-flags.md","Order":3},{"Id":"82cc4664-9f7d-4175-b138-ea43e197a428","Path":"glyph-color-flags.md","Order":1}],"Id":"5503b365-84a1-4e60-aa7a-e50aa6bbf504","Path":"color-flags.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Color flags","Languages":[{"Code":"en","Title":"Color flags","Slug":"color-flags","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"ac241988-a34d-436e-b5ce-a987581fcc8f","Path":"tagbased-font-window-filters-are-now-casesensitive.md","Order":3},{"Id":"9ac9a01e-2efe-4814-a013-2b8530b406ca","Path":"properties-manual-composite.md","Order":2},{"Id":"784b6c23-a3d3-417c-95b3-057abfe5b2a1","Path":"expanding-or-collapse-font-window-sidebar-sections.md","Order":1}],"Id":"709fc77e-84a9-45de-9e70-c4bf871004e3","Path":"font-window-sidebar.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Font window sidebar","Languages":[{"Code":"en","Title":"Font window sidebar","Slug":"font-window-sidebar","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"41ffe512-cf06-48f7-8874-bbd0fa8ca7e9","Path":"unicodebased-font-window-filters.md","Order":2},{"Id":"e7cb8572-465a-477f-bb49-dc27fb40d682","Path":"property-bar-visibility.md","Order":3},{"Id":"af021174-b400-4e89-a42c-88b774b1c7c7","Path":"find-box-in-the-font-window-property-bar-filters.md","Order":1},{"Id":"97ce3f97-953e-4d2a-ad15-9d70d0601210","Path":"codepages-filter.md","Order":4}],"Id":"08bb09e8-9b3c-48b2-99bb-a16724f311f3","Path":"font-window-property-bar.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Font window property bar","Languages":[{"Code":"en","Title":"Font window property bar","Slug":"font-window-property-bar","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"634ea40c-0c7e-4597-8864-ce72c7a5900c","Path":"select-same-suffix-in-the-contextual-menu.md","Order":3},{"Id":"8470f1ca-9436-41c1-8f6d-48ec345ff915","Path":"select-same-caption-in-the-contextual-menu.md","Order":2},{"Id":"fd23863d-6ce9-4bdc-b9fc-edfabf29a3df","Path":"select-related-glyphs-in-the-contextual-menu.md","Order":1}],"Id":"63e7f060-fbb4-440b-8a2a-f7aa9fa52c99","Path":"font-window-contextual-menu.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Font window contextual menu","Languages":[{"Code":"en","Title":"Font window contextual menu","Slug":"font-window-contextual-menu","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7286197a-e479-4502-8045-d17b72070755","Path":"hide-unfiltered-glyphs.md","Order":1}],"Id":"e40dbfda-c53a-4bde-a991-7c9938aa1d59","Path":"font-window-filters.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Font window filters","Languages":[{"Code":"en","Title":"Font window filters","Slug":"font-window-filters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3d83864a-f2f4-4434-9609-0ac13284767e","Path":"status-bar-visibility.md","Order":1}],"Id":"d9388149-a11d-4338-8fb3-da121520962e","Path":"font-window-status-bar.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Font window status bar","Languages":[{"Code":"en","Title":"Font window status bar","Slug":"font-window-status-bar","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"7ec4bd56-11e4-4ff2-a2d6-ab00f3cddbb9","Path":"font-window-cells.md","Order":1}],"Id":"d72adab6-67f4-4bfe-9013-09d1cb3584d4","Path":"font-window.md","Order":14,"CategoryType":1,"Icon":null,"Title":"Font window","Languages":[{"Code":"en","Title":"Font window","Slug":"font-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"62486211-eab8-4b35-846b-7ddde76bf9c7","Path":"note-page.md","Order":2},{"Id":"0ebe181f-f067-4c33-a515-2af90f85a2d9","Path":"searching-the-font-info-dialog.md","Order":1},{"Id":"4895753a-d9ad-4d12-8261-53f44770c32d","Path":"parameters-page.md","Order":3},{"Id":"99b27dc3-a93f-41a3-8199-0854fb471146","Path":"overview-page.md","Order":4},{"Id":"e1778c95-0086-4e2c-b596-9c655ee16bc5","Path":"applying-font-info-changes.md","Order":5}],"Id":"af5a0ede-ce1f-4368-889d-745823772911","Path":"the-font-info-dialog.md","Order":1,"CategoryType":1,"Icon":null,"Title":"The **Font Info** dialog","Languages":[{"Code":"en","Title":"The **Font Info** dialog","Slug":"the-font-info-dialog","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6b27a5a0-6b02-4e25-b41a-40042bae843c","Path":"copypaste-of-classes-between-fonts-or-masters.md","Order":1},{"Id":"71713889-a8f2-494b-8259-20d50957397b","Path":"find-glyph-search-box.md","Order":2}],"Id":"ec56c436-fc96-49dd-99dd-e77da3e8b958","Path":"classes-panel.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Classes panel","Languages":[{"Code":"en","Title":"Classes panel","Slug":"classes-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f51a2c8f-6acc-4f6f-94dc-a6df2247d9c6","Path":"choose-if-new-glyphs-should-be-independent-components-or-references.md","Order":1},{"Id":"05eff21b-df9e-48ff-ada7-60199e358c64","Path":"option-to-replace-suffix.md","Order":2},{"Id":"c72582cf-e47c-4643-abd7-6cdf4fb156a3","Path":"copy-kerning-classes.md","Order":3}],"Id":"0c3fe3e4-1257-44a1-8935-c1375b87a881","Path":"duplicate-glyphs.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Duplicate glyphs","Languages":[{"Code":"en","Title":"Duplicate glyphs","Slug":"duplicate-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7b7e1dd1-5e74-445e-ae07-736f2c6ebd66","Path":"compare-fonts.md","Order":2},{"Id":"63aa31f9-6e3e-432e-a42a-a2b56b89785e","Path":"fonts-with-identical-names.md","Order":1}],"Id":"b5a419f5-dac5-4287-93f3-aa81e1466562","Path":"fonts-panel.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Fonts panel","Languages":[{"Code":"en","Title":"Fonts panel","Slug":"fonts-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"386c5e59-f9f4-4bbb-a6eb-2a7b577523b9","Path":"warning-about-unused-lookups.md","Order":2},{"Id":"71e610ef-c4ff-40ab-88d3-6cb766ac9926","Path":"update-features-to-match-reduced-glyph-set.md","Order":1}],"Id":"5716e4b4-4bdc-4ac3-8cba-6dfae7121086","Path":"compiling-features.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Compiling features","Languages":[{"Code":"en","Title":"Compiling features","Slug":"compiling-features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7020ed55-72eb-4e42-b2b8-ab72f6f6f141","Path":"find-next.md","Order":1},{"Id":"42a1d401-8eff-45da-ab84-10160ab25a7b","Path":"navigate-between-feature-definitions.md","Order":2}],"Id":"3d0f35b2-5485-4656-95f9-4d5885d79fe2","Path":"features-panel.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Features panel","Languages":[{"Code":"en","Title":"Features panel","Slug":"features-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"57301a39-7228-4357-a064-b88493e60bbb","Path":"automatic-features.md","Order":1}],"Id":"a36d7e70-0342-44f0-bfea-b2dc8401d154","Path":"opentype-features-and-unicode.md","Order":12,"CategoryType":1,"Icon":null,"Title":"OpenType features and Unicode","Languages":[{"Code":"en","Title":"OpenType features and Unicode","Slug":"opentype-features-and-unicode","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f8d754ce-7add-4369-9b7f-6b8f9eb27642","Path":"no-export-in-glyph-panel-and-the-noexport-export-to-declare-glyphs-nonexporting.md","Order":1}],"Id":"e40a849c-d3c9-4305-b4fb-62a9f0ee7e1a","Path":"non-exporting-glyphs.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Non-exporting glyphs","Languages":[{"Code":"en","Title":"Non-exporting glyphs","Slug":"non-exporting-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"828cacb8-da2c-443b-befb-eb8fb3e052c3","Path":"manual-reordering-of-glyphs.md","Order":8},{"Id":"7e685749-8885-4258-acbd-39e4b9f84b16","Path":"deleting-glyphs-1.md","Order":3},{"Id":"d406ac52-ebf7-4ed3-8182-cb52d021fd8e","Path":"case-conversion-of-the-font-window-selection.md","Order":9},{"Id":"c9cd045e-0036-44a4-9c0b-acde3ed3ff9b","Path":"font-new-glyph.md","Order":2}],"Id":"14ba304c-73c9-49da-87eb-0078a96645cf","Path":"glyphs-fonts.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Glyphs & fonts","Languages":[{"Code":"en","Title":"Glyphs & fonts","Slug":"glyphs-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c1f9e96d-1f60-4e4f-af05-b6e2f799cc50","Path":"updates-1.md","Order":3},{"Id":"d6ad1be5-2f1f-4cef-aee6-f6d3212ad0ed","Path":"fontlab-community.md","Order":4},{"Id":"c5f3b8d1-b9c4-482b-b419-bf6335937793","Path":"fontlab-vi-and-7-reviews.md","Order":7},{"Id":"80ee5a88-1a0e-46b4-bc7e-8cce99b054d0","Path":"towards-fontlab-7.md","Order":6},{"Id":"66727471-e530-47e1-b5f8-6999829d67cd","Path":"bug-and-crash-reporting.md","Order":5},{"Id":"00a02171-c7b2-40ff-8183-525d75a6bbb5","Path":"keyboard-shortcuts-2.md","Order":8},{"Id":"fc8c3b2f-5261-4b76-a3e4-bf18fa6e9a7b","Path":"installation-and-requirements-1.md","Order":2},{"Id":"9e4c9e15-9fe4-40d1-8980-5b59f8895602","Path":"getting-started-in-fontlab.md","Order":9},{"Id":"786fc013-60cc-428c-afad-c723d957c854","Path":"introduction-4.md","Order":1}],"Id":"2f7add57-a06a-4ca8-96b2-3613b77e7a4e","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Intro","Languages":[{"Code":"en","Title":"Intro","Slug":"intro","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"cb91d791-d710-44c7-93b8-9e528e11665b","Path":"fontlab-7-release-notes-part-5-1.md","Order":6},{"Id":"dafaba0a-7996-42d7-af46-7aabb25cf36a","Path":"fontlab-7-release-notes-part-1-1.md","Order":2},{"Id":"50903974-822a-4583-9717-1f570fc6e9eb","Path":"fontlab-7-release-notes-part-3-1.md","Order":4},{"Id":"007cfe30-7334-4046-a2f3-8939c0f57a21","Path":"fontlab-7-release-notes-part-2-1.md","Order":3},{"Id":"c752753c-4e3e-44b6-b1e9-f7fc7cc6c20e","Path":"fontlab-7-release-notes-part-4-1.md","Order":5},{"Id":"860d5f35-df46-4e63-af05-e647af31da7c","Path":"intro-1.md","Order":1}],"Id":"306435f4-e098-49c6-b3e2-fe7761824c21","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"7.0.0.7264","Languages":[{"Code":"en","Title":"7.0.0.7264","Slug":"7007264","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"89d6c0bb-2655-40cc-a827-b89bd5ba06f0","Path":"7117383.md","Order":13},{"Id":"a381d4a3-dcfa-45cb-8ece-4dd232c2e139","Path":"6006550.md","Order":36},{"Id":"edc787ec-cc71-4129-bf8a-70e810286c8f","Path":"6116878.md","Order":24},{"Id":"e675d887-00c9-4aad-bdff-3546ddb9bfab","Path":"7117382.md","Order":14},{"Id":"7ca95ccd-4c35-47e6-a2e9-9832840d4eb0","Path":"6126927.md","Order":22},{"Id":"2a62ed07-d2dc-4111-a25b-66f87e43a56a","Path":"release-notes-fontlab-7207614.md","Order":6},{"Id":"d7eb72aa-6088-462a-9bf1-7d285fbb996a","Path":"7127436.md","Order":10},{"Id":"e7fcafa7-6237-4dab-9077-b029c2d1268b","Path":"6137016.md","Order":20},{"Id":"70cf2068-7f31-4d61-9a33-4808be276723","Path":"6116879.md","Order":23},{"Id":"0c7e63cb-ef54-46ae-ba0d-64a835b68c01","Path":"6096798.md","Order":26},{"Id":"9a2f320c-ce75-405f-a4c6-b33edc8960b7","Path":"6036611.md","Order":33},{"Id":"069c2598-0eb1-42a7-b26c-99aa597cc043","Path":"6106871.md","Order":25},{"Id":"c247acc3-5bf0-484f-a4ed-7ef742a0e074","Path":"release-notes-archive.md","Order":2},{"Id":"be050fec-1efe-46fb-8a86-67527fb1be02","Path":"7127432.md","Order":12},{"Id":"1cff900b-1731-4984-a09e-4b609a9f9c82","Path":"6147044.md","Order":18},{"Id":"36c47707-89cb-4429-a240-a9e2e5578492","Path":"6137013.md","Order":21},{"Id":"c688d974-1a43-4685-acb4-8a1976d4bfc6","Path":"6066722.md","Order":30},{"Id":"d24198cc-7819-45f5-9981-2d272c8a6ebd","Path":"6016558.md","Order":35},{"Id":"aafab90c-2a28-4cb6-9ed3-5e75d61d3e83","Path":"6086790.md","Order":27},{"Id":"6db16735-3478-4f03-a577-cce10a4064ac","Path":"7127435.md","Order":11},{"Id":"f1da8cfc-1dc2-4fdc-aa96-51838c6ba985","Path":"release-notes-fontlab-7207622.md","Order":5},{"Id":"7d92b6a0-c918-4889-a9e9-5735552a259b","Path":"release-notes-fontlab-7207608.md","Order":7},{"Id":"f5addaa9-40d2-4c99-aefe-be5f36a48e2b","Path":"7137495.md","Order":9},{"Id":"643b05be-145d-406b-bab4-118b9f6b25fd","Path":"6147043.md","Order":19},{"Id":"e4769702-b7e0-491a-944c-5989ba129541","Path":"release-notes-fontlab-7207649.md","Order":3},{"Id":"d00551b5-573c-4983-ad9d-445c10f1aef3","Path":"6076772.md","Order":29},{"Id":"d8fb6da5-46f7-409e-a80a-8fbab060943b","Path":"release-notes-beta.md","Order":1},{"Id":"c75f8849-19da-40aa-bafe-f8a4bf5364ad","Path":"7017276.md","Order":16},{"Id":"44f15877-cc70-4d53-bbdf-77b42aaf57e4","Path":"release-notes-fontlab-7147515.md","Order":8},{"Id":"5f26cabc-20bd-4dd7-8cf9-2ea2510f4335","Path":"6056675.md","Order":31},{"Id":"92a96f48-8e8b-40e4-8d6d-4b1a4d6f8c08","Path":"6026578.md","Order":34},{"Id":"58cb9097-d4c2-4ba2-8f5c-54a0b729c301","Path":"6046634.md","Order":32},{"Id":"887f59a7-f927-4ca6-b2b1-937d9da1e762","Path":"6076774.md","Order":28},{"Id":"a2855836-1611-4716-89d5-e497dbd25628","Path":"7107363.md","Order":15},{"Id":"62f4bbfa-91de-4639-8b96-e7427a05b9a7","Path":"release-notes-fontlab-7207644.md","Order":4}],"Id":"bf1ccef3-7ef0-46e0-b5e1-1800b6bdc036","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Release History","Languages":[{"Code":"en","Title":"Release History","Slug":"release-history","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"388330f6-9a2e-454d-bcfc-7ca718997b06","Path":"fontlab-multiseat-license-setup.md","Order":1},{"Id":"c0a01975-b0b8-4f18-a646-b66d61888865","Path":"fontlab-credits-1.md","Order":2},{"Id":"bef68812-9394-424f-b3e6-77588f5d9b8e","Path":"fontlab-licenses.md","Order":3}],"Id":"73bfad19-0acf-49d7-8bc1-2fbe49f30a55","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Appendices","Languages":[{"Code":"en","Title":"Appendices","Slug":"appendices","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"1b7e924e-6bc9-410c-b8de-020034509373","Path":"glyph-substitution-rules-1.md","Order":1}],"Id":"09185267-de7c-4d89-908d-bcc100f8f1e0","Path":"opentype-features.md","Order":4,"CategoryType":1,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"83119f00-fc49-4686-b86a-1ddc05d9c3bf","Path":"scripting-with-python.md","Order":1},{"Id":"c3981cad-2110-4ae4-8931-95cd2692b3d9","Path":"scripts-menu.md","Order":2}],"Id":"70a1c07c-165b-4ff3-a3f7-a01d081675f9","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Python","Languages":[{"Code":"en","Title":"Python","Slug":"python","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dc1edcdc-d12a-4312-b4d3-fbc8dc380170","Path":"before-you-export-1.md","Order":2},{"Id":"49a6a419-6a7a-4abe-9b5b-da37b9131653","Path":"exporting-options.md","Order":3},{"Id":"8c1ff5f1-21e8-4e5f-9ad3-b1e98a857caa","Path":"export-profiles-2.md","Order":4},{"Id":"97aeae6b-e1d0-45ec-8bb2-4c39aeed6afb","Path":"additional-export-features.md","Order":5},{"Id":"d9610c11-c60f-4b34-b182-3972c152fd8c","Path":"exporting-fonts-3.md","Order":1}],"Id":"ab2a6f6e-ba6a-40a1-b86e-acfc41e780e1","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Font Export","Languages":[{"Code":"en","Title":"Font Export","Slug":"font-export","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d4d6dfbd-fb71-409f-b1f3-1c46c15d648e","Path":"postscript-hinting-1.md","Order":3},{"Id":"21882750-8230-41f6-8ce5-857f98070c09","Path":"automatic-hinting.md","Order":4},{"Id":"29e82c70-fa93-474d-9938-ed24f3c1a54b","Path":"hinting-a-font-1.md","Order":1},{"Id":"2cf0f06c-51b1-4809-8b9d-2e27389f2261","Path":"truetype-hinting-1.md","Order":2}],"Id":"7b91e507-5483-4bba-a4b5-331932dbc76e","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Hinting","Languages":[{"Code":"en","Title":"Hinting","Slug":"hinting","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"b082332a-1f51-4c54-8427-4fc6b1a0d637","Path":"font-info-5.md","Order":1},{"Id":"ef1b428f-cffe-456d-b7d1-4dbbdac21792","Path":"embedding.md","Order":2}],"Id":"3323df81-eccf-4fdf-979d-b374e6353e87","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Font Production","Languages":[{"Code":"en","Title":"Font Production","Slug":"font-production","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"2acbe0c4-c258-40e6-8134-3ee8ea65e57a","Path":"guides-tool-2.md","Order":15},{"Id":"3edb738c-ecf4-4284-a54e-9177f5d66395","Path":"truetype-hinting-tool-1.md","Order":17},{"Id":"d3dab4d4-dd2f-425f-85f0-482af5a22871","Path":"pencil-tool-2.md","Order":8},{"Id":"b56bc679-eb38-42c5-888b-7118b1f3c85b","Path":"ellipse-tool-2.md","Order":18},{"Id":"762aec61-2961-4ba0-8968-015e5a030ac9","Path":"rectangle-tool-2.md","Order":19},{"Id":"1d1f80f9-dd88-47cd-ac6c-ce1fa859e74e","Path":"rapid-tool-2.md","Order":9},{"Id":"bae5d06f-9158-4615-9e2f-bc1adfa0574a","Path":"scissors-tool-2.md","Order":12},{"Id":"a58f2f3a-058b-4c1e-9e77-cd2afb131c53","Path":"eraser-tool-2.md","Order":6},{"Id":"73bc1233-dbc9-4a1e-8431-50c9214d20d5","Path":"fill-tool-1.md","Order":14},{"Id":"679bdfe7-b9e4-4af8-9b49-ad5a597b9ba9","Path":"matchmaker-tool-2.md","Order":16},{"Id":"7521d7d0-231a-419a-8ee6-474b0ab85584","Path":"contour-tool-2.md","Order":1},{"Id":"909010ac-334a-49af-a2a6-7587c2a619ce","Path":"pen-tool-2.md","Order":10},{"Id":"c63009fc-ee41-40d2-8b48-828b3ae584a5","Path":"magnet-tool-1.md","Order":13},{"Id":"eefe3ecd-78d9-4bb8-b76a-a37c910305ce","Path":"brush-tool-2.md","Order":7},{"Id":"55ddb582-7847-4158-8b22-672bd03a7cd3","Path":"text-tool-2.md","Order":5},{"Id":"f8bab9d0-40aa-4641-8a4a-5f3e2a718106","Path":"metrics-tool-1.md","Order":3},{"Id":"f198c5b7-01f3-4c65-88a5-f85454acfa57","Path":"element-tool-1.md","Order":2},{"Id":"72f7a89e-c492-4abc-abb3-bcd2f48bdf30","Path":"kerning-tool-1.md","Order":4},{"Id":"1e551fde-fccd-47cd-aee8-4ec469557835","Path":"knife-tool-3.md","Order":11}],"Id":"d660afff-c795-4055-9045-bc20e9d5faf0","Path":"tools-1.md","Order":16,"CategoryType":1,"Icon":null,"Title":"Tools","Languages":[{"Code":"en","Title":"Tools","Slug":"tools-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4ca79a14-ba81-40db-b558-c205ca16cbdc","Path":"hinting-actions-1.md","Order":5},{"Id":"5cb8aa99-6f94-4f60-9de7-e42f792694d3","Path":"metrics-actions-1.md","Order":3},{"Id":"0be360e5-001d-4baa-a0fc-4cd332625ba6","Path":"basic-actions-1.md","Order":1},{"Id":"6aa5af28-d4b9-46b3-881a-4b664a2cb4b3","Path":"contour-actions-1.md","Order":2},{"Id":"944f71e2-6163-4f80-8488-ae34f1224f81","Path":"effects-1.md","Order":4}],"Id":"f0efd799-ddc5-4c2f-901c-23d4a892b4a5","Path":"actions-1.md","Order":17,"CategoryType":1,"Icon":null,"Title":"Actions","Languages":[{"Code":"en","Title":"Actions","Slug":"actions-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"982bd329-19d0-4376-a413-5808c379a370","Path":"pairs-and-phrases-panel-1.md","Order":21},{"Id":"b7d7fe39-be1e-40bb-9bb0-76f41e5cdc0d","Path":"stroke-panel-2.md","Order":25},{"Id":"98606dc8-721f-406c-b0b2-773eb36aea11","Path":"node-panel-1.md","Order":19},{"Id":"087a310e-7299-4357-aacb-f1b49685b318","Path":"image-panel-1.md","Order":15},{"Id":"b7479d41-11a4-42d7-ba34-eff505e0a9c3","Path":"preview-panel-5.md","Order":22},{"Id":"f3427c96-b734-4426-9b78-79a4f4d06ac0","Path":"anchors-and-pins-panel-1.md","Order":1},{"Id":"1ab9fae2-1aa8-42b7-b3dd-61aa993381ea","Path":"guideline-panel-1.md","Order":13},{"Id":"dd5d5a4e-5f6d-48b6-a63d-8b5aa1cbcc66","Path":"transform-panel-3.md","Order":28},{"Id":"b6aee0d8-ac99-4513-ab55-ad4128f24a20","Path":"layers-and-masters-panel-1.md","Order":17},{"Id":"9f0e2c41-dbb7-4c10-aa74-32b4283dd93f","Path":"swatches-panel-1.md","Order":26},{"Id":"0d2f38b3-1ed8-4463-a9ec-b996b4c7dc89","Path":"color-panel-1.md","Order":4},{"Id":"ac6f750e-be72-4b24-8d52-3c2ac6c863b8","Path":"source-panel-1.md","Order":24},{"Id":"26fe7c98-b4e4-47ac-92c8-b89dcdc05cd3","Path":"tables-panel-1.md","Order":27},{"Id":"176de8b7-a484-454e-b557-cfd526bc6923","Path":"variations-panel-2.md","Order":29},{"Id":"1b3e3992-6cd4-4273-9181-d5e619015803","Path":"fontaudit-panel-1.md","Order":7},{"Id":"9ff66cbb-9e02-4775-8cef-4cfd41e8644c","Path":"glyph-panel-1.md","Order":12},{"Id":"0baf4500-60c4-4d70-973c-21d0fbc1a350","Path":"font-map-panel-1.md","Order":9},{"Id":"dc87345b-88bb-4f03-950e-221f4b751f52","Path":"metrics-panel-1.md","Order":18},{"Id":"3c04edb0-521f-488d-aa94-9ab169742587","Path":"scripting-panel-2.md","Order":23},{"Id":"c90edc5a-2190-47f9-8fc9-3a8493ddaa6e","Path":"brush-panel-2.md","Order":2},{"Id":"1f7eae85-93d3-4e78-b2af-7d86f35533bc","Path":"view-panel-3.md","Order":30},{"Id":"d50ef996-88bf-4ce7-a7cb-18bfb8306d92","Path":"elements-panel-2.md","Order":5},{"Id":"8b3d5393-fddf-4af6-851c-cce284510649","Path":"kerning-panel-1.md","Order":16},{"Id":"f4a12422-726f-415a-978c-91302383d7a4","Path":"fonts-panel-2.md","Order":10},{"Id":"24619042-69b4-43ec-8ad4-e03844e8719a","Path":"gallery-panel-2.md","Order":11},{"Id":"6128748a-2a95-463a-abb4-7d8cff029a9d","Path":"classes-panel-2.md","Order":3},{"Id":"e1925c68-e8a3-4e28-bd2d-682a48e5e135","Path":"font-info-panel-1.md","Order":8},{"Id":"328eaea3-572e-4872-80fb-f9b3b7d1e3a4","Path":"history-panel-1.md","Order":14},{"Id":"bcad0bf8-18a3-47b3-b4ef-cd69b84b26db","Path":"output-panel-2.md","Order":20},{"Id":"9869f6de-20de-4f12-a2a2-5892233c1202","Path":"features-panel-2.md","Order":6}],"Id":"ed7d34fc-d6f7-47f5-b8fb-26ed04a3db66","Path":"panels-1.md","Order":18,"CategoryType":1,"Icon":null,"Title":"Panels","Languages":[{"Code":"en","Title":"Panels","Slug":"panels-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"2a985162-23ee-49ea-9406-14be07a87422","Path":"using-sketchboard-2.md","Order":8},{"Id":"400b08b4-f668-4948-b59f-b704fabc8836","Path":"grid.md","Order":12},{"Id":"fc4a25a6-cf9e-4435-bdc6-bbd72a80e65e","Path":"metrics-window.md","Order":7},{"Id":"453e2578-8804-41e2-bbe0-cf15e2094ab2","Path":"font-info-dialog-box.md","Order":3},{"Id":"1f9d5460-895a-4889-9e2d-b71488ad7877","Path":"glyph-cell-marks-1.md","Order":5},{"Id":"b8f44b38-3e29-47d2-9a44-f37f37d85a9d","Path":"scoreboard-1.md","Order":13},{"Id":"ad2f2c7e-c490-4f60-8702-54804ef03c4e","Path":"property-bar-2.md","Order":10},{"Id":"32de88f1-be01-4f6d-a308-1bb81b327c81","Path":"keyboard-shortcuts-3.md","Order":14},{"Id":"34d098a2-d151-4971-99ce-9507fa9d2821","Path":"customizing-keyboard-shortcuts.md","Order":15},{"Id":"baf9ad97-fcb2-42e9-beea-99a5ae173aa8","Path":"toolbar-1.md","Order":9},{"Id":"6c328441-cc22-46d5-ae8c-34426f1a3c27","Path":"glyph-window-6.md","Order":6},{"Id":"d44674ac-5594-4b41-9f29-64e11886b623","Path":"rulers.md","Order":11},{"Id":"8253e73e-d56a-4e55-8dd2-3b84a8f62fe5","Path":"welcome-dialog-2.md","Order":1},{"Id":"bed4885d-98e6-4681-92a1-74db1c091dda","Path":"preferences-5.md","Order":2},{"Id":"cfe8d7be-c7e0-4c67-b7c3-58ecba68c956","Path":"font-window-6.md","Order":4}],"Id":"eb2385b6-49b1-4c33-b209-e2206126c03c","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"FontLab User Interface","Languages":[{"Code":"en","Title":"FontLab User Interface","Slug":"fontlab-user-interface","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b2e78318-1ab7-4c3a-8ff9-52f64d1c6198","Path":"glyph-tags-and-classes-1.md","Order":3},{"Id":"c85b649e-cd5a-41f5-b85e-d67b34cb0b4c","Path":"glyph-notes-1.md","Order":1},{"Id":"62651079-7473-4574-9cd6-c70c95d38973","Path":"flagging-marking-glyphs.md","Order":2}],"Id":"ac23282d-0019-4352-903e-a1eec1f14172","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Organizing Glyphs","Languages":[{"Code":"en","Title":"Organizing Glyphs","Slug":"organizing-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ffda3e3c-72d3-4ea5-a250-648819ef6748","Path":"organizing-font-families-1.md","Order":1},{"Id":"b2410d0c-45f1-41c4-aa7d-85759f141007","Path":"working-with-font-variations.md","Order":2},{"Id":"8d1ca545-d542-4ed2-8a00-d34572438295","Path":"creating-a-variable-font-example.md","Order":3}],"Id":"005c0fd0-6abb-4d9e-877a-64710e0b72ef","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Extending Fonts","Languages":[{"Code":"en","Title":"Extending Fonts","Slug":"extending-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5b4f6c1f-1693-4862-a366-0b8dbf7be128","Path":"clean-up.md","Order":2},{"Id":"0334f24b-0e55-40db-98b6-3ee187c76055","Path":"using-the-eraser-tool.md","Order":6},{"Id":"736ff54c-7649-4f2e-92c3-1c03c7a20318","Path":"making-a-font-from-color-vector-graphics.md","Order":10},{"Id":"07cf8ee4-057f-4afe-a7bd-266c8dca25bc","Path":"balance.md","Order":4},{"Id":"2291571e-b80b-4055-81bf-067ce2719a67","Path":"creating-an-italic-font.md","Order":8},{"Id":"f67c51b7-06f2-421d-bf8a-021b402ff317","Path":"slanted-grid.md","Order":9},{"Id":"2310acc5-8e2e-425e-b27b-e020d8daa519","Path":"simplify.md","Order":1},{"Id":"3dce5471-abe4-452d-8b2b-d666c1e74135","Path":"adding-nodes-to-extremes-1.md","Order":5},{"Id":"9c724ca0-f283-42fa-982e-bf12c92316b8","Path":"harmonize.md","Order":3},{"Id":"39b902fe-80a0-432a-9569-4017dfa93bf5","Path":"making-a-font-from-color-bitmap-images.md","Order":11},{"Id":"9ad4d247-c7a8-4a23-82f6-4acf857c6468","Path":"overlaying-fonts.md","Order":12},{"Id":"4a2d314a-6903-4ea5-a328-4fed99a61956","Path":"fontaudit-5.md","Order":7}],"Id":"52b89569-5c4a-4834-b85c-77c998d32d0d","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Correcting glyph drawings","Languages":[{"Code":"en","Title":"Correcting glyph drawings","Slug":"correcting-glyph-drawings","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"55591ccf-65cf-4533-9e61-c8a623c58f7c","Path":"free-transform-operation-1.md","Order":3},{"Id":"c874f075-92e2-4125-949e-a0d5cff1f925","Path":"geometric-transformations-1.md","Order":1},{"Id":"218662e1-25d5-4b71-9bd1-b3d0e11d4a63","Path":"quick-transformations.md","Order":2}],"Id":"eeebbac7-0264-4f90-84ea-3e3e40cc35da","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Transformations","Languages":[{"Code":"en","Title":"Transformations","Slug":"transformations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f8cdf2c4-bb5d-44f5-9ab5-084207693ba9","Path":"editing-kerning.md","Order":3},{"Id":"0e5a9ea8-1edb-4c87-83e1-a08a3251bb38","Path":"using-kerning-classes.md","Order":4},{"Id":"7e112935-e503-4ba7-ac3a-eaf8843181f1","Path":"using-the-metrics-table.md","Order":2},{"Id":"d387c3b0-624c-4d13-87c0-7c15c7241ac7","Path":"editing-glyph-metrics.md","Order":1},{"Id":"803c5d31-d2cc-4507-a074-c8786e4505df","Path":"importing-and-exporting-metrics-1.md","Order":5}],"Id":"774f189d-61f1-40ac-99bd-2d02daa40439","Path":"spacing-and-kerning.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Spacing and Kerning","Languages":[{"Code":"en","Title":"Spacing and Kerning","Slug":"spacing-and-kerning","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a99f5fb4-a26c-45dc-b087-3d9704f0e0f1","Path":"printing-2.md","Order":16},{"Id":"004583c8-8baf-4ef0-a632-c2bcc0311361","Path":"navigating-a-font-1.md","Order":4},{"Id":"03b7624e-3b0e-414c-839d-33e0313807c4","Path":"saving-a-font-1.md","Order":14},{"Id":"8abe5ac8-7ac2-4de4-92d5-566262658605","Path":"deleting-glyphs-2.md","Order":12},{"Id":"3931c36c-fa06-4f38-aada-a5e6ddbcf3ff","Path":"language-support-and-glyphs-1.md","Order":2},{"Id":"f3322239-4b84-44b8-a819-5a0d3e641b14","Path":"using-fonts-and-font-map-panels.md","Order":6},{"Id":"8f3b2754-321f-4dad-8871-f592f1f36d9f","Path":"selecting-a-glyph-for-editing.md","Order":9},{"Id":"87749548-41d3-4401-81fc-eaab69254e99","Path":"sorting-glyphs.md","Order":8},{"Id":"7c96eadf-6361-44fb-939e-a6b8746c1252","Path":"moving-glyphs.md","Order":11},{"Id":"8da38287-d44b-412b-b50f-1749151049c2","Path":"copying-and-pasting-glyphs-1.md","Order":10},{"Id":"ba86559d-1d14-4ebb-9ebb-381077bbcc50","Path":"renaming-glyphs-1.md","Order":13},{"Id":"2f24b33c-9e0f-443c-ab95-67e407685165","Path":"searching-glyphs-1.md","Order":7},{"Id":"beb25176-8708-4236-8707-ea6ff5f7bc0b","Path":"creating-a-new-font-2.md","Order":1},{"Id":"46a6862c-994f-4117-b24d-78ea1c503b0d","Path":"comparing-fonts-1.md","Order":15},{"Id":"776dd0fb-4fa1-42d3-8d15-b0cfecdebf86","Path":"using-the-font-window-1.md","Order":5},{"Id":"b4f81b19-9989-44ff-b0e8-649f48a1f057","Path":"opening-an-existing-font.md","Order":3}],"Id":"2301a52e-e46c-4c3c-a00c-23e27f6ee620","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Working with a Font","Languages":[{"Code":"en","Title":"Working with a Font","Slug":"working-with-a-font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8c46a516-cbeb-4413-95cf-8fec2fc700b1","Path":"unlink-corners.md","Order":6},{"Id":"c2c3c6aa-59b7-4d9c-a630-3f57dd580893","Path":"create-overlaps-1.md","Order":9},{"Id":"2e12bfff-34e5-47b8-ad90-6c5f5141f1c2","Path":"power-brush-1.md","Order":12},{"Id":"1a195f89-0e16-48ba-94ee-a04c54a17ff6","Path":"rewind-record-1.md","Order":13},{"Id":"0734da99-e744-46e8-907b-21ed399e9ef7","Path":"using-smart-corners.md","Order":4},{"Id":"9ca02711-6f6e-47c8-8555-2ef5573ae6c9","Path":"make-overlap.md","Order":10},{"Id":"dd1c48fb-b76b-4f33-b570-dd6507bab9eb","Path":"using-expressions.md","Order":14},{"Id":"d7a59b67-5f33-4848-9d28-1f1c8cb9dcf6","Path":"create-parallel-contour-1.md","Order":7},{"Id":"6c23215a-e9b5-4303-8bc5-d8b6624f70b6","Path":"remove-overlap-1.md","Order":11},{"Id":"cfbacfbe-59bd-4958-b89b-37f95ef3d798","Path":"tunni-lines-2.md","Order":1},{"Id":"0cd50101-1c3a-491e-8b1c-8e99bd2d0a15","Path":"using-glue-selection.md","Order":3},{"Id":"629d74a9-9622-456f-abee-dc8ea6f2c9a9","Path":"power-guides-2.md","Order":5},{"Id":"621a24dc-bf62-43a0-b08d-c0f3d7d546ce","Path":"expand-contour.md","Order":8},{"Id":"5d5ddd1e-5fc1-48d6-a10e-b97a4993edec","Path":"find-and-replace-outline-operation.md","Order":2}],"Id":"f3a975e6-63bc-419f-b7df-a8b39c80daf2","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Improving drawing workflow","Languages":[{"Code":"en","Title":"Improving drawing workflow","Slug":"improving-drawing-workflow","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"588d8b78-0c90-4f90-b713-18173b352cc5","Path":"drawing-vector-curves-1.md","Order":29},{"Id":"38e5cde2-b41d-4de3-9427-c9e2fdda7508","Path":"glyph-window-contents-1.md","Order":9},{"Id":"5e3dfe70-bf2e-4459-a82a-2e2732b54e6c","Path":"moving-single-segments.md","Order":39},{"Id":"c1e4a53e-2d9b-4a88-9e58-400751b19e8b","Path":"using-smart-nodes.md","Order":36},{"Id":"37fc1021-61f8-4ea7-85e8-3482730c79ba","Path":"changing-segment-types-1.md","Order":42},{"Id":"1df17a8f-f5a6-47cc-82fe-c09834e770e5","Path":"using-sketchboard-1.md","Order":19},{"Id":"3770d423-2de1-4d01-9f89-663e80deee63","Path":"using-elements.md","Order":45},{"Id":"d2ab0d5c-3290-47f2-9389-6b5bd486d1c8","Path":"duplicating-contours.md","Order":41},{"Id":"ab2b0dc4-ec99-4004-a17e-2f8369bc5aa1","Path":"using-guides-1.md","Order":16},{"Id":"6a99e2e5-b25d-4dfb-8bc4-6baf24ec7060","Path":"previewing-glyphs-1.md","Order":14},{"Id":"7f3a3a87-3b08-4bad-8236-777c80fa6b6b","Path":"active-points-vs-selected-points.md","Order":30},{"Id":"9b07d4b9-26ed-43e1-ab8a-9b59b4ae7c89","Path":"selecting-points.md","Order":32},{"Id":"8055e3c2-08da-47a1-9d59-d772c42d4b45","Path":"moving-contour-selections-1.md","Order":40},{"Id":"566bdd7a-7e01-4269-8149-0fea724c97a2","Path":"editing-an-existing-glyph-1.md","Order":7},{"Id":"9ad65337-5371-4bcf-bc38-7c62d965f8bc","Path":"add-glyphs.md","Order":2},{"Id":"10d1fbda-ba21-41ce-b99b-4f9d57b92b72","Path":"drawing-with-geometric-shapes-1.md","Order":28},{"Id":"61a7758d-ecae-42e3-9432-9fe287ac9c08","Path":"outline-appearance-1.md","Order":12},{"Id":"3efb84b6-62a8-4ad5-9412-8f81dfd4c4db","Path":".md","Order":15},{"Id":"208d6ece-267e-422b-b1fc-13a95e85b561","Path":"working-with-layers-2.md","Order":24},{"Id":"8c9dc8ad-80ef-44f7-ac2b-505f012bbc1b","Path":"adding-points-1.md","Order":31},{"Id":"175cdabc-71c1-4ee3-8dca-c4e8aa6fc44d","Path":"changing-node-types-1.md","Order":35},{"Id":"09da2870-fae7-4cd2-91de-9b8d4af50451","Path":"selecting-segments.md","Order":37},{"Id":"949fc3a1-dc19-4c50-bf40-fd179354f51e","Path":"generate-glyphs-1.md","Order":3},{"Id":"b3cbef0c-1c75-4f9d-8ec8-287751764eb3","Path":"copying-and-pasting-layers-1.md","Order":25},{"Id":"f41a769a-6cd2-4941-8501-492e64be154c","Path":"scope-of-editing-1.md","Order":17},{"Id":"b395db24-e215-4920-9472-3a5e099f94f9","Path":"using-the-glyph-window-1.md","Order":10},{"Id":"7979eb1c-ccd0-4c27-b97a-174d2d440beb","Path":"creating-a-new-glyph-1.md","Order":1},{"Id":"92d1989e-06ec-401e-a843-71b3a96a8df3","Path":"mask-layers-1.md","Order":26},{"Id":"85e8deec-54c0-466a-b3bc-96426dd9c90a","Path":"view-details-and-settings-1.md","Order":13},{"Id":"9c0e220e-5766-4423-b58b-51a0a96c6ef1","Path":"selecting-contours-2.md","Order":38},{"Id":"9eb5022f-4c50-49cc-89c8-52564f380598","Path":"outline-conversion.md","Order":43},{"Id":"0f25e581-93dc-4035-8f28-9b270e39e4f2","Path":"truetype-editing.md","Order":44},{"Id":"65332f07-3ddf-466f-bbf4-cb43c04e484d","Path":"autotracing-1.md","Order":23},{"Id":"c5ae6958-a3b8-4eae-808f-23e4475e0631","Path":"using-composite-and-auto-glyphs.md","Order":46},{"Id":"8995274e-9144-4d5d-b8bd-5a4d1390c45a","Path":"components-in-fontlab-2.md","Order":47},{"Id":"3241a158-4125-4c48-8f34-52ce5f0bfc02","Path":"working-with-glyphs-1.md","Order":8},{"Id":"80f3fd7b-02b7-4630-82eb-757487896002","Path":"using-element-references.md","Order":49},{"Id":"71edaed7-3368-43d8-8eda-d65c725e85d3","Path":"generate-names.md","Order":5},{"Id":"ea0b713f-00db-4f23-87bf-da8cff4ebf3e","Path":"using-components-1.md","Order":48},{"Id":"891b64a5-d183-470e-bd46-e313b2282254","Path":"moving-points-1.md","Order":33},{"Id":"4c38d47f-bc8c-4a45-80c6-c7878293b227","Path":"rounding-coordinates.md","Order":18},{"Id":"b1acde02-670e-4339-9384-1e8301d7e6ee","Path":"importing-artwork-2.md","Order":21},{"Id":"f84e4004-bc81-4215-b06e-9d56d1ed08db","Path":"deleting-points-1.md","Order":34},{"Id":"86592e0d-a061-48fb-a3e8-e98271ae1efb","Path":"detecting-element-references-or-composites.md","Order":50},{"Id":"eea053ad-4ae5-4f1b-8b13-c98f633b4ccb","Path":"bitmap-effects-1.md","Order":22},{"Id":"f8753baf-a56f-468d-ba01-feff467225dd","Path":"glyph-recipe-syntax.md","Order":4},{"Id":"1b3d1de3-c5a5-48e7-8b10-c53628be72d6","Path":"drawing-freehand.md","Order":27},{"Id":"364f182a-904c-46c1-9fab-059634a487af","Path":"workspaces-2.md","Order":11},{"Id":"38ab54d9-0e6f-4f5c-9ecd-90a0367e429b","Path":"preparing-bitmap-artwork-1.md","Order":20},{"Id":"2c3f5cef-8e35-4926-9144-65ae73b28124","Path":"generate-unicodes.md","Order":6},{"Id":"6f5e35f8-5f11-4108-950c-1cad96464832","Path":"element-stickers-1.md","Order":51},{"Id":"dd861760-3e05-42d9-b6ab-5ea5d092b411","Path":"anchors-and-pins.md","Order":52}],"Id":"34e76651-a167-4ce3-8c03-ff6e2c85b013","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Drawing and Editing Glyphs","Languages":[{"Code":"en","Title":"Drawing and Editing Glyphs","Slug":"drawing-and-editing-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"6c5c4649-381d-4987-a3df-e7c3075fa725","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Designing Type in FontLab","Languages":[{"Code":"en","Title":"Designing Type in FontLab","Slug":"designing-type-in-fontlab","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"6aa5bfec-cba7-4631-bfde-db1b1937f1fb","Path":"other-file-formats.md","Order":3},{"Id":"4b216b0e-b3b5-4cb9-93dd-07a0c3d73823","Path":"color-font-formats.md","Order":2},{"Id":"c4c47719-53cf-4348-b273-27c278331888","Path":"font-formats.md","Order":1},{"Id":"ccbd3189-1034-46d1-a328-f12f38ed6a82","Path":"custom-data-files-and-locations.md","Order":4}],"Id":"945b8fc3-1a16-458c-93f3-3bcf6be3ca73","Path":"files.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Files","Languages":[{"Code":"en","Title":"Files","Slug":"files","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"21a1f68b-87c0-4088-9049-057fa0f610b6","Path":"glyph-positioning.md","Order":14},{"Id":"6124204e-ba16-4118-a1e3-045699529f1e","Path":"mark-attachment-1.md","Order":16},{"Id":"8944ca29-a3d1-44f4-9dca-c9acf510ff29","Path":"components-in-fontlab-1.md","Order":9},{"Id":"c1ee4509-a77e-4f3c-a7c4-af8eb3769f55","Path":"color-glyphs-1.md","Order":13},{"Id":"4b4a2fc8-e292-478c-b7c7-b6e0981bd533","Path":"elements-2.md","Order":8},{"Id":"8d5bf01f-bc80-48f7-a369-f0f925ad9753","Path":"glyph-naming-and-encoding-1.md","Order":2},{"Id":"6af1c9f3-dcff-4e1b-be0a-6f1ad085158a","Path":"kerning-6.md","Order":15},{"Id":"07d8f139-2328-4952-8904-2787e19aadb8","Path":"segments-1.md","Order":5},{"Id":"11c20f84-77df-4b86-82d5-71a990b09369","Path":"measurement-line-1.md","Order":11},{"Id":"b478191b-93e1-4123-9f69-a2f507c201f6","Path":"glyph-metrics-3.md","Order":10},{"Id":"d2fbc7a7-7cbf-4489-9fba-62698189fa57","Path":"points-1.md","Order":6},{"Id":"6c55a997-af72-4412-949a-84b27bc0ca92","Path":"about-glyphs-1.md","Order":1},{"Id":"57742ae1-2915-487d-839e-d7deb7fefcfc","Path":"curve-types-1.md","Order":4},{"Id":"b9ade1e1-c854-4bb6-9a80-07220c84d4ba","Path":"composite-and-auto-glyphs.md","Order":12},{"Id":"e5c2bae6-6e9e-4049-ade3-a6ac01a36653","Path":"layers-and-masters-2.md","Order":3},{"Id":"cdbc6cdd-fc11-4a98-a644-d9862d4b1a25","Path":"contours-2.md","Order":7}],"Id":"caa21bd0-b83c-4712-962b-9bdbb070b5a9","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Glyphs","Languages":[{"Code":"en","Title":"Glyphs","Slug":"glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"144b531f-3ad9-4a65-a57e-d94dc7fd529f","Path":"font-sizes-and-the-coordinate-system.md","Order":3},{"Id":"41d7ce82-7547-4f08-8f97-e86d76c1fc27","Path":"font-naming-1.md","Order":2},{"Id":"7ab2711f-e804-41e2-8d82-fe5107fc5d59","Path":"variations-2.md","Order":4},{"Id":"593b8036-06a3-4206-81ac-5e9b21a85c13","Path":"glyphsets-1.md","Order":5},{"Id":"c5cfec01-5894-4af7-9f4b-be28b23b1d88","Path":"font-2.md","Order":1}],"Id":"d92b501a-81ef-456a-80c3-37c7a68da40e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Fonts","Languages":[{"Code":"en","Title":"Fonts","Slug":"fonts","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"2202202f-91a7-48da-b175-c497d6ecd8a3","Path":"hinting-3.md","Order":3}],"Id":"455c26c7-fc1b-4856-a9bd-763e85aeb65a","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Basics","Languages":[{"Code":"en","Title":"Basics","Slug":"basics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"9497a8ca-45d2-450c-987f-bffb87f9fd10","Path":"fontlab-7-release-notes-part-3.md","Order":3},{"Id":"2935f927-1e89-4cc5-8b2c-9fbf88685167","Path":"fontlab-7-release-notes-part-1.md","Order":1},{"Id":"a49ebc55-5ef9-4165-a989-5b3b177a591c","Path":"fontlab-7-release-notes-part-4.md","Order":4},{"Id":"c01753fa-231a-42ed-9bc4-6f217ba13579","Path":"fontlab-7-release-notes-part-2.md","Order":2},{"Id":"3e0687e0-fbd1-42fb-a944-70ad40421ba9","Path":"fontlab-7-release-notes-part-5.md","Order":5}],"Id":"ec7fedf0-5d95-44ea-bbf5-2e8f01f9dfbc","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"New in 7","Languages":[{"Code":"en","Title":"New in 7","Slug":"new-in-7","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"4f8f3abb-5ca5-409c-84a0-6e23c162c8c3","Path":"release-notes-current.md","Order":1}],"Id":"e901e4c4-cb2c-47b5-a9df-53cb3021ea5f","Path":"release-notes.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Release Notes","Languages":[{"Code":"en","Title":"Release Notes","Slug":"release-notes","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"7465cef2-233d-411c-bc83-6fe3b0b1fd4d","Path":"fontlab-7-user-manual.md","Order":1}],"Id":"2f16f8d4-73b5-4ec1-bbfc-e3ab2170ba01","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"GITHUB","Languages":[{"Code":"en","Title":"GITHUB","Slug":"github","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"738d7597-26e6-4e49-a449-25855a63c8da","Path":"upgrading-from-fontlab-5-or-vi.md","Order":6},{"Id":"590d8a45-83f6-4c65-ac35-f4900488cdf0","Path":"validation-1.md","Order":8},{"Id":"cf210f74-a999-4248-adb5-71369facc065","Path":"demo-mode-1.md","Order":2},{"Id":"4cd35456-ded7-44a8-9bda-3e4ce294dbff","Path":"using-previous-versions-1.md","Order":7},{"Id":"8098c07a-b41e-4daf-a5d2-915efcf2d94e","Path":"updates-2.md","Order":5},{"Id":"4fb9b848-1e1e-4f51-83ef-980ad3f3bee0","Path":"trial-period-1.md","Order":4},{"Id":"9d13eb37-521c-4093-9872-678568c22742","Path":"first-run-on-macos-1.md","Order":3},{"Id":"6336b9dd-603d-48c0-adda-c6c13c23c30a","Path":"academic-licenses-1.md","Order":1}],"Id":"2396d421-757c-43ef-84c7-732d8ffc608c","Path":"installation-and-requirements.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Installation and Requirements","Languages":[{"Code":"en","Title":"Installation and Requirements","Slug":"installation-and-requirements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4e8f9a09-5140-40c2-a8ac-addadf06f67c","Path":"attaching-files-1.md","Order":1},{"Id":"33e528e3-98b3-4eae-b670-de4689cfa1d8","Path":"how-to-reopen-a-report-1.md","Order":2},{"Id":"6af2addc-0ae6-40b1-a90d-cab38c1736b7","Path":"submitting-a-report-1.md","Order":3},{"Id":"e2f90dff-5461-4438-9d92-b3d742f2979e","Path":"user-requests-1.md","Order":4},{"Id":"b16e5e55-aeef-44db-a029-5c3a110d050c","Path":"when-should-i-report-1.md","Order":5}],"Id":"4aceae5f-b56e-4c8f-8472-5092abc18078","Path":"support-1.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Support","Languages":[{"Code":"en","Title":"Support","Slug":"support-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"ca6bebdb-cdcb-44b9-9577-a7ab630df75c","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Getting Started","Languages":[{"Code":"en","Title":"Getting Started","Slug":"getting-started-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c0d9c18d-0958-44c6-9510-14c761ca11b8","Path":"advance-width-1.md","Order":1},{"Id":"9c898f7f-570a-4a42-8366-827f91e993bf","Path":"kerning-7.md","Order":2},{"Id":"5492290a-2556-4548-817d-2bf9325ccf73","Path":"sidebearings-2.md","Order":3},{"Id":"b64f0c22-6e61-4a57-8c58-d5b99b688c29","Path":"the-em-square-1.md","Order":4}],"Id":"a6bbf69e-afde-4aff-bd0e-fb3f17f84198","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Glyph Metrics","Languages":[{"Code":"en","Title":"Glyph Metrics","Slug":"glyph-metrics-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"7eb1cdf9-872e-45ec-b157-d6a424d303ff","Path":"script-1.md","Order":2},{"Id":"aafda55c-9b5c-47c5-8b0e-586c232ed234","Path":"font-3.md","Order":4},{"Id":"fc164a35-aa3e-474f-b480-9c07a7589bb9","Path":"opentype-2.md","Order":11},{"Id":"2ff704a0-5692-459b-b6e8-3390abc6afa5","Path":"contour-and-point.md","Order":3},{"Id":"012e3cc3-aa87-46e1-8be7-76a3402bbb28","Path":"font-family-1.md","Order":5},{"Id":"754f84c7-ccfe-47d2-b642-40385860a7a7","Path":"lookup-1.md","Order":9},{"Id":"42537c68-061d-47f2-9e09-201ba0dd7fc3","Path":"positioning-1.md","Order":12},{"Id":"64821c2b-261d-4884-bfbf-dccf52ecf53f","Path":"feature-1.md","Order":6},{"Id":"701050cb-8507-48ea-bcda-839296ab1bd1","Path":"metrics-and-dimensions-1.md","Order":10},{"Id":"8f212ada-8bea-411e-a346-b9002c59512e","Path":"component-1.md","Order":13},{"Id":"0206d111-f84f-4ccb-aebf-f77ba7874b5a","Path":"element-1.md","Order":7},{"Id":"28dc4fc2-efb2-494b-b998-b8f42fd944f9","Path":"character-vs.md","Order":1},{"Id":"36d6f00d-2b85-4e44-9d18-a0f3a6e26a4c","Path":"substitution-1.md","Order":14},{"Id":"e75d1a79-16c7-487f-8fd0-5ba680c678ce","Path":"variable-font-1.md","Order":15}],"Id":"024aea4d-3fce-4165-a094-05dc249e98b8","Path":"basic-concepts-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Basic Concepts","Languages":[{"Code":"en","Title":"Basic Concepts","Slug":"basic-concepts-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"14f2d557-7972-44e3-92d8-1882c71e93ae","Path":"glyph-window-7.md","Order":1},{"Id":"2db5dbe2-4a3a-4c51-b06e-f72bee7c5f6c","Path":"zoom-control.md","Order":6},{"Id":"a9285699-28f4-4aba-acfa-bf40de400fe6","Path":"metrics-and-dimensions-2.md","Order":2},{"Id":"3b383635-c731-4bb5-89fd-f21b29621486","Path":"property-bar-4.md","Order":3},{"Id":"3afb15e4-25cb-4527-8935-06838bd667e0","Path":"rulers-and-guides.md","Order":4},{"Id":"879d61a3-46e9-43da-a5f8-81616f7918d8","Path":"view-options-2.md","Order":5}],"Id":"a9697571-db23-469f-88c3-4886f5b5ea70","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Glyph Window","Languages":[{"Code":"en","Title":"Glyph Window","Slug":"glyph-window-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c0ab5043-4218-4866-88cf-cbd22abe4933","Path":"status-bar.md","Order":5},{"Id":"168a2c50-5b53-4a26-99ff-d5eed7cdb54b","Path":"list-view.md","Order":6},{"Id":"16c38e04-8b82-441b-a190-b41d9a0f9332","Path":"visual-indicators-in-the-table-area.md","Order":7},{"Id":"82a36664-d9cb-44a2-a9b8-76b49021f1ba","Path":"property-bar-3.md","Order":3},{"Id":"b7cb3e2b-580c-4b54-85b5-d61477adab20","Path":"font-window-7.md","Order":1},{"Id":"2709f5f2-f6b8-4387-be04-ffda9e35166f","Path":"sidebar-1.md","Order":4},{"Id":"254d43e6-e6a1-4fa3-b30e-f7b8537f84b7","Path":"table-area.md","Order":2}],"Id":"4c92563d-d26d-470f-b651-3730e8357b4d","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Font Window","Languages":[{"Code":"en","Title":"Font Window","Slug":"font-window-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"68c3a08e-fa2f-4896-9c2c-73a30225f52a","Path":"operations-1.md","Order":2},{"Id":"241b3a01-df4e-4ed0-8362-9024732e1540","Path":"new-fonts-and-glyph-sets.md","Order":1},{"Id":"063b2d5b-de95-4320-a40f-6b4d1b3495e9","Path":"welcome-dialog-3.md","Order":3}],"Id":"fc33c486-87d3-4d66-b90e-9b26d97ac401","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Welcome Dialog","Languages":[{"Code":"en","Title":"Welcome Dialog","Slug":"welcome-dialog","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4b5ec1c4-b36c-4e9d-8642-694f4662310c","Path":"docking-the-toolbar.md","Order":2},{"Id":"dbcf4af2-fcd9-4c47-b565-44987fbc389a","Path":"additional-commands.md","Order":1},{"Id":"982b4b1d-168d-4fe0-8733-03269c8f4ad9","Path":"the-toolbar-1.md","Order":4},{"Id":"998b7c12-2cbd-4368-9acd-ff95db1e5112","Path":"keyboard-shortcuts-for-tools.md","Order":3}],"Id":"e8c37352-5ecc-4f77-af81-bf579967d004","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"The Toolbar","Languages":[{"Code":"en","Title":"The Toolbar","Slug":"the-toolbar","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9938aaf6-dc60-4fd6-a3dc-d8b6498bb4ba","Path":"managing-panels.md","Order":2},{"Id":"8aadd6b0-8a4a-4fc8-a66a-339f16fdfc7b","Path":"additional-options.md","Order":1},{"Id":"c22f8099-930a-4328-b709-adb426f767ed","Path":"panels-list-2.md","Order":3},{"Id":"6e8f3c54-bc98-40c5-86d2-76feb918a7c4","Path":"what-each-panel-does.md","Order":4}],"Id":"12b1cd5e-068b-4d8e-86f5-2514401e2982","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Panels","Languages":[{"Code":"en","Title":"Panels","Slug":"panels-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e0030216-e405-40a5-9626-cd0839824136","Path":"keyboard-shortcuts-5.md","Order":1},{"Id":"76e7cdaf-b10d-483f-bef6-43fecf8e1b21","Path":"navigation-shortcuts.md","Order":2},{"Id":"b9c673c0-649c-493c-b705-44c1d6eeaa33","Path":"using-commands.md","Order":3}],"Id":"92f377a9-f515-47fd-9ee8-a555338a9d92","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Commands & Shortcuts","Languages":[{"Code":"en","Title":"Commands & Shortcuts","Slug":"commands-shortcuts","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"669f126b-aaf0-4334-92f1-a5a2d0c9d876","Path":"workspaces-3.md","Order":8},{"Id":"888389c6-e5f8-4dd2-895f-7cf123155914","Path":"quick-help.md","Order":7}],"Id":"a35a89c1-8f2f-4a24-85c9-c0c5049c082f","Path":"running-fontlab.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Running FontLab","Languages":[{"Code":"en","Title":"Running FontLab","Slug":"running-fontlab","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e392e963-03e5-48e0-937f-61c5359e6d2e","Path":"welcome-to-fontlab-7-1.md","Order":1},{"Id":"af435ff0-a00e-437f-a18e-ed95d23976fd","Path":"what-fontlab-7-can-do.md","Order":2}],"Id":"bf5544d1-5d11-4299-a7e7-bf4cd3d81f35","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Welcome to FontLab 7","Languages":[{"Code":"en","Title":"Welcome to FontLab 7","Slug":"welcome-to-fontlab-7","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"176e074d-d6d1-471e-a9b2-cc7203b78972","Path":"keyboard-shortcuts-4.md","Order":3},{"Id":"01c067db-32e9-4b5f-a802-bfa4a717b7ca","Path":"user-community.md","Order":4},{"Id":"6654170f-73da-4535-ab6b-13494321e6bb","Path":"about-this-guide.md","Order":1},{"Id":"d50eb89a-2602-422e-bd97-1b82cb4df558","Path":"always-updated.md","Order":2}],"Id":"e4c7fe3e-d9b8-414a-954f-95ba4c596b89","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"FontLab 7 Documentation","Languages":[{"Code":"en","Title":"FontLab 7 Documentation","Slug":"fontlab-7-documentation","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"d9e85468-84a5-4062-8c2d-e7c1a5e2e0cc","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Introduction","Languages":[{"Code":"en","Title":"Introduction","Slug":"introduction-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"af2003f4-6a1a-414b-a50a-f43bd2ec73ee","Path":"layers-in-font-window-sidebar.md","Order":8},{"Id":"dfba8cb5-5807-46c6-a933-a9eec1440103","Path":"layers-in-new-glyphs.md","Order":6},{"Id":"02f21e12-bcf3-43fa-80fb-89082fc1f5cd","Path":"glyph-window-layers.md","Order":3},{"Id":"6c5be383-66ad-44d7-be2e-095f5d80e1c0","Path":"layers-visibility.md","Order":5},{"Id":"e6db8e38-123c-4c47-a282-39c29015fd3e","Path":"switching-layers.md","Order":2},{"Id":"948a66f3-8d5b-498a-aecf-605dcbad71fe","Path":"show-inactive-layers-as-wireframes.md","Order":7},{"Id":"5d4ae1e8-140b-4203-9af5-f6aeb82acda6","Path":"editing-across-exportable-and-service-layers.md","Order":9},{"Id":"26afc537-a4ff-49e6-ad9d-01360450e041","Path":"removing-layers.md","Order":4},{"Id":"12c762b9-d8a3-477e-936c-da41485087ea","Path":"adding-layers.md","Order":1}],"Id":"0e79646d-43b0-4766-bcb2-112d69d3f2e8","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Working with Layers","Languages":[{"Code":"en","Title":"Working with Layers","Slug":"working-with-layers-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9dce0c6b-6dce-4466-9027-386c0acc84a2","Path":"removing-a-global-mask-layer.md","Order":3},{"Id":"d17e32f6-f87b-4829-b04e-287a9ed234b7","Path":"creating-a-global-mask-layer.md","Order":1},{"Id":"7d9bc62d-d115-4b2f-9ba0-4900084932b4","Path":"global-mask.md","Order":2}],"Id":"e941d944-7784-44eb-bbc8-c70fc4fdab46","Path":"the-global-mask.md","Order":5,"CategoryType":1,"Icon":null,"Title":"The Global Mask","Languages":[{"Code":"en","Title":"The Global Mask","Slug":"the-global-mask","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"eba45c92-a716-4882-ba1e-02487fdb3302","Path":"copy-and-paste.md","Order":1}],"Id":"dd12fb79-aebb-4e86-bbaf-a792c3a61062","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Copying and Pasting Layers","Languages":[{"Code":"en","Title":"Copying and Pasting Layers","Slug":"copying-and-pasting-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f538e45e-37ee-4ebf-aee3-d52bf4cc63c8","Path":"mask-2.md","Order":3},{"Id":"77d70fb4-07fa-4b5c-9c54-5a4ec20743da","Path":"swap-with-mask.md","Order":6},{"Id":"b9e5a547-6719-4814-9031-36b8d2ca8267","Path":"creating-a-mask-layer.md","Order":1},{"Id":"78e0a288-c43c-43a4-aa33-57b9958a0108","Path":"editing-a-mask-layer.md","Order":2},{"Id":"9e5d8f47-5369-46c9-9512-ee1542e23eef","Path":"paste-mask.md","Order":4},{"Id":"62250884-22de-4d6f-bd78-91598a07e70e","Path":"removing-a-mask-layer.md","Order":5}],"Id":"f2ade6d0-eaf7-444b-8cbb-f51d7058260d","Path":"mask-layers.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Mask Layers","Languages":[{"Code":"en","Title":"Mask Layers","Slug":"mask-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9e13278e-d96d-4a21-b119-b6e278dd7b18","Path":"filling-layers-with-the-content-of-other-fonts-or-masters.md","Order":1}],"Id":"99da586a-4f62-40a7-b549-7b91e075dee9","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Importing Glyphs to a Layer","Languages":[{"Code":"en","Title":"Importing Glyphs to a Layer","Slug":"importing-glyphs-to-a-layer","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"dcc15ded-83a9-4f67-a367-633998fd0a1d","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Working with Layers","Languages":[{"Code":"en","Title":"Working with Layers","Slug":"working-with-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"7633a785-15bb-411b-9c15-9f6da7beaa19","Path":"append-and-unicode-positions.md","Order":1},{"Id":"d81ed14d-5c47-4bc8-b49f-9b04353ce8d2","Path":"paste-in-font-window-replace-or-append.md","Order":2}],"Id":"44d6e8d3-59e4-447f-a599-56428137af8c","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Appending Glyphs","Languages":[{"Code":"en","Title":"Appending Glyphs","Slug":"appending-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1d884e35-6ea3-42b8-b984-058795c48938","Path":"paste-glyph-reference.md","Order":1},{"Id":"f3da0d03-7ab7-4355-b61a-b218225c9cdd","Path":"paste-special.md","Order":2},{"Id":"b078b754-97ed-4a51-89c4-a699c3c50b73","Path":"simple-paste.md","Order":3},{"Id":"130f153e-807e-4dc0-be08-af53bdeffb9b","Path":"using-draganddrop.md","Order":4},{"Id":"44fb10b9-f827-412a-b781-09c7c3134792","Path":"using-menu-commands.md","Order":5}],"Id":"f8acfe38-dcc7-4473-9790-32b094fb6a80","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Copying and Pasting Glyphs","Languages":[{"Code":"en","Title":"Copying and Pasting Glyphs","Slug":"copying-and-pasting-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0b748f12-759b-46a7-87e5-de1c87fdaae2","Path":"deleting-glyphs1.md","Order":1},{"Id":"c147c40c-ea21-4e93-8c61-0c86823b8e16","Path":"remove-glyphs-from-the-font.md","Order":2},{"Id":"c7a5000b-7ffc-4d32-a9de-f9fef8a9a4c5","Path":"remove-glyphs-used-elsewhere.md","Order":3}],"Id":"02934e0a-f885-49ad-b288-d38e521d8071","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Deleting Glyphs","Languages":[{"Code":"en","Title":"Deleting Glyphs","Slug":"deleting-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"16bbb0f2-f761-46db-9484-6766914b1a0f","Path":"sorting-glyphs-1.md","Order":1},{"Id":"87248be4-45ac-420d-b9c7-133df580e1e7","Path":"moving-in-the-index-mode.md","Order":3},{"Id":"cdedf4fe-28d1-48fc-84ac-f5fcaa4b865c","Path":"moving-glyphs-1.md","Order":4},{"Id":"4d06a2a8-5371-45b3-95d3-2a85f89794c2","Path":"sorting-in-index-mode.md","Order":2}],"Id":"4b422da2-db64-4bb2-9dde-f21712adb63c","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Sorting and Moving Glyphs","Languages":[{"Code":"en","Title":"Sorting and Moving Glyphs","Slug":"sorting-and-moving-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"abfc15c7-a1b2-40de-80c4-3bf2bfd9c5ce","Path":"glyph-name-synonyms-in-font-window-quick-preview.md","Order":1},{"Id":"4ce33e73-444b-42ec-a464-63421375a905","Path":"glyph-panel-with-multiple-selected-glyphs.md","Order":2},{"Id":"961d73a6-cc1b-4939-8d13-8eee46861291","Path":"opening-glyph-tabs-or-windows.md","Order":3}],"Id":"d73c947b-545b-40db-a614-6ebb2cf29292","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Font window and Glyph panel","Languages":[{"Code":"en","Title":"Font window and Glyph panel","Slug":"font-window-and-glyph-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"e689d403-5dd7-4872-b1c0-79bd5317ab1e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Managing Glyphs","Languages":[{"Code":"en","Title":"Managing Glyphs","Slug":"managing-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"de0a6748-8364-48cf-8015-946b696f22a9","Path":"simple-stickers.md","Order":1},{"Id":"f99a8f88-d510-4aa4-ad16-ee0999a840ba","Path":"stickers-1.md","Order":2},{"Id":"e3d15b3b-2898-4317-aab7-f10fac3d3b11","Path":"text-stickers.md","Order":3}],"Id":"28c359df-5bbe-4ce2-8147-ef75295b61f1","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Glyph stickers","Languages":[{"Code":"en","Title":"Glyph stickers","Slug":"glyph-stickers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6f53de29-f893-4271-aaeb-5a15258a6702","Path":"glyph-names-and-unicode.md","Order":6},{"Id":"18f80edc-d6ca-4172-a14a-b7848668f54f","Path":"unicode-in-cjk-fonts.md","Order":7},{"Id":"9ebeb2fc-43c2-4edd-80ae-9a56d4e06eea","Path":"duplicating-unicode-codepoints.md","Order":2},{"Id":"dce45e5c-5be5-4b20-950d-2f8b25abbd4c","Path":"characters-codes-and-glyphs.md","Order":1},{"Id":"e855a1a5-b722-4ca2-bfac-905c4079cba3","Path":"generate-names-1.md","Order":4},{"Id":"e62d81c4-e330-4da8-b583-b4c912aaacf5","Path":"encoding-standards.md","Order":3},{"Id":"4960bab9-dda5-4352-bb98-4c8035530cd6","Path":"generate-unicodes-1.md","Order":5}],"Id":"c0d71795-93df-4031-b470-3441ad022b14","Path":"glyph-naming-and-encoding.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Glyph Naming and Encoding","Languages":[{"Code":"en","Title":"Glyph Naming and Encoding","Slug":"glyph-naming-and-encoding","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4d1d7ad2-20da-4b1f-b1fd-ff12a81e9510","Path":"methods-for-glyph-renaming.md","Order":6},{"Id":"1665fd6e-ad1e-4703-8e50-30515ce9d0e7","Path":"standardnam-mapping.md","Order":10},{"Id":"1254e969-d513-4346-ae96-8410baf75219","Path":"synonyms.md","Order":11},{"Id":"80b7c8cc-ba55-4c26-bf8e-711a4628dd0b","Path":"unixxxx-and-production-names.md","Order":12},{"Id":"7eb2a3aa-3264-4085-a21a-b015cd0f3eab","Path":"attributing-glyph-names-when-a-font-is-open.md","Order":1},{"Id":"b2fce356-54cc-48bc-bf20-39b3a34a7c69","Path":"missing-glyph-placeholders.md","Order":7},{"Id":"a8711998-8346-4325-8650-c9e7df423290","Path":"renaming-glyphs1.md","Order":8},{"Id":"883e9b2f-03ba-45cb-853b-a5c2c49a050d","Path":"glyph-names-2.md","Order":5},{"Id":"694b35a0-7f67-4adb-a24b-ccb4bba5d82b","Path":"flexible-custom-renaming.md","Order":3},{"Id":"69b6c82e-1891-4912-9e3d-6ab8ab01a827","Path":"renaming-glyphs-2.md","Order":9},{"Id":"1d685706-f580-42b1-9604-eec6557cb1f3","Path":"builtin-glyph-names.md","Order":2},{"Id":"5acf2dad-ab33-428a-87a9-eb2d3c4a01e8","Path":"friendly-and-alternative-names.md","Order":4}],"Id":"56f4d348-df6b-4afe-ac41-ecafe5e7f68c","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Glyph Naming","Languages":[{"Code":"en","Title":"Glyph Naming","Slug":"glyph-naming","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a798f733-d465-4d79-83b8-8145c96b7f2c","Path":"procedure.md","Order":2},{"Id":"d143e77c-dd76-45a0-b040-9248a4057bde","Path":"limitations-regarding-notes.md","Order":1},{"Id":"f3d86f3b-cc23-4a42-991b-cc6fd86256e5","Path":"styling-text-in-notes.md","Order":3}],"Id":"84c17b33-fd64-4f85-a103-f934573aeed5","Path":"glyph-notes.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Glyph Notes","Languages":[{"Code":"en","Title":"Glyph Notes","Slug":"glyph-notes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3e75e27b-4b44-41fb-ba52-59ca9076b3d9","Path":"using-suffixes-to-filter-a-font.md","Order":2},{"Id":"3bc1dfd4-e00f-42df-883a-f6ab41395f9e","Path":"using-custom-suffixes.md","Order":1},{"Id":"8a258f16-d0bf-4ac8-a498-ca9dffaaad55","Path":"using-suggested-suffixes.md","Order":3},{"Id":"30ca1244-f75f-43ef-8c69-56ba9d9aad38","Path":"what-is-allowed.md","Order":4}],"Id":"36745381-ebb6-4487-b869-4c64eb6e1584","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Using Suffixes","Languages":[{"Code":"en","Title":"Using Suffixes","Slug":"using-suffixes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"15789fe7-0288-413a-bed7-67333fe37acd","Path":"editing-classes.md","Order":2},{"Id":"ab26a7a5-a77b-43e1-8af9-6b20aff650c5","Path":"editing-glyph-tags.md","Order":3},{"Id":"6da66b51-ad38-4644-92d6-c9a8f15f5274","Path":"custom-glyph-tags.md","Order":1},{"Id":"144f44b6-c81f-4023-ba37-cb25fe07b021","Path":"glyph-classes.md","Order":4},{"Id":"14054ed5-1dc1-4b1a-8761-5f42bb4d8d25","Path":"glyph-tags.md","Order":5},{"Id":"5b2d8564-2da6-4260-8c3d-05e64cc52d99","Path":"virtual-tags.md","Order":6}],"Id":"4a9903dd-a857-4105-b3a0-bae5325c2c88","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Glyph Tags and Classes","Languages":[{"Code":"en","Title":"Glyph Tags and Classes","Slug":"glyph-tags-and-classes","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"7359cb35-4e1c-4449-b652-8b39f880c9a2","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Glyph Information","Languages":[{"Code":"en","Title":"Glyph Information","Slug":"glyph-information","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"ead8df40-679d-493d-b04f-029c0efd1f1a","Path":"vector-artwork-section.md","Order":4},{"Id":"af4846cb-8c60-4e54-b1c1-97f247e42c07","Path":"fit-artwork-section.md","Order":2},{"Id":"bcdab03d-7ed4-415b-9ab3-47d8e08a86da","Path":"preferences-6.md","Order":3},{"Id":"5fedc8e4-3a46-4902-a801-5ee41d0e9d9c","Path":"keep-artwork-size-section.md","Order":1}],"Id":"dd9e180b-1e51-4fbe-bd37-397f764db80a","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Preferences applicable","Languages":[{"Code":"en","Title":"Preferences applicable","Slug":"preferences-applicable","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a9822996-7057-4f55-9c66-e8c80fd5ae66","Path":"preparation-of-drawings.md","Order":4},{"Id":"9b08085b-c0b6-42d0-bf31-a3bab36a1cab","Path":"exporting-the-font.md","Order":8},{"Id":"44a52db7-d745-461a-9c44-0c338688e6fa","Path":"bringing-the-drawings-to-fontlab.md","Order":1},{"Id":"36bf1108-8d77-4628-bfd1-00aa928b3e1c","Path":"placing-to-font.md","Order":6},{"Id":"963fd992-f441-49ed-80ac-60e40259f52e","Path":"separating-the-letters.md","Order":3},{"Id":"46647eeb-6eb0-439b-aacb-915ad0356a49","Path":"making-a-font-from-color-vector-graphics-1.md","Order":2},{"Id":"d001f286-01ea-44a3-af71-51f31d8625dd","Path":"setting-up-the-new-font.md","Order":7},{"Id":"f0ae7f70-2299-4cd1-a396-248974a9bf7e","Path":"saving-and-testing.md","Order":5}],"Id":"40e8db0b-cdf6-4734-b80c-a4dee8b1f8c5","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Using Color Vector Graphics","Languages":[{"Code":"en","Title":"Using Color Vector Graphics","Slug":"using-color-vector-graphics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"653eb40c-66c4-46f3-b661-74f03218323c","Path":"pasting-vector-artwork.md","Order":5},{"Id":"fa09c042-fef9-4789-9810-0d917b411381","Path":"place-as-glyphs.md","Order":7},{"Id":"f013bf8a-c460-45d5-84c0-56ba8d041dbd","Path":"in-the-sketchboard.md","Order":3},{"Id":"75ca95cb-ef82-4476-9303-2b8800ed92da","Path":"paste-or-import-vector-artwork.md","Order":4},{"Id":"1e228cba-f01e-493b-9518-9a515e1bccd4","Path":"placing-artwork-1.md","Order":8},{"Id":"c153d854-a96b-43fd-a8f0-2663bdfa7b47","Path":"preparing-artwork.md","Order":9},{"Id":"fe98ff14-4f5a-435a-995a-fbaa6dc6e9ec","Path":"pasting.md","Order":6},{"Id":"06890f53-4760-4e71-b119-9a299046bcdd","Path":"handling-the-elements.md","Order":2},{"Id":"07ab215a-f510-44af-88ea-da8fd3298fc5","Path":"copypaste-and-import-artwork-in-pdf-format.md","Order":1}],"Id":"390f436b-0261-4270-9a1b-a03c1af98363","Path":"importing-artwork.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Importing Artwork","Languages":[{"Code":"en","Title":"Importing Artwork","Slug":"importing-artwork","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5a0c58b7-7188-47ea-bc4c-8546f481b2c5","Path":"copying-elements-to-the-font.md","Order":11},{"Id":"a2eb3da6-9c6a-4b48-92b5-b7f3b76d727b","Path":"using-the-sketchboard-for-editing-glyphs.md","Order":12},{"Id":"9123cd25-cced-4aa9-a810-feab5f211300","Path":"using-text-frames.md","Order":3},{"Id":"1a314f1c-18b1-44fb-9ded-63ee749caf8c","Path":"importing-artwork-3.md","Order":5},{"Id":"ba37ccef-20e8-4e3a-9190-440c147d1f9a","Path":"removing-a-text-frame.md","Order":8},{"Id":"32472966-73e9-4d6c-9283-ef218cb09143","Path":"converting-a-text-into-a-glyph-window.md","Order":2},{"Id":"1f0ac92b-37e4-4d1f-9cb4-331af846383d","Path":"exporting-the-sketchboard.md","Order":7},{"Id":"e8cd762c-1240-4247-a0f0-75085ca1304a","Path":"lockingunlocking-a-text-frame.md","Order":6},{"Id":"0d31056b-8d12-4aa0-b837-fcf9d4d10405","Path":"changing-text-wrap.md","Order":1},{"Id":"7133e89d-2988-4158-b483-902d5daf36d9","Path":"saving-the-sketchboard.md","Order":9},{"Id":"e3d7ffab-f336-4378-8c6b-c57729efa233","Path":"opening-the-sketchboard.md","Order":4},{"Id":"1a218d81-5b89-430d-a4f1-e47929f6c30e","Path":"deleting-the-sketchboard-contents.md","Order":10}],"Id":"26117858-057d-4657-9c8a-106dabf25838","Path":"using-sketchboard.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Using Sketchboard","Languages":[{"Code":"en","Title":"Using Sketchboard","Slug":"using-sketchboard","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e62e25ca-e8a8-4fef-ac1f-3f20522978f5","Path":"importing-artwork-svg-artwork.md","Order":5},{"Id":"059834b4-cfba-4120-a6fc-81cd1397515d","Path":"improved-conversion-from-svg-to-editable-contours.md","Order":6},{"Id":"2f8d8929-207a-4633-8ac6-c79a23d48478","Path":"dragdrop-artwork-onto-the-font-window.md","Order":4},{"Id":"b986ea01-1b36-4d7e-89b2-827c10af2ad1","Path":"pasteimport-of-vector-artwork-coordinate-rounding.md","Order":9},{"Id":"82f6de45-e5b6-4af6-bcac-f297e4c55ae4","Path":"opentypesvg-fonts.md","Order":8},{"Id":"d230a342-7faf-4b75-8164-d902bc4bbd01","Path":"copy-and-paste-from-adobe-illustrator.md","Order":1},{"Id":"ef130594-bc35-4a85-a9a8-0b722e9d0b3b","Path":"make-svg-editable.md","Order":7},{"Id":"5157b05b-1685-41d5-803c-5eefcbd2d41a","Path":"pasteimport-of-vector-artwork-monochrome-artwork.md","Order":10},{"Id":"c1583422-20ed-4f63-a3fe-97486eb7a11a","Path":"dragdrop.md","Order":3},{"Id":"1921f385-a7ac-48c3-894a-13a5b2bdd46e","Path":"copy-and-paste-from-fontlab-studio-5.md","Order":2}],"Id":"00a99049-26a4-4e36-9978-3a396b670cf7","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Importing Vector Graphics","Languages":[{"Code":"en","Title":"Importing Vector Graphics","Slug":"importing-vector-graphics","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"a385c74f-10e2-4e8c-af59-e4886281d4c1","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Importing Vectors","Languages":[{"Code":"en","Title":"Importing Vectors","Slug":"importing-vectors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f6d3e250-8cf1-4f52-a979-55b0eb5e0c28","Path":"print-from-a-font-window.md","Order":1},{"Id":"a8bd8d92-ac4a-4307-bb86-d3b97a19c7cf","Path":"print-from-a-glyph-window.md","Order":2},{"Id":"d737a29f-2825-4ddb-bd24-295f88e6c233","Path":"printing-alternatives.md","Order":3}],"Id":"fe65105c-3641-424c-8f49-d4cc066b6a92","Path":"printing-1.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Printing","Languages":[{"Code":"en","Title":"Printing","Slug":"printing-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"62055ac4-1cc9-4e1e-aa9d-25d69d1e4442","Path":"more-improvements-to-autotrace-and-bitmap-images.md","Order":3},{"Id":"f962c80e-4d0d-4b02-b5d7-f86fdffc60ab","Path":"postprocess-the-initial-contours.md","Order":5},{"Id":"d670af03-5e89-4226-8412-888f8ef1449b","Path":"build-the-initial-contours.md","Order":2},{"Id":"274641f2-e611-48e7-b7d8-752b0a0b3b73","Path":"postprocess-the-image.md","Order":4},{"Id":"0690c8d3-a33a-496d-bc46-de50dc21f720","Path":"prepare-the-image.md","Order":6},{"Id":"bf433e21-a435-49aa-a389-e24b09b56a87","Path":"bitmaps-and-autotrace-1.md","Order":1}],"Id":"6397f8ba-f8bf-4c3d-b568-e9069e7e066e","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Importing bitmaps","Languages":[{"Code":"en","Title":"Importing bitmaps","Slug":"importing-bitmaps-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"74cf67e7-3c56-4951-b3dd-37d57dd90865","Path":"exporting-the-font-1.md","Order":3},{"Id":"5cf91d74-470a-4657-954c-d67106a551a6","Path":"preparation-of-images.md","Order":1},{"Id":"9c9edcb2-a281-40b4-abdc-6720f5e7d57a","Path":"placing-to-font-1.md","Order":2},{"Id":"27a938c8-c06e-4332-8255-5d93a12fccde","Path":"updating-font-info.md","Order":6},{"Id":"76e7c316-89ef-4fd5-8bea-ff4f1db52294","Path":"saving-and-testing-1.md","Order":4},{"Id":"bc937988-be95-426c-8fda-8fd3d2a69a8a","Path":"separating-the-images.md","Order":5},{"Id":"c9692eeb-3b92-477d-b3ff-749b2caaf8fe","Path":"bringing-the-images-to-fontlab.md","Order":7}],"Id":"a18c795f-4ef1-4a39-b69a-14fbb45e06a1","Path":"using-color-bitmap-images.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Using Color Bitmap Images","Languages":[{"Code":"en","Title":"Using Color Bitmap Images","Slug":"using-color-bitmap-images","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3a9f7f71-dbbd-4191-aacf-3a92450a7327","Path":"preparation-of-the-source-image.md","Order":1},{"Id":"c432986b-a9ba-41bc-93d0-a97a795cbe23","Path":"scanning-an-image.md","Order":2}],"Id":"b847992a-b4d6-4628-abc0-660b874dae2e","Path":"preparing-bitmap-artwork.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Preparing Bitmap Artwork","Languages":[{"Code":"en","Title":"Preparing Bitmap Artwork","Slug":"preparing-bitmap-artwork","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"56241d69-7e48-4607-8be7-16622988ad8e","Path":"despeckle.md","Order":3},{"Id":"effba112-1481-44b0-9af8-eee8ce712b01","Path":"sharpen.md","Order":7},{"Id":"2aa08777-ca5c-42f9-9d45-787e3a817017","Path":"remove-background.md","Order":8},{"Id":"75e72f69-867d-4350-81a3-d51624df135a","Path":"autotrace.md","Order":9},{"Id":"fb173252-751f-4027-9dca-103bdc1b2c7c","Path":"reduce-noise.md","Order":6},{"Id":"444522e4-40af-4be9-b83e-e38a3740cdf7","Path":"gaussian-blur.md","Order":5},{"Id":"b41a13f0-bc37-48a6-a9e5-e920869d2814","Path":"bitmap-effects-2.md","Order":2},{"Id":"620bbfef-d7c5-4e57-b468-31c0af6ff737","Path":"find-edges.md","Order":4},{"Id":"72b653fd-a384-406b-bb21-c0237cb7641e","Path":"threshold.md","Order":10},{"Id":"fcdc9724-9a51-45ee-a051-37291678eec4","Path":"soften.md","Order":1}],"Id":"f993c75f-ae30-4be3-9dba-83f77200743c","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Bitmap Effects","Languages":[{"Code":"en","Title":"Bitmap Effects","Slug":"bitmap-effects","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cf9356d0-b611-490a-859a-710c5f83ad9f","Path":"better-optical-separation.md","Order":3},{"Id":"9c6ceb61-f809-41a2-9cdf-dfd74279825c","Path":"autotrace-1.md","Order":2},{"Id":"13828438-106a-41eb-ba50-aa4495b20ad6","Path":"autotrace-options.md","Order":1}],"Id":"56b6adba-53e4-4658-a26a-ba03f89bec5f","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Autotracing","Languages":[{"Code":"en","Title":"Autotracing","Slug":"autotracing","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"dcb2083a-f3f0-4162-9cee-a74bd93c9e31","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Importing Bitmaps","Languages":[{"Code":"en","Title":"Importing Bitmaps","Slug":"importing-bitmaps","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"353dbd7d-79d7-4fcc-84f4-196bd2e0b863","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Working with Glyphs","Languages":[{"Code":"en","Title":"Working with Glyphs","Slug":"working-with-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"105cf8b5-5845-45a9-a3ab-e92470700d4e","Path":"file-menu.md","Order":2},{"Id":"8558c774-3d11-4652-b35a-eca6b09e2544","Path":"drag-and-drop.md","Order":1},{"Id":"7f83bab0-8a7c-4c5b-9748-1b042cf7dc20","Path":"open-font-preferences.md","Order":5},{"Id":"5b476ef2-fa7d-411a-8ca7-c06d488a2860","Path":"opening.md","Order":4},{"Id":"11b0f01b-298e-4157-8407-82ffcb3d5c33","Path":"welcome-dialog-4.md","Order":3}],"Id":"e0bb8a30-7f8e-4a3d-87b1-6f10216e2658","Path":"opening-a-font.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Opening a Font","Languages":[{"Code":"en","Title":"Opening a Font","Slug":"opening-a-font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"76933ef2-9608-4775-b95f-7c9191128e5d","Path":"auxiliary-file-formats-1.md","Order":1},{"Id":"f50e202c-0b1f-4d39-8620-a35142e52bff","Path":"export-formats.md","Order":2},{"Id":"437a9cc2-bda5-4565-b5a9-5e984c3d05ec","Path":"import-and-export-files.md","Order":3},{"Id":"429ee076-a821-4c7e-8dc4-2f9b80c8e6b6","Path":"import-formats.md","Order":4}],"Id":"067b1f04-14c7-4fc7-a32e-d0f5e68775e2","Path":"file-formats.md","Order":1,"CategoryType":1,"Icon":null,"Title":"File formats","Languages":[{"Code":"en","Title":"File formats","Slug":"file-formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fdbb3f2d-9d54-4746-9ffc-17a2f0d54192","Path":"manually-saving.md","Order":3},{"Id":"13dd6e47-33a8-4dd1-868c-496d76cd895e","Path":"save-preferences.md","Order":4},{"Id":"a1245265-73dc-4afa-828c-e65b4fb343c5","Path":"bitmap-fonts.md","Order":2},{"Id":"c2be998a-1a29-4756-8a7a-1ba0f28b4dd8","Path":"autosaving.md","Order":1}],"Id":"7bea85ca-af1c-4490-a4c7-71d042fecf04","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Saving a Font","Languages":[{"Code":"en","Title":"Saving a Font","Slug":"saving-a-font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1ae96d43-6dc2-475f-80fa-659b9169f8ac","Path":"font-families-1.md","Order":2},{"Id":"8f374e97-66a8-4da9-b3f8-6ff04e24f6b5","Path":"multiple-fonts-open.md","Order":3},{"Id":"32beea38-a584-4688-aa1c-6ad18d2c8a10","Path":"font-attributes.md","Order":1},{"Id":"9610b0e5-5cf6-4b17-87d8-a1506a2466c9","Path":"using-the-fonts-panel.md","Order":4}],"Id":"3f64e8ac-1983-46d6-8569-14907ce17929","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Fonts and Families","Languages":[{"Code":"en","Title":"Fonts and Families","Slug":"fonts-and-families","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"b0d2bc8b-6638-4d68-ac94-4f5eb1d99da8","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Files and Fonts","Languages":[{"Code":"en","Title":"Files and Fonts","Slug":"files-and-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"ad5bd0e5-83b1-400f-8f2b-be965de544bf","Path":"tba-2.md","Order":1}],"Id":"7a93e413-ba66-4250-9394-4f440d2f66b4","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Script and Index","Languages":[{"Code":"en","Title":"Script and Index","Slug":"script-and-index","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ea8983ff-4c5d-47dd-b853-67fc04e6d294","Path":"tba-1.md","Order":1}],"Id":"847c3166-0743-49bf-992e-24b933282727","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Codepages","Languages":[{"Code":"en","Title":"Codepages","Slug":"codepages","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1ada4e70-d0b7-4a0f-b083-552bf68eb0ec","Path":"tba-3.md","Order":1}],"Id":"a0ee380f-d164-4409-8901-a7ce1d211622","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Categories","Languages":[{"Code":"en","Title":"Categories","Slug":"categories","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e59cfece-d550-40c6-b68b-e09b1b5bb1b7","Path":"encoding-views.md","Order":1},{"Id":"611d0f2f-7adb-4e6d-bc64-7f745c7a0eba","Path":"tips.md","Order":4},{"Id":"754e7f18-0391-4151-a763-b77d11717224","Path":"language-support-and-encoding-views.md","Order":3},{"Id":"3b3e0696-c333-4c47-a60a-de13c087e68a","Path":"what-is-an-encoding.md","Order":5},{"Id":"b106ffb0-5f0e-460e-bbc9-b6c99a3552a1","Path":"export-and-import-encoding.md","Order":2}],"Id":"a82260e0-ee21-4178-9b0f-f351042d64c1","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Encodings","Languages":[{"Code":"en","Title":"Encodings","Slug":"encodings","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"af4c7830-2e21-4d19-ae5f-b84b1ef1b684","Path":"tba.md","Order":1}],"Id":"eda288bd-22a3-4d00-8c9a-1a5b74b4a169","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Unicode","Languages":[{"Code":"en","Title":"Unicode","Slug":"unicode","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"0d1e182f-34bd-470c-b39a-b9d419f36c17","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Font Filter Types","Languages":[{"Code":"en","Title":"Font Filter Types","Slug":"font-filter-types","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"085c59db-5ba5-42ee-bbef-34e0536240d0","Path":"search-box.md","Order":4},{"Id":"923736f5-44d9-45f6-a9a3-eb88581144f2","Path":"list-related-glyphs.md","Order":2},{"Id":"132e0d71-f8cf-467a-8b1a-4d73529baa2b","Path":"searching-for-glyphs.md","Order":5},{"Id":"670c54eb-f8c6-4f8c-866f-1dbf419c5a2e","Path":"quick-find-by-name.md","Order":3},{"Id":"29d1156a-ffec-489b-bd79-1f80eae9e353","Path":"find-glyphs.md","Order":1}],"Id":"6407a86b-dd22-455b-853f-7ada46ed9c9c","Path":"searching-glyphs.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Searching Glyphs","Languages":[{"Code":"en","Title":"Searching Glyphs","Slug":"searching-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"106d4e53-f90f-49bb-a7cb-ba1e435d2bb3","Path":"glyph-cells-1.md","Order":1},{"Id":"b97782d9-b372-4a56-ac2a-f818734777f3","Path":"caption-colors.md","Order":2},{"Id":"b1015810-6646-480d-9b3d-653cf9a76f62","Path":"keyboard-zooming.md","Order":5},{"Id":"eb61ebba-c99d-408b-a6d9-382c1c48ee17","Path":"navigating.md","Order":6},{"Id":"35c5b48e-92ee-475e-b3f6-fdb39e59aacc","Path":"cell-size.md","Order":3},{"Id":"37f433bd-2be4-4163-82ce-6ec3e234ecee","Path":"unicodename-mismatch.md","Order":7},{"Id":"eecbdfc0-e428-460f-b9b7-aade805fac10","Path":"background-colors.md","Order":4}],"Id":"28dfa726-8ecd-4109-9117-523de06b2c09","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Glyph Cells","Languages":[{"Code":"en","Title":"Glyph Cells","Slug":"glyph-cells","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8cb9889b-3181-44dc-9300-1c648a8d6feb","Path":"find-characters-and-categories.md","Order":4},{"Id":"45885dc5-c54e-4562-a0dd-ca2121564c29","Path":"index-filter.md","Order":7},{"Id":"c90fd8b3-2b59-4911-82a6-2b872bdf5afb","Path":"filter-font-window-by-color-flag.md","Order":2},{"Id":"fa966f84-6bb8-4025-b809-517a3183cd4f","Path":"predefined-filters.md","Order":8},{"Id":"d8093c81-829c-4ebf-9706-ccd496927fc9","Path":"saved-searches-and-bookmarks.md","Order":9},{"Id":"2db9e9b4-1efc-4475-965b-fbe3e3fc4a87","Path":"font-window-filters-1.md","Order":5},{"Id":"e37f1967-c445-44ba-9527-ca9a9dd66023","Path":"color-filter.md","Order":1},{"Id":"c3bbd92e-50d2-4ff7-beb8-f4cfe20d35bf","Path":"using-the-sidebar.md","Order":10},{"Id":"7ea76068-caa5-42cf-b5d8-f6e12dcfa271","Path":"how-the-table-shows-results.md","Order":6},{"Id":"fe148f4c-1185-4c32-a6c9-be110916a5a7","Path":"filter-font-window-by-glyph-name-suffix.md","Order":3}],"Id":"f0fff927-1363-4ccb-9cae-fe3bba30bca0","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Filtering Glyphs","Languages":[{"Code":"en","Title":"Filtering Glyphs","Slug":"filtering-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0025ed46-c217-4239-87f3-1e86b845b228","Path":"glyph-table.md","Order":3},{"Id":"33edafeb-5bea-452d-93b7-0934411c82c4","Path":"status-bar-1.md","Order":6},{"Id":"8462ce9e-4665-46f6-aa7b-b5343d40e472","Path":"context-menu.md","Order":1},{"Id":"e127aa82-5af1-4e6a-9d56-28766705c908","Path":"list-view-1.md","Order":4},{"Id":"dbbec568-86c1-4189-93bb-52ba7ffc8e91","Path":"font-window-property-bar-1.md","Order":2},{"Id":"8d287dd1-6042-4194-91b4-4d000ea371a4","Path":"sidebar-2.md","Order":5}],"Id":"4f1bba3d-f848-4b31-a443-9749ce18d735","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Using the Font Window","Languages":[{"Code":"en","Title":"Using the Font Window","Slug":"using-the-font-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5409901a-bd0e-4a95-950e-691e9975b6c4","Path":"more-selections.md","Order":4},{"Id":"b99b203b-b574-4ed1-963d-5da7111b053d","Path":"select-in-context-menu.md","Order":7},{"Id":"6d1b7d28-1b10-4bc9-a351-180c6ebe021a","Path":"selecting-cells.md","Order":8},{"Id":"3d2ecfde-5e5e-42c0-8cb1-8a49c80195bd","Path":"componentrelated-selection.md","Order":2},{"Id":"11f9a682-15d6-4f81-9ab2-adbf24fbd0f0","Path":"same-as-current-glyph-selection.md","Order":5},{"Id":"5cf8f659-333e-4b1a-813d-f9dc686ea4d3","Path":"additional-selection-for-tags.md","Order":1},{"Id":"8473eb39-7e0e-4de7-96cc-a1ddd5aadffa","Path":"saving-selections-and-filters.md","Order":6},{"Id":"df42c164-fd3a-4ab3-98a5-4a39f85cc76d","Path":"general-selection.md","Order":3}],"Id":"6c39e4d9-7cb6-42c8-92ce-597d6658c67b","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Selecting Glyphs","Languages":[{"Code":"en","Title":"Selecting Glyphs","Slug":"selecting-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"43683bba-7e78-4545-ab03-f613285bcaef","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Navigating a Font","Languages":[{"Code":"en","Title":"Navigating a Font","Slug":"navigating-a-font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"47df54d1-54d5-4d98-86ed-3d0613cf9f7b","Path":"floating-windows-mode.md","Order":1},{"Id":"f2235a55-40cf-420f-9f8c-dad3451b1ce1","Path":"single-window-mode.md","Order":3},{"Id":"1a4ea2a4-8661-4df3-ace3-f6a8890ab1f0","Path":"tabs-mode.md","Order":4},{"Id":"959bca84-8d01-4134-b77a-6f630590d930","Path":"save-and-restore-windows-tabs-panels-and-font-filters.md","Order":2},{"Id":"c1516826-2ce4-4153-852f-b003bb44e049","Path":"windows-and-window-tabs.md","Order":5}],"Id":"971dd77a-da37-4756-abc7-57313ab8f14a","Path":"modes.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Modes","Languages":[{"Code":"en","Title":"Modes","Slug":"modes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6c9a5400-136a-488d-84f9-bce8041c0aca","Path":"view-menu-1.md","Order":2},{"Id":"6a419d07-cd8d-4178-8511-7eb0eedbf65b","Path":"view-options1.md","Order":3},{"Id":"8ff49c43-cf7f-41b6-8338-fc5ca754cbc6","Path":"control-bars-view-settings.md","Order":1},{"Id":"246ac03c-0e9c-4f11-9915-84f59d3c1467","Path":"window-menu.md","Order":4}],"Id":"4c9b110b-c97d-46dc-9154-8366fe7c63e0","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"View Options","Languages":[{"Code":"en","Title":"View Options","Slug":"view-options","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8ae69d93-3cc1-4d43-8396-9b086e3d322b","Path":"windows-with-multiple-monitors.md","Order":1}],"Id":"9890f900-d7c0-4182-93a2-ee71a1f5a871","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Multiple Monitors","Languages":[{"Code":"en","Title":"Multiple Monitors","Slug":"multiple-monitors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c0f80cc9-b5e4-4026-b968-8442dceaea52","Path":"managing-workspaces.md","Order":2},{"Id":"a2aa4944-5911-4a25-99e0-5e3556336c9f","Path":"creating-workspaces.md","Order":1},{"Id":"52f7273c-7411-4a3b-9f3f-009edfe78ed1","Path":"shortcuts-for-workspaces.md","Order":3},{"Id":"10e84c3c-6bc0-4274-ab74-effb17f1a712","Path":"switching-workspaces.md","Order":4},{"Id":"56214816-35d2-4d75-bc14-bbef33cde6d8","Path":"workspaces-on-windows.md","Order":5}],"Id":"3a6dce87-9b47-4ead-8821-7d580eb600f3","Path":"workspaces.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Workspaces","Languages":[{"Code":"en","Title":"Workspaces","Slug":"workspaces","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"d982a029-7b74-4882-b930-0ef288001828","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Managing Windows","Languages":[{"Code":"en","Title":"Managing Windows","Slug":"managing-windows","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c7d1bde6-ae40-4a5e-8b02-7e5e952d6adc","Path":"applying-and-removing-flags.md","Order":1},{"Id":"f3c43fdb-4d71-49be-a446-5042dbf09447","Path":"color-flags-in-the-sidebar.md","Order":2},{"Id":"5b7b723a-c373-43af-ac4f-7c9dcbf582f3","Path":"using-flags-to-sort-the-font.md","Order":4},{"Id":"4502bb87-3662-4bf4-a6f6-0ecd6a05d59a","Path":"marking-glyphs-with-colors-1.md","Order":3}],"Id":"ef953ef4-22ea-4573-ae35-910b0a1cb84d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Marking Glyphs with Colors","Languages":[{"Code":"en","Title":"Marking Glyphs with Colors","Slug":"marking-glyphs-with-colors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a03d0419-80ba-4813-a247-ef7ab46253ae","Path":"comparing-glyph-sets.md","Order":2},{"Id":"177d4d84-5269-4b52-9b0d-a23d057393b8","Path":"comparing-font-designs.md","Order":1}],"Id":"f1036426-b4fa-4013-92ae-14974fbc6974","Path":"comparing-fonts.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Comparing Fonts","Languages":[{"Code":"en","Title":"Comparing Fonts","Slug":"comparing-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fd23ee4e-9807-4278-a264-9468de90da67","Path":"color-cells.md","Order":1},{"Id":"3a280c32-bb5a-40ff-b2b2-40853190ac3c","Path":"color-lines.md","Order":2},{"Id":"543b6e2a-2ec8-4ada-9961-2bb738cfba63","Path":"other-cell-marks.md","Order":3}],"Id":"adf08163-04aa-452c-a8ae-913d25c5cf63","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Glyph Cell Marks","Languages":[{"Code":"en","Title":"Glyph Cell Marks","Slug":"glyph-cell-marks","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"71a7acb6-d792-45fa-85ce-321d9730fcde","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Managing Fonts","Languages":[{"Code":"en","Title":"Managing Fonts","Slug":"managing-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"fa6f8f0f-175b-4b5b-a9a5-0da292ea2343","Path":"font-units.md","Order":2},{"Id":"73178c81-3935-4bf4-be5b-b4cbb84aff8e","Path":"dimensions-basics.md","Order":1},{"Id":"5f0304b9-6455-4994-a8cb-7102c94d493e","Path":"ppm-size.md","Order":3},{"Id":"33f33366-eb06-4e3a-81ad-80018fba79fd","Path":"the-em-and-the-upm-size.md","Order":4}],"Id":"39e1b141-c206-4764-aee3-372cbd2b75e5","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Sizes and the Coordinate System","Languages":[{"Code":"en","Title":"Sizes and the Coordinate System","Slug":"sizes-and-the-coordinate-system","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f1200f1b-ec9e-42ab-b214-7acee36a5ae8","Path":"creating-a-new-font-3.md","Order":1},{"Id":"817d6110-22b1-4801-a902-b33fd218542a","Path":"default-glyphset.md","Order":2},{"Id":"1d23eecc-e886-42fb-bd56-047ecdbc5467","Path":"essential-font-info.md","Order":3}],"Id":"afd72f0b-a43c-4ad3-a23c-d7285ae22aa7","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Creating a New Font","Languages":[{"Code":"en","Title":"Creating a New Font","Slug":"creating-a-new-font-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"36cf8fd6-3f28-420a-b8b6-4fca56933122","Path":"language-support-encoding-views.md","Order":1},{"Id":"b16ec9ad-b6e9-43a1-9730-4272083cb7b0","Path":"using-friendly-names.md","Order":2}],"Id":"f696e693-7e84-490e-b824-8ca70f55a8c7","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Language Support and Glyphs","Languages":[{"Code":"en","Title":"Language Support and Glyphs","Slug":"language-support-and-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c8c11afc-0589-4567-8855-c564d8d7a706","Path":"adding-glyphs1.md","Order":2},{"Id":"4d98fa99-0b42-4bf7-8424-9e0be0d86219","Path":"make-existing-glyphs-blank.md","Order":6},{"Id":"9c12ab54-e58f-4fae-986c-dd0935f0f2b7","Path":"creating-a-new-blank-glyph.md","Order":3},{"Id":"557bf246-46eb-4fab-a5c0-4f9c52143831","Path":"creating-new-glyphs-in-empty-cells.md","Order":4},{"Id":"3c5f2f24-c5e1-4532-828a-938d45851d01","Path":"add-a-new-glyph-to-the-font.md","Order":1},{"Id":"b24d0e16-a7da-48fc-8238-da95f78ce08d","Path":"initial-contents.md","Order":5}],"Id":"21f0bd85-0ebb-4c07-b356-24e2fff24c98","Path":"adding-glyphs.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Adding Glyphs","Languages":[{"Code":"en","Title":"Adding Glyphs","Slug":"adding-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ba7aef85-636f-4abf-a426-c0fe00fb10a1","Path":"selectionbased-generation.md","Order":5},{"Id":"550cc6fa-be87-459a-aae8-05aa7b4b474c","Path":"anchors-in-generated-glyphs.md","Order":4},{"Id":"4ad84dc8-0f7b-47a4-9965-45075543f29d","Path":"controlling-the-results.md","Order":1},{"Id":"040f5ef3-a43b-4e61-b222-bf2ee3dcd452","Path":"when-to-use.md","Order":6},{"Id":"59801edd-8b81-4ea3-be67-222236034292","Path":"generate-glyphs-2.md","Order":3},{"Id":"5a64381d-53ab-4bf6-a7d0-6e1099694f54","Path":"custom-glyph-generation.md","Order":2}],"Id":"cae8d53b-16ca-4db7-9353-24a93fe5707f","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Generating Glyphs","Languages":[{"Code":"en","Title":"Generating Glyphs","Slug":"generating-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"259c5647-ced8-4bb4-9c56-4599b6fe0f45","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Creating a New Font","Languages":[{"Code":"en","Title":"Creating a New Font","Slug":"creating-a-new-font","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"93be9af2-379a-40af-a698-13a5d93a8e09","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Working with Fonts","Languages":[{"Code":"en","Title":"Working with Fonts","Slug":"working-with-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"3ec0b34a-9785-44a8-8f03-909299c1b448","Path":"preview-panel1.md","Order":1},{"Id":"9fe24a9f-b74a-44bc-91d4-adf886d2fbbc","Path":"preview-panel2.md","Order":2}],"Id":"f7d86d50-cba3-439d-86d1-478031d76dda","Path":"preview-panel-1.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Preview Panel","Languages":[{"Code":"en","Title":"Preview Panel","Slug":"preview-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6ed62771-8e7e-4afb-8ac0-2b20250e2930","Path":"text-in-preview-panel.md","Order":1}],"Id":"474f48da-8b3f-4f89-9fc4-e9251d76f23d","Path":"texts-in-preview-panel.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Texts in Preview Panel","Languages":[{"Code":"en","Title":"Texts in Preview Panel","Slug":"texts-in-preview-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5eac85a5-d840-4841-a114-6eb4049c344b","Path":"quick-preview.md","Order":1},{"Id":"97911c96-02c2-4693-8ee4-c5c0d2bb07eb","Path":"true-fill.md","Order":2}],"Id":"be10e4d4-a90a-4672-978b-ebad055bd277","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Preview in Glyph Window","Languages":[{"Code":"en","Title":"Preview in Glyph Window","Slug":"preview-in-glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b1387701-649c-42a3-a0b0-426ab80243b0","Path":"testing-languagedependent-opentype-features-locl.md","Order":3},{"Id":"1b8b8752-a563-4b29-b8c4-da9013c725f7","Path":"text-features-selector.md","Order":4},{"Id":"95dedb94-a08f-4208-b38c-5e304b9e18dd","Path":"previewing-opentype-features.md","Order":1},{"Id":"353b3a4c-5f19-4361-8e18-4f31a31248ec","Path":"test-script-and-languagespecific-opentype-features.md","Order":2}],"Id":"cbd23c96-5ba0-49ff-830d-0c99d4526230","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Preview Features","Languages":[{"Code":"en","Title":"Preview Features","Slug":"preview-features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"eb92e7a6-81b4-4380-a797-76c615bef92f","Path":"glyph-window-wrapping.md","Order":2},{"Id":"ccb44698-a9ef-480a-b5cd-e567ddf436e1","Path":"apply-glyph-window-wrapping.md","Order":1},{"Id":"2a02192f-4f99-4cbc-821a-803fee7c3374","Path":"text-in-glyph-window1.md","Order":3}],"Id":"e1124135-0fe5-43f6-b4a0-ce7003c276b1","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Text in Glyph window","Languages":[{"Code":"en","Title":"Text in Glyph window","Slug":"text-in-glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8da6e89e-b4d2-4ec5-af8c-b9b95ebf837b","Path":"wrapping-text.md","Order":6},{"Id":"199bed37-1278-4f53-b8cc-bfd7eb66611c","Path":"cousins-2.md","Order":2},{"Id":"008490a3-1828-424f-8cd1-b833d7c35628","Path":"text-improvements-1.md","Order":4},{"Id":"6c447a2e-2b85-4d23-b892-cc885245b760","Path":"zigzag-glyphs.md","Order":7},{"Id":"f11de472-8c06-4bae-83ee-9ca13dbac4e5","Path":"switching-glyphs-in-the-editing-area.md","Order":3},{"Id":"b779b26b-48e3-4eb3-ab86-518fe6a231f0","Path":"text-wrapping.md","Order":5},{"Id":"84607593-18cd-4a3b-b7f3-618e4c86d5ef","Path":"adding-context-to-text-in-the-glyph-window.md","Order":1}],"Id":"9d434793-642c-48f7-bb12-8fb7b414b6aa","Path":"other.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Other","Languages":[{"Code":"en","Title":"Other","Slug":"other","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a5f7ff45-6823-40c6-a87b-aee2194f9179","Path":"pairs-phrases-panel.md","Order":3},{"Id":"4231bb6d-fc7b-4a4d-a888-85eb9ed469cf","Path":"unicode-glyph-specifiers.md","Order":6},{"Id":"bb17f9b4-acda-4abd-be15-fccf499088d0","Path":"adding-text-to-the-glyph-window.md","Order":1},{"Id":"d639314f-63c3-4899-8254-28d10df4ba9c","Path":"glyph-window-text.md","Order":2},{"Id":"47c4ac6c-133e-4e6f-8f4a-3bdb7ec0f0b5","Path":"synchronize-text-between-glyph-windows.md","Order":4},{"Id":"bf37afcc-88b0-4c1c-82c8-1e3dbe8003ad","Path":"typing-glyphs-in-glyph-window.md","Order":5}],"Id":"6c060903-252d-4f35-8d49-d1adcd22dc7a","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Adding Text","Languages":[{"Code":"en","Title":"Adding Text","Slug":"adding-text","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cda7829a-b287-4f72-a1b2-e1fc7ea9930a","Path":"copy-unicode-text-glyph-names-or-auto-layer-recipes.md","Order":1},{"Id":"cddf5217-78de-4efa-8957-85af28f2b5cd","Path":"text-copy-text-as.md","Order":2}],"Id":"09070a91-05fd-4859-82ed-3ae0e0e24b78","Path":"copying-text.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Copying Text","Languages":[{"Code":"en","Title":"Copying Text","Slug":"copying-text","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"b736c9d7-4903-483d-9d9a-840362763d9f","Path":"navigate-through-missing-glyphs.md","Order":3}],"Id":"3ec90045-2f07-4255-a3be-e9ede8cee44e","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Text Mode","Languages":[{"Code":"en","Title":"Text Mode","Slug":"text-mode","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"792aebf6-cb6a-4ef2-8d50-c76a862a4337","Path":"duplicating-a-guide.md","Order":2},{"Id":"f8d25636-2024-4a73-b7b5-f7afea45fc5d","Path":"proportional-guide-markers.md","Order":13},{"Id":"54cee280-3239-4885-9683-e6c5248b9da8","Path":"guide-tags.md","Order":4},{"Id":"e1f11738-4140-4d9c-867b-ff0681c61d27","Path":"guides-anchors-pins-snapping.md","Order":7},{"Id":"9a536d3f-e2a6-40c7-9cf2-8283f75ebe01","Path":"guide-markers.md","Order":3},{"Id":"0d04529a-b5f3-4eba-a771-38ccf448b08a","Path":"guides-context-menu.md","Order":6},{"Id":"617c189d-80d8-4f8a-b3b4-1170f2e44d07","Path":"guides.md","Order":8},{"Id":"aedd2c56-abee-40a1-a47a-be3f69fa7acc","Path":"opacity-of-guides-zones-hints-font-dimensions.md","Order":12},{"Id":"58f9fb71-fa1d-42ab-ac4d-d9569df82a40","Path":"slanting-a-guide.md","Order":16},{"Id":"addbb254-a2ca-46c3-aadc-7eb16b6653d8","Path":"changing-the-guide-type.md","Order":17},{"Id":"19df8333-6add-4bde-9382-ff3e810981e4","Path":"selecting-a-guide.md","Order":15},{"Id":"d12b51d5-3602-4b59-9167-3cf9d9abfdaa","Path":"removing-a-guide.md","Order":14},{"Id":"868a6e46-d9d9-4df9-84ab-24146b30bd6d","Path":"creating-a-guide.md","Order":1},{"Id":"7cd114c8-9bb8-49f3-80af-70bcea40a60d","Path":"guide-width.md","Order":5},{"Id":"3a85fdf9-6491-4c6c-9c98-3c6e942f8ee3","Path":"measurement-markers.md","Order":10},{"Id":"90cc2abd-d28a-4c3a-bcc0-82ef3f73aee2","Path":"moving-a-guide.md","Order":11},{"Id":"5a97fd2d-0dd9-4e4f-8b4a-b1bae679e9da","Path":"locking-a-guide.md","Order":9}],"Id":"c36334f2-f92b-4e30-b6e9-4e06b7875aec","Path":"using-guides.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Using Guides","Languages":[{"Code":"en","Title":"Using Guides","Slug":"using-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"7ba7a28e-d020-40cb-9862-d1353055bb01","Path":"property-bar-5.md","Order":3},{"Id":"567d2c4f-b165-4a58-92b1-00aa104f651c","Path":"editing-area.md","Order":2},{"Id":"2adf715a-e7a9-4e2b-b5ac-62b0b22720a0","Path":"selection-remembered.md","Order":6},{"Id":"9538b8fa-abf2-4949-ab63-254435cc9eb5","Path":"content-sidebar.md","Order":9},{"Id":"0482f003-f566-4f8e-8641-25f09582b77d","Path":"searching-in-the-glyph-window.md","Order":5},{"Id":"c1bd93e0-8d3d-4ea5-9d33-45cf68ce9f53","Path":"using-the-property-bar-1.md","Order":8},{"Id":"db57ace0-ae74-494f-ab7d-3454e2937c2e","Path":"working-in-the-editing-area.md","Order":1},{"Id":"22486e30-74de-46b9-b219-47c0f02a9ff7","Path":"zoom-preferences.md","Order":10},{"Id":"7057886e-ce96-4d30-9d3e-4126d382d65b","Path":"top-and-left-rulers.md","Order":7},{"Id":"1641e11d-1158-46e8-8523-45174c05b631","Path":"metrics-table-1.md","Order":4}],"Id":"65c91c3d-6550-4bb3-a208-ecb9fcd18da8","Path":"glyph-window-contents.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Glyph Window Contents","Languages":[{"Code":"en","Title":"Glyph Window Contents","Slug":"glyph-window-contents","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2e08dabc-7118-4ec9-9522-28460168d78d","Path":"when-the-ellipse-or-rectangle-tool-is-active.md","Order":6},{"Id":"cde78c25-23d5-4e46-b06e-e8911519f426","Path":"when-one-or-more-points-are-selected.md","Order":4},{"Id":"69fdba1e-7d4d-456c-9b9c-dd5945239531","Path":"when-the-kerning-tool-is-active.md","Order":9},{"Id":"b35a97b1-6eca-4811-8ecb-dd6bf9d17b48","Path":"when-a-guideline-or-hint-is-active.md","Order":2},{"Id":"f0b2aad2-e147-4053-ad34-87c6faf49027","Path":"when-the-metrics-tool-is-active.md","Order":11},{"Id":"324cf935-ae6e-4575-baec-fd63ae6af85c","Path":"when-the-brush-tool-is-active.md","Order":5},{"Id":"5e6c1feb-d282-4a4f-b8c1-28df9c6954b2","Path":"default.md","Order":1},{"Id":"7ada58af-165a-4362-bd8f-768bdd1a78e4","Path":"when-the-free-transform-tool-is-active.md","Order":8},{"Id":"0f5ea4ae-d3f4-4ed2-a6f2-202dda7b120a","Path":"when-an-anchor-or-pin-is-active.md","Order":3},{"Id":"724d5933-fe64-4f5c-ba1c-19eb7cb53bb8","Path":"when-the-matchmaker-tool-is-active.md","Order":10},{"Id":"ca4a4e29-efe7-483a-ad20-221595ef4972","Path":"when-the-guides-tool-is-active.md","Order":7},{"Id":"e41a3874-ce7b-4115-aac8-b6524b72e252","Path":"when-the-text-tool-is-active.md","Order":12}],"Id":"6e501951-f53f-4e41-9cb2-47cc40b4888b","Path":"glyph-window-property-bar.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Glyph Window Property bar","Languages":[{"Code":"en","Title":"Glyph Window Property bar","Slug":"glyph-window-property-bar","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b901bd2a-5885-4ba7-9459-b5ff48054215","Path":"edit-across-commands.md","Order":2},{"Id":"0d4b2ff7-d1a0-4d27-b398-9b3d3761ec95","Path":"editing-several-glyphs-together.md","Order":6},{"Id":"41f14310-48cf-41db-b390-fa65b1e4d298","Path":"editing-several-elements-together.md","Order":5},{"Id":"2b3b7eea-bfb6-44d6-b1b4-09eb59658bca","Path":"edit-across-glyphs.md","Order":3},{"Id":"c8ac76b6-f397-4a68-8a66-d9362be13ad4","Path":"editing-across-elements.md","Order":4},{"Id":"db89dfd8-1714-4934-92ef-3aaa25eaf411","Path":"editing-several-layers-together.md","Order":7},{"Id":"dcbc4b4b-e821-44f4-a3e5-8b264ffbeec6","Path":"details-across-glyphs.md","Order":1},{"Id":"ea122549-9276-47ca-a8f3-65842c9fe8c5","Path":"free-transform-across-elements-and-layers.md","Order":8},{"Id":"de232629-6650-470f-b0e1-caa8480fd0e1","Path":"editing-across-layers.md","Order":9}],"Id":"21a32356-293c-4dd3-87aa-9a715fc0770f","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Scope of Editing","Languages":[{"Code":"en","Title":"Scope of Editing","Slug":"scope-of-editing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ee985ccd-2d24-4b22-b1cb-f7db71c90305","Path":"flagging-glyphs.md","Order":2},{"Id":"912ca73c-da19-47fd-97b6-ebb0c4b4602f","Path":"using-the-property-bar-2.md","Order":6},{"Id":"e58705e5-8886-42de-8e2f-42703d2a1986","Path":"using-the-text-bar.md","Order":7},{"Id":"16560849-818d-443d-975f-e134b64d17cb","Path":"from-glyph-window-to-font-window.md","Order":3},{"Id":"2fa56407-a1ff-4f84-b71c-370d4580024e","Path":"using-the-content-sidebar.md","Order":5},{"Id":"47cd2fb0-7e7f-4f82-9762-3928b3f07330","Path":"modifying-formatting-in-the-glyph-window.md","Order":4},{"Id":"9abea1c5-2731-477d-95a9-1c1fdc1b85ec","Path":"adding-and-editing-glyph-tags.md","Order":1}],"Id":"8f4f520c-9f8d-4405-b034-7f6e2db3dcf4","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Using the Property Bar","Languages":[{"Code":"en","Title":"Using the Property Bar","Slug":"using-the-property-bar","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2249932a-114f-478f-bb2a-db585144f2e0","Path":"glyph-window-modes1.md","Order":4},{"Id":"07ca0e0f-4ee7-4e26-bd0b-e5d60aa675bf","Path":"production-modes.md","Order":5},{"Id":"7a17948f-ce72-4238-a273-092d6c7201a1","Path":"editing-mode.md","Order":2},{"Id":"92b9eae1-49b8-49c0-aa78-3cb36b3b6172","Path":"spacing-modes-metrics-kerning.md","Order":6},{"Id":"fb751bbc-58ce-4736-bef0-eebb00ad2adb","Path":"drawing-mode.md","Order":1},{"Id":"e2152cdc-fcdc-4eb4-882f-4539c63762f9","Path":"text-mode-1.md","Order":7},{"Id":"ffc2be2f-8620-4fd8-905b-5578c5a1dfb3","Path":"element-mode.md","Order":3}],"Id":"80444ddc-843c-4420-a233-35c3f3133612","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Glyph Window Modes","Languages":[{"Code":"en","Title":"Glyph Window Modes","Slug":"glyph-window-modes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0a60b2fc-939a-4fb7-a8ad-f07298ba3aee","Path":"noncurrent-glyph-details.md","Order":5},{"Id":"3d19b0d2-6978-4d17-91d8-f84a42fbe33f","Path":"current-glyph-details.md","Order":1},{"Id":"9293e033-1f94-4375-805d-9178c7e26a77","Path":"opening-a-glyph-window.md","Order":7},{"Id":"5d4c0bcf-e80d-463b-982e-1b69be27df3c","Path":"glyph-window-view-sets.md","Order":4},{"Id":"429d8647-1e90-47c3-a8f7-997ee5e51c45","Path":"esc-key-in-the-glyph-window.md","Order":2},{"Id":"4f0c1df7-2090-4ce9-a49e-72b1050656aa","Path":"glyph-size-in-glyph-window.md","Order":3},{"Id":"b4847ead-ef3d-4184-aff0-2c44484c2ab5","Path":"outline-color-in-glyph-window.md","Order":8},{"Id":"baeab1f1-fd60-434e-995e-156537e697cc","Path":"using-several-glyphs.md","Order":9},{"Id":"55e116bd-20a7-4c99-8427-5f3e0740dac4","Path":"open-glyphs-for-editing-more-easily.md","Order":6}],"Id":"f3c794bf-4ffe-4bc8-8bd9-78e50cf8621a","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Editing an Existing Glyph","Languages":[{"Code":"en","Title":"Editing an Existing Glyph","Slug":"editing-an-existing-glyph","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"43f4d589-8781-4591-864a-9da7cae5f98b","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Using the Glyph Window","Languages":[{"Code":"en","Title":"Using the Glyph Window","Slug":"using-the-glyph-window","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"509ff0f6-14c9-435e-8abf-3b0e69d3f8f1","Path":"font-names.md","Order":1},{"Id":"69720d29-e72d-434d-b89e-1c4219a4cf9c","Path":"righttoleft-mark-attachment.md","Order":3},{"Id":"d3512233-a323-40ce-85ef-092a2e9eb58a","Path":"bidirectional-support-in-glyph-window-and-preview-panel.md","Order":4},{"Id":"bd32ba53-9926-42c6-ae2d-67d8cf67a651","Path":"virtual-tags-1.md","Order":5},{"Id":"6e9b00f2-388f-4edd-ba45-5652d3e18b4b","Path":"positional-features.md","Order":2}],"Id":"a8ca7b44-c532-432e-9b09-06628e36bd5d","Path":"script-support.md","Order":8,"CategoryType":1,"Icon":null,"Title":"Script support","Languages":[{"Code":"en","Title":"Script support","Slug":"script-support","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"96ca6be3-44c3-47ac-b445-86a80edd7623","Path":"show-missing-glyph-placeholders.md","Order":9},{"Id":"5a85517c-2c25-4dfb-a920-2bdef3e60fa7","Path":"show-cross.md","Order":14},{"Id":"149807ee-4148-41cf-a595-5c38b53ec033","Path":"always-show-anchor-names.md","Order":16},{"Id":"61eac6ae-5fc6-4d7c-aee4-2205d289e6f4","Path":"live-preview-may-be-slow.md","Order":17},{"Id":"82ed7b18-12ff-4dec-b791-bc7e8d82b87f","Path":"clicking-outline-selects-segment.md","Order":2},{"Id":"383f4fa5-1e80-497b-8eb5-6b10287ced6b","Path":"holding-cmd-activates-contour-tool.md","Order":8},{"Id":"496a0d23-c4e0-4f7d-bb1d-035aae4c2b8e","Path":"highlight-nodes-on-alignment-zones.md","Order":7},{"Id":"35595da6-bd8a-43d0-88f5-f920dc463bce","Path":"marquee-selection-selects-nodes-but-not-handles.md","Order":10},{"Id":"a9bbc0f9-ddb7-4b88-a312-234be1283860","Path":"rapid-tool-remembers-last-state.md","Order":15},{"Id":"fd4cd901-2122-4e09-bee0-05580950b22c","Path":"curve-handles-have-fixed-direction-when-curve-point-is-dragged.md","Order":3},{"Id":"10096c33-543e-4904-b0ad-29f84ec38d7a","Path":"pen-and-pencil-tools-can-change-contour.md","Order":12},{"Id":"247b4106-1530-4a8d-81f3-5b2690c70382","Path":"preferences-for-editing-1.md","Order":13},{"Id":"a9a7cb5f-0887-48d6-a96c-d03f8199ea38","Path":"pasting-contour-to-another-element-preserves-appearance.md","Order":11},{"Id":"ff2fc23f-8e20-4e0d-ae2c-3348292161ce","Path":"force-snap-to-guides.md","Order":4},{"Id":"1e1071aa-69c5-4a4e-9436-eb69af2e79e7","Path":"free-transform-scaling-nonproportional-with-shift-otherwise-proportional.md","Order":5},{"Id":"9b126c51-4ccf-4d0f-a6a8-0d5a9ac923dd","Path":"hide-character-placeholders-if-layer-is-not-empty.md","Order":6},{"Id":"3791980b-8cd2-4236-8bf5-5759561f2c27","Path":"show-scroll-bars-in-the-glyph-window.md","Order":1}],"Id":"c14b1506-2081-4a51-9c71-f5bf88baa06b","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Preferences for Editing","Languages":[{"Code":"en","Title":"Preferences for Editing","Slug":"preferences-for-editing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fea80f01-e0a2-4e9a-9eab-f4e6d669ab56","Path":"font-data.md","Order":2},{"Id":"f7702cbe-da50-4d5c-a666-288638004988","Path":"font-data-from-open-fonts.md","Order":1}],"Id":"bd278ed3-8488-4b8b-b707-dca76daddc64","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Importing Font Data","Languages":[{"Code":"en","Title":"Importing Font Data","Slug":"importing-font-data","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"26fb68dc-15c1-4f34-b9ce-de6463823a6e","Path":"fractional-vs.md","Order":2},{"Id":"415d35b8-45e3-430c-9267-4e39e3fc398d","Path":"fractional-coordinates-1.md","Order":1},{"Id":"657fd6ff-5934-4876-929e-c9b2906829f9","Path":"sketchboard-coordinates.md","Order":5},{"Id":"e26d7303-6f73-4223-81a4-c7d264df7791","Path":"working-in-rounded-coordinates.md","Order":8},{"Id":"339bdba4-8422-4ae2-89aa-ed76e2b50a92","Path":"preview-rounding.md","Order":4},{"Id":"dc89ee4c-b8c8-4f47-90d0-82ae89ba79b0","Path":"using-integers.md","Order":6},{"Id":"8b4e4f26-4fc9-486e-bb94-a25d134e4a1f","Path":"working-in-fractional-coordinates.md","Order":7},{"Id":"c9c851c4-4063-4500-9b43-0c3f956e81ee","Path":"working-with-fractional-coordinates.md","Order":9},{"Id":"fabd15bd-f438-43f5-af51-25bd874a922c","Path":"increasing-the-precision-of-coordinates.md","Order":3}],"Id":"f3cc21a6-43cd-4abb-8b18-ce9e9ce81b6d","Path":"coordinates-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Coordinates","Languages":[{"Code":"en","Title":"Coordinates","Slug":"coordinates-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1821b38b-b19a-40f4-8223-496cfb1ce539","Path":"grid-preferences.md","Order":2},{"Id":"9e82baee-2ed8-4393-a1a6-b7c49fa0adf4","Path":"quick-measurement-1.md","Order":4},{"Id":"d35aae9d-b4cd-4aca-b666-a80cd59032b1","Path":"snapping-glyph-parts-and-interface-features.md","Order":6},{"Id":"83bf4e31-ac12-4f35-9052-a98be9d9490d","Path":"coordinates-and-measurements.md","Order":7},{"Id":"84cbbf3c-bf7d-4504-b144-415fb4fa6701","Path":"viewing-glyph-parts-and-interface-features.md","Order":8},{"Id":"2280acfd-39dc-4f04-b8af-68a4963d0d24","Path":"locking-glyph-parts-and-interface-features.md","Order":3},{"Id":"6bb30675-ec5d-4be5-8417-6335f50eb8df","Path":"scrolling-in-the-editing-area.md","Order":5},{"Id":"651002d7-3a5a-4797-9c92-217b3446b79b","Path":"zooming-in-the-editing-area.md","Order":9},{"Id":"c48c835c-81d0-4355-9688-cb65bcf640d3","Path":"end-lines-center-line-rainbow.md","Order":1}],"Id":"f31f8053-8df3-4c53-b5cd-b6c898e31acc","Path":"to-be-defined.md","Order":2,"CategoryType":1,"Icon":null,"Title":"To be defined","Languages":[{"Code":"en","Title":"To be defined","Slug":"to-be-defined","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"74aad822-5570-4665-85f5-00ab36ecd383","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Editing Glyphs","Languages":[{"Code":"en","Title":"Editing Glyphs","Slug":"editing-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"6b338636-1014-46d5-978a-f3661a52096e","Path":"using-the-ellipse-tool.md","Order":3},{"Id":"ea50bdbf-dc12-45b3-80ba-0d092456395f","Path":"drawing-ellipses-and-rectangles.md","Order":1},{"Id":"2cd3dd44-b3c6-40e8-a25d-44c9ff9914de","Path":"rectangle-and-ellipse-tools.md","Order":2},{"Id":"11843fdc-3c9c-4758-8fe0-c0388f812235","Path":"using-the-rectangle-tool.md","Order":4}],"Id":"3fc7cd0a-4ad5-41da-8ede-9e0773fcc668","Path":"drawing-with-geometric-shapes.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Drawing with Geometric Shapes","Languages":[{"Code":"en","Title":"Drawing with Geometric Shapes","Slug":"drawing-with-geometric-shapes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b0230695-be36-42a5-b31e-bfd671bab982","Path":"appearance-of-contours.md","Order":1},{"Id":"a84d792e-11b2-4fad-ae52-9a3ffb724518","Path":"appearance-of-nodes.md","Order":2},{"Id":"2c6982c0-0bc9-48f0-98fe-c3268813a50e","Path":"fill-and-preview.md","Order":3},{"Id":"888bc477-e5fc-4b53-ad8b-43b414543fab","Path":"selections.md","Order":4}],"Id":"b5be7de8-15b0-4d06-877d-c392a5af043f","Path":"outline-appearance.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Outline Appearance","Languages":[{"Code":"en","Title":"Outline Appearance","Slug":"outline-appearance","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"aed3f129-e79e-495f-ae7d-ac9310229123","Path":"using-the-rapid-tool.md","Order":3},{"Id":"6d2d8e1f-d502-467e-9c79-8aaa26dece51","Path":"drawing-freehand-1.md","Order":1},{"Id":"825f0097-bc10-4d60-9050-5accf44b5a76","Path":"using-the-pen-tool.md","Order":2}],"Id":"e83c5d2b-942f-4ccb-92fa-dd07952c7cdf","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Drawing vector curves","Languages":[{"Code":"en","Title":"Drawing vector curves","Slug":"drawing-vector-curves","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8bb1fe0b-05e6-49ba-b1e0-5e1362a3e574","Path":"creating-a-new-blank-glyph-1.md","Order":3},{"Id":"d6377c8d-dfc6-4588-9ec6-a923b7560545","Path":"creating-a-new-glyph-2.md","Order":4},{"Id":"f0d5d23c-9550-4e49-88a0-9cb0e7927828","Path":"add-a-new-glyph-to-the-font-1.md","Order":1},{"Id":"212a8d7c-ce11-4a5d-9753-6b6b4e5f31e0","Path":"creating-a-glyph-in-an-empty-glyph-cell.md","Order":2},{"Id":"4a281940-1e62-4513-a6cf-134f32cd15cc","Path":"creating-several-glyphs-from-empty-glyph-cells.md","Order":6},{"Id":"9fc37062-3b5b-41a1-9b31-f6b53297e3ac","Path":"creating-glyphs-even-when-placeholder-is-not-visible.md","Order":5}],"Id":"dc6fb372-5b38-4c2d-9ab1-21286410cda7","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Creating a new glyph","Languages":[{"Code":"en","Title":"Creating a new glyph","Slug":"creating-a-new-glyph","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a20bd9b2-57eb-4bc2-98f2-a0cb748eab6a","Path":"snap-to-baseline.md","Order":3},{"Id":"db94cc41-bf08-459e-8563-5d44c307e788","Path":"power-guides-3.md","Order":1},{"Id":"13c2a88f-2532-4b19-aee5-37e6f2b4668a","Path":"suggest-distance.md","Order":4},{"Id":"9541df1b-c1f3-4845-b76b-35a2d4d57555","Path":"slanted-guides.md","Order":2}],"Id":"a951f05e-4a30-43aa-8e62-05c94c2001d6","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Guides and snapping","Languages":[{"Code":"en","Title":"Guides and snapping","Slug":"guides-and-snapping","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"4b284a84-5ddd-4117-9f8c-1bf69b3d9664","Path":"remove-overlap1.md","Order":1},{"Id":"9e26235d-2e0a-4d26-a1cc-d623773fbb39","Path":"removing-overlaps.md","Order":2}],"Id":"c4928ce3-8733-426b-b901-54d7b53c8e35","Path":"remove-overlap.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Remove Overlap","Languages":[{"Code":"en","Title":"Remove Overlap","Slug":"remove-overlap","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3d637c65-cc10-4491-8b1b-6c0cdf7973e0","Path":"asymmetrically-changing-curves.md","Order":1},{"Id":"3cd02435-161e-4cf4-8efb-0d9ce2fd6f37","Path":"tunni-lines1.md","Order":3},{"Id":"6d7d5a4c-78e6-4610-b585-5ae2c35ab5a8","Path":"symmetrically-changing-curves.md","Order":2},{"Id":"e337ab97-9749-4932-a144-41c0f7ab36d9","Path":"tunni-lines2.md","Order":4}],"Id":"88c2f631-442a-4111-8187-b3a48d32daf4","Path":"tunni-lines-1.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Tunni Lines","Languages":[{"Code":"en","Title":"Tunni Lines","Slug":"tunni-lines-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3f9d074f-6f29-4f47-a8ac-0ed33d258004","Path":"balance-1.md","Order":1},{"Id":"3f93c8d1-cf39-49ff-a6df-291175842dbb","Path":"harmonize-1.md","Order":2}],"Id":"1f970ee5-159b-4d31-b15f-e4c82b9953c8","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Harmonize and Balance","Languages":[{"Code":"en","Title":"Harmonize and Balance","Slug":"harmonize-and-balance","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c6c5cb3b-ed63-4b95-924c-b8648c3fe59e","Path":"extremes.md","Order":1},{"Id":"b8d3f006-4d00-4e08-b5b2-90d9a4ed5b18","Path":"nodes-at-extremes-1.md","Order":2}],"Id":"eaad1d84-2ac1-47e7-9fe1-f600e462b4f6","Path":"adding-nodes-to-extremes.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Adding Nodes to Extremes","Languages":[{"Code":"en","Title":"Adding Nodes to Extremes","Slug":"adding-nodes-to-extremes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f0404083-9485-4942-a70f-364c9c3334d6","Path":"loop-corners-with-scissors-tool.md","Order":1},{"Id":"a3e03f7c-8fb5-4ad6-b5f6-b0ac46b3992f","Path":"unfill-looped-corners.md","Order":2}],"Id":"107be0b7-aca8-4981-80a3-e14cfdd8d4ff","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Looped Corners","Languages":[{"Code":"en","Title":"Looped Corners","Slug":"looped-corners","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fc7a65cc-6bd3-42ab-a72b-2f3a15e58329","Path":"make-overlap-1.md","Order":2},{"Id":"d2abc1bb-868c-4878-a289-4d0a9f6f979d","Path":"creating-overlaps.md","Order":1}],"Id":"f421da20-a7b5-4980-895f-3ddfd613e186","Path":"create-overlaps.md","Order":8,"CategoryType":1,"Icon":null,"Title":"Create Overlaps","Languages":[{"Code":"en","Title":"Create Overlaps","Slug":"create-overlaps","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ba4176af-5bd7-4ce8-950c-5bc28d7d6fba","Path":"g1-continuity.md","Order":2},{"Id":"9998789c-7632-4f2d-a50e-dbbf550f98eb","Path":"g0-g1-g2-g3-curve-continuity.md","Order":3},{"Id":"50f615de-3752-4955-ba7d-b988abd4807e","Path":"g3-curve-continuity-smooth-nodes-with-harmonized-handles.md","Order":7},{"Id":"b0e31b2d-c9ec-4da3-a02b-d1e1d962c648","Path":"harmonizing-nodes-g2-and-handles-g3.md","Order":8},{"Id":"607870b4-1571-48c0-b804-6c289a7b4296","Path":"curvature-and-smoothness.md","Order":1},{"Id":"a3741f63-ef44-4988-8d05-0c7a8a276ac1","Path":"autodetection-of-smooth-nodes-g1.md","Order":6},{"Id":"719402ae-2616-4ac6-ac32-5f6004aaafa8","Path":"g3-curve-continuity-harmonized-smooth-nodes.md","Order":4},{"Id":"fa3c9387-b9e4-4d32-8877-1a575ef585c6","Path":"g2-curve-continuity-smooth-nodes.md","Order":5}],"Id":"131688be-d880-45bf-974c-4824ae85863a","Path":"curve-continuity.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Curve continuity","Languages":[{"Code":"en","Title":"Curve continuity","Slug":"curve-continuity","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"828e0cfd-d4d3-40a6-ab9f-13251c8219bc","Path":"find-and-replace.md","Order":1},{"Id":"3b000ace-076d-4ea7-84c7-7eb5675f5cc9","Path":"procedure-1.md","Order":3},{"Id":"643891e4-5145-4a7e-bb22-4900220b2322","Path":"finding-differences.md","Order":2}],"Id":"764bbade-dfad-41f7-8f17-6cb6e9298d42","Path":"find-and-replace-outline.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Find and Replace Outline","Languages":[{"Code":"en","Title":"Find and Replace Outline","Slug":"find-and-replace-outline","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7e1f4704-2809-451f-8a86-e17de3ab6768","Path":"clean-up-1.md","Order":1},{"Id":"4f0962de-b439-4b9f-9d6b-ace24140ac4d","Path":"simplify-1.md","Order":2}],"Id":"ca5eb913-789a-4c15-a56e-0ca0499322c0","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Simplify and Clean Up","Languages":[{"Code":"en","Title":"Simplify and Clean Up","Slug":"simplify-and-clean-up","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"5c645f16-2f2a-4852-84ce-01cd09909c35","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Improving contours","Languages":[{"Code":"en","Title":"Improving contours","Slug":"improving-contours","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"46c69ca5-e486-4083-a93c-fa5298dd3ed2","Path":"quick-measurement-2.md","Order":2},{"Id":"2680de28-fd6c-4fc8-b981-b854a36d32f8","Path":"scoreboard-2.md","Order":3},{"Id":"5c0d4184-accf-403d-a526-8afc86b4f0f6","Path":"measurement-line-2.md","Order":1}],"Id":"4b2526c1-bb82-491f-a85a-3700839f2647","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Measurement Line","Languages":[{"Code":"en","Title":"Measurement Line","Slug":"measurement-line","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"965f877f-6b70-4332-b42f-ee8c7337ac6e","Path":"drawing-and-glyph-editing-1.md","Order":3},{"Id":"ad56e0f5-a8f8-4d50-a1a7-a8094d85b2c7","Path":"jsonbased-copypaste-system.md","Order":8},{"Id":"dee013d4-8f0b-4237-af1b-00246e6261a4","Path":"tangent-start-points.md","Order":10},{"Id":"551a59f3-256f-4498-9cb1-22050a8d1b8b","Path":"anchor-cloud-only-for-selected.md","Order":9},{"Id":"10239cc3-f218-468f-8e79-73569fa35295","Path":"glyph-window-oncanvas-text-fields.md","Order":4},{"Id":"fab97305-5d92-4d57-820d-ce889f435e7e","Path":"unlink-node.md","Order":11},{"Id":"8654490a-2fa9-4baa-a830-2c2e132de1af","Path":"contour-operations-in-the-node-panel.md","Order":2},{"Id":"79e7df70-3302-41e4-927c-cc5fce634919","Path":"selection-frame.md","Order":5},{"Id":"6d38ad91-b552-435b-aa55-7e5534747a5e","Path":"set-start-point.md","Order":1},{"Id":"ebf9c2a1-38a9-47bd-a650-bbae32e7e7e4","Path":"outline-conversion-1.md","Order":6},{"Id":"138ca837-83ef-42eb-bbc6-34a0166287b7","Path":"relative-handle-positions.md","Order":7}],"Id":"af6fdf64-723d-4a80-b61d-7c3cfe0eb37b","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Glyph Design","Languages":[{"Code":"en","Title":"Glyph Design","Slug":"glyph-design","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8a940b23-fc9c-44c7-b8a6-b0b8445d6917","Path":"other-options.md","Order":1},{"Id":"5f4622ac-02f9-4bb6-99c0-2d9c606bb2ee","Path":"using-the-eraser-tool-1.md","Order":2}],"Id":"a0376cfe-d5dd-4958-8530-2bef9b312bea","Path":"deleting-points.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Deleting Points","Languages":[{"Code":"en","Title":"Deleting Points","Slug":"deleting-points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"35425821-b1a4-4c52-a587-593d46c193a0","Path":"action-add-nodes.md","Order":1},{"Id":"3a1b605c-7004-4221-827d-1728b8a12986","Path":"basic-operations.md","Order":2}],"Id":"444873c2-7182-4e9d-be61-73ce55c0420f","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Adding Points","Languages":[{"Code":"en","Title":"Adding Points","Slug":"adding-points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e477e0bb-8839-4c8a-bf35-61f94b393aa3","Path":"move-nodes-or-handles-with-cursor-keys-after-dragging.md","Order":5},{"Id":"14900388-c5d4-40cc-a004-b58fe76a115c","Path":"aligning-of-nodes-handles-and-contours.md","Order":1},{"Id":"82b2fe08-553b-4ddb-bc6b-b33133be86f4","Path":"refined-arrow-key-shortcuts-for-moving-nodes-and-selections.md","Order":8},{"Id":"3bf9847a-b256-41ee-91c8-4c6cef5fb6a9","Path":"highprecision-nonnode-editing.md","Order":3},{"Id":"8367db67-bd85-4fef-8455-69cd89177820","Path":"altdragging-a-node.md","Order":2},{"Id":"c7b0e0f9-89aa-4eb0-9b47-820e806e43f6","Path":"more-flexible-shiftdragging-of-points.md","Order":4},{"Id":"06c38c08-b8bf-4168-a9d7-4e2cf687cbe4","Path":"power-nudge.md","Order":6},{"Id":"d353dbda-b987-4a9a-a1c1-a4f7d1bff1d0","Path":"precision-cmdctrldragging-of-nodes-and-handles.md","Order":7},{"Id":"5c580e23-8975-4202-be49-5d4172550474","Path":"some.md","Order":9}],"Id":"4cc30123-abda-4f95-a751-bd42ab516054","Path":"moving-points.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Moving Points","Languages":[{"Code":"en","Title":"Moving Points","Slug":"moving-points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"952f7fdd-6db0-49f7-a64b-8ed47974e0f6","Path":"clicking-near-a-node-handle-or-segment.md","Order":3},{"Id":"b864f21e-4996-441e-a945-fe210019cf5b","Path":"additional-options-for-nodes-connecting-postscript-curves.md","Order":2},{"Id":"0a6e51fe-9e93-4a6a-ab1d-58c196fef105","Path":"moving-control-points.md","Order":6},{"Id":"f0f43eb9-cb46-46c5-bccc-db30b068a138","Path":"using-the-arrow-keys.md","Order":9},{"Id":"5ee9510f-633f-4d9a-a52e-25b2ea7ad59b","Path":"showing-handles-in-mask-and-inactive-layers.md","Order":8},{"Id":"f555a453-2b34-4269-bb47-a1af36e6c47c","Path":"deselecting-nodes-and-handles.md","Order":4},{"Id":"a18b8855-0677-4e95-8dbf-b69c8e54cae0","Path":"active-and-selected-points-1.md","Order":1},{"Id":"62441e61-c912-4f4c-bf0c-336f09ab3482","Path":"selecting-points-1.md","Order":7},{"Id":"ce358edc-8a84-4a4e-a1fd-98bb088e1d22","Path":"marquee-selection-of-nodes-and-handles.md","Order":5},{"Id":"5c5b2152-fbf0-4d5b-b685-9011c9232f16","Path":"using-the-contour-tool.md","Order":10}],"Id":"30d56f4f-7466-4791-99d8-905d311dd675","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Active and Selected Points","Languages":[{"Code":"en","Title":"Active and Selected Points","Slug":"active-and-selected-points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"29f5c312-8ae7-4e36-8ce2-be873e531dec","Path":"from-line-segment-to-curve-segment.md","Order":2},{"Id":"013531fd-6e5c-4d04-9dd7-088fdb03f795","Path":"ps-curve-into-tt-curve.md","Order":4},{"Id":"0dd89ec9-927b-478c-8a6a-15652a30760b","Path":"from-curve-segment-to-line-segment.md","Order":1},{"Id":"b3fe1d0f-4211-41fb-a5c1-8e46cd8f810c","Path":"from-segment-to-tt-and-back-to-ps.md","Order":3},{"Id":"28663539-faf5-4d92-9c38-c1b1c084aeb4","Path":"relative-handle-positions-1.md","Order":5}],"Id":"45876ea1-4c74-46c2-b3b6-0b92c66dc3f6","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Changing Segment Types","Languages":[{"Code":"en","Title":"Changing Segment Types","Slug":"changing-segment-types","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"969755bf-8f4c-457f-beb5-fe9ef049909a","Path":"using-the-slanted-grid.md","Order":3},{"Id":"4f46dcff-4445-4e4b-a1c2-716809c058db","Path":"italic-contours-follow-italic-angle.md","Order":1},{"Id":"63020136-e5a4-4b89-b539-3294bc2c8b52","Path":"make-slanted-glyph-guides.md","Order":2}],"Id":"441cfc0a-debe-45c4-a43a-ba403e316942","Path":"italic-things.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Italic Things","Languages":[{"Code":"en","Title":"Italic Things","Slug":"italic-things","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d057b67e-fd8c-45b1-af79-ae92f34f39ca","Path":"using-menu-commands-1.md","Order":2},{"Id":"94e10a6f-09f3-4e5d-a0ca-b61419635a63","Path":"autodetection-of-smooth-nodes.md","Order":6},{"Id":"eb9c0876-5bfb-40e8-afe8-867d3f35751d","Path":"smooth-and-sharp-nodes.md","Order":1},{"Id":"a53f2915-7c29-4b1a-a590-5ae25600ee8e","Path":"smart-nodes-1.md","Order":4},{"Id":"ad126b6d-6e62-454f-a167-e27394d2d998","Path":"using-rapid-tool.md","Order":5},{"Id":"32e57832-7485-4f0f-ba29-602b711a1926","Path":"using-the-contour-tool-1.md","Order":3}],"Id":"df7a8b75-1360-4bc5-b516-01e744456d5c","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Changing Node Types","Languages":[{"Code":"en","Title":"Changing Node Types","Slug":"changing-node-types","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"d08646d4-1e67-4fa2-8320-a23a006d2ca2","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Working with Points","Languages":[{"Code":"en","Title":"Working with Points","Slug":"working-with-points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"d5eeb5e2-af41-48a5-83e1-42c6f83dc56c","Path":"doubleclick-a-node-has-precedence-over-activating-another-glyph.md","Order":3},{"Id":"a948ad62-b6cb-4aa9-bfe0-8dc2b130d8f4","Path":"adding-a-node-selects-it.md","Order":2},{"Id":"be2b9053-0ec8-4ba4-941f-076f3fd09ac4","Path":"pen-tool-3.md","Order":5},{"Id":"0c5290fe-f100-428f-8fc7-f5fb453bc95f","Path":"simple-calculations.md","Order":6},{"Id":"754910a3-581d-49f1-878a-d239ec5a9433","Path":"add-nodes-at-inflections-with-knife.md","Order":1},{"Id":"737fd52a-d137-4e84-bc90-d94667d2fb1c","Path":"duplicate-nodes.md","Order":4}],"Id":"7cf027fb-020e-4678-abaf-7d0c4e2afeb5","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Contour editing","Languages":[{"Code":"en","Title":"Contour editing","Slug":"contour-editing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9a8efe78-5dde-4bd4-a28d-6d5e18b5802a","Path":"duplicate-nodes-1.md","Order":2},{"Id":"675fafd1-3c4c-42b1-a953-a4e97926079a","Path":"break-and-slice.md","Order":1},{"Id":"753584b8-868c-470f-9b9c-13fab41070dd","Path":"snapping-knife.md","Order":3}],"Id":"7be4a24f-19ea-4793-a9f0-f8a036747042","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Knife usage","Languages":[{"Code":"en","Title":"Knife usage","Slug":"knife-usage","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d0abcf4d-226c-4b83-83d5-9bd07b3860f8","Path":"move-nodes-and-handles-along-the-vertical-italic-axis.md","Order":1},{"Id":"2096a258-c1d7-4573-801e-48b9dd346397","Path":"slide-node.md","Order":2}],"Id":"439b5f7b-be0c-4c02-a9d4-46e1a17dc57d","Path":"moving-contour-selections.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Moving Contour Selections","Languages":[{"Code":"en","Title":"Moving Contour Selections","Slug":"moving-contour-selections","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"34639ea5-fe1b-4a4e-8ada-4669bdbf62ce","Path":"create-parallel-contour2.md","Order":2},{"Id":"66cbcd8d-c637-4334-8590-1c7a5babc999","Path":"create-parallel-contour1.md","Order":1}],"Id":"2dc26f34-c6f4-4590-ab86-190e2dda1b5b","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Create Parallel Contour","Languages":[{"Code":"en","Title":"Create Parallel Contour","Slug":"create-parallel-contour","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"705c4c6e-437d-4320-b107-a267ec2b10d8","Path":"scale-tool-1.md","Order":2},{"Id":"7867ee88-2862-48ca-a9d4-68bd2a409cb2","Path":"slant-tool-1.md","Order":3},{"Id":"7410edfc-a071-47c3-8543-01cfae793fce","Path":"rotate-tool-1.md","Order":1},{"Id":"b831f955-704c-4af4-b4f0-1d2b6e83f60e","Path":"the-quick-transform-tools-are-rotate-scale-and-slant.md","Order":4}],"Id":"8ad5f530-3c4c-4de3-994b-f62899cdab0e","Path":"quick-transform-tools-rotate-scale-and-slant.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Quick transform tools Rotate, Scale and Slant","Languages":[{"Code":"en","Title":"Quick transform tools Rotate, Scale and Slant","Slug":"quick-transform-tools-rotate-scale-and-slant","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"009e8f4c-0faa-4634-9da7-a4c0fad5ecb4","Path":"selecting-contours1.md","Order":1},{"Id":"01d9fe17-e227-4555-930d-6ad81615795b","Path":"selecting-segments-1.md","Order":2}],"Id":"f5e91773-c799-49d2-8be9-8edf55e0b3f6","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Selecting Contours","Languages":[{"Code":"en","Title":"Selecting Contours","Slug":"selecting-contours-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d86d9b90-8ff8-412d-99da-dfd0aa10429f","Path":"scissors-tool-simple-ink-traps-and-blunt-corners.md","Order":2},{"Id":"f07892c3-1e49-4b62-9d9d-7618ca1838eb","Path":"pressuresensitive-brush.md","Order":1}],"Id":"b23c68a8-6c7c-4746-baac-8c10d1206bcc","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Other Drawing Tools","Languages":[{"Code":"en","Title":"Other Drawing Tools","Slug":"other-drawing-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"95b52fca-f180-453b-868c-220c5b047050","Path":"expand-contour-1.md","Order":4},{"Id":"b6a1e8ab-f901-4503-83b3-d7378919c475","Path":"autostems-and-suggest-stems.md","Order":1},{"Id":"a7f86128-3522-4daa-a034-bc9ab197baeb","Path":"using-the-arrow-keys-1.md","Order":8},{"Id":"9a5efdb2-ff19-4743-bf3e-d5d84f6cc422","Path":"improved-action-set-contour-direction.md","Order":5},{"Id":"4a63e8b1-c563-45dd-a3ef-4fb3bb4da1f7","Path":"using-the-contour-tool-2.md","Order":9},{"Id":"05a60c7b-493e-4fc7-a126-64851f6776d7","Path":"editing-contours1.md","Order":3},{"Id":"57e93bf2-e607-4245-a511-e74aed900f4b","Path":"truetype-editing-1.md","Order":7},{"Id":"9ac90fc3-85ef-4fc6-abd6-59ff9a5e0539","Path":"pantograph-nonnode-editing.md","Order":10},{"Id":"bc4f44d8-148a-4dea-add8-6398f62d17ef","Path":"in-element-mode.md","Order":6},{"Id":"b12c9ca9-98b6-441c-a454-841073c108b2","Path":"duplicating-contours-1.md","Order":2}],"Id":"cd4472d3-240d-49ec-97b8-350fb4d8d05f","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Editing contours","Languages":[{"Code":"en","Title":"Editing contours","Slug":"editing-contours","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"aef7f4fa-afb5-49e0-bdc5-4c111305e3c6","Path":"paste-special-element-references-linked-metrics-tags.md","Order":8},{"Id":"b481f5b2-6531-4a89-963a-7a26447dce76","Path":"contour-tool-cheat-sheet.md","Order":10},{"Id":"a6c19358-6332-4eb9-98ee-2777c4c49d27","Path":"stroke-1.md","Order":11}],"Id":"eaa1ae87-aed6-4604-a40e-949efcfa3476","Path":"working-with-contours.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Working with Contours","Languages":[{"Code":"en","Title":"Working with Contours","Slug":"working-with-contours","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"0bbf3c75-1ed8-482c-bd68-1dc64e11f8f8","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Drawing Glyphs","Languages":[{"Code":"en","Title":"Drawing Glyphs","Slug":"drawing-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"65a4a87c-fa0a-4932-ab54-4b04744a590a","Path":"color-glyphs-2.md","Order":1}],"Id":"be93b400-dc2b-4d75-8f3a-140dca76c60e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Color Glyphs","Languages":[{"Code":"en","Title":"Color Glyphs","Slug":"color-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"e85f6d46-45e0-4862-964f-17994f0730c6","Path":"using-bitmap-images.md","Order":3},{"Id":"5b3cd73a-4f50-4866-bba0-ee189c4a0b9a","Path":"using-vector-graphics.md","Order":4},{"Id":"eaaf524e-6048-4088-9c8e-3ca874d710aa","Path":"overlaying-fonts-1.md","Order":2}],"Id":"75735206-5649-4358-839c-0b50204e7741","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Working with Color","Languages":[{"Code":"en","Title":"Working with Color","Slug":"working-with-color","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8edeac1c-a0ab-4ee4-a4d5-c630b1edb6d5","Path":"new-fontaudit-test-nearly-flat-curve.md","Order":5},{"Id":"2b56d6e5-5f6e-437d-b1ad-fa08352324d6","Path":"fontaudit3.md","Order":3},{"Id":"5a997a55-f5b0-4352-8e8e-ca8e9a27fd89","Path":"new-fontaudit-tests-irregular-stem-and-uncommon-stem.md","Order":6},{"Id":"a6d3adba-9df8-4982-abc4-d13a366e6b8f","Path":"other-fontaudit-improvements.md","Order":7},{"Id":"b0625907-357e-4c7f-b12f-4d95462adedf","Path":"fontaudit-6.md","Order":4},{"Id":"6e80ca55-6b88-4285-a533-f7dc6ba8f638","Path":"enabling-and-disabling-fontaudit-tests.md","Order":1},{"Id":"8fb24e43-7860-4d32-966e-5db6f79de3c8","Path":"fontaudit2.md","Order":2}],"Id":"303c2e25-915e-4085-857d-4a91f6ab53fe","Path":"fontaudit-2.md","Order":2,"CategoryType":1,"Icon":null,"Title":"FontAudit-1","Languages":[{"Code":"en","Title":"FontAudit-1","Slug":"fontaudit-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"09d83736-73da-4aaa-8554-f0db0cb5d7eb","Path":"auto-stems-and-suggest-stems.md","Order":1}],"Id":"e8ae0cd7-c7a6-4201-a3a0-37575af6b89b","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Stems","Languages":[{"Code":"en","Title":"Stems","Slug":"stems","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b20920a1-f90f-482d-88f4-cc3b8c1cc4f7","Path":"when-you-open-the-fontaudit-panel-fontlab-runs-some-tests-and-shows-a-list.md","Order":1}],"Id":"e40e6595-ac8c-4349-a9a5-799515cc78e5","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"FontAudit","Languages":[{"Code":"en","Title":"FontAudit","Slug":"fontaudit-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ba4273f3-ba43-4648-8367-b5c751a311d3","Path":"when-you-edit-contours-in-a-glyph-window-fontlab-now-only-runs-the-fontaudit.md","Order":1}],"Id":"5fd66a8e-0eee-4455-8b5a-c88293dffda3","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Tests","Languages":[{"Code":"en","Title":"Tests","Slug":"tests","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7daf5537-eb92-4dd2-914a-2f7056f89d0d","Path":"transformations1.md","Order":5},{"Id":"ed380356-d79c-4440-bdb2-ac86a818b87a","Path":"rotating-a-selection.md","Order":2},{"Id":"44c329de-49ff-4de0-bb24-f974d9745828","Path":"scale-and-flip-selections-with-selection-frame.md","Order":3},{"Id":"1fbd0e4a-4465-45b0-a7a5-ae4c627fcb54","Path":"align-and-offset.md","Order":1},{"Id":"81972ff3-1734-4eae-ad7e-e9f7fdd5a7e6","Path":"transform-panel-4.md","Order":4}],"Id":"ad027e72-b8ce-49e0-9c97-30e4f8f88139","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Transformations","Languages":[{"Code":"en","Title":"Transformations","Slug":"transformations-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"40289ac5-5e30-4bfd-bba9-136e6e42b160","Path":"free-transform-operation-2.md","Order":1},{"Id":"57e931b8-f51e-4de4-89a6-b6c1b04707a1","Path":"free-transform.md","Order":2}],"Id":"c88ce24a-daa4-46c2-8eba-aaa5fa6abe73","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Free Transform operation","Languages":[{"Code":"en","Title":"Free Transform operation","Slug":"free-transform-operation","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0eb82ce1-8d71-4225-bfcd-45c2c9d92118","Path":"quick-transformations-1.md","Order":4},{"Id":"95a543d2-e58c-435e-aaa7-3f08f0f6691f","Path":"elementlevel-transformation.md","Order":2},{"Id":"07b58128-2b81-46cf-8243-e6a356a9a834","Path":"how-do-i-perform-transformations.md","Order":3},{"Id":"c52cca43-2276-4473-a600-3fea2dc55841","Path":"contourlevel-transformation.md","Order":1},{"Id":"79bec3c7-c8e6-48ef-b106-dfc1b6050431","Path":"transformations-done-to-the-geometry-of-your-glyph-drawings-scale-slant-rotate.md","Order":5}],"Id":"e8119ba0-ce59-4c00-9037-103ac9910166","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Geometric transformations","Languages":[{"Code":"en","Title":"Geometric transformations","Slug":"geometric-transformations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1720344c-635a-49d1-939d-0459c65413c4","Path":"glue-selection-options.md","Order":2},{"Id":"da7dc838-e512-44f9-bd29-885fcdd512b2","Path":"unlink-corners-1.md","Order":3},{"Id":"d5864632-0999-4b9b-9fc0-d4cf2ecd2d67","Path":"using-glue-selection-1.md","Order":4},{"Id":"b27b89b1-886c-401f-9b87-39e22dd79744","Path":"converting-glued-elements-into-regular-contours.md","Order":1}],"Id":"d1980e97-f092-4a73-b429-2739795f40fd","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Glue Selection","Languages":[{"Code":"en","Title":"Glue Selection","Slug":"glue-selection","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b7c0be78-4cca-4ad6-81f9-3dbf1b15cad1","Path":"smart-corners1.md","Order":1},{"Id":"45618f6b-679f-46dc-9a31-141b0d98c640","Path":"smart-corners2.md","Order":2},{"Id":"65132b26-de6b-4045-a88d-84c3dbef1193","Path":"using-smart-corners-1.md","Order":3}],"Id":"0781f87f-c0bc-4291-9651-3967e8ca7013","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Smart Corners","Languages":[{"Code":"en","Title":"Smart Corners","Slug":"smart-corners","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b3e16f8b-1871-4082-aebd-90d0e16b714b","Path":"when-to-use-1.md","Order":2},{"Id":"a9b64012-c495-41da-884d-2df81513e35c","Path":"rewind-record1.md","Order":1}],"Id":"8b13d329-f0e9-4e4c-84ab-1116c9f96e53","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Rewind Record","Languages":[{"Code":"en","Title":"Rewind Record","Slug":"rewind-record","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"99f0d7c9-d2c1-4ff0-91e3-decd3a8b7c14","Path":"close-actions-dialog-with-esc.md","Order":1},{"Id":"7dccd2a9-2de0-42df-842c-a8a495004c7a","Path":"perspective-action.md","Order":2},{"Id":"4a4d7701-b82d-4cd5-9e61-d90f911da8f4","Path":"slant-action.md","Order":3}],"Id":"20f627ae-230d-4a69-bc8a-f85aa6c28606","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Actions","Languages":[{"Code":"en","Title":"Actions","Slug":"actions-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"75224768-7e91-4c5b-9996-b1c1426a1446","Path":"stroke-and-power-brush.md","Order":3},{"Id":"e1680734-64c4-419d-841e-4bd5db0584d2","Path":"brush-tool-3.md","Order":1},{"Id":"fa148236-501e-42ea-bf12-f02ad3f88884","Path":"power-brush1.md","Order":2}],"Id":"08715565-2783-4a06-97c0-4c3e28f755e5","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Power Brush","Languages":[{"Code":"en","Title":"Power Brush","Slug":"power-brush","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"faf23529-25f5-4992-930e-c4e9ded293ac","Path":"creating-power-guides.md","Order":1},{"Id":"68aa93d9-1c26-4575-826a-dff846382685","Path":"power-guides1.md","Order":2},{"Id":"eda0650e-c2ea-45b2-8fc3-62372662bec5","Path":"removing-links.md","Order":3}],"Id":"29dac481-6570-4095-918a-585ca2f3f664","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Power Guides","Languages":[{"Code":"en","Title":"Power Guides","Slug":"power-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4e536264-127f-4506-a942-0dccb2aff1bb","Path":"remarks.md","Order":10},{"Id":"b79acccf-3c90-44a0-a908-1d5bb1e73608","Path":"change-height.md","Order":3},{"Id":"e86428b8-2b47-4f85-815e-345b30679ab7","Path":"keyboard-shortcut.md","Order":7},{"Id":"6931f976-85a2-4fcd-b913-a6f569f60a07","Path":"manually-improve-the-results.md","Order":9},{"Id":"93c3ee1f-a558-45c4-bcb7-db444f81edc0","Path":"using-actions.md","Order":12},{"Id":"7dfc934a-30b2-4e91-9b2b-2499471eb789","Path":"layer-scope.md","Order":8},{"Id":"d9ee39a1-7c68-4fdd-8764-f8d0f5d456b1","Path":"change-width.md","Order":5},{"Id":"3ae21e9a-54ce-43bb-9431-04d1126887e0","Path":"scope-of-actions.md","Order":11},{"Id":"6e235892-b28c-45a5-86da-b8e2ebc28e6f","Path":"actions-6.md","Order":2},{"Id":"a7008895-47d7-4154-baa4-1ad54878f89e","Path":"change-width-and-change-weight.md","Order":4},{"Id":"495416ff-1549-438b-ba2a-91ba62671f7b","Path":"glyph-scope.md","Order":6},{"Id":"5bbc4f7e-ad8c-43d2-b904-a31edd8129a5","Path":"action-sections.md","Order":1}],"Id":"e58798d1-b6ae-4b2d-a540-8e660036af25","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Actions-1","Languages":[{"Code":"en","Title":"Actions-1","Slug":"actions-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"610fd11a-9f72-433d-be7e-7192703951f6","Path":"genius-nodes-power-nudge-servant.md","Order":6},{"Id":"96dff098-d07c-4b47-8541-f60aa8bfb3db","Path":"servant-nodes.md","Order":2},{"Id":"0e1226ab-eb65-4d2b-8ed0-a633262958f0","Path":"removing-servant-property.md","Order":3},{"Id":"f372120a-6402-4f97-bc6c-6b73d2b871fe","Path":"using-smart-nodes-1.md","Order":4},{"Id":"e1ff2d70-665e-485f-84f0-5885d9863d9a","Path":"genius-nodes.md","Order":5},{"Id":"910edeed-fde6-4bbc-81cd-24b2caae102e","Path":"adding-servant-property.md","Order":1},{"Id":"b368ccba-0946-4940-8881-74afded6ab83","Path":"creating-a-genius-node.md","Order":7},{"Id":"903426a0-9012-4aa6-b9f1-a39f142f5af4","Path":"removing-genius-property.md","Order":8}],"Id":"c8a569b4-3813-404f-beb4-f18f9a044234","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Smart Nodes","Languages":[{"Code":"en","Title":"Smart Nodes","Slug":"smart-nodes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"1e4d4a0e-8b5f-41ba-a854-d0efa594533a","Path":"font-info-guide-expressions.md","Order":1},{"Id":"f442bddc-fed2-4887-9c07-c3e5b8427a43","Path":"location-expressions.md","Order":2},{"Id":"6c249795-7ea4-4b1f-9226-756e157ad144","Path":"using-expressions-1.md","Order":3}],"Id":"5118368b-3bcd-486a-9b61-150b2c01c2e6","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Expressions","Languages":[{"Code":"en","Title":"Expressions","Slug":"expressions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4f666800-5308-466a-abd3-46baab5b95d1","Path":"measurements-panel-2.md","Order":1}],"Id":"1fda3574-9bc2-49e9-aec5-74d0b0591811","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Suggested drawing items","Languages":[{"Code":"en","Title":"Suggested drawing items","Slug":"suggested-drawing-items","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e2d8361a-64c2-419f-b848-e5cc5372b9a2","Path":"parameters.md","Order":2},{"Id":"6cdf4d07-3d55-483c-8f28-673ab5749423","Path":"font-info-parameters.md","Order":1},{"Id":"134b6b0b-0fe7-4094-a15c-23fd4174b875","Path":"variables.md","Order":3}],"Id":"6d9813ca-7341-466a-af95-04f13901ad9d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Parameters and Variables","Languages":[{"Code":"en","Title":"Parameters and Variables","Slug":"parameters-and-variables","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"43274c18-1bec-48b6-9b9a-169242c12da3","Path":"defining-position-of-anchors-and-pins.md","Order":2},{"Id":"49e56761-7522-40cb-8d04-c67a658fccc8","Path":"sample-useful-calculations.md","Order":6},{"Id":"6c6b0c34-2fb5-4916-a3dc-5d81f55623a5","Path":"defining-position-of-guidelines.md","Order":3},{"Id":"5038e49b-852d-46fc-b9df-de769abafb35","Path":"defining-position-of-alignment-zones.md","Order":1},{"Id":"afe46c87-b1a9-4f77-9a62-eed0a2c228fe","Path":"guidelines-zones-and-anchors.md","Order":4},{"Id":"0f7ab3da-698e-4576-886e-2bebf4bee03f","Path":"guides-1.md","Order":5}],"Id":"5e477f34-0366-4fe2-8f68-d584e5197679","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Position for Guides, Zones, Anchors, and Pins","Languages":[{"Code":"en","Title":"Position for Guides, Zones, Anchors, and Pins","Slug":"position-for-guides-zones-anchors-and-pins","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"ea93649d-4bac-469b-af12-db16266dbe9e","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Dynamic Things","Languages":[{"Code":"en","Title":"Dynamic Things","Slug":"dynamic-things","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"6666c691-ed0a-4acd-857f-cffe7890b514","Path":"flatten-glyph-and-flatten-layer.md","Order":6}],"Id":"ef9039ec-cc60-4204-a7af-5dd74630fddd","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Advanced Drawing","Languages":[{"Code":"en","Title":"Advanced Drawing","Slug":"advanced-drawing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"8de1bf51-6aa7-4255-924c-561be98dc0d8","Path":"sample-volt-fonts.md","Order":11},{"Id":"db232170-e9cc-4b31-9579-7fb5bc4af529","Path":"more-volt-resources.md","Order":8},{"Id":"11b54e6a-4dff-431a-97a9-d30a03c82ace","Path":"featurecentric-vs.md","Order":1},{"Id":"4987f9f2-53be-4bce-a899-59d535b9c4a0","Path":"testing-mark-attachment.md","Order":14},{"Id":"78d28093-b96e-4877-a6bf-5f13cfbcf3f6","Path":"lookups-area.md","Order":6},{"Id":"25ef3b71-c859-45bf-b0b6-d3a60ba27434","Path":"exporting-feature-definitions-to-volt.md","Order":4},{"Id":"886b0ed9-14b9-4902-a423-5effedf38745","Path":"testing-kerning.md","Order":13},{"Id":"708e841d-fc22-4cae-a248-f00416281e90","Path":"visual-proofing-in-the-lookups-panel.md","Order":17},{"Id":"39c5ccb3-1f37-40c6-bc31-8afad4c5a957","Path":"lookups-panel-1.md","Order":7},{"Id":"1a3d337f-cb07-4c65-8b9e-9a56b916d454","Path":"proofing-opentype-features.md","Order":9},{"Id":"eb2cb534-e0d8-4900-96d9-4fcabb0de1da","Path":"features-panel-3.md","Order":3},{"Id":"e5bca770-4b96-41dc-b1e0-3758654e7358","Path":"the-opentype-layout-process.md","Order":15},{"Id":"b0e69340-9e8b-43fa-8223-fa03d2780fb6","Path":"using-microsoft-volt.md","Order":16},{"Id":"42a612b3-06aa-4640-8fbb-a1edc405c7f7","Path":"rules-area.md","Order":10},{"Id":"60ec130c-2d66-4919-88ff-9bea017e0b91","Path":"testing-features-in-text.md","Order":12},{"Id":"9c7446d8-2aff-4af2-b3f1-a3cb47e1ea5e","Path":"features-area.md","Order":2},{"Id":"421c4e2e-8e50-42fb-930e-27a059e827dd","Path":"interchange-with-microsoft-volt.md","Order":5}],"Id":"c15be36d-9bf0-4f6c-9510-1d49e87a4e08","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Features","Languages":[{"Code":"en","Title":"Features","Slug":"features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a141abf9-217a-4fbd-8ae1-7ce97fd4a0c3","Path":"glyph-substitution-rules1.md","Order":1}],"Id":"b504c502-b8bf-4e85-98ed-4dc5510fd179","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Glyph Substitution Rules","Languages":[{"Code":"en","Title":"Glyph Substitution Rules","Slug":"glyph-substitution-rules","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"52e85baf-43f7-4299-88b4-c34696521b56","Path":"classes-and-tags-in-feature-definitions.md","Order":2},{"Id":"bb9e8c77-4248-4d94-b721-03936c674735","Path":"import-features.md","Order":4},{"Id":"e7cda704-5acf-468f-8653-423524962d81","Path":"features-panel-4.md","Order":3},{"Id":"bce3d096-be16-478f-a350-505fa7720972","Path":"applying-features-in-glyph-window-and-preview-panel.md","Order":1}],"Id":"65579111-c45d-4818-b57c-670d6e5ee5f1","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Features","Languages":[{"Code":"en","Title":"Features","Slug":"features-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9ca63ed5-b899-4793-9c1f-88e317d800b9","Path":"use-classes-panel-classes-tags-and-virtual-tags-in-feature-code.md","Order":14},{"Id":"65a92cd6-f98f-4cb0-b698-37515d2cd210","Path":"automatically-generate-code-for-common-opentype-features.md","Order":7},{"Id":"747a31b1-c2e1-4a67-8fb3-83931a60cca7","Path":"adding-custom-code-to-autogenerated-feature-definitions.md","Order":3},{"Id":"bb2dce3a-53f8-4b38-a53a-515cfb034fd5","Path":"gdef-glyph-definition-classes.md","Order":8},{"Id":"7826f63e-b36b-4d6a-927e-383bc667b488","Path":"updating-auto-features.md","Order":13},{"Id":"e3874300-1312-46c2-b5fa-8ec0ecbb9a63","Path":"update-current-auto-feature-or-all-auto-features.md","Order":12},{"Id":"6968b84d-3809-4c05-bc7c-7b4259e7925a","Path":"autogenerated-portion-of-a-feature-definition.md","Order":6},{"Id":"c60b0233-ff44-4960-932a-bff7bd41530c","Path":"adding-autogenerated-code-to-existing-feature-definitions.md","Order":2},{"Id":"fd7d8138-dde2-469f-b194-a3057d801b42","Path":"view-features-that-are-or-can-be-aurogenerated.md","Order":16},{"Id":"0e102017-ed05-4a08-afe1-9c9d4ebcca0a","Path":"adding-custom-kerning-lookups-kern.md","Order":4},{"Id":"b40729c1-8df8-432e-8fd0-9e2c2811573a","Path":"modifying-auto-feature-definitions.md","Order":10},{"Id":"20fe6d39-83e0-430a-a5bc-0ac3dd5f36e5","Path":"adding-auto-features.md","Order":1},{"Id":"5932b599-c388-4a91-aebd-c689647d9446","Path":"interpolable-positioning-features-cpsp-etc.md","Order":9},{"Id":"04106e93-b705-460d-b91d-d20702d256b6","Path":"using-tags-and-classes-in-feature-code.md","Order":15},{"Id":"1b3c9622-9482-4ad3-b24b-9f663909c839","Path":"naming-glyphs-for-auto-feature-generation.md","Order":11},{"Id":"6e615b8a-6d8d-4e55-8bb3-6e5bf9e2f359","Path":"auto-opentype-features-and-the-features-panel.md","Order":5}],"Id":"c380ee9a-8d7f-4bea-ad1c-030113677251","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6d1842a9-d207-4cd9-b1b4-936b6df1edb0","Path":"using-microsoft-volt-1.md","Order":6},{"Id":"d4c69947-76fd-47dd-8b63-4b079253a804","Path":"volt-tutorials-and-info.md","Order":7},{"Id":"fba059a8-4384-48e4-a3bc-25bc5209c0d0","Path":"fontlab-8.md","Order":2},{"Id":"fa864eba-8409-48d8-aa49-3df2cc9cc63d","Path":"exporting-fea-features-to-volt.md","Order":1},{"Id":"80b78d1c-f80d-4752-bdc6-f631cc325420","Path":"more-voltrelated-tools.md","Order":4},{"Id":"08f24d8e-90e6-4d21-b7dd-68e380d6ea80","Path":"sample-volt-fonts-1.md","Order":5},{"Id":"eb6868ce-8396-4596-93c6-054184fef21e","Path":"microsoft-volt-and-features-for-complex-scripts.md","Order":3}],"Id":"01415273-4c6e-4c9a-84a8-1b2acf98609b","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"OpenTye Features","Languages":[{"Code":"en","Title":"OpenTye Features","Slug":"opentye-features","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"bf762e7f-d9b2-4a67-95f6-a4d7ff62eadf","Path":"decompiling-features.md","Order":9},{"Id":"d648be22-64ed-49cb-be43-517d8b1064d4","Path":"stylistic-set-features-ssxx.md","Order":10},{"Id":"d9e3b769-35ad-434a-a2ab-14b57f48e1e2","Path":"lookups.md","Order":2},{"Id":"b0a162bb-d838-404b-a735-9512c9aebe56","Path":"opening-1.md","Order":1},{"Id":"680d0597-e66b-41ea-86fb-becead63c16c","Path":"adding-features-with-or-without-autogenerated-content.md","Order":11},{"Id":"8bc5cc57-70df-474f-8e78-0bbd19a68dbc","Path":"mark-positioning.md","Order":3},{"Id":"c1ade011-152d-409e-8a8b-2613027fc284","Path":"opentype-features-6.md","Order":5},{"Id":"3c2ed78c-96c6-426c-8faf-d668bb38943d","Path":"substitutions.md","Order":4}],"Id":"a58d78b2-2226-4401-aebe-c026d92792da","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"OpenType Structure","Languages":[{"Code":"en","Title":"OpenType Structure","Slug":"opentype-structure","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4310d69a-a8f7-42fe-8fad-7bc2aa8e9171","Path":"enumerating-pairs.md","Order":4},{"Id":"632f4f3c-8f17-4d00-844f-b21013e3c3fb","Path":"marktobase-attachment-positioning.md","Order":9},{"Id":"9b80151a-7321-4b5e-a96d-2b2e3b3890e5","Path":"marktoligature-attachment-positioning.md","Order":10},{"Id":"47ebf198-bd7f-4efe-9eff-55e8f2317fed","Path":"specifying-exceptions-to-the-context-rule.md","Order":20},{"Id":"5e7f2b8e-8967-4fb3-8d3c-05eecc1f630c","Path":"value-record.md","Order":23},{"Id":"3e793965-a94e-4ffa-b1f2-9ee559ea24a4","Path":"marktomark-attachment-positioning.md","Order":11},{"Id":"6ba283a8-a7ed-4aa6-8826-c0353d44b9cc","Path":"multiple-substitution.md","Order":12},{"Id":"1d2d800c-d4de-4981-a2b3-5af49290cace","Path":"single-positioning.md","Order":17},{"Id":"938dcc40-4be8-4c64-a609-f418fb2e5cb7","Path":"substitution-lookups.md","Order":21},{"Id":"29671d5d-cf81-42e2-a932-2b99ca06a8bc","Path":"alternate-substitution.md","Order":1},{"Id":"a1017f8f-85ea-4fae-9da3-3b78e6ea7c0e","Path":"context-dependent-substitutions.md","Order":2},{"Id":"7be6f9d4-7175-4189-9e10-49251aeb56a8","Path":"fea-classes.md","Order":5},{"Id":"bf840abb-5b9e-4f54-9f11-e6f3effd8e88","Path":"cursive-attachment-positioning.md","Order":3},{"Id":"12b3b4c3-4f59-4887-9da2-a9265ae60023","Path":"ot-features.md","Order":14},{"Id":"647a5220-7dc7-4214-96b1-4499017a1865","Path":"positioning-lookups.md","Order":16},{"Id":"98cc0419-1485-423a-bb64-c36cbcd204b5","Path":"single-substitution.md","Order":18},{"Id":"78633a09-b9ce-428e-b032-f896555313fe","Path":"glyph-geometry.md","Order":7},{"Id":"4d5d0397-9500-45b1-bf3e-432d0bc000a4","Path":"ligature-substitution.md","Order":8},{"Id":"facaf2d6-f197-4177-a76e-67dd48cf0914","Path":"fea-lookups.md","Order":6},{"Id":"4656b5d2-fca4-4641-b98c-6022f82017d4","Path":"subtable-breaks.md","Order":22},{"Id":"608946d8-b6b1-4d8a-9a2b-9b68f213e127","Path":"specially-handled-features.md","Order":19},{"Id":"85a5bfec-4d1a-4b47-89f2-90279d92a6ee","Path":"opentype-tables.md","Order":13},{"Id":"52019276-b7f9-4b6d-bf9f-7fe6b69c3580","Path":"pair-positioning.md","Order":15}],"Id":"3a4c31d5-f2cd-49e0-a724-4b0bb863fa0d","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features-3","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"708ac671-4037-40cb-b873-397c68633f76","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"19d18bbb-30b6-484b-a5ac-0f130d2b002d","Path":"kerning-8.md","Order":1},{"Id":"0ae28eb5-83f7-45b6-a1c9-ce8a9649617c","Path":"import-kerning-from-kern-feature.md","Order":2}],"Id":"aa9d8e87-f011-4bfa-ab88-c6bcf23a28c1","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Kerning-1","Languages":[{"Code":"en","Title":"Kerning-1","Slug":"kerning-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b9764153-56f8-45bb-b2ae-83212d6d68b4","Path":"manually-linking-metrics.md","Order":5},{"Id":"c4cbc524-95b7-467b-bc7f-31e950ca7bc7","Path":"linking-metrics-across-masters.md","Order":7},{"Id":"7cec283e-6512-439a-8445-1ec42d064816","Path":"linked-metrics1.md","Order":3},{"Id":"64a40bf1-b985-4f94-8b2b-6f97f39dbd2e","Path":"linked-metrics-and-live-metrics.md","Order":2},{"Id":"cd0b2594-55c3-457a-be45-30363f1b89d4","Path":"viewing-linked-metrics.md","Order":9},{"Id":"63976dc3-7bc7-46c9-8c13-e53a01575865","Path":"linking-metrics.md","Order":6},{"Id":"96bcd668-25fe-4259-ab58-588128d13ce5","Path":"removing-metrics-links.md","Order":8},{"Id":"ef9ef171-9066-4241-bd9c-daf71b73563e","Path":"automatically-linking-metrics.md","Order":1},{"Id":"fe62e98a-1954-413d-8596-1d51a8b2605a","Path":"warnings-about-problematic-linked-metrics.md","Order":10},{"Id":"73aa5b53-18b8-42f2-8ccc-aaa756e036cf","Path":"linked-metrics2.md","Order":4}],"Id":"1402b957-4451-4006-926f-56c261f0e698","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Linked Metrics","Languages":[{"Code":"en","Title":"Linked Metrics","Slug":"linked-metrics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"269d9196-874d-4b19-91a7-e958fa85485a","Path":"auto-layer-for-all-layers.md","Order":3},{"Id":"d79f4235-43ea-4dc4-89e7-900bf3f17e21","Path":"auto-layer-contents.md","Order":2},{"Id":"920b4687-da6d-4638-a729-2bd91e0c36ed","Path":"auto-layer-and-composite-glyph-cell-icons.md","Order":1},{"Id":"914f591d-b1ac-4d36-b1aa-8f173d99c6d9","Path":"auto-layers-1.md","Order":4},{"Id":"c641b555-a331-426b-818f-58ec7dad64f7","Path":"live-update-of-metrics-and-auto-layers.md","Order":5},{"Id":"66451964-228d-47e3-a733-b5f533aa6342","Path":"updating-metrics-automatically.md","Order":6}],"Id":"7b4ab416-7b82-4e06-96ea-8901ee6a8871","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Metrics and Auto Layers","Languages":[{"Code":"en","Title":"Metrics and Auto Layers","Slug":"metrics-and-auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"6e5a82da-548b-4644-97c1-367658eca67b","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Spacing","Languages":[{"Code":"en","Title":"Spacing","Slug":"spacing-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9dd0b9c2-bb3c-4bc0-9e0d-278c3225f7c1","Path":"importing-metrics.md","Order":3},{"Id":"85230158-8f91-42fc-83ca-f7f842f23898","Path":"exporting-metrics.md","Order":1},{"Id":"57d9fdcb-f774-4d33-b6b0-638e39129e4f","Path":"import-metrics.md","Order":2}],"Id":"db274ff2-fc76-445e-92f4-73401504c31f","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Importing and Exporting Metrics","Languages":[{"Code":"en","Title":"Importing and Exporting Metrics","Slug":"importing-and-exporting-metrics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"404b63d2-9cac-4dc4-a699-07ac8e0ec83c","Path":"using-the-metrics-table-1.md","Order":4},{"Id":"143a9294-bba0-470c-8a1f-84347cc28bc3","Path":"metrics-table1.md","Order":1},{"Id":"bc464c34-656d-4198-ba62-05fbe72aa098","Path":"metrics-table2.md","Order":2},{"Id":"f7683a85-9d91-461d-a1bc-d898400b0017","Path":"metrics-table3.md","Order":3}],"Id":"90ed0ace-e67b-4777-a431-1befb0ed817c","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Metrics Table","Languages":[{"Code":"en","Title":"Metrics Table","Slug":"metrics-table","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"398a3a6c-0c09-406a-a55f-304035e0b9ca","Path":"using-extended-expressions.md","Order":1},{"Id":"f7fca097-29ed-4822-ac78-f857bf3b24d8","Path":"using-simple-expressions.md","Order":2},{"Id":"1ff222f5-bfa0-4c30-9932-0735e63e3586","Path":"location-expressions-1.md","Order":4},{"Id":"49d4e34b-61e0-4c4d-9871-b1cc4a623996","Path":"calculations-in-numeric-text-fields.md","Order":3}],"Id":"2326aa61-79e4-4f36-8aa9-5929138d432d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Calculated metrics","Languages":[{"Code":"en","Title":"Calculated metrics","Slug":"calculated-metrics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a6ab59e2-4404-4219-a512-572fa50814b5","Path":"setting-sidebearings.md","Order":9},{"Id":"ee88e29c-e85f-4195-86e3-2c808b7b890c","Path":"metric-expressions-in-glyph-panel.md","Order":5},{"Id":"5a2bce7f-b175-4af1-a902-acca3895bd3e","Path":"copypaste-sidebearings.md","Order":3},{"Id":"0bc7d306-f5cb-47d2-83f7-bb021de34308","Path":"binding-sidebearings.md","Order":1},{"Id":"bbcdb3cc-d6d9-4f8a-b138-391f04cfc0b4","Path":"copy-expressions-to-masters-in-glyph-panel.md","Order":2},{"Id":"80ee4ed0-6550-436b-8380-5cf67757c755","Path":"setting-advance-width.md","Order":8},{"Id":"a52fb4a9-a545-4526-bd5b-26fb47440ce3","Path":"negative-widths.md","Order":6},{"Id":"0781bc1c-ca1b-4c66-9a4c-84085e25e1fb","Path":"opposite-sidebearing.md","Order":7},{"Id":"cf9db933-7de6-4b4d-8458-01f5cb2bde7b","Path":"using-spacing-strings.md","Order":10},{"Id":"2fde9d40-7759-46c6-9505-2c0c1080d078","Path":"each-glyph-in-the-font-has-a-bounding-box-a-rectangle-positioned-in-a-theoretical.md","Order":4}],"Id":"e02fbbb7-32c3-4592-b062-4894b21d8564","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Sidebearings","Languages":[{"Code":"en","Title":"Sidebearings","Slug":"sidebearings","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"76e8c851-2b32-474d-8d1c-840f82698d62","Path":"glyph-window-pairs-and-phrases.md","Order":23},{"Id":"3b732b73-a39f-4c99-8b55-c6dccb2e4092","Path":"strong-ligature-attachment-in-legacy-recipe-syntax.md","Order":24},{"Id":"1e82548f-4122-461c-857d-4de4f1b7a876","Path":"metrics-window-1.md","Order":15},{"Id":"179970e7-3cc3-4e43-b58f-691ae46fc5a0","Path":"editing-glyph-metrics-1.md","Order":4},{"Id":"5684e78e-cfc3-4212-8cc4-3cf4c364b219","Path":"preview-panel-6.md","Order":8},{"Id":"19b8594c-469a-4f66-8162-aa362a2a7b0b","Path":"using-direct-numeric-input.md","Order":7},{"Id":"9d621960-0737-4eab-84ff-505f004119c4","Path":"metrics-panel-2.md","Order":13},{"Id":"68702d37-6104-41f9-b110-3e5c4718bff1","Path":"pairs-phrases-panel-1.md","Order":18},{"Id":"d257ee86-f913-45ea-9154-a63e41fda557","Path":"pairs-and-phrases.md","Order":19},{"Id":"107ae623-d0c2-4d96-a515-b15fccde1bff","Path":"preview-panel-sidebar.md","Order":9},{"Id":"0b09f0a6-59b5-4f02-b3f1-a9759f780761","Path":"adjusting-metrics.md","Order":3},{"Id":"5793e3de-3436-4070-b613-1f70ad38eda9","Path":"manual-metrics-editing.md","Order":11},{"Id":"76b69e2c-092f-4314-92b2-d77e648f2d6c","Path":"measurement-line-3.md","Order":20},{"Id":"2bebcbaf-1ba9-482e-9ecf-25d473ce457a","Path":"viewing-metrics.md","Order":6},{"Id":"86df942e-5e6c-4dc6-8452-fdd05190f41e","Path":"metrics-editing.md","Order":12},{"Id":"8f50ebe6-dcbd-46f0-8013-66cf16fae2c3","Path":"metrics-3.md","Order":17},{"Id":"189fe4a5-af2f-4603-a704-4d152a518b56","Path":"keyboard-shortcuts-for-navigation.md","Order":10},{"Id":"2427edfd-5e6f-422e-aa17-0ff0e3b70e4d","Path":"metrics1.md","Order":16},{"Id":"f9f4b0a6-d1ff-4029-bd1e-841340cdeff8","Path":"italic-metrics.md","Order":21},{"Id":"0dac115a-0351-44ff-a3ba-1191a66f0d11","Path":"quick-autospacingautokerning-the-key.md","Order":22},{"Id":"13ad2bc5-bdde-413a-b8da-2e6825560908","Path":"tracking.md","Order":25},{"Id":"239ef301-6829-4b18-ad36-b4513ba9fc5e","Path":"glyph-window-get-glyph-by-name.md","Order":26},{"Id":"b453ffab-5f60-439b-b458-8273a44a8c77","Path":"glyph-metrics-without-and-with-measurement-line.md","Order":27},{"Id":"9f55357a-9597-4459-b0ef-28dae55d491b","Path":"entering-input.md","Order":5}],"Id":"9cee9118-bd7c-4b46-b054-db51f388eab4","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"About Metrics","Languages":[{"Code":"en","Title":"About Metrics","Slug":"about-metrics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ce31a414-ba25-44cd-b5e7-7e3e3542b15f","Path":"kerning-get-glyphs.md","Order":5},{"Id":"814ddb31-602d-4ba1-8f0d-918a93ba610a","Path":"creating-a-kerning-class.md","Order":10},{"Id":"0bef7a4c-4507-41cf-9073-fb12deacc413","Path":"classes-panel-3.md","Order":36},{"Id":"ddda9e42-0b98-4a62-9c5b-5767394c9943","Path":"editing-kerning-exceptions.md","Order":11},{"Id":"330fe675-29a3-47dc-a82a-d8c40aeeadab","Path":"adding-kerning-pairs.md","Order":29},{"Id":"69a454cd-bec6-485f-a829-9a32a3ecc0bd","Path":"kerning2.md","Order":2},{"Id":"9938b440-7e20-4c1f-b4aa-1bc4ff61b9fc","Path":"editing-kerning-1.md","Order":12},{"Id":"0027f74a-1be6-4be5-9035-9a30818b456a","Path":"metrics-and-kerning-smart-navigation-with-the-updown-keys.md","Order":32},{"Id":"417ee8c5-614a-4305-a484-4a13b9c23772","Path":"kerning-cloud.md","Order":18},{"Id":"cf9317d4-2d9d-436e-9110-5e299d96eefc","Path":"classes-and-kerning.md","Order":21},{"Id":"421b657c-0cc2-4689-91a0-15680b28711f","Path":"automatic-kerning-generation.md","Order":28},{"Id":"a41e8c0c-84d5-4bd8-92b8-c2981119434a","Path":"bothsided-kerning-class.md","Order":25},{"Id":"fe49ce09-3a2a-4f42-9733-d3ad0a5512d3","Path":"kerning-mode.md","Order":4},{"Id":"170fa196-488d-4b48-af44-39b0acebda59","Path":"metrics-and-kerning-2.md","Order":30},{"Id":"70a6a6ba-a2b9-4e60-9d85-c333fcea5b7a","Path":"metrics-and-kerning-walking-in-the-glyph-window.md","Order":33},{"Id":"122237de-a325-40da-94b9-3853310bf410","Path":"kerning3.md","Order":1},{"Id":"238cbd4c-92e0-4a2b-aec5-5327720f7faf","Path":"kerning-classes-in-multiplemaster-or-variable-fonts.md","Order":17},{"Id":"0216b62f-235a-48f1-888a-8032ea96d2e3","Path":"class-glyphs-behind-exception-glyphs.md","Order":34},{"Id":"7b7901d4-3056-4cd2-9a91-d24f401c2910","Path":"from-visual-kerning-to-the-kern-feature.md","Order":14},{"Id":"7f22444d-150e-44fc-89b8-2fdf918f1439","Path":"defining-a-class-kerning-pair.md","Order":9},{"Id":"594a1f07-65bd-488d-a576-cc8ac710fb3b","Path":"class-kerning-with-exceptions.md","Order":35},{"Id":"e2dfebc7-4446-45a3-a980-c1ecf281d37e","Path":"include-or-import-kerning-classes.md","Order":15},{"Id":"069a6694-f3b9-4456-a308-aeb53829cc89","Path":"kerning-editing-kerning.md","Order":19},{"Id":"e99f9d29-10c2-4f71-a840-5e3d38f0aa09","Path":"set-kerning-class.md","Order":20},{"Id":"fc86de99-e547-401a-ad76-ad12a33f6c09","Path":"kerning1.md","Order":3},{"Id":"20587e54-c4c2-4da5-8441-2b2eb5e14f73","Path":"from-the-kern-feature-to-visual-kerning.md","Order":13},{"Id":"65045a44-1a26-4b16-815e-57c88ee71dd9","Path":"using-kerning-classes-1.md","Order":23},{"Id":"4d395983-3168-4dff-ac84-3b846e9259ee","Path":"kerning-class-cloud-no-longer-shown-behind-exceptions.md","Order":16},{"Id":"ae780cf6-1be4-46a4-b9ba-bed9f2a0a98c","Path":"building-opentype-kerning-feature.md","Order":24},{"Id":"210c3914-abe1-4f37-a994-ad6992d73b49","Path":"kerning-get-class-pairs-or-exceptions.md","Order":7},{"Id":"8a356d60-4080-4ef0-9800-80f2e56289fc","Path":"kerning-get-existing-pairs.md","Order":6},{"Id":"6a611d87-249e-43d5-8722-2e497d1fbdc5","Path":"kerning-show-all-combinations.md","Order":27},{"Id":"e4b1f2e6-0f32-4865-a9cf-6c2dfd88f6e2","Path":"definition.md","Order":8},{"Id":"3351ad3c-7766-472e-a32a-d024c834e556","Path":"kerning-panel-2.md","Order":26},{"Id":"533b0b82-7c97-4d47-8439-14ca36c887e7","Path":"modifying-kerning.md","Order":22},{"Id":"f3b48110-d331-4083-a622-07f874f24433","Path":"metrics-and-kerning-clean-view.md","Order":31}],"Id":"890c6cec-2d45-4d3e-9cf2-3cf4e7a0bb70","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Kerning","Languages":[{"Code":"en","Title":"Kerning","Slug":"kerning-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"55d5d076-69d8-4565-affb-9b30a274642f","Path":"import-and-export-classes.md","Order":5},{"Id":"5f128eb1-a6e2-4e88-a56e-57b5617310da","Path":"metrics-table-2.md","Order":11},{"Id":"1dd3465a-3ff7-415b-a380-97566a340108","Path":"glyph-metrics-4.md","Order":4},{"Id":"dda5b5d0-b17f-4358-a562-bdb0a35c9e87","Path":"locked-metrics.md","Order":9},{"Id":"813f1f13-2a13-4a81-a3e6-644c44f52b55","Path":"classes-and-tags.md","Order":7},{"Id":"da519175-76ba-4134-8dcb-8d6d567abd1a","Path":"rightclick-to-remove-kerning-pair.md","Order":12},{"Id":"b79f0bba-8eae-47c0-89db-01ed131840a7","Path":"adding-glyphs-into-a-kerning-class.md","Order":13},{"Id":"c1196496-a2c3-4427-bbb3-3f749d033825","Path":"tags-in-classes-panel.md","Order":14},{"Id":"15ee60dc-4973-4e9a-aa09-636d742cc821","Path":"virtual-tags-2.md","Order":15},{"Id":"3eb2d137-370a-4e42-b786-0ada5fc37ad0","Path":"wildcards-in-tags-search.md","Order":16},{"Id":"e46a6052-8641-44e6-babf-46b096e81515","Path":"metrics-and-kerning-1.md","Order":10}],"Id":"29a4f88a-87a5-4fbe-b349-4020ac50913c","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Spacing and Kerning","Languages":[{"Code":"en","Title":"Spacing and Kerning","Slug":"spacing-and-kerning-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"3949c12b-0963-48cd-bd28-fc69db254dbe","Path":"adding-pins.md","Order":2},{"Id":"0d5c107b-f326-4087-92e7-617b40e7814f","Path":"renaming-pins.md","Order":3},{"Id":"ab1eed6a-659a-410c-b021-95a23f63292c","Path":"moving-pins.md","Order":4},{"Id":"928764f7-0349-4fa2-8116-9415786c3293","Path":"activatingdeactivating-pins.md","Order":1},{"Id":"e5a5ca0d-e550-4939-b119-c0d2ed1cb18a","Path":"removing-pins.md","Order":6},{"Id":"f5a58fbf-6aca-454c-aec9-5a7cbfbab568","Path":"linking-pins.md","Order":7},{"Id":"c19b458a-b07e-4077-8e4d-5933bffa286f","Path":"pins1.md","Order":5}],"Id":"aee0d744-1f23-4eb5-96a7-1c830ae939d9","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Pins","Languages":[{"Code":"en","Title":"Pins","Slug":"pins","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"649719eb-7bc7-4f35-9f9b-0d9b8d611684","Path":"sticker.md","Order":1},{"Id":"a08b2b33-428e-4c2a-bfe0-a9b1117716c4","Path":"stickers-2.md","Order":2}],"Id":"6c8d3110-24f3-46cd-bb7a-3668974d85c2","Path":"element-stickers.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Element Stickers","Languages":[{"Code":"en","Title":"Element Stickers","Slug":"element-stickers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0db75258-ec1b-4214-9432-94386adc3d50","Path":"element-guides1.md","Order":1}],"Id":"a340991e-a43a-406e-9201-2e5674e7cb9c","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Element Guides","Languages":[{"Code":"en","Title":"Element Guides","Slug":"element-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c485e8d8-c490-43bc-b016-32f913a9d230","Path":"element-group.md","Order":2},{"Id":"8a215449-5fd7-48bd-8aa7-90af267cf778","Path":"grouping-and-combining-elements.md","Order":3},{"Id":"2b7d1b69-627b-4c9a-ba85-893a756b534f","Path":"ungrouping-and-separating-elements.md","Order":4},{"Id":"9cd5b349-1732-47f8-9373-6379ba7ff012","Path":"add-new-elementscomponents-to-a-group.md","Order":1}],"Id":"19964638-c622-4660-b8a3-4441a3a390ea","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Element Groups","Languages":[{"Code":"en","Title":"Element Groups","Slug":"element-groups","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8fc0df75-2a0b-4838-8636-f4cff0eeb3c6","Path":"anchors-and-pins-panel-2.md","Order":1},{"Id":"faed47e8-492e-49e6-99b4-e270c17cf445","Path":"anchors1-1.md","Order":2}],"Id":"3c7de0cd-ebd8-4cb1-8500-c7839252462e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Anchors","Languages":[{"Code":"en","Title":"Anchors","Slug":"anchors-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"562478c6-0d75-493b-9a6e-550e1a099554","Path":"gallery-panel-filter-and-remove-elements.md","Order":1},{"Id":"77e23d50-3310-4dbc-824c-758c18cf35f6","Path":"gallery-panel2.md","Order":3},{"Id":"9937422f-8ccf-4d7b-8667-c82371eb4310","Path":"gallery-panel1.md","Order":2}],"Id":"c2f73413-5184-46a2-9b31-7863d3d53f17","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Gallery Panel","Languages":[{"Code":"en","Title":"Gallery Panel","Slug":"gallery-panel","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"cdc7e377-08a6-4153-aff0-a81d1d37bbec","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Additional Features","Languages":[{"Code":"en","Title":"Additional Features","Slug":"additional-features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b35b6d79-7cb0-4a01-897d-8dc26073c9ec","Path":"creating-a-composite-glyph-layer.md","Order":5},{"Id":"48e9b778-6e63-4119-988f-8368f6997d35","Path":"composite-glyphs.md","Order":2},{"Id":"50f87a29-0b8f-4838-84cd-af520bbcab45","Path":"using-composite-glyphs.md","Order":6},{"Id":"3deffaca-509e-4808-9225-8d8a917f56c1","Path":"composite-and-auto-glyphs-1.md","Order":1},{"Id":"e7a4138d-5c9d-49ff-b7ea-0994e5f6610d","Path":"simple-glyphs.md","Order":3},{"Id":"4365d5ec-f7d7-4a05-9950-bc7691662e1b","Path":"editing-a-composite-glyph-layer.md","Order":4}],"Id":"4936f159-6e79-48fe-9535-27e59b55058d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Composites","Languages":[{"Code":"en","Title":"Composites","Slug":"composites","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bdaf2226-2e9b-44a7-9ad6-fbb8cf4a3b18","Path":"components2.md","Order":10},{"Id":"da60d528-a4a9-45cc-abc7-f7daecf06c85","Path":"converting-element-references-to-components.md","Order":6},{"Id":"5af21d40-9ee8-4173-b58c-9206f7790397","Path":"glyph-add-component.md","Order":14},{"Id":"86bb0220-0273-4788-b0ce-bdac7a33c81d","Path":"adding-components.md","Order":1},{"Id":"501a5a98-bc5d-4715-b9b9-12884a5d8860","Path":"working-with-components.md","Order":22},{"Id":"4eada089-f847-4e8e-868b-22f0331a5c82","Path":"nonspacing-components.md","Order":17},{"Id":"edd70d1c-e29a-4000-b43a-3c32affeefdd","Path":"components1.md","Order":11},{"Id":"e9bead6c-a751-435a-a4f2-b82c7e270d2e","Path":"opening-font-formats-that-support-components.md","Order":4},{"Id":"70cb841c-e73e-4eb4-9e72-a15a695b7369","Path":"differences-between-components-element-references.md","Order":13},{"Id":"b670bfd4-12f4-4339-b4ab-ec4748a6fcd1","Path":"start-using-components.md","Order":2},{"Id":"7038d045-7368-4451-ba0f-7a261008facd","Path":"components-coordinates-and-index.md","Order":20},{"Id":"ad89ded3-509a-4e01-8d21-5a899d4e5a55","Path":"components3.md","Order":7},{"Id":"7d1a5afc-3d2e-4c3c-82d2-c2908098dfd5","Path":"components.md","Order":9},{"Id":"eb5e48ba-cf10-4046-9c9d-25d593898176","Path":"opening-fontlab-files-vfc-vfj.md","Order":3},{"Id":"fd3a1c2d-4dce-4edb-963b-0473270213f6","Path":"components4.md","Order":8},{"Id":"1bcacad4-34f3-494e-8134-b92ba6d6d0a5","Path":"manually-adding-components.md","Order":16},{"Id":"062f78c7-52ea-4827-82ea-9e60ff9f1f73","Path":"replacing-a-component.md","Order":19},{"Id":"fba8e236-e8a2-46a7-b784-239e0c0c3ad2","Path":"components-and-element-references.md","Order":21},{"Id":"0d2b0a95-c5a7-4620-a388-8e5295fb6045","Path":"opening-font-formats-that-dont-support-components.md","Order":5},{"Id":"998d6e13-c8aa-4be7-989b-1ef99416a796","Path":"components-mode.md","Order":15},{"Id":"3a9dc4dd-77ce-49bb-a403-7d6d668057fc","Path":"replace-component.md","Order":18},{"Id":"08ad2573-00e7-43e9-8288-e94aec8ea1dd","Path":"copypaste.md","Order":12}],"Id":"e69bc272-056c-4d34-9d27-28bfcdc76c74","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Using Components","Languages":[{"Code":"en","Title":"Using Components","Slug":"using-components","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b0866784-2de2-4463-809a-ef6a2708d284","Path":"copypasting-anchors.md","Order":8},{"Id":"0538236e-9c67-41c8-b574-f0f7e8ef0b73","Path":"renaming-anchors.md","Order":3},{"Id":"ee197fb5-95f3-4a23-8041-43739fe6f275","Path":"removing-anchors.md","Order":4},{"Id":"7b4561f1-dc18-4758-925a-d40692cca8ac","Path":"exporting-mark-attachment-features.md","Order":11},{"Id":"3029472d-b599-4197-a7d3-c56c2a29f6d4","Path":"anchors-2.md","Order":6},{"Id":"2519a177-402e-4e6c-b375-27016ee49f13","Path":"show-mark-attachment-no-longer-normalizes-text.md","Order":20},{"Id":"49905bd6-cdef-463c-bbb4-a33ef6a310aa","Path":"shift-anchors-with-contours.md","Order":19},{"Id":"3892add3-8405-43c3-907e-fa506477b0a0","Path":"anchors-in-auto-layers-and-composites.md","Order":17},{"Id":"5a3dba1f-ec3e-420d-b5fc-12e7544fc9a8","Path":"using-anchors-to-build-composites.md","Order":22},{"Id":"162f9c5e-fa1a-406a-80aa-971af5b9080d","Path":"custom-appearance-or-anchors-and-pins.md","Order":10},{"Id":"2ace87b1-cdab-43b5-9c60-b5c9bee941ad","Path":"moving-anchors.md","Order":5},{"Id":"c19ae4b1-36e6-45eb-9e29-973d36d4b1ff","Path":"linking-anchors.md","Order":7},{"Id":"cb3dc1a1-d50c-41f9-96f5-9012bae5e614","Path":"adding-anchors.md","Order":2},{"Id":"702352c4-7877-41df-a8f4-0c7f54b0ed3a","Path":"copying-anchors-and-pins.md","Order":9},{"Id":"1e4697dc-9f27-4c9d-9293-2431c13f8a9c","Path":"moving-anchors-and-contour-selections.md","Order":13},{"Id":"713d0704-50d3-4334-bc01-cf783afd56bb","Path":"activatingdeactivating-anchors.md","Order":1},{"Id":"50973c19-7c23-4fb7-a1e0-f4f5a63aeee1","Path":"selecting-anchors-and-pins.md","Order":18},{"Id":"df63b1fe-4bb2-43ca-b38f-e1c9ed4494ec","Path":"anchors-when-decomposing-composite-glyphs.md","Order":15},{"Id":"640eea45-80b6-4ede-b169-e35c5c7580ff","Path":"appearance-of-automaticallynamed-anchors.md","Order":12},{"Id":"ed9cc663-00d0-44df-835e-6f8904dab93d","Path":"slanting-anchors.md","Order":21},{"Id":"1f5670f7-b20c-432b-b103-1fc6248a609b","Path":"viewing-the-anchor-cloud.md","Order":23},{"Id":"3fc93891-32f5-4ab6-87c4-1ff742713684","Path":"anchors1.md","Order":14},{"Id":"5914098f-0a4a-4409-8e1a-148a87628c47","Path":"removing-anchors1.md","Order":16}],"Id":"4d9b4687-8c74-4eb2-a45b-ba7363cb80a6","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Anchors, Pins and Mark Attachment","Languages":[{"Code":"en","Title":"Anchors, Pins and Mark Attachment","Slug":"anchors-pins-and-mark-attachment","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"afb90847-f40a-43c5-b8b8-b314ab910bc3","Path":"auto-glyphs-1.md","Order":1},{"Id":"176cdfb2-bbe3-4ef9-8c0d-de741609c683","Path":"finding-auto-glyphs.md","Order":5},{"Id":"33dab50c-f51a-484b-846c-dc9c7e677cdb","Path":"creating-custom-glyph-recipes.md","Order":3},{"Id":"78d0dc82-ac40-4cf0-94dd-2d99afe7a1fe","Path":"creating-an-auto-glyph-layer.md","Order":2},{"Id":"a4c58698-9d6b-4ceb-89ee-4df71a51e9c3","Path":"editing-an-auto-glyph.md","Order":6},{"Id":"73442c89-86a5-4dd5-96fa-3b031a61b4cc","Path":"using-auto-glyphs.md","Order":4}],"Id":"aebe93b5-9df7-4f75-86a5-51a79ec64189","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Auto-glyphs ???","Languages":[{"Code":"en","Title":"Auto-glyphs ???","Slug":"auto-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3b4ba823-6f73-496c-acb1-cc7f87a654b6","Path":"flatten-layer-and-flatten-glyph.md","Order":4},{"Id":"4a0a9509-b55b-4ab2-9bef-00db25cc58af","Path":"decomposing-composite-glyphs.md","Order":2},{"Id":"2255277e-3e8e-4f2c-b8fb-4fc7d941a6ac","Path":"remove-or-reorder-elementscomponents-while-in-font-window.md","Order":6},{"Id":"e5309ee4-3513-46e5-8b06-1f6a4d5d9b6a","Path":"decompose.md","Order":1},{"Id":"6401b6ba-7e9b-4bf1-8a81-1f79489f52f9","Path":"keep-source-glyphs.md","Order":5},{"Id":"1d5caefa-8a89-488c-81ed-f10e6a19f553","Path":"to-references.md","Order":7},{"Id":"182d021f-69fb-4729-a4bb-96ce5ab0f9a1","Path":"decomposing1.md","Order":3}],"Id":"b02ef804-29e6-4694-9841-ccbade063b2f","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Decomposing","Languages":[{"Code":"en","Title":"Decomposing","Slug":"decomposing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f8eada6a-8689-4865-a0d4-b0a7b14410ff","Path":"live-auto-layers.md","Order":2},{"Id":"3dadfefe-56c7-457e-b02f-b4e6aae3a420","Path":"custom-auto-layers.md","Order":21},{"Id":"60917278-a3b3-48ba-88c5-a46241ff3611","Path":"live-auto-layers1.md","Order":27},{"Id":"6cee4e60-6f9a-4d11-84b0-b4e2005765b8","Path":"creating-dynamic-auto-layers-in-existing-glyphs.md","Order":7},{"Id":"36c33f44-b1c5-43e6-9859-bd34a18d7cc9","Path":"create-custom-auto-layers-in-multiple-existing-glyphs1.md","Order":14},{"Id":"05bdb2d3-c8ad-4def-be84-85722e5e0cab","Path":"custom-recipes.md","Order":22},{"Id":"f3011d6d-90ce-4608-a1f0-44fef0293619","Path":"composite-glyphs-and-auto-layers.md","Order":9},{"Id":"039248b9-7597-49c9-a5d3-c16731bc077f","Path":"work-with-auto-layers.md","Order":8},{"Id":"1fff008a-1dce-47b2-9ffa-5bf5035dcbbf","Path":"auto-layer-column-in-font-window-list-view.md","Order":30},{"Id":"63ab87e8-dd1d-4bf6-b578-86eddde9506a","Path":"turn-dynamic-auto-layers-into-custom-auto-layers.md","Order":29},{"Id":"79726fdc-55a0-4f37-9479-8ed9921f2197","Path":"turning-dynamic-auto-layers-into-custom-auto-layers.md","Order":1},{"Id":"9061117a-1d5b-4869-ac50-be485fc421fc","Path":"glyph-recipe-syntax-1.md","Order":25},{"Id":"e4d33526-0b9b-42ad-b7d0-e7d1716cb4ca","Path":"create-new-glyphs-as-auto-layers1.md","Order":16},{"Id":"38050e28-d836-4bea-a314-a40db9c9da13","Path":"create-auto-layers-in-existing-glyphs.md","Order":12},{"Id":"10053b54-0099-4c80-8ae4-15e7f71b34e2","Path":"dynamic-auto-layers.md","Order":3},{"Id":"96c97416-b97b-44f1-8a88-6ac6bbc1bf5e","Path":"extended-syntax.md","Order":24},{"Id":"0815e18d-b749-4967-aa8a-f517e7c39d18","Path":"unsupported-extended-syntax.md","Order":31},{"Id":"b3491858-d595-43aa-a2ae-c40ee678a1f3","Path":"auto-layers-for-all-masters-and-multiple-glyphs.md","Order":26},{"Id":"64634374-730a-4106-85ed-a7ffafd8b88d","Path":"auto-layers1.md","Order":5},{"Id":"b1c2d0d1-e3b6-4c0e-a2d2-5d6b0f6c708a","Path":"auto-layers-showing-builtin-recipes.md","Order":19},{"Id":"7e5ee4fb-5836-4aa5-a82b-7d2bbb4c9f14","Path":"create-new-glyphs-as-auto-layers.md","Order":10},{"Id":"75dd3ed4-8f76-48b4-aea5-356afcb1da95","Path":"simple-syntax.md","Order":28},{"Id":"52ea0d31-550c-4fa9-8a46-def78d1130ed","Path":"custom-auto-layers1.md","Order":20},{"Id":"1334ae2f-3f5a-4b17-8f5b-c140a7f200e8","Path":"create-custom-auto-layers-in-multiple-existing-glyphs.md","Order":11},{"Id":"79b2a70d-9bf1-42d8-b1ef-d893f6e1ff86","Path":"dynamic-auto-layers1.md","Order":23},{"Id":"ebcd1bc5-84fe-42e8-93e0-c6d56e8265c5","Path":"create-auto-layers-in-existing-glyphs1.md","Order":13},{"Id":"f92fb073-da58-4125-9a3f-f85b06356a80","Path":"comments-and-glyph-notes.md","Order":17},{"Id":"010a6b50-4448-4d14-97f8-8d7dbfe36147","Path":"creating-new-glyphs-as-auto-layers.md","Order":4},{"Id":"3af2ade8-27c0-4550-b728-00c3c18719a2","Path":"auto-layers2.md","Order":6},{"Id":"0eda9bf6-0cdd-4187-9e76-1d91b1da9244","Path":"r-composite-glyphs-and-auto-layers.md","Order":32},{"Id":"b818efae-10f8-4947-84af-1bf781839e33","Path":"copy-recipes.md","Order":15},{"Id":"e4eccd57-af6c-470e-be2c-5435b88ea946","Path":"work-with-auto-layers1.md","Order":33},{"Id":"bbf12f02-9b56-450f-ba46-50fa456d06c9","Path":"auto-layers3.md","Order":18}],"Id":"871b1fe0-ee1e-4690-aa3b-a57b443612ed","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Auto layers","Languages":[{"Code":"en","Title":"Auto layers","Slug":"auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"32767ff7-12db-4310-8241-ec229dc025d9","Path":"anchors-pins-panel.md","Order":2},{"Id":"44c9fa9e-542f-43af-975c-51f42d18a42e","Path":"manual-composite-layers.md","Order":5},{"Id":"a0782265-8815-4a08-b51a-30ab464738a9","Path":"quicker-selection-of-anchors.md","Order":6},{"Id":"a4a3137b-34b7-4ecf-a23e-9387e190b69e","Path":"variable-components.md","Order":7},{"Id":"84342dba-4978-46b5-8332-09b59c73f714","Path":"anchor-expressions.md","Order":1},{"Id":"e21ffb8c-b3fb-45c7-940e-2458562b1278","Path":"attached-components.md","Order":3},{"Id":"6312ec69-990d-4db7-9d20-64c50575702a","Path":"auto-layers-2.md","Order":4}],"Id":"74f578dc-88fb-44d8-a2b0-0de05915467b","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Components and anchors","Languages":[{"Code":"en","Title":"Components and anchors","Slug":"components-and-anchors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"5c1864a5-f992-4891-8e4f-f28fb23c2de6","Path":"references-mode.md","Order":9},{"Id":"cb41adb5-5015-422c-bc63-94093eed113c","Path":"element-references2.md","Order":1},{"Id":"335c1e5a-eaf2-4668-9f57-3ef4fecc4bd3","Path":"reusing-elements.md","Order":10},{"Id":"083fc0fe-7209-408f-82e4-c2e2da18b67c","Path":"append-glyphs-now-uses-references.md","Order":3},{"Id":"7a9a5f4b-29a1-42c4-8fc2-2d4d8ceffd29","Path":"using-elements-1.md","Order":11},{"Id":"f102d5b7-4ce3-4a50-b8c4-b802eaa6f0e6","Path":"element-references4.md","Order":5},{"Id":"e48c050a-264d-4d2d-adc7-1047aa52b49d","Path":"element-references3.md","Order":4},{"Id":"31ba5133-d2d4-4d28-9419-969b0f843e02","Path":"element-references5.md","Order":6},{"Id":"7d3b923d-de3f-4a9f-9691-76d94686cfd8","Path":"element-references1.md","Order":2},{"Id":"bb961c58-2fc2-4f41-beb7-b360d469ac27","Path":"elements-3.md","Order":8},{"Id":"e5f4949e-ebd4-4ad7-a040-d94e20e607da","Path":"element-references6.md","Order":7}],"Id":"3360f646-c0eb-4e49-9cfa-e9db73a50fd4","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Element References","Languages":[{"Code":"en","Title":"Element References","Slug":"element-references","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"916825c8-46ce-4f81-9352-8ed251e9dfe2","Path":"compound-element.md","Order":2},{"Id":"0094efbc-b682-40aa-93d0-508039d6878b","Path":"element-references-1.md","Order":9},{"Id":"c499ee3d-d05c-4cd2-a18e-92083e149b34","Path":"elements-panel-3.md","Order":11},{"Id":"ddd4d103-ae8a-4e4d-abb7-76e77aea2183","Path":"elements-4.md","Order":12},{"Id":"76578f5e-be3e-4c99-bb18-4590855a1688","Path":"reuse-portions-of-glyphs.md","Order":14},{"Id":"e6fe28d9-7ec0-4247-99b7-b5307672c4ef","Path":"element-references1-1.md","Order":8},{"Id":"52773c16-250f-47b0-acf8-f94eb5c3757b","Path":"contour-element.md","Order":3},{"Id":"0ac45814-a523-4e7a-b8a8-4cfb5aea94a4","Path":"copy-contour.md","Order":6},{"Id":"71ec77a8-ad8f-41c4-8db6-016fe0f40b5a","Path":"copied-elements.md","Order":5},{"Id":"97ceda0f-c033-42bb-b55f-631cdb098ab5","Path":"image-element.md","Order":13},{"Id":"e4dae495-0a75-4e9d-82b3-306f256313cc","Path":"element-element-reference-add-contours.md","Order":7},{"Id":"460b1340-72b6-4267-bbce-98bcf541524a","Path":"add-element-reference-add-contours.md","Order":1},{"Id":"de61f325-fc03-4714-8fc8-3e3631d33502","Path":"what-is.md","Order":16},{"Id":"b7b18753-5bd5-4d09-9144-4e0e16b48517","Path":"element-types.md","Order":10},{"Id":"176dac55-553f-4abd-b141-9ff4fa2019e4","Path":"copied-contours.md","Order":4},{"Id":"6101d61a-24ea-4843-af0f-690d202f732f","Path":"svg-element.md","Order":15}],"Id":"72d64f06-dadf-4c84-9525-865dce5e5783","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Element Basics","Languages":[{"Code":"en","Title":"Element Basics","Slug":"element-basics","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"73beb4c5-3f3c-40df-84aa-68d4b6fade75","Path":"activating-components-in-glyph-window.md","Order":22},{"Id":"27f56af4-b3c9-44b0-ada7-ad5faeb244e4","Path":"active-elements-when-you-open-a-glyph.md","Order":23},{"Id":"55e08f7a-0c44-4d86-a0a0-2efb599bf80c","Path":"unfill-element-references-in-element-groups.md","Order":25},{"Id":"a6999bf5-5117-4e40-8a15-06ba89b363aa","Path":"copying-elements.md","Order":9},{"Id":"40b3733d-365e-40d0-ae33-9a0a5340fdf4","Path":"metrics-when-inserting-a-component-or-reference.md","Order":20},{"Id":"b3322a1d-b522-449c-a540-e906a4d12f88","Path":"other-improvements-1.md","Order":21},{"Id":"bacc8983-3fcb-4cb3-96b0-3f2de5dd4834","Path":"transforming-elements.md","Order":11},{"Id":"7e786d36-971d-4f31-991d-067c1dae7f12","Path":"browsing-elements.md","Order":5},{"Id":"437e7fa9-9c16-4265-821e-5395690686c2","Path":"element-menu-1.md","Order":15},{"Id":"254a869f-b86b-4de7-9f47-ba0f72ef80f2","Path":"copied-elements-1.md","Order":8},{"Id":"6142d4d7-ee83-4305-b044-3969be3fb21d","Path":"copied-contours-1.md","Order":7},{"Id":"37e2eed9-9a54-43dd-b69e-87c06d9093f0","Path":"selecting-and-deselecting-elements.md","Order":16},{"Id":"11ef4dea-fb89-4101-9d28-bf3c80b68b71","Path":"combine-contours-to-element.md","Order":6},{"Id":"edadfd70-733b-4f7f-9c9f-a6f776d58e8f","Path":"edit-across-elements.md","Order":17},{"Id":"7ec9ca2c-2d3b-4a00-8e41-f9b390df313c","Path":"join-open-contours-across-elements.md","Order":18},{"Id":"9f13726b-41e8-4761-942e-20db66a99f16","Path":"detecting-element-references-or-composites-1.md","Order":12},{"Id":"9a292973-2d88-493e-acee-51128150f75f","Path":"elementscomponents-in-scoreboard.md","Order":19},{"Id":"b1045327-68b2-41a2-863e-8cd057358d8c","Path":"custom-glyph-metrics-in-auto-layers.md","Order":24},{"Id":"4f1b7684-e347-4c69-9ed8-7f0b5b404d89","Path":"add-element-reference-add-contours-1.md","Order":3},{"Id":"d693d80a-8c43-4a6c-b7bc-e65e364324ed","Path":"aligning-elements.md","Order":4},{"Id":"19325944-abf2-44c9-bdc8-d0e279a4e0a1","Path":"element-frame.md","Order":14},{"Id":"749f24f5-2b45-4169-9d5e-10cf9ad1bda1","Path":"using-named-elements.md","Order":13},{"Id":"0bb3f97d-f15c-42f4-b9f2-974626a756ab","Path":"creating-new-elements.md","Order":10}],"Id":"339fa3d9-620d-4469-b416-38d8e54d8f60","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Elements","Languages":[{"Code":"en","Title":"Elements","Slug":"elements","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"49cd99ba-3308-4df5-a57f-2a79cea0af0a","Path":"reusing-portions-of-glyphs.md","Order":2}],"Id":"78a745b7-b574-4254-8d4d-7f5c33ac010c","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Components and Elements","Languages":[{"Code":"en","Title":"Components and Elements","Slug":"components-and-elements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"15716227-dbf5-48ae-b232-cc4743d0d404","Path":"fontlevel-hinting.md","Order":5},{"Id":"74eba905-150a-4552-aab2-98a127ca316e","Path":"family-alignment-zones.md","Order":4},{"Id":"b17bd6b5-1708-4be5-bf73-b05335e81479","Path":"standard-stem-widths.md","Order":7},{"Id":"bfa275b5-31d4-4eda-9fc7-c4c046b82c65","Path":"truetype-alignment-zones.md","Order":8},{"Id":"4238f5a1-dfc3-46a6-909a-1ea6de96ca46","Path":"alignment-zones.md","Order":1},{"Id":"5eb2d4c3-fbbc-478f-8259-98eab65c7c84","Path":"coordinate-rounding-gridfitting.md","Order":2},{"Id":"d75a04ed-fb97-437b-96cc-febda79a2a8b","Path":"how-fontlab-calculates-alignment-zones.md","Order":6},{"Id":"a593ddf4-7ba2-4ba4-b5bf-46fb3a938fb8","Path":"editing-alignment-zones.md","Order":3},{"Id":"96cc9708-1796-4a20-ae72-00c813226192","Path":"truetype-and-postscript-hints.md","Order":9}],"Id":"50bcd2b4-7a1b-4481-91ce-1f7d69cc7abb","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Introduction to Hinting","Languages":[{"Code":"en","Title":"Introduction to Hinting","Slug":"introduction-to-hinting","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ee61bd68-37c2-4405-8053-d659de82176c","Path":"finetuning-the-tt-autohinting-results.md","Order":16},{"Id":"f19bad31-4c3e-4dbc-9e18-0b0f558a9657","Path":"resetting-truetype-hints.md","Order":10},{"Id":"bebd64a1-8d84-48d0-9f54-1e9209ee3ce8","Path":"truetype-hinting-3.md","Order":13},{"Id":"b1e52f79-3e47-42ab-b6c4-c6beb751c90e","Path":"font-info-7.md","Order":3},{"Id":"077eaee7-1055-4ce4-8b94-d118da71accb","Path":"hints-and-power-guides-1.md","Order":5},{"Id":"36ca8374-bc4f-4c6c-990f-b2b86f747992","Path":"tt-hinting-ui-elements.md","Order":2},{"Id":"0fa8b7b1-471f-4a61-82c9-a4084eb16041","Path":"sequence-of-commands.md","Order":11},{"Id":"aacc64be-4f23-496d-b34c-4d38e86ae382","Path":"preferences-7.md","Order":7},{"Id":"3b2a4d3f-d7a7-4bbb-bbc6-6bd7101a6e37","Path":"text-waterfall-ppms.md","Order":12},{"Id":"a17584a3-e498-498e-a6cc-3d8b54e8a280","Path":"no-hinting-above-this-ppm.md","Order":14},{"Id":"4f87b91f-245d-4148-a390-4739888afc2c","Path":"profiles-1.md","Order":6},{"Id":"a6c4e5fe-216c-4f40-a1f4-e448ffb5f0ad","Path":"application-windows.md","Order":1},{"Id":"0738802d-5dae-41eb-b5a2-0ba153eece72","Path":"no-zone-alignment-above-this-ppm.md","Order":9},{"Id":"9bdb1c05-b214-4428-8c07-e6e850d4e204","Path":"truetype-outlines-and-tt-hinting.md","Order":4},{"Id":"52666581-90d4-484f-a820-6f5b4444617d","Path":"glyph-waterfall-ppms.md","Order":15},{"Id":"a7e8f10d-3bb1-43c4-8473-72c566c8e044","Path":"visual-truetype-hints.md","Order":17},{"Id":"d21bb38d-48b9-4041-8f23-a0aeb692f8de","Path":"outline-conversion-and-tt-autohinting.md","Order":8}],"Id":"5e72b4a7-afc1-4240-a909-305699affded","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"TrueType Hiting","Languages":[{"Code":"en","Title":"TrueType Hiting","Slug":"truetype-hiting","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"27c220f4-9f8a-4481-b823-2e75cdf0a6b3","Path":"reassigning-zones.md","Order":11},{"Id":"c339d84f-b73f-4e3e-98ee-f5622901cdf3","Path":"hinting-in-otf.md","Order":4},{"Id":"e78ccfc4-e827-4e5a-90df-833d91d0df5a","Path":"using-stem-tags.md","Order":8},{"Id":"7a53a67d-770a-4a6e-a303-cb0f3cffb369","Path":"hints-2.md","Order":6},{"Id":"dcb8e8e4-fdca-4681-88c3-8a0e47283dc4","Path":"editing-links.md","Order":16},{"Id":"dd9569b8-2128-4455-b9ea-ce5e0504ec60","Path":"stems-rounding.md","Order":2},{"Id":"b24e00e6-bca1-49da-8f35-66c1c84be7da","Path":"hints1.md","Order":5},{"Id":"50077679-8ebc-488d-be82-593680eaa41f","Path":"editing-hints.md","Order":17},{"Id":"23160e36-a6bf-48dd-b4fa-c4cfcf5aa4c6","Path":"reassigning-stems.md","Order":10},{"Id":"19a86abc-a12e-44ee-8c0f-326cd512bf18","Path":"calculation-of-zones-hints-and-guides-thickness.md","Order":1},{"Id":"a44d2ea2-dd3b-4822-921c-ec4381f30bfb","Path":"linked-nodes-and-power-guides.md","Order":7},{"Id":"3b6540cd-20c8-41c6-a6ff-dc25acdc9b22","Path":"hinting-actions-2.md","Order":15},{"Id":"5d8f59fd-968a-4f6c-a310-a7ff3dbf019c","Path":"remove-hints.md","Order":13},{"Id":"a8f0f380-c8e2-48a7-9347-1f0cc6a8b5f6","Path":"sample-texts.md","Order":12},{"Id":"abeddf26-aa55-4d72-9287-e208df2448e7","Path":"standard-stems.md","Order":9},{"Id":"e0c17584-e691-4338-9ce9-54680354cbdc","Path":"links.md","Order":14},{"Id":"b57ec76d-85ce-4cd9-af96-021721a97989","Path":"stem-snap-precision.md","Order":3}],"Id":"3ee3d3c3-7aba-451a-87a5-5b3b9e5f1e2f","Path":"hinting-1.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Hinting","Languages":[{"Code":"en","Title":"Hinting","Slug":"hinting-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0ba8fc48-042f-4664-bad8-b26a8a642a83","Path":"adding-tt-authohint.md","Order":1},{"Id":"1842ee03-3155-476a-8957-62d857e4c56a","Path":"autohint-1.md","Order":2},{"Id":"f5a36ca5-f5f8-42a7-ae9f-7ad3ef3f9fea","Path":"autohinting1.md","Order":3},{"Id":"808e13ba-cf5d-497e-a8ef-1c2ab451509a","Path":"autohinting2.md","Order":4},{"Id":"aba9c206-e900-4edd-b580-05db6d1043e4","Path":"automatic-hinting-1.md","Order":6},{"Id":"cb1bdf09-88de-4aaf-a611-49737ac1a91b","Path":"autohinting3.md","Order":5}],"Id":"3a249561-a649-4045-ac2a-e75b5ab3ee1c","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Autohinting","Languages":[{"Code":"en","Title":"Autohinting","Slug":"autohinting","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b00b9fa7-dd53-4379-ad5d-1af5c96a6e65","Path":"postscript-outlines-and-ps-hinting.md","Order":10},{"Id":"48d5bffa-e2a2-49b4-ae25-959e534754a4","Path":"manually-adding-hints-with-the-magnet-tool.md","Order":5},{"Id":"76345462-a1b4-4ea5-a0c8-5eb79515329c","Path":"postscript-hinting1.md","Order":9},{"Id":"f9fdd245-0e4d-41c5-b296-4e002ca690e5","Path":"ps-hinting-ui-elements.md","Order":13},{"Id":"222f3c84-bf5a-4171-8f87-59b1e6164c25","Path":"font-info-6.md","Order":7},{"Id":"b7e930ac-326c-4ca6-90d0-5f6043384b09","Path":"ps-autohinting.md","Order":12},{"Id":"7cd8a418-3898-45a9-9a5e-4431a2de32c4","Path":"ghost-hints-1.md","Order":4},{"Id":"2c69cc1b-9c17-4a8b-8ecf-040df1d4c1b5","Path":"opening-fonts.md","Order":6},{"Id":"278ed5fc-b96d-4e72-9773-fd562191867d","Path":"postscript-and-truetype-standard-stems.md","Order":1},{"Id":"dd60d3fc-43ec-45f1-ac36-e0eba1d7cef9","Path":"hinting-a-font-2.md","Order":2},{"Id":"74da9f14-fed4-4b1c-b2b9-3f2fc23609e4","Path":"adding-postscript-autohint.md","Order":8},{"Id":"bbebe35b-3098-4124-8cdc-c8b9a6a22c7b","Path":"glyph-window-8.md","Order":3},{"Id":"c73bd28b-8b47-4c75-832c-73bf8f19e7a9","Path":"stdw-vs-1.md","Order":15},{"Id":"51047240-7f33-466e-a6d8-a44d101bee16","Path":"zones.md","Order":17},{"Id":"dc13d3b0-4064-43e2-8119-516a9377ae00","Path":"profiles.md","Order":11},{"Id":"19e8e8c9-eaa3-4c54-a84b-ab03325dcd15","Path":"removing-hints.md","Order":14},{"Id":"4b3ebbda-6b00-4136-9052-bb6229c751ae","Path":"stems-1.md","Order":16}],"Id":"41480755-c9df-4e25-89d3-fcb8bf26d377","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"PostScript Hinting","Languages":[{"Code":"en","Title":"PostScript Hinting","Slug":"postscript-hinting","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"394c36b3-e2a9-470b-9ed1-79f907733289","Path":"autohint.md","Order":1},{"Id":"4bcf0e65-3f0e-46e4-82a5-79e037b5ec94","Path":"postscript-hints.md","Order":2},{"Id":"a76d19cd-6abd-485f-90e8-9188544cd215","Path":"truetype-hinting-2.md","Order":4},{"Id":"404b8d78-277f-43f1-9182-5c620df71b59","Path":"stdw-vs.md","Order":3}],"Id":"e5d15e22-134a-4972-b76f-4921998f9a94","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Hints","Languages":[{"Code":"en","Title":"Hints","Slug":"hints","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"bca13238-8dc9-4ddd-8e0c-4315a681dd41","Path":"hinting-4.md","Order":6},{"Id":"fe2254e0-b0a5-4e21-8fe3-ed9f429f252f","Path":"autohinting-glyphs-with-overlaps.md","Order":8},{"Id":"aa2cee67-2732-4636-af19-d51facb47e23","Path":"postscript-hinting-in-ufo.md","Order":9},{"Id":"8185820e-eeab-479e-9746-2b49ccdead77","Path":"problematic-zones.md","Order":10},{"Id":"d2c12658-21b9-4b4e-8fb3-d269c83f1cd5","Path":"truetype-hinting-in-ufo.md","Order":11},{"Id":"404771d2-011e-4b98-b649-e166d819a41a","Path":"converting-guides-into-alignment-zones-or-hints.md","Order":7}],"Id":"328fa175-54fd-4ff4-9050-b2faa59e156f","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Hinting a Font","Languages":[{"Code":"en","Title":"Hinting a Font","Slug":"hinting-a-font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"fe945987-dde1-4443-8cfe-d0201929fbb6","Path":"tba-5.md","Order":1}],"Id":"c943a35b-5d12-4ac3-bac5-f9f78bd42039","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"TypeRig","Languages":[{"Code":"en","Title":"TypeRig","Slug":"typerig","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"836625b7-7dc4-461b-a9a4-7db8fa381b31","Path":"tba-4.md","Order":1}],"Id":"5cf23370-58b7-49f3-9269-27ad2d1327cd","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"BetterTouchTool","Languages":[{"Code":"en","Title":"BetterTouchTool","Slug":"bettertouchtool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bd12ec80-342a-4a01-8873-6b941993f8d2","Path":"more-voltrelated-tools-1.md","Order":4},{"Id":"791d456e-f8ee-424e-87d3-628772d2a14f","Path":"sample-volt-fonts-2.md","Order":5},{"Id":"169e4c57-c859-4059-b8ec-f973639a56fe","Path":"exporting-fea-features-to-volt-1.md","Order":1},{"Id":"9d63551d-0374-438d-940b-30a6017a9b51","Path":"microsoft-volt-and-features-for-complex-scripts-1.md","Order":3},{"Id":"11b8085e-30e3-4f45-879b-19144a2dd008","Path":"using-microsoft-volt-2.md","Order":6},{"Id":"c2083892-1ccf-4bfb-87a9-7daf3815817f","Path":"fontlab-and-ms-volt.md","Order":2}],"Id":"a965ed60-871e-4568-b80b-75133a23d576","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"MS VOLT","Languages":[{"Code":"en","Title":"MS VOLT","Slug":"ms-volt","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"867bc73f-4640-4105-9f0c-f2b27e9e9880","Path":"installupdate-typerig.md","Order":1},{"Id":"6627cfe0-8c4a-434f-b685-4c3bd24b4ee6","Path":"typerig-delta-machine-2.md","Order":3},{"Id":"82bad312-93a8-443d-a594-945486a38f4b","Path":"typerig-panel.md","Order":5},{"Id":"48b980ad-8146-42f9-80ad-ee6a88641b45","Path":"other-typerig-plugins.md","Order":2},{"Id":"84179c15-62d1-4bb6-bc8e-9369ce17a217","Path":"typerig-is-a-powerful-set-of-extensions-for-fontlab-7.md","Order":4}],"Id":"9e3fafe6-7d8e-464c-8dd1-e22033033dc6","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"TypeRig & Delta Machine","Languages":[{"Code":"en","Title":"TypeRig & Delta Machine","Slug":"typerig-delta-machine","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"4ccd1770-e2a8-4780-93c6-44090c863fc1","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Third-Party Tools","Languages":[{"Code":"en","Title":"Third-Party Tools","Slug":"third-party-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"1f85ca0c-abe7-421e-90eb-40503b22b871","Path":"customizing-keyboard-shortcuts-1.md","Order":1},{"Id":"3a8a5941-ae39-41b6-a03c-3659ff320444","Path":"kbs.md","Order":4},{"Id":"dfbf19e0-62f7-47f8-8485-f618cca929d0","Path":"menu-items.md","Order":5},{"Id":"ab92fae9-d386-4315-af60-c4b5302e50c9","Path":"removing-existing-keyboard-shortcut.md","Order":6},{"Id":"1c2502a1-6757-421c-9326-39c898d38810","Path":"resetting-all-fontlab-keyboard-shortcuts.md","Order":7},{"Id":"595ccf5e-2317-43cb-9cb9-0dae7265bfdb","Path":"defining-a-new-keyboard-shortcut.md","Order":2},{"Id":"422473f0-6c13-4412-8900-c3b4fe8b668e","Path":"importing-and-exporting-keyboard-shortcuts.md","Order":3}],"Id":"36293436-0016-449a-9a37-4f652ab360ce","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Keyboard Shortcuts","Languages":[{"Code":"en","Title":"Keyboard Shortcuts","Slug":"keyboard-shortcuts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b5f4fef5-7aa3-44c4-9a55-0a49297b07f0","Path":"local-data-folder.md","Order":3},{"Id":"cd6f809d-039c-4fd3-b704-7426ac9c83ec","Path":"shared-user-data-folder.md","Order":5},{"Id":"b9514c8d-c0c8-447a-8a1d-4bebab51f759","Path":"user-data-folder.md","Order":6},{"Id":"0a1107b8-65ee-479b-b0fc-91710e7216d6","Path":"custom-data-files-and-locations-1.md","Order":2},{"Id":"8e9b003c-356e-46a0-87a3-d62822497787","Path":"app-data-folder.md","Order":1},{"Id":"03ad9e75-0c27-46f7-b4fa-d3fc774c2e0e","Path":"shared-app-data-folder.md","Order":4}],"Id":"c8b24826-3e24-4c05-ba1e-1ac49110adf5","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Data Folders","Languages":[{"Code":"en","Title":"Data Folders","Slug":"data-folders","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"43e064e5-ff02-4a87-b85c-8ab94482d629","Path":"specific-file-information.md","Order":1},{"Id":"46080fa1-513b-434a-ae4c-a3320e1a9754","Path":"encoding-files.md","Order":2},{"Id":"e02f59b3-786c-47fe-b228-ac808d6cf574","Path":"custom-codepage-definitions.md","Order":4},{"Id":"967bca68-3647-4169-aabf-7f9268534fb8","Path":"unicode-ranges-uranges.md","Order":5},{"Id":"63460792-366d-423b-835e-afd841698b2e","Path":"glyph-name-to-unicode-mapping-rules-standard.md","Order":3}],"Id":"c8086ffa-bad9-4ab0-a7e1-3e74f3b89e48","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Customized Files","Languages":[{"Code":"en","Title":"Customized Files","Slug":"customized-files","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"377f21f5-d3ac-4d17-8d1e-3dfd8f3e8613","Path":"lib-font-master-glyph-layer.md","Order":6},{"Id":"be5dca9a-f0da-4ee0-a383-67dc62dcd967","Path":"metrics-expressions-in-glif.md","Order":7},{"Id":"a0007661-63eb-492f-bbb4-217dd969da0e","Path":"auto-layers-in-glif.md","Order":4},{"Id":"21f2aadc-0647-4b8b-8801-43e401f69468","Path":"designspace-ufo-and-glif-lib.md","Order":5}],"Id":"7b2ecb41-dbf9-4d69-95b9-aecd281dcbd5","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Customizing FontLab","Languages":[{"Code":"en","Title":"Customizing FontLab","Slug":"customizing-fontlab","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"6af7c6c1-9393-4e8a-9ee4-bc2d8a11d219","Path":"typerig-2.md","Order":9},{"Id":"d3c8f87e-13fd-40af-997b-e9a776673b5e","Path":"anchors-in-python.md","Order":1},{"Id":"cf27a8e9-69fd-48ab-aa07-aaa99e5fbf3c","Path":"preferences-in-python-1.md","Order":6},{"Id":"cd4f3ea2-aa5d-40fc-aec8-c31b31e47e23","Path":"autokerning-in-python.md","Order":2},{"Id":"af8f6a01-db09-42d7-a854-dc89bc169e9f","Path":"python-api.md","Order":7},{"Id":"46eeb969-3c0e-4e44-bbdd-152d2bc0bfa5","Path":"fontlab-and-fontgate.md","Order":4},{"Id":"be5db1f7-c62d-4db4-804b-5c0a6d2a9527","Path":"fl.md","Order":3},{"Id":"1bead392-8aef-47fb-a2e9-f240fe021871","Path":"lib-in-python.md","Order":5},{"Id":"2afbed78-c2e5-4595-8c8c-bbb18f80933b","Path":"pythonqt-1.md","Order":8}],"Id":"4dc5b747-e85e-4eaf-9a1f-6591cb54a56c","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Improvements","Languages":[{"Code":"en","Title":"Improvements","Slug":"improvements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5b7c415e-9da9-408f-b0d5-7ba1fc434681","Path":"scripting-with-python-1.md","Order":1},{"Id":"e46f2df8-ab98-471b-9d07-b04e17184395","Path":"scripts-menu-1.md","Order":2},{"Id":"1602ec28-3878-401f-b9e9-0f0d177e5e57","Path":"fontlab-7-python-api.md","Order":3}],"Id":"51767b3e-0a1c-48d4-9691-dbe2e809cc15","Path":"extending-fontlab-7.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Extending FontLab 7","Languages":[{"Code":"en","Title":"Extending FontLab 7","Slug":"extending-fontlab-7","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c6998ee5-c9a5-4f80-b450-d4a7000904ee","Path":"execute.md","Order":2},{"Id":"1e6963da-3d85-4a06-b84a-b377e430ac72","Path":"additions-to-the-fontlab-7-python-api.md","Order":1},{"Id":"9eba995a-b1ea-4dfb-9c6c-fc6561be50b6","Path":"exporting-fonts-via-python.md","Order":6},{"Id":"ba98dfe0-b016-4fe5-9bba-03f4e8a7e498","Path":"typerig-with-delta-machine.md","Order":3},{"Id":"2d8d5dbc-32e2-423f-9b0a-57352d4db9a4","Path":"python-scripting1.md","Order":4},{"Id":"d03bdbf5-f187-4bdc-bec0-4113330cfcdb","Path":"scripting-panel-3.md","Order":5}],"Id":"284554dd-ace9-4986-974e-f9a89895ece7","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Python scripting","Languages":[{"Code":"en","Title":"Python scripting","Slug":"python-scripting","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"e01dfa72-7b23-41b6-abf5-fdf6c2591b97","Path":"scripts.md","Order":4}],"Id":"63bff4c2-9a15-4ab6-acf6-998a3a52e16d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Scripting","Languages":[{"Code":"en","Title":"Scripting","Slug":"scripting","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"aaf2188c-f0c1-429e-abbc-19a5acfc7c08","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Customizing and Extending","Languages":[{"Code":"en","Title":"Customizing and Extending","Slug":"customizing-and-extending","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"df910271-0940-44f7-9f1a-00496473cdc1","Path":"unicode-ranges-uranges-1.md","Order":5},{"Id":"db98d0a9-492e-4f37-bf2e-a2563d51600c","Path":"specific-file-information-1.md","Order":4},{"Id":"dade5861-8f94-4c80-bbb7-1828d5268dea","Path":"custom-codepage-definitions-1.md","Order":1},{"Id":"8f2a4f44-1e6a-4854-b9be-48bbdddbd039","Path":"glyph-name-to-unicode-mapping-rules-standard-1.md","Order":3},{"Id":"63ca42a3-b0ff-496a-b238-9e2812e0de80","Path":"encoding-files-1.md","Order":2}],"Id":"56fd36c6-30cb-41c8-ad87-acb946eafa1e","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Customized Files","Languages":[{"Code":"en","Title":"Customized Files","Slug":"customized-files-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cff8532f-1e51-4d10-b8f2-0af1c4a8817b","Path":"sidebearings-3.md","Order":4},{"Id":"b340a3cc-5242-4ae6-8eb1-9b09fd053298","Path":"vertical-glyph-metrics.md","Order":5},{"Id":"328b5237-6033-4704-95b0-2612a6c53e67","Path":"sidebearings-and-the-measurement-line.md","Order":2},{"Id":"a8b5f376-46c5-4705-81cd-f352d184aacd","Path":"horizontal-glyph-metrics.md","Order":1},{"Id":"530de18e-1549-4389-b074-5e61aa7b09eb","Path":"sidebearings-in-slanted-or-italic.md","Order":3}],"Id":"211144c7-e436-4454-ac0b-450ec88fa228","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Glyph Metrics","Languages":[{"Code":"en","Title":"Glyph Metrics","Slug":"glyph-metrics-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c24682c5-fd75-4d60-be67-573693a820a3","Path":"filled-and-unfilled-contours.md","Order":4},{"Id":"75dfc63e-7cd1-4951-a20c-14f041b0a886","Path":"terminology.md","Order":6},{"Id":"4bd8143d-db4d-4aa3-837b-5ac32a9d33ed","Path":"startpoint.md","Order":5},{"Id":"ed52e8e3-da69-4420-910f-43ab6a738058","Path":"closed-and-open-contours.md","Order":1},{"Id":"131e54b0-27d8-4406-8bc7-64c87f3682c9","Path":"compound-contours.md","Order":2},{"Id":"e56f0b40-228b-4a01-a58b-cde3e49a693e","Path":"contour-direction.md","Order":3}],"Id":"e4412d20-b1dd-4e3d-a4d2-1979b5aa1fa2","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Contours","Languages":[{"Code":"en","Title":"Contours","Slug":"contours-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"01a33c9e-e8f1-40c4-b52d-a653ca678f9a","Path":"handles.md","Order":2},{"Id":"5bf4b783-03f8-422b-a8c1-e52d52a0c7e0","Path":"nodespoints.md","Order":3},{"Id":"145d3b31-b421-4a33-9459-b62e15866cbc","Path":"types-of-connections.md","Order":5},{"Id":"370ad4ed-ce2e-43f0-97c3-290888cb3212","Path":"servant-nodes-1.md","Order":4},{"Id":"3bd0b989-496e-4487-818b-1a2304054a3b","Path":"genius-nodes-1.md","Order":1},{"Id":"8af120cd-1cab-4533-a5bc-424736db01f2","Path":"types-of-nodes.md","Order":6}],"Id":"0ff0b8ba-b6bb-4dc9-b528-10feb4c7a42f","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Points","Languages":[{"Code":"en","Title":"Points","Slug":"points","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9ada0926-2a73-455d-b29c-3b47542938c8","Path":"marks.md","Order":2},{"Id":"98440352-bbb0-4627-9dba-45eda4243dd9","Path":"glyph-positioning-1.md","Order":1}],"Id":"10c790e2-f8a3-4de8-bd68-98e1ffdf22f7","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Mark Attachment","Languages":[{"Code":"en","Title":"Mark Attachment","Slug":"mark-attachment","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8aab4368-bb10-4b00-b7e0-2d8539c25028","Path":"local-data-folder-1.md","Order":3},{"Id":"8db6896d-71d7-4285-b5a4-6591cba1da56","Path":"shared-user-data-folder-1.md","Order":5},{"Id":"4a3fb1b7-b5d8-4a42-b8f2-6ac4f1394fc1","Path":"custom-data-files-and-locations-2.md","Order":2},{"Id":"b6cf5f28-22d7-4ed3-81ba-edfcf12766b6","Path":"shared-app-data-folder-1.md","Order":4},{"Id":"f523001d-55ec-4c17-abf7-eb4397603042","Path":"app-data-folder-1.md","Order":1},{"Id":"92e1f68d-8bc4-4092-9aad-6ba7c078168d","Path":"user-data-folder-1.md","Order":6}],"Id":"66a28759-37d7-4741-af4e-483320d50a57","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Data Folders","Languages":[{"Code":"en","Title":"Data Folders","Slug":"data-folders-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f6fac94d-8b7a-4e59-85ea-fa9e5ac14e77","Path":"a-segment-is-a-part-of-of-the-contourcontours-between-two-neighboring-nodes.md","Order":1}],"Id":"9d927dca-8e36-4457-a3bd-856c3f7967c4","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Segments","Languages":[{"Code":"en","Title":"Segments","Slug":"segments","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4a6433d4-2966-4c4f-ae0f-fd1ba8abfeb5","Path":"a-glyphset-is-the-glyph-repertoire-of-a-font-i.md","Order":1}],"Id":"590fd8c6-7463-4220-b0aa-37f7502aeaa6","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Glyphsets","Languages":[{"Code":"en","Title":"Glyphsets","Slug":"glyphsets","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"97357b3b-5ca6-4958-a663-2c4133ba81e9","Path":"masters-3.md","Order":3},{"Id":"f542f9ad-851b-4add-816f-a5947cfca77c","Path":"masks.md","Order":2},{"Id":"a665df3e-cb37-455c-be80-86aba33a5da6","Path":"layers-3.md","Order":1}],"Id":"98b5533a-f005-43ef-b1bc-0841f3ba8202","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Layers and Masters","Languages":[{"Code":"en","Title":"Layers and Masters","Slug":"layers-and-masters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cdd64d92-91a3-4e78-b6c0-ddc3116bd001","Path":"app-start-and-macos-10.md","Order":2},{"Id":"fdf488bb-b36a-4ece-9129-b845c030c87a","Path":"glyph-tags-1.md","Order":5},{"Id":"33a8c492-29c1-413f-9961-0daa46a218bc","Path":"tunni-lines-3.md","Order":15},{"Id":"89953d83-8564-4b37-9b4e-2ded2a02cf16","Path":"power-nudge-1.md","Order":9},{"Id":"e46a52f5-9e7a-4518-ba94-9bfa8ee56057","Path":"demo-mode-2.md","Order":3},{"Id":"ee975c5b-d96b-4e69-bd73-a6dd8fb8c69d","Path":"visual-aids.md","Order":16},{"Id":"1ab4f59b-52ff-431a-9c96-8811e4d6b0f5","Path":"guides-2.md","Order":6},{"Id":"1048064f-031c-4038-95f6-8dc392c64535","Path":"tunni-lines1-1.md","Order":14},{"Id":"6e894273-df69-4632-af3c-c10c0051c047","Path":"quick-help-1.md","Order":11},{"Id":"57c5f99e-0a67-44a2-b97e-c03a0af3ab09","Path":"preview-rounding-1.md","Order":10},{"Id":"5072efcb-c0ce-4117-a6fa-9a45adcbe2a6","Path":"snapping.md","Order":12},{"Id":"e23bf018-af4b-462b-92a6-a9d8b33ebc13","Path":"glyph-classes-1.md","Order":4},{"Id":"dcfcf2c4-083b-4155-a649-480a3303f881","Path":"suggested-values.md","Order":13},{"Id":"f21b7c68-f02f-440f-a3e8-5f682e3a8e27","Path":"highlights-2.md","Order":7},{"Id":"7a9944cc-4fc0-48bf-8a65-6a5753ba7ca6","Path":"install-stable-or-beta-versions-of-fontlab.md","Order":8},{"Id":"175808be-5d03-405b-b11d-bdce4f57292a","Path":"activation.md","Order":1}],"Id":"5a6c907c-91f8-4525-ba81-b9a5eb7f1b5a","Path":"other-1.md","Order":10,"CategoryType":1,"Icon":null,"Title":"Other","Languages":[{"Code":"en","Title":"Other","Slug":"other-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5a3f4117-f522-412b-8bc4-2316c688fc20","Path":"glyph-contents.md","Order":3},{"Id":"e26d4478-3a39-40d1-8174-edacc1d69ebe","Path":"glyph-input-in-text.md","Order":4},{"Id":"73273005-4567-4029-a350-cc723bb0355b","Path":"glyph-1.md","Order":6},{"Id":"ffe90d6d-39a0-42b2-a85d-1ae1d3131268","Path":"character.md","Order":2},{"Id":"a6911a8b-8c01-4f48-8579-d396c39ac420","Path":"character-vs-1.md","Order":1},{"Id":"b3cfb7a3-069f-416f-9f86-b27630af6a9f","Path":"glyph-name-limitations.md","Order":5},{"Id":"157f1c35-7ee0-4c2b-8551-230a4b5ecc68","Path":"glyphsets-2.md","Order":7}],"Id":"41b283da-ab6b-4857-870a-644e9ace6f91","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"About Glyphs","Languages":[{"Code":"en","Title":"About Glyphs","Slug":"about-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"45670e11-8e5e-4553-8d51-75504d01cbf0","Path":"truetype-curves.md","Order":3},{"Id":"6ba76000-137c-433f-a22e-bcfc3e0920c3","Path":"curves-are-of-two-types-postscript-curves-segment-or-truetype-curve-segments.md","Order":1},{"Id":"9e8a01ff-e36d-47fb-a19e-341da59ac46d","Path":"postscript-curves.md","Order":2}],"Id":"f383600e-7f9a-42df-ae34-f86e18e2660a","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Curve Types","Languages":[{"Code":"en","Title":"Curve Types","Slug":"curve-types","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"98b59873-8ee0-4f91-ae9c-e2550db84709","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Definitions","Languages":[{"Code":"en","Title":"Definitions","Slug":"definitions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b5188058-ddaa-4931-ae9f-24c5d6166576","Path":"remove-group.md","Order":9},{"Id":"b02d431f-8734-4ba0-a40b-51102c0c4053","Path":"transform-group.md","Order":1},{"Id":"90b15c89-4749-4a76-b0d6-05a4c207911f","Path":"global-mask-1.md","Order":4},{"Id":"2753d373-65d0-4e31-bbcb-83dac7c539fb","Path":"mask-group1.md","Order":5},{"Id":"3afff328-2ff1-4d5c-96ad-6ba02a4723f7","Path":"add-hint-group.md","Order":8},{"Id":"77f6a0fd-40d2-4732-97cb-fadb577351d0","Path":"rewind-submenu.md","Order":10},{"Id":"546886e1-b7b4-413b-949e-97c1fa7d393b","Path":"mask-group.md","Order":2},{"Id":"3bd71601-e56a-49e7-aca8-9501683a586c","Path":"hint-group.md","Order":3},{"Id":"dab6d1af-e62e-4bb5-8339-2779272cfb58","Path":"tools-submenu.md","Order":11},{"Id":"c9d6f74e-acab-4b00-80e2-f616011bd335","Path":"mask-group2.md","Order":12},{"Id":"bfc4fbb1-f0f7-48d8-b241-3bac1238ded2","Path":"actions-group.md","Order":6},{"Id":"6340fcfc-aedd-4d95-b190-f94df6dd989d","Path":"commands.md","Order":7}],"Id":"a6f8d0e3-dc43-4aca-a769-3a96c155dd2f","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Menu Tools","Languages":[{"Code":"en","Title":"Menu Tools","Slug":"menu-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"23c0390b-324e-4c09-93aa-83d33746908c","Path":"engraving.md","Order":6},{"Id":"c0d782f0-a1a2-4aed-9268-154d93d186d2","Path":"boldchange-weight.md","Order":4},{"Id":"a5e99e7d-a9a9-4077-ada0-3f88e7491c7e","Path":"3d-extrude.md","Order":1},{"Id":"acb59049-6328-4a9b-a85a-036523cb6ff0","Path":"round.md","Order":9},{"Id":"d80dc132-0403-4987-889f-5a77cac257da","Path":"perspective.md","Order":8},{"Id":"cee8e352-f349-4450-9d94-54a5e07656d0","Path":"add-nodes-1.md","Order":2},{"Id":"6f3abfa9-d5cf-474f-b97e-f883330862e7","Path":"outline.md","Order":7},{"Id":"e8c129c0-0b80-4af7-baa3-79e77a7de436","Path":"blur.md","Order":3},{"Id":"c16ee2bc-919f-4902-9d9c-6d0b1606de4e","Path":"distort.md","Order":5},{"Id":"7f1269e1-bcf7-40a4-948b-334e1c28ca49","Path":"shadow.md","Order":10},{"Id":"ef541c7d-d49d-4ff8-a7e7-32edb2c45b99","Path":"sharp.md","Order":11},{"Id":"e7cf9aa1-9564-4240-a492-541738dadb5f","Path":"smooth.md","Order":12}],"Id":"d5f3a087-b40d-48cb-af28-7d1fd470e6a4","Path":"effects.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Effects","Languages":[{"Code":"en","Title":"Effects","Slug":"effects","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"50119d89-bdf3-4953-9710-0370c11d9350","Path":"center-layer.md","Order":3},{"Id":"a9868124-2130-41ba-ad97-ac762dced823","Path":"set-advance-width.md","Order":2},{"Id":"85a8f523-59f2-40cf-8c44-f00f1b2e25ac","Path":"bind-sidebearings-to-contour.md","Order":4},{"Id":"d4b69881-5cbd-480d-ad27-d88b5466ca43","Path":"set-sidebearings.md","Order":5},{"Id":"5440ceae-0e25-4794-8f7c-7bdf8d1ec696","Path":"synchronize-sidebearings.md","Order":6},{"Id":"66e245cf-3300-4bdc-b3a0-12a7b6b83bf2","Path":"adjust-metrics.md","Order":1}],"Id":"1ecebf6f-23b9-45ab-b62e-167ec2ab8682","Path":"metrics-actions.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Metrics actions","Languages":[{"Code":"en","Title":"Metrics actions","Slug":"metrics-actions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b2db8367-366d-4a9c-95ba-32ff54819744","Path":"slant.md","Order":9},{"Id":"fc09f2c8-b787-47c5-b461-c2e560e4c67d","Path":"scale.md","Order":7},{"Id":"d9438a00-4395-4da0-83c8-8e1437ff2e65","Path":"basic-tools-actions-are-one-of-five-types-of-actions-in-fontlab.md","Order":1},{"Id":"54a418d9-a6f7-4477-bc9c-08e3570f8650","Path":"rotate.md","Order":6},{"Id":"2cff3491-b970-434f-a1e1-77c0a162800b","Path":"convert-to-tt-curves.md","Order":3},{"Id":"603f5a82-6825-4639-86cd-ce425267e6fa","Path":"shift-1.md","Order":8},{"Id":"f3ee091e-2339-44aa-81e6-9a058bdae8ff","Path":"remove-overlap-2.md","Order":5},{"Id":"e00849e7-0b46-47cd-97ac-7bfb891b407d","Path":"convert-to-ps-curves.md","Order":2},{"Id":"ba1ed26e-bf4f-48d9-ba3b-5b3da16b6cc0","Path":"make-overlap-2.md","Order":4}],"Id":"f9c6ca9f-5c36-4ee2-942c-5c83f89a881b","Path":"basic-actions.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Basic actions","Languages":[{"Code":"en","Title":"Basic actions","Slug":"basic-actions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8c68d90f-1e46-40df-85b5-88d99e9481ea","Path":"nodes-at-extremes-2.md","Order":11},{"Id":"0922b749-d563-4d55-bfed-e3c9894b9cf8","Path":"add-ink-traps.md","Order":1},{"Id":"3787ceca-20be-4479-a374-44386b5e6d0d","Path":"clean-up-2.md","Order":5},{"Id":"417ba0b3-bbf3-4707-ae52-fd8af93dbeee","Path":"flatten-glyph.md","Order":9},{"Id":"f4f6cdd8-3f9c-412b-b4b4-94a03ab9a9f6","Path":"simplify-2.md","Order":15},{"Id":"9d18da97-3292-4476-b11d-1bd117f762ac","Path":"remove-guides.md","Order":13},{"Id":"cc5dd965-6963-4032-9b35-0233b1a8430c","Path":"disconnect-power-guides.md","Order":8},{"Id":"3d5ccd22-502b-4855-a216-81474b69ed20","Path":"remove-smart-corners.md","Order":14},{"Id":"a1e005e5-3d25-43f7-944a-5cb4152ec11c","Path":"change-width-2.md","Order":4},{"Id":"1b7f1593-763d-479e-a9d5-a1633ad0bcef","Path":"contour-actions-tools-actions-are-one-of-five-types-of-actions-in-fontlab.md","Order":6},{"Id":"63b49a4f-cfd2-488a-8b45-dca16a03c05c","Path":"add-smart-corners.md","Order":2},{"Id":"b68d07aa-7feb-4d9a-88f1-e992877109a4","Path":"balance-2.md","Order":3},{"Id":"9d479c42-a50d-41f6-ad1f-d24bc5ff4e13","Path":"power-guides-5.md","Order":12},{"Id":"36cb3976-8d44-416d-b3aa-583794b9dbb0","Path":"detect.md","Order":7},{"Id":"8428d6e7-cd3b-4a50-a1e5-f9641bb4e5a3","Path":"harmonize-2.md","Order":10}],"Id":"a03c0eba-d699-4127-b15d-e9839369333f","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"Contour actions","Languages":[{"Code":"en","Title":"Contour actions","Slug":"contour-actions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"63efd0ae-0342-4c8d-8bf4-80192c52709b","Path":"autohint-2.md","Order":1},{"Id":"fd129893-eafe-4af4-9436-363e2ab83796","Path":"reassign-zones.md","Order":3},{"Id":"32352698-2997-48b8-b840-5657c286ff0c","Path":"tt-authohint.md","Order":5},{"Id":"95fe333f-bc58-49e1-b60f-b9b9a1751a1d","Path":"remove-hints-1.md","Order":2},{"Id":"be573903-e655-4313-88e4-156e28fdaf72","Path":"tt-reset.md","Order":6},{"Id":"a67fe65c-14b2-4b1e-b1a0-cc90baf05551","Path":"reassign-stems.md","Order":4}],"Id":"53e6d935-8ad6-48d8-b325-f69a32ba25cb","Path":"hinting-actions.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Hinting actions","Languages":[{"Code":"en","Title":"Hinting actions","Slug":"hinting-actions","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"6668bd9f-58a5-4596-b7d9-430b1e7baab5","Path":"actions1-1.md","Order":2},{"Id":"b14c6483-d75b-4c6b-8884-9cad03ac2ec3","Path":"change-width-1.md","Order":5},{"Id":"ac833a7d-dcdf-460b-8772-047bc324ed5b","Path":"weight.md","Order":6},{"Id":"c21e9102-1559-4d10-87a3-65cdcc8477e7","Path":"remarks-1.md","Order":7},{"Id":"d62eb0e0-d41f-4044-82da-6bc952baa256","Path":"make-existing-glyphs-blank-1.md","Order":8},{"Id":"b86bd3f7-c480-4b28-adf6-aa3730682072","Path":"action-sections-1.md","Order":1},{"Id":"2982412e-a5cb-40a5-8f57-9f0e246f19cb","Path":"change-height-1.md","Order":4}],"Id":"dba64642-6795-414c-b178-ee729a287cff","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Actions","Languages":[{"Code":"en","Title":"Actions","Slug":"actions-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"476b0496-0d73-4ba6-8fe2-782863a0a27f","Path":"components-1.md","Order":1},{"Id":"c7898fea-d526-499f-a73b-600f5942ec55","Path":"glyph-names-4.md","Order":3},{"Id":"d522b8bd-4ae5-4768-b5b8-49c26ca998a3","Path":"zones-2.md","Order":8},{"Id":"677a1399-805b-48d4-9566-13e93556be41","Path":"vfcvfj.md","Order":7},{"Id":"05ac2351-31ee-4ec3-be57-2d71af054164","Path":"ot-features-1.md","Order":5},{"Id":"b5911f6e-2221-451b-a6e8-8a5305afd683","Path":"ot-tables.md","Order":6},{"Id":"dc3f3b49-0e28-4e74-b021-6fe3a3eeb3f3","Path":"contours-3.md","Order":2},{"Id":"4d601856-9db8-4865-a938-546ec6a51a1b","Path":"open-fonts-1.md","Order":4}],"Id":"87272fd6-9b5b-44bc-8815-55fcc572d535","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Open Fonts","Languages":[{"Code":"en","Title":"Open Fonts","Slug":"open-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e80559f6-bba9-445d-8a3e-a149dfd99e58","Path":"color-flag-brightness.md","Order":6},{"Id":"88f6e0ed-ad04-4608-81ee-73ac5c537ff8","Path":"default-mode.md","Order":8},{"Id":"8ab2016f-c661-4b44-9a98-401742369d94","Path":"cell-caption-properties.md","Order":3},{"Id":"fe61a6f0-a012-4b9e-b7d4-512cf1c1fc56","Path":"use-glyph-name-as-fallback-when-filtering-by-unicode-name-category-or-script.md","Order":17},{"Id":"5904a464-ecc0-4cb2-92b0-e5c80b844572","Path":"caption.md","Order":1},{"Id":"d07f0378-30e2-4f0f-8b39-52415542183c","Path":"scrolling.md","Order":14},{"Id":"f1901638-a016-4b0b-a34b-094f129c57e4","Path":"font-window-9.md","Order":12},{"Id":"8cdffc04-a45d-4732-a2f3-e1db4e55e7cc","Path":"default-encoding.md","Order":7},{"Id":"86898e2d-67b0-4e62-b739-f7ff8c9bb5ba","Path":"filter.md","Order":11},{"Id":"dfaa4f35-7b71-44a2-9f14-9d4d3867c2e5","Path":"cell.md","Order":5},{"Id":"7e591cd6-3811-44c0-9c19-ddb2d6664ce0","Path":"default-sorting.md","Order":9},{"Id":"68e28fa0-8533-4a55-bc41-b43d64f5ab89","Path":"docking-windows-as-tabs.md","Order":10},{"Id":"98dd1143-b358-4011-bfaa-7fe46ef0a2db","Path":"cell-highlight.md","Order":4},{"Id":"33f96118-4937-4799-8788-aa8f679508cc","Path":"placeholder-font.md","Order":13},{"Id":"18cf6632-ee6f-4965-b2a6-cca935083ece","Path":"show-in-cell.md","Order":15},{"Id":"4ab77914-a5be-4ce2-8f35-7a6e8da57d28","Path":"unicode-index-format.md","Order":16},{"Id":"f0f7eb78-ce26-4c55-b331-7bf841765f4c","Path":"cell-background.md","Order":2}],"Id":"5d70afe7-67b8-44f2-8489-c005adc35a9b","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Font Window","Languages":[{"Code":"en","Title":"Font Window","Slug":"font-window-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"503ec3b7-3b55-4ead-b802-38863d14f59f","Path":"smart-rounding.md","Order":5},{"Id":"de6c9716-221e-4f47-8610-2b25167f1489","Path":"preferences-variations.md","Order":2},{"Id":"17bbe4fb-cfcc-4e04-94e8-232327b9e5a2","Path":"guess-weightwidthweightwidth-axis-location-from-master-style-attribute-or.md","Order":1},{"Id":"428a4ecd-d3b1-4de2-bbf8-f0f9c5f4f704","Path":"show-instance-layer.md","Order":4},{"Id":"645d947a-f845-4dab-a58e-fe7c61915fba","Path":"synchronize-in-matching-masters.md","Order":6},{"Id":"189457df-0ddc-4ac5-9b3a-ec0c3b2ad614","Path":"variations-3.md","Order":7},{"Id":"7b3bca2c-b676-45c0-a131-45f191c2a3e6","Path":"preview-master-color.md","Order":3}],"Id":"820facf9-9fa5-438d-a312-165c8a4c66b1","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Variations","Languages":[{"Code":"en","Title":"Variations","Slug":"variations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c9920502-d654-4d15-911f-e9d6b7347583","Path":"here-is-where-you-set-the-type-of-sample-texts-you-wish-to-use-such-as-lorem.md","Order":1},{"Id":"9ec3b06a-a241-4acb-a5c9-46e96f1db306","Path":"preferences-texts.md","Order":2}],"Id":"e316d24e-40d0-4e77-91fa-b529c5842462","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"Texts","Languages":[{"Code":"en","Title":"Texts","Slug":"texts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"56a0b942-22f7-49c4-b202-6d11ed18b433","Path":"nodes.md","Order":3},{"Id":"83859740-d75f-4b32-9b57-a490cc074cbc","Path":"preferences-glyph-window.md","Order":4},{"Id":"4001ff94-5f41-42cb-8149-79e93b74d562","Path":"lengths-and-angles.md","Order":2},{"Id":"18ef63d1-33b8-4663-b2fa-02988337cee7","Path":"size-settings.md","Order":6},{"Id":"8a8aced2-9868-450d-99ef-eba55e197271","Path":"size-of-the-curvature-comb.md","Order":5},{"Id":"882881bb-a5c9-4378-8a1f-954b3e64b282","Path":"glyph-window-10.md","Order":1}],"Id":"249be670-8745-43cc-9358-88b6153a171a","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Glyph Window","Languages":[{"Code":"en","Title":"Glyph Window","Slug":"glyph-window-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ea373398-1bbd-4ddd-8ffc-53677a5725c7","Path":"generate-the-time-stamp-using-the-following-url.md","Order":6},{"Id":"e89c83eb-5297-442c-a794-70c8ee16ccd3","Path":"digital-signature-1.md","Order":2},{"Id":"b0e15a0a-b2a6-489d-9caa-30b6bfd2530e","Path":"file-paths.md","Order":4},{"Id":"0a15f2a2-9ab3-4952-91f4-77b7345b8f17","Path":"digitally-sign-exported-opentype-fonts.md","Order":3},{"Id":"0d8812ad-dc11-417b-adb3-6d189b840a60","Path":"request-private-key-password-every-time.md","Order":8},{"Id":"6088c226-8a84-4f25-81f3-7a416f9a6268","Path":"use-the-following-password.md","Order":9},{"Id":"5b848913-0345-49f9-b888-be31c181b05c","Path":"font-vendor-url.md","Order":5},{"Id":"24134ba4-a19b-4e09-8d7b-b5777884ccf1","Path":"preferences-digital-signature.md","Order":7},{"Id":"1838c26e-6b8e-4b51-8aba-b0f9b31d4804","Path":"algorithm-to-build-font-data-hash.md","Order":1}],"Id":"2baa8649-ed78-4ed1-a74e-7ea57e7fe5d5","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Digital Signature","Languages":[{"Code":"en","Title":"Digital Signature","Slug":"digital-signature","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5ee85050-1a55-4102-b3f9-3e47ef13aaa4","Path":"something-tba.md","Order":1}],"Id":"95034346-d2b8-45b8-8a6f-4fb06020a1ba","Path":"code-editors.md","Order":18,"CategoryType":1,"Icon":null,"Title":"Code Editors","Languages":[{"Code":"en","Title":"Code Editors","Slug":"code-editors","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7c346c7e-07d2-480d-b381-7f47f38114c7","Path":"curve-conversion-1.md","Order":1},{"Id":"2b548868-272e-4826-ad4e-4142c7753c0a","Path":"preferences-curve-conversion.md","Order":2},{"Id":"56f09b77-cfb7-4bee-8d79-f2c93a54455f","Path":"the-curve-conversion-tolerance-options-are-used-whenever-you-convert-truetype.md","Order":3}],"Id":"e2fee234-a5ed-4974-9cb0-f6cea5619214","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Curve Conversion","Languages":[{"Code":"en","Title":"Curve Conversion","Slug":"curve-conversion","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b3dd276d-173a-4c98-9d63-ec14f15b9bb6","Path":"glyph-window-default-zoom-level.md","Order":2},{"Id":"2043b677-0bba-484b-876d-aaad247b9c3c","Path":"preferences-distances.md","Order":3},{"Id":"1a6cb714-0cd7-46ba-b087-6b0d94c45c23","Path":"distances-1.md","Order":1}],"Id":"ec13da2a-96b2-4fb8-9a0a-4b63d6371632","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Distances","Languages":[{"Code":"en","Title":"Distances","Slug":"distances","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a3d44ae0-5b21-4095-8d49-63ce8d41d0b7","Path":"include-in-vfc-windows-andor-panels.md","Order":6},{"Id":"110d6763-6c61-475c-b63b-c2dd61030427","Path":"backups-when-saving-files.md","Order":8},{"Id":"63de5513-0ab7-483c-aa0a-56daf13745ff","Path":"existing-files.md","Order":4},{"Id":"eed77603-24c3-419f-9725-221c29e9a582","Path":"autosave-1.md","Order":1},{"Id":"0fe4585f-32e0-4bae-9d15-93bb573effbe","Path":"save-fonts-1.md","Order":2},{"Id":"4b875610-64c0-42f3-89e9-cd60cc59f73d","Path":"bitmap-fonts-2.md","Order":7},{"Id":"951d8d5d-907e-4e8f-b098-861ce29c2dba","Path":"first-save-options.md","Order":5},{"Id":"bc52fc86-8ad8-4a6c-adfc-616dab72ce82","Path":"include-in-vfj.md","Order":3}],"Id":"56713b7b-664b-4db1-af25-b8cbf34f18a3","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Save Fonts","Languages":[{"Code":"en","Title":"Save Fonts","Slug":"save-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"05f951f0-b99a-4377-82e5-654f07e19cf2","Path":"general-information-1.md","Order":3},{"Id":"27a2c149-cb79-4a6e-91f2-15d0b8658bcf","Path":"glyph-window-9.md","Order":5},{"Id":"759678a0-803c-4592-96fa-63523a110b79","Path":"general-2.md","Order":4},{"Id":"14203e15-fc82-4812-8e4e-2063ac6880ff","Path":"hardwareaccelerated-rendering-on-windows.md","Order":6},{"Id":"ac1126ea-00a0-49e7-8b6a-3fd52f6443c3","Path":"other-3.md","Order":7},{"Id":"18c66796-f7f9-41fc-9752-f833694e04e1","Path":"updates-3.md","Order":10},{"Id":"c997a0a7-c8b3-4ea1-9f22-f705bc2cfc70","Path":"user-data-folder-2.md","Order":11},{"Id":"859181d6-7a75-4418-a64a-56551610665e","Path":"sidebars.md","Order":8},{"Id":"e9574565-af5e-4e2a-8791-fbe4be053676","Path":"windows-and-tabs-configuration.md","Order":1},{"Id":"64571bd9-0beb-45a0-9118-2614005daf79","Path":"sketchboard-1.md","Order":9},{"Id":"68b7c41e-417a-4ab4-bfe9-bad79861275c","Path":"focus-highlight.md","Order":12},{"Id":"efdafa43-9ef9-45b6-afa2-9d7031d220c5","Path":"font-window-8.md","Order":2}],"Id":"0b4be18a-2c7a-4d3d-b881-4c926e95b466","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"General","Languages":[{"Code":"en","Title":"General","Slug":"general","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"66f71473-1691-4553-b5be-fc68329ade93","Path":"when-testing-your-hinted-fonts-test-a-range-of-sizes.md","Order":2},{"Id":"6e552482-b4ca-4a5d-90a8-6b12a1ff4f22","Path":"preferences-default-texts.md","Order":1}],"Id":"4516fe01-b323-4ed1-9639-65dc020c964e","Path":null,"Order":19,"CategoryType":0,"Icon":null,"Title":"Default Texts","Languages":[{"Code":"en","Title":"Default Texts","Slug":"default-texts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b47b78bb-11bd-4e29-adf6-6596f8965c57","Path":"tba-6.md","Order":1}],"Id":"5ab676a2-8d20-4591-b160-666ad71fb452","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"FontAudit","Languages":[{"Code":"en","Title":"FontAudit","Slug":"fontaudit-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dba55e7d-ab61-4fec-a5db-a2fd8b5041d6","Path":"paste-duplicate-1.md","Order":1},{"Id":"81986a52-e867-4c94-906f-7e9baacac365","Path":"scale-artwork.md","Order":2},{"Id":"ab8edc85-2914-446e-9084-5ab3f4a29337","Path":"preferences-paste-duplicate.md","Order":3}],"Id":"c6862569-853a-4c50-98f0-afe32c956077","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"Paste & Duplicate","Languages":[{"Code":"en","Title":"Paste & Duplicate","Slug":"paste-duplicate","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"210fb40d-cdd8-48bb-9be0-f57e9c86ac4a","Path":"preferences-autohinting.md","Order":8},{"Id":"c9be302b-87bd-48da-8403-95e718926975","Path":"interpolate-positions-of-the-double-links.md","Order":9},{"Id":"1880ebe9-dca2-4ef3-9eb1-d954d5a12c07","Path":"remove-existing-hints-when-autohinting-a-glyph.md","Order":7},{"Id":"dbdacc3e-22fc-45d4-9850-be4cabb3eddf","Path":"single-link-attachment-precision.md","Order":10},{"Id":"f6b9d656-2689-4950-b551-bb691e58fba7","Path":"add-link-to-the-right-sidebearing-point.md","Order":11},{"Id":"7ddb1cdf-a1a9-482a-9d78-1374a45bbe2d","Path":"automatically-interpolate-positions-of-the-cusp-points.md","Order":3},{"Id":"4136755e-a0da-4e8c-b59a-65ef64234c8f","Path":"generate-triple-hints.md","Order":1},{"Id":"93e0265a-9a21-4645-8fb0-9cc95c8e8a9d","Path":"convert-hints-to-links-when-autohinting.md","Order":4},{"Id":"3a81bc4d-f0d1-4be0-9d65-d9c96118a0de","Path":"direct-links-to-the-center-of-the-glyphs-where-possible.md","Order":5},{"Id":"d415a537-c353-495a-a887-6cd475e42bd9","Path":"try-to-automatically-generate-middle-delta-instructions.md","Order":6},{"Id":"6c95f99d-3a49-43b4-a3e9-f03ceb8c3d28","Path":"autohinting-2.md","Order":2}],"Id":"aa44eff0-89ee-4061-be2a-ba5dd976ccc6","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"Autohinting","Languages":[{"Code":"en","Title":"Autohinting","Slug":"autohinting-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"391dc972-36bb-47d8-9c7e-7395bd875b85","Path":"integer-coordinates-and-grid.md","Order":2},{"Id":"fdec09fa-e2cc-4618-8463-6f28cb2ca43d","Path":"in-preferences-grid-guides-you-can-now-customize-the-opacity-transparency.md","Order":3},{"Id":"e5506195-af62-4f81-b39e-220aed5139d8","Path":"opacity-of-guides-zones-hints-font-dimensions-1.md","Order":5},{"Id":"5aeba892-d884-4e12-8de1-0fc6e03ec698","Path":"grid-and-guides-2.md","Order":1},{"Id":"8f5bbbf5-7906-4cd4-ba66-6859f6d43e50","Path":"preferences-grid-guides1.md","Order":7},{"Id":"b8bc19b0-1571-4b75-b5fb-da8324fbe195","Path":"preferences-grid.md","Order":9},{"Id":"da673787-2818-4f8c-9575-65e44a61abb3","Path":"preferences-grid-guides.md","Order":8},{"Id":"6ca48edd-e055-4b6e-ba16-c654d420f044","Path":"slanted-grid-1.md","Order":10},{"Id":"72c45df8-1e48-49af-9864-e609d45524af","Path":"grid-1.md","Order":4},{"Id":"24f7e16a-b349-4ec0-8c2d-120ebdc112a8","Path":"slanted-sidebearings-glyph-metrics.md","Order":11},{"Id":"064a1417-2862-45b1-b7b0-a1d109ae7ee5","Path":"opening-fonts-with-fractional-coordinates.md","Order":6}],"Id":"cab79732-7b2e-48fe-8aac-faa0f15debf5","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Grid and Guides","Languages":[{"Code":"en","Title":"Grid and Guides","Slug":"grid-and-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ca558f38-a668-4c4f-8679-0d6e13a45953","Path":"cousins-3.md","Order":1},{"Id":"c27d1f17-7cd7-4e49-8317-f58fd540b368","Path":"preferences-cousins.md","Order":3},{"Id":"9b92333c-8a02-41cd-8f37-59519fa6c100","Path":"glyph-list.md","Order":2}],"Id":"ec23814c-7606-4812-9b6a-1460d86dc561","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Cousins","Languages":[{"Code":"en","Title":"Cousins","Slug":"cousins-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"70bfa680-fdff-4f9d-a1b2-ee3b484d9c79","Path":"editing-1.md","Order":1},{"Id":"77cb0c4c-a408-4f9b-b1e0-f9e1d830c9be","Path":"mnmnm.md","Order":2}],"Id":"d7d0eb93-e3a9-4144-a659-9f9849692eb4","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Editing","Languages":[{"Code":"en","Title":"Editing","Slug":"editing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"53459ee7-4048-4690-ad69-7efee3ec7a12","Path":"new-glyphs.md","Order":3},{"Id":"68d5c1c6-2115-419d-97b4-050537e5700e","Path":"unicodename-mapping.md","Order":8},{"Id":"5bb820b8-9509-4715-a1db-ec0b4183113a","Path":"operations-2.md","Order":4},{"Id":"8a0957f8-4047-439f-b211-0e57671772cf","Path":"autotrace-2.md","Order":1},{"Id":"cee7e68f-56a5-4d0e-b58f-b42ff82e75a6","Path":"preferences-operations.md","Order":7},{"Id":"93ba4e2e-c6b0-4359-bc10-e9cbc94815d3","Path":"element-references-2.md","Order":2},{"Id":"23bcc67a-f324-42f8-a784-cb1624cd242a","Path":"power-guides-4.md","Order":6},{"Id":"5cfc8e59-a6e4-42be-9069-de1d06dd6989","Path":"optical-separation.md","Order":5}],"Id":"7b1f6ad7-0592-45ea-98b6-9bce3ffb1e2f","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Operations","Languages":[{"Code":"en","Title":"Operations","Slug":"operations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ff803eb8-b1da-4a5f-ac3d-cb9a7a63366a","Path":"option-description.md","Order":3},{"Id":"c0cc3b80-b878-4711-80f8-11b541f67306","Path":"preferences-spacing.md","Order":1},{"Id":"cdbd957e-4606-480a-91f8-4f544a531529","Path":"spacing-3.md","Order":2}],"Id":"48c17be7-be2a-4bbc-a158-fd85de45c788","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Spacing","Languages":[{"Code":"en","Title":"Spacing","Slug":"spacing-2","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"8ffe231d-9a65-4423-984a-57b3fd21e88b","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Preferences","Languages":[{"Code":"en","Title":"Preferences","Slug":"preferences-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"100311c9-c017-4bb8-96f2-9fcdb250c496","Path":"metrics-tool-2.md","Order":1}],"Id":"e42c6c5a-dcfe-4841-b2c8-647837ac2633","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Metrics Tool","Languages":[{"Code":"en","Title":"Metrics Tool","Slug":"metrics-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1ca7ffe7-d194-4c81-ad03-fa7d8ca88b65","Path":"knife-tool1.md","Order":4},{"Id":"b27b10f4-9501-4d46-b5d6-0e84f2f59b04","Path":"break-nodes.md","Order":1},{"Id":"43124f87-7d82-4ba0-87d2-fcc041f4d74b","Path":"duplicate-nodes-2.md","Order":2},{"Id":"d9edef9c-e525-4ac2-bd4b-9b955668748b","Path":"insert-nodes.md","Order":3}],"Id":"2ce4587c-efb5-43a5-812c-9bf7cdfe7c41","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"Knife tool","Languages":[{"Code":"en","Title":"Knife tool","Slug":"knife-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"efdea4ab-6bc8-47fe-97a4-eab2e231dade","Path":"pen-tool-4.md","Order":1},{"Id":"d5267e47-3085-4cb9-af98-22c7862a880f","Path":"drawing-a-new-countour.md","Order":2},{"Id":"8b9c00fa-f63a-4a25-9772-b2187a4f8d3e","Path":"editing-an-existing-contour-with-pen.md","Order":3},{"Id":"373cae85-8872-42ae-af9b-234b0be97d6f","Path":"pen-tool1.md","Order":4}],"Id":"8f092a28-f0ad-4316-931c-56b18cf42390","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Pen Tool","Languages":[{"Code":"en","Title":"Pen Tool","Slug":"pen-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e9060ce1-5791-4ca8-87af-aaa1dbb9871d","Path":"code-panel.md","Order":5},{"Id":"9b341933-2b0c-454f-b48e-7c36808c49eb","Path":"waterfall-preview.md","Order":6},{"Id":"152ea4e1-0884-49c8-af9e-fb1417208c51","Path":"aligntop-and-alignbottom-instructions.md","Order":17},{"Id":"910e672a-f1f0-4706-9651-c7a4e20d64c7","Path":"truetype-hinting-panel.md","Order":7},{"Id":"cc5ce1a8-d84d-4f98-bd00-b3bff2765428","Path":"raw-data-to-be-edited-igor.md","Order":24},{"Id":"1765ca6e-5ef6-4176-9d33-fcf0555cd596","Path":"active-and-inactive-delta-instructions.md","Order":16},{"Id":"3198e953-619c-440f-b8b6-c67ed0bfdecd","Path":"preview-3.md","Order":4},{"Id":"f000d23a-99ca-4e3d-ba61-4cf3837e7175","Path":"single-links.md","Order":12},{"Id":"532e8dbd-36b1-45f1-bef0-941b1054dedd","Path":"standard-stems-1.md","Order":13},{"Id":"bc7f5fb5-fe5e-4249-b57a-dd461927fc53","Path":"editing-truetype-alignment-zones.md","Order":14},{"Id":"9273eab4-2c69-40c4-8959-e5b6cc6d52bb","Path":"alignment-instructions.md","Order":1},{"Id":"34828f13-0115-4580-9be7-21700750c9b2","Path":"toolbar-3.md","Order":3},{"Id":"ab146111-158a-472a-88e4-bdbd13430703","Path":"hinting-property-bar.md","Order":8},{"Id":"58d615c2-0ce0-4775-aa69-5a2acb902f4a","Path":"alignment-zones-1.md","Order":20},{"Id":"ea41b652-3ba0-4202-861c-17f15b31c4be","Path":"align-instruction.md","Order":21},{"Id":"1001eee6-0dc6-43bc-862b-1ea6c8be2c1c","Path":"hinting-alignment-zones.md","Order":9},{"Id":"ce8bf5cf-17d8-4a6a-860d-5d020afafc1c","Path":"the-truetype-hinting-tool-cmdshiftf7-is-used-to-create-and-modify-visual.md","Order":2},{"Id":"80f3f0cd-84f1-4623-af71-b436994ea8e7","Path":"double-link.md","Order":15},{"Id":"a708a22c-a05b-4f52-aadb-1726275b98b9","Path":"links-1.md","Order":22},{"Id":"37c19c35-dded-49a5-8dc4-7db1a248f50e","Path":"customizing-the-double-link-command.md","Order":18},{"Id":"90cb2f4a-6b55-48d5-8cbe-aa1b55bace98","Path":"customizing-the-single-link-command.md","Order":19},{"Id":"c139c2b1-3ec5-474c-9813-b71622f0d4d2","Path":"delta-instructions.md","Order":23},{"Id":"0547bcf2-5bb3-486d-89af-f05e4fe9424f","Path":"middle-delta-instructions.md","Order":11},{"Id":"9c8e66b2-48f8-4a58-bfff-f744ead1cf1c","Path":"final-delta-instructions.md","Order":10}],"Id":"64d8567e-8e4a-4c94-a485-4849c78969c0","Path":null,"Order":23,"CategoryType":0,"Icon":null,"Title":"TrueType Hinting tool","Languages":[{"Code":"en","Title":"TrueType Hinting tool","Slug":"truetype-hinting-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"12a450e2-39e1-4c0e-8d42-1f77d5ede110","Path":"quick-scale-tool.md","Order":2},{"Id":"ece58482-087a-4810-90b2-85d2ecb9bdae","Path":"quick-rotate-tool.md","Order":1},{"Id":"e321a2a6-989b-4f3e-af90-1c0ceb65a7d5","Path":"quick-slant-tool.md","Order":3}],"Id":"49a7534c-e1f9-40cc-b10d-89e68fcc114e","Path":null,"Order":24,"CategoryType":0,"Icon":null,"Title":"Quick Tools","Languages":[{"Code":"en","Title":"Quick Tools","Slug":"quick-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"72446096-c435-4aeb-905f-fa497dcafdb1","Path":"fill-tool2.md","Order":2},{"Id":"7d00af33-826f-40d2-9ee1-3f9a8360998c","Path":"fill-tool1.md","Order":1}],"Id":"90fb6556-dcce-4a5f-b0c2-c2621211dbda","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Fill tool","Languages":[{"Code":"en","Title":"Fill tool","Slug":"fill-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c40c127a-a4b7-40b7-a5f3-ad3a04bf190a","Path":"toolbar-items.md","Order":3},{"Id":"83f4d31e-79a4-4f1b-b74c-80ac423d39ac","Path":"toolbar-2.md","Order":4},{"Id":"eccea9d7-8f52-45b2-bef9-9e7618cf07d8","Path":"compact-toolbar.md","Order":1},{"Id":"09af3d27-c4c1-42f3-9b0e-d8bef83e6fba","Path":"keyboard-shortcuts-6.md","Order":2}],"Id":"9902f228-bc71-4ea4-a9df-65590bcf0344","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Accessing the Tools","Languages":[{"Code":"en","Title":"Accessing the Tools","Slug":"accessing-the-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"57776cc5-eda8-4044-8ba4-4395b6f392d2","Path":"ellipse-tool1.md","Order":1},{"Id":"b32baef1-70fd-453a-a1c6-82b9caaa0a4b","Path":"the-ellipse-tool-o-key-draws-ellipses-and-circles.md","Order":2}],"Id":"b832046f-ebba-417f-8104-bf8f4c0655d3","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Ellipse tool","Languages":[{"Code":"en","Title":"Ellipse tool","Slug":"ellipse-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d8267157-bb2c-4e18-b04f-c53297d2fc5e","Path":"eraser-tool1.md","Order":1}],"Id":"c3e14ee8-7651-479f-a495-88ee7d74ee76","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Eraser Tool","Languages":[{"Code":"en","Title":"Eraser Tool","Slug":"eraser-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3d8dd6a2-5319-4bbf-b9e9-67027d777f46","Path":"adding-links.md","Order":1},{"Id":"3def2466-c872-4c97-bb1f-266545155965","Path":"removing-links-1.md","Order":2},{"Id":"7f7faf04-eb1e-4158-abe8-ae470407522f","Path":"magnet-tool2.md","Order":6},{"Id":"7328b4a9-98c6-4dd3-bf03-061b21bbcf2e","Path":"magnet-tool1.md","Order":5},{"Id":"e78b0a2f-08cc-482e-b8d1-2cf294eabf15","Path":"editing-with-mouse.md","Order":4},{"Id":"6f7e146c-09f6-4a3a-b60d-a3e22064b431","Path":"editing-with-keyboard.md","Order":3}],"Id":"dff6a591-1eab-4e8a-ab75-d319f58a2fff","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Magnet Tool","Languages":[{"Code":"en","Title":"Magnet Tool","Slug":"magnet-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ae663634-662b-4341-8950-8e2fa0426534","Path":"the-element-tool-v-is-used-to-deal-with-elements.md","Order":1}],"Id":"40429825-8af2-4f5c-8151-6393e07a557b","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Element tool","Languages":[{"Code":"en","Title":"Element tool","Slug":"element-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"403f1b84-0ec2-40af-86d2-f5b981347d59","Path":"single-corner.md","Order":4},{"Id":"f26216e9-9572-4b37-8683-bdd54857c61e","Path":"marquee-select.md","Order":5},{"Id":"164705ea-a0b8-44c3-a03e-656c7ea7054f","Path":"the-scissors-tool-k-key-allows-you-to-cut-complex-outlines-into-basic-components.md","Order":6},{"Id":"c274f749-455b-41c6-a9a4-76c82821935e","Path":"node-to-node.md","Order":1},{"Id":"3d06ce68-029c-400d-80fc-809f16f50866","Path":"scissors-tool-unlink-nodes-add-ink-traps.md","Order":2},{"Id":"9777192e-9367-435c-9e06-60b205e31bbe","Path":"single-corner1.md","Order":3}],"Id":"767a27dc-8580-45fd-9655-c46c18b7db06","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"Scissors tool","Languages":[{"Code":"en","Title":"Scissors tool","Slug":"scissors-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cbba767b-b6d8-42f0-b3d6-f4c9f15be98d","Path":"zoom-tool1.md","Order":1}],"Id":"8fb40965-2763-4c6a-a10e-3083a67d02e6","Path":null,"Order":26,"CategoryType":0,"Icon":null,"Title":"Zoom Tool","Languages":[{"Code":"en","Title":"Zoom Tool","Slug":"zoom-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"61e2e245-7386-4d74-bb74-d8a76a6c1779","Path":"brush-tool1.md","Order":1},{"Id":"89949589-6af5-4fd0-8fe0-c7bd5c948cdb","Path":"summary.md","Order":2},{"Id":"7b78b4c8-d220-4322-b252-13d23c2d9452","Path":"the-brush-tool-b-in-fontlab-works-somewhat-like-the-brush-tool-in-any-bitmap.md","Order":3}],"Id":"e2ba680d-bc4e-4174-b3a5-9ea286746556","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Brush tool","Languages":[{"Code":"en","Title":"Brush tool","Slug":"brush-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d75cb896-e868-4f60-b361-f77b2dbbe889","Path":"tba-7.md","Order":1}],"Id":"dcba2c93-f921-42bb-ace8-62714986da3d","Path":null,"Order":18,"CategoryType":0,"Icon":null,"Title":"Rotate Tool","Languages":[{"Code":"en","Title":"Rotate Tool","Slug":"rotate-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b6068201-6a8a-4869-bbc3-4232f005181b","Path":"erasing-with-the-rectangle-tool.md","Order":2},{"Id":"1f79b7da-cade-40e2-a68c-1590ba0d807d","Path":"rectangle-tool1.md","Order":3},{"Id":"5e5699a3-4f3e-40e6-8f62-5abe40dd740a","Path":"drawing-with-the-rectangle-tool.md","Order":1}],"Id":"8f12ae1a-a3bd-474f-99e5-11153583e376","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Rectangle Tool","Languages":[{"Code":"en","Title":"Rectangle Tool","Slug":"rectangle-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"dff823c5-cc9c-457b-af9a-0d29dfe91312","Path":"free-transform-1.md","Order":1}],"Id":"9f9717da-9486-4d81-bdd4-e78723431ace","Path":null,"Order":25,"CategoryType":0,"Icon":null,"Title":"Transform Tools","Languages":[{"Code":"en","Title":"Transform Tools","Slug":"transform-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3b26fdd7-fae7-47cb-8431-4922d5380209","Path":"handle.md","Order":7},{"Id":"6dacd02a-c611-45be-9711-ea26f7f8e679","Path":"the-summary.md","Order":18},{"Id":"93c217b5-50ee-4561-86d0-bd0f66afaa2c","Path":"modifying-segments.md","Order":9},{"Id":"17fc64d2-2a35-4999-be6f-d344f6720f21","Path":"converting-segments.md","Order":4},{"Id":"39bda5aa-9c97-469e-8f07-1f4957c58345","Path":"contour-tool1.md","Order":3},{"Id":"ee15101a-aae3-40ef-8626-f3a7e645d67d","Path":"canvas.md","Order":1},{"Id":"70ac848e-570b-4fa1-8129-f49046441139","Path":"deleting-segments.md","Order":6},{"Id":"3bde1529-25c3-4403-918b-81fccfd236bc","Path":"inserting-nodes.md","Order":8},{"Id":"ddcd6ac7-feee-4e9d-8fa5-6fdddffd30da","Path":"options.md","Order":12},{"Id":"f92ae7e3-3ece-4df2-891a-b60acf81a4a8","Path":"special-features.md","Order":15},{"Id":"c1c8f800-4b85-4c4c-b849-e04a8cf33c44","Path":"node.md","Order":11},{"Id":"0c4a70e1-f646-41e5-add3-690d7fe1fbd6","Path":"selecting-nodes-and-contours.md","Order":14},{"Id":"7a227cac-8718-4406-aa26-a738ddfcc3d5","Path":"the-contour-tool-is-used-for-normal-editing-of-the-contours.md","Order":17},{"Id":"59d20411-9ed0-42a2-bb58-73801f5e7e0d","Path":"moving-nodes.md","Order":10},{"Id":"bcb7bc3e-5d86-4045-88d7-16c2e40e4164","Path":"table-summary.md","Order":16},{"Id":"2a0c129b-40fc-414c-9c3a-1862b67fd2cb","Path":"deleting-nodes-and-handles.md","Order":5},{"Id":"80b74e97-e883-404a-81f9-5d9b4160d3d8","Path":"changing-node-types-2.md","Order":2},{"Id":"865c8c76-a9ee-47bc-ae28-2fe45f412696","Path":"segment.md","Order":13}],"Id":"a65b9151-5ca1-470f-84f1-0aa63f88d829","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Contour tool","Languages":[{"Code":"en","Title":"Contour tool","Slug":"contour-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a5bb7921-06b5-49c7-95fb-7d0e8bbea89e","Path":"tba-9.md","Order":1}],"Id":"984734f6-9f71-44d0-a19a-19b43c162c72","Path":null,"Order":21,"CategoryType":0,"Icon":null,"Title":"Slant Tool","Languages":[{"Code":"en","Title":"Slant Tool","Slug":"slant-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"44e9cb2d-407f-4820-95d1-c835f2d80b88","Path":"the-guides-tool-g-key-is-used-for-creating-pins-anchorsanchorsandpins.md","Order":2},{"Id":"c3be00c0-c884-4256-bd98-ea1c0ee0cebc","Path":"guides-tool1.md","Order":1}],"Id":"e785d8e5-3446-49df-8fc0-a02bd572d311","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Guides tool","Languages":[{"Code":"en","Title":"Guides tool","Slug":"guides-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"828ada1b-efda-428e-aaf0-978b853ffe12","Path":"rapid-tool1.md","Order":5},{"Id":"e714b04e-e25d-465d-970a-3ba302150faf","Path":"working-with-the-rapid-tool.md","Order":1},{"Id":"3313b0a3-20c7-4cad-8eb4-aaf418169c6a","Path":"laying-out-nodes.md","Order":4},{"Id":"71b6149d-ecd7-4990-b058-5dc56114fff9","Path":"adjustments.md","Order":2},{"Id":"42b6d177-b546-42ce-9541-eaa23698d776","Path":"rapid-tool2.md","Order":6},{"Id":"aa0ac746-9495-4cfa-b27a-bc6e40b322d4","Path":"laying-out-control-points.md","Order":3}],"Id":"121d6824-9deb-434d-a1ce-affffa37b409","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Rapid Tool","Languages":[{"Code":"en","Title":"Rapid Tool","Slug":"rapid-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3d70305b-d3c7-41cb-b6c4-a75555750f30","Path":"tba-8.md","Order":1}],"Id":"d5f3c9c8-7a44-4b54-8d2f-c0658b3944e1","Path":null,"Order":19,"CategoryType":0,"Icon":null,"Title":"Scale Tool","Languages":[{"Code":"en","Title":"Scale Tool","Slug":"scale-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"25de3a71-8f40-4b7b-8be3-85a59d3912ce","Path":"previewing-opentype-features-1.md","Order":7},{"Id":"7eab8d9d-af87-42e4-82ff-53965e771141","Path":"auto-preview-in-text-mode.md","Order":5},{"Id":"d2dad3fb-f98a-4b13-a54a-df335353e8d1","Path":"adding-context-to-text-in-the-glyph-window-1.md","Order":4},{"Id":"7b043c6f-21a8-43bb-8642-94b21f4c9b9a","Path":"text-tool-3.md","Order":1},{"Id":"83d8a625-d5bc-4fad-9393-7d22d6b04458","Path":"using-the-text-library.md","Order":8},{"Id":"8fc5cbdc-f604-4b9d-9a79-c5fb1077d18a","Path":"modifying-formatting-in-the-glyph-window-1.md","Order":6},{"Id":"d35f1202-ba0c-4e37-b7c2-d9ed3cd09d1b","Path":"content-sidebar-1.md","Order":2},{"Id":"a6f63500-a401-4bb7-8137-0e61990b38e2","Path":"text-tool-property-bar.md","Order":3}],"Id":"d7bacb6e-8f98-46ab-99e4-a5fd9754d75b","Path":null,"Order":22,"CategoryType":0,"Icon":null,"Title":"Text Tool","Languages":[{"Code":"en","Title":"Text Tool","Slug":"text-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0d849e80-579e-48ca-986d-07ee2e2124bf","Path":"to-make-a-contour-segment-compatible-across-all-masters.md","Order":2},{"Id":"970a034e-b2eb-410f-9d30-b553ff84b7ef","Path":"the-matchmaker-tool-helps-prepare-masters-for-better-interpolation.md","Order":1}],"Id":"f4af7736-dd50-4ac2-9cc9-9bf2c567f410","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Matchmaker tool","Languages":[{"Code":"en","Title":"Matchmaker tool","Slug":"matchmaker-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7fc6d015-2a4d-4e96-a6ca-928478d25099","Path":"the-kerning-tool-k-is-present-in-the-toolbar.md","Order":1}],"Id":"b55f7491-c0da-4022-9839-79d250cb6b68","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Kerning tool","Languages":[{"Code":"en","Title":"Kerning tool","Slug":"kerning-tool","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7feae289-8673-49c2-bd92-51d45f79934b","Path":"editing-an-existing-contour.md","Order":1},{"Id":"03f2aa5a-a629-41c0-9d1e-2349ee2f5e7e","Path":"pencil-tool1.md","Order":2}],"Id":"07f16a5e-7d05-4c4f-b85d-29dcdc259bd9","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"Pencil Tool","Languages":[{"Code":"en","Title":"Pencil Tool","Slug":"pencil-tool-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"f4582565-677f-4ed6-bf2d-02b7f97e0071","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Application Tools","Languages":[{"Code":"en","Title":"Application Tools","Slug":"application-tools","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"29a19411-3e5c-4fe9-be72-f09b2ceb9169","Path":"editing-layer-properties.md","Order":3},{"Id":"92150e19-909f-4336-928b-bba3edb924e0","Path":"copying-contents-as-texts.md","Order":1},{"Id":"f44c72ca-4ccd-48ae-b733-8192fe3af372","Path":"additional-options-1.md","Order":2},{"Id":"7a754a33-4b18-4d66-b268-ea0185b9bd61","Path":"embedding-2.md","Order":4},{"Id":"f7d281a7-413f-4430-a011-c86cf0136232","Path":"finishing.md","Order":5},{"Id":"75b42a3a-4fda-4203-b2fa-ddb4475c0c90","Path":"overlay-preview.md","Order":6},{"Id":"ee937515-0e31-4ec8-8feb-bbcd364e3afd","Path":"overlaying-fonts-2.md","Order":7}],"Id":"f2200884-a666-4ac8-9ed2-0c5c60f6333e","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Additional features","Languages":[{"Code":"en","Title":"Additional features","Slug":"additional-features-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"0eb1f54a-1eab-4ded-8402-07c54f2e93a8","Path":"move-to-trash-recycle-bin.md","Order":1},{"Id":"0a259655-38be-4ae0-b2c7-d4aa837b3b37","Path":"export-profiles1.md","Order":2},{"Id":"ff3b1ecb-8a3d-4ca9-891c-bc4c367e8e99","Path":"cff2based-variable-ps-fonts.md","Order":7},{"Id":"e6e94d84-0cf7-406a-881d-307430e0da4c","Path":"exporting-variable-fonts.md","Order":5},{"Id":"b416549a-6bd3-4d39-be49-330d3b6448a2","Path":"opening-and-exporting.md","Order":8},{"Id":"7f351ec1-1e73-44ca-a17f-b15a4158eb36","Path":"lastused-export-profile.md","Order":3},{"Id":"c288e37d-954f-467a-93c6-8c70679a0b92","Path":"family-name-visible-when-exporting-instances.md","Order":4},{"Id":"ecdd0a5a-f995-4799-8276-16dd6a003c4b","Path":"exporting-looped-corners.md","Order":6}],"Id":"044ac2a8-c62d-4866-89e2-da2b57586733","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Export Profiles","Languages":[{"Code":"en","Title":"Export Profiles","Slug":"export-profiles-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"f1f56bf5-840a-474f-839f-6fec2b475a3e","Path":"masters-1.md","Order":2},{"Id":"8c547304-9fb5-4215-8852-f5b15c25fa3d","Path":"export-notification.md","Order":21},{"Id":"07066ee9-68e9-41ad-b3d6-560c6dd91249","Path":"creating-new-profiles.md","Order":5},{"Id":"167b5147-1374-4cd1-be3e-ac9780324842","Path":"choosing-new-export-options.md","Order":3},{"Id":"593cab1d-aaa3-472d-b24b-b01e84735d2d","Path":"instances-1.md","Order":4},{"Id":"b62bdff5-15f8-4318-90d2-dd520e648d48","Path":"exporting-opentype-variations-tt.md","Order":19},{"Id":"a9a770bd-a4b0-497d-b447-0e1ad488f40d","Path":"font-formats-1.md","Order":7},{"Id":"bc6fa350-5be6-43d1-a1a1-fe03f420b642","Path":"exporting-options-1.md","Order":12},{"Id":"fc817d17-6ae4-4c15-94ca-52e13e397dc9","Path":"exporting-masters-designspaceufo-opentype-variations.md","Order":16},{"Id":"11c117ff-a36c-461b-90f2-43fe08710183","Path":"exporting-mark-attachment.md","Order":15},{"Id":"63a11e97-4d57-4fc0-9478-114299e3622a","Path":"activatingdeactivating-profiles.md","Order":1},{"Id":"5392df6c-2270-4405-ab22-c2c92f4bbcb8","Path":"exporting-fonts-4.md","Order":13},{"Id":"db76e37d-4611-4c1a-80fc-b2e6f75602e2","Path":"exporting-opentype-ps.md","Order":18},{"Id":"11420e4f-5fe1-4fd2-8d77-ddb08e7bd932","Path":"font-content.md","Order":9},{"Id":"fed23142-fa99-43ab-b2ab-c111afd8643a","Path":"variable-tt.md","Order":31},{"Id":"5ed907f4-0eef-485d-bb81-7fa429aa2baf","Path":"designspace-ufo3.md","Order":24},{"Id":"2c2ea984-2c6e-406c-a7e6-010f4389c93e","Path":"exporting-open-contours-as-singlestroke-fonts-for-engravers-and-plotters.md","Order":17},{"Id":"f67da7b1-9a37-4888-91bf-e7913a556e25","Path":"gallery.md","Order":25},{"Id":"f24a7e69-0b4a-49ab-ab4e-f985e5e80c15","Path":"metrics-4.md","Order":29},{"Id":"1df1c186-6efc-4c2e-8684-da89961cceeb","Path":"easier-handling-of-export-profiles.md","Order":23},{"Id":"d20bf3ae-6fe2-4e0b-b0ff-e240a362c019","Path":"current-layer.md","Order":6},{"Id":"a7b84747-39fa-49ee-b39f-694301349688","Path":"additional-export-features-1.md","Order":28},{"Id":"2896d33c-7b90-4592-bc37-ded9dbd1aac3","Path":"color-web-fonts.md","Order":27},{"Id":"35ddb204-a803-4d70-805f-8147565d7c83","Path":"destination.md","Order":8},{"Id":"cea7e0d2-21af-4404-8281-f332501129a9","Path":"editing-profiles.md","Order":10},{"Id":"5b47c1b8-4ed9-4dbb-827e-41a52e0be9cf","Path":"opening-and-exporting-ufo.md","Order":30},{"Id":"2d2162c7-4b04-4530-9e86-0c3791bc21f5","Path":"features-4.md","Order":22},{"Id":"11614b66-e007-40ff-888f-9d7b053f3f44","Path":"example.md","Order":11},{"Id":"b73f3d5b-ff41-4531-b537-1f2f0930fa04","Path":"exporting-opentypecbdt-color-fonts.md","Order":20},{"Id":"7bafec37-fc30-4796-b27c-d5be21bda501","Path":"window-contents.md","Order":32},{"Id":"76f4641d-bd9c-4605-a5c8-a2921a083239","Path":"hyphens-in-glyph-names.md","Order":26}],"Id":"57ca5cf5-468a-426f-9a04-1f1b644e7e8f","Path":"export-profiles.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Export Profiles","Languages":[{"Code":"en","Title":"Export Profiles","Slug":"export-profiles","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c72f505f-1b41-4408-a723-474d0566afdb","Path":"new-syntax-for-axis-instances.md","Order":4},{"Id":"4be28c13-535f-4867-98c4-a8d5bf167e61","Path":"no-style-linking.md","Order":5},{"Id":"ad668b41-3f78-4407-b824-0bd74284904c","Path":"change-the-axis-range-and-define-nonlinear-mapping-between-design-and-user.md","Order":1},{"Id":"3f585aeb-4d43-435b-9cab-c4f1e5db4ecc","Path":"variations-in-font-info.md","Order":6},{"Id":"cef4c57c-7c04-48ec-9283-0b84f4a35c35","Path":"font-info-overview-copypaste-and-edit-info-in-a-multimaster-table.md","Order":3},{"Id":"c3ded9fc-6600-4071-a172-6994ce667f80","Path":"copypaste-font-info-between-fonts-and-masters.md","Order":2}],"Id":"30ef7a4c-1433-4ff7-998c-fa543fb291f5","Path":"font-info-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Font Info","Languages":[{"Code":"en","Title":"Font Info","Slug":"font-info-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"e5eb01c0-e038-42e1-bddb-c7f5abb60c6c","Path":"font-info-italic-angle.md","Order":2}],"Id":"be761c02-7413-4ccd-8138-5c50fc71aa88","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Font Info","Languages":[{"Code":"en","Title":"Font Info","Slug":"font-info","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b921168f-9008-42c6-ae06-745e4c8839d9","Path":"family-dimensions.md","Order":14},{"Id":"fc8b0bc8-9480-49ef-99fb-3fcbd49659e4","Path":"embedding-1.md","Order":13},{"Id":"afd1498d-cc08-40fb-bf3d-eebecbd14db6","Path":"font-dimensions.md","Order":16},{"Id":"16c171e1-8309-41c6-a2bc-4cbdcb15a0d8","Path":"caps-height.md","Order":29},{"Id":"97dc25ac-368a-4e6d-850d-8dc25a3b8926","Path":"attributes.md","Order":2},{"Id":"f9389051-1c57-406a-8b63-f13ca7218b51","Path":"example-1.md","Order":12},{"Id":"5cbf44d7-3092-42a7-8c05-31d17e87a7c6","Path":"legal.md","Order":22},{"Id":"01b09f00-d6d9-4616-bfcb-54aee867a930","Path":"safe-top-and-safe-bottom.md","Order":32},{"Id":"81859b1d-a4ba-4681-aa20-dbce97f29fd9","Path":"slope.md","Order":33},{"Id":"3098ab5d-103f-49c5-a3fd-c96070732485","Path":"axes-1.md","Order":36},{"Id":"15a21656-5e0c-47ea-a7b2-16b08b856826","Path":"curve-tension.md","Order":17},{"Id":"ec2fb053-e205-4d32-bee7-29fe6db6c1f9","Path":"font-info-dialog-box-1.md","Order":10},{"Id":"1420a894-e6cb-415f-b012-1505000c1912","Path":"creator.md","Order":18},{"Id":"ea401e86-0350-4b63-b062-c3365c462b12","Path":"unicode-ranges.md","Order":40},{"Id":"e1add242-38de-45ce-93ef-aac7332c4322","Path":"stems-2.md","Order":34},{"Id":"302e3d9c-5de0-4916-915e-59fb07aeabbf","Path":"master-properties.md","Order":7},{"Id":"5beacc29-a2db-4207-a368-f00da0541b6c","Path":"master-name.md","Order":8},{"Id":"d15202e1-b5ce-4afd-91fc-baa8fcc43aa2","Path":"units-per-em.md","Order":41},{"Id":"a5164150-61b9-427f-ab55-a98b5daff7ec","Path":"zones-1.md","Order":44},{"Id":"05df5871-819b-4796-98ef-a1915131250c","Path":"corner-tension.md","Order":19},{"Id":"9b6a3bff-7dea-41b4-8c1b-b3406815d3ff","Path":"uposition-and-uthickness.md","Order":39},{"Id":"914bfdfe-1852-433c-8e3c-6b4b3866d5e1","Path":"instances-2.md","Order":20},{"Id":"723eee9b-5efc-413d-89a0-3b9a03a1284e","Path":"italic-angle.md","Order":21},{"Id":"b167a4bb-f680-4aae-b973-84c6f9f8b56e","Path":"renaming-by-adding-a-suffix.md","Order":30},{"Id":"efa8b5fb-fa27-4cde-a922-e3e20fdccb9a","Path":"caret-offset-1.md","Order":25},{"Id":"7825b5f0-7007-4726-a536-efb5325bcd8a","Path":"style-link.md","Order":3},{"Id":"09ba36c7-22bf-41f3-a809-092acda85c2a","Path":"other-values.md","Order":27},{"Id":"8ceeb368-0065-4188-b02f-21d214a4af6b","Path":"postscript.md","Order":6},{"Id":"a2ea91ea-0e3b-4f1c-a47b-5f64ea6d0966","Path":"family-name.md","Order":11},{"Id":"74fdd5ae-3bba-4a67-a207-b5729d7f6fe6","Path":"codepages-1.md","Order":24},{"Id":"22a93602-fb96-4bf2-b198-bf13cea385cf","Path":"vendor-code-and-name.md","Order":42},{"Id":"45f495eb-5850-4f67-9013-0532cb1f96dc","Path":"xheight.md","Order":43},{"Id":"20456a21-4ffb-44c0-bc70-6b5716e8e3cb","Path":"descender.md","Order":15},{"Id":"9847677e-bd06-4ac7-99cb-0637b2316370","Path":"style-name.md","Order":1},{"Id":"6c69ffc1-d230-482f-a8c1-7d99ef3e6cb1","Path":"parameters-1.md","Order":28},{"Id":"87f7461c-c61e-44c7-a760-239dfa883e94","Path":"truetype-hinting-and-smoothing.md","Order":38},{"Id":"97f71933-782c-4f39-9688-d02ad4d2e02f","Path":"renaming-glyphs-3.md","Order":31},{"Id":"cf5116ea-be21-4a29-b2ec-af877f2795c6","Path":"line-gap.md","Order":23},{"Id":"b2debaca-c406-42fb-85de-fdb0284c1379","Path":"bbox-top-and-bbox-bottom.md","Order":35},{"Id":"f32090b3-da3a-4f06-91f6-2acd527dbcbd","Path":"build-names-button.md","Order":5},{"Id":"ccfeb1c5-fb3b-4d5b-8376-8c50c2488f3b","Path":"masters-2.md","Order":26},{"Id":"2d2db137-9308-4ee7-bdc4-5fdcf5f0a791","Path":"ascender.md","Order":37},{"Id":"e9984daf-e881-41f4-982f-6c2ffd844896","Path":"style-group.md","Order":4},{"Id":"f5a5394f-9c20-4148-b808-56aece81dd37","Path":"full-name.md","Order":9}],"Id":"9aa75c6a-7c56-4a23-a2cc-a1ea3e3302e6","Path":"font-naming.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Font Naming","Languages":[{"Code":"en","Title":"Font Naming","Slug":"font-naming","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"a89c2e26-00af-4038-8dbe-89e41329c8b6","Path":"export-font-as-enable-and-disable-instances.md","Order":1},{"Id":"0c88b67d-fbcf-4cc4-8a26-84d46c4b35f4","Path":"special-glyphs-null-and-cr.md","Order":5},{"Id":"eb57e83e-6a43-40cb-86c5-b18708d47167","Path":"tables-panel-define-custom-opentype-tables.md","Order":6},{"Id":"b8cde158-3dd3-457a-90e9-de742db90f47","Path":"opentype-symbol-fonts.md","Order":4},{"Id":"3ececd9d-963f-44cd-8c6f-b6a949010bc5","Path":"export-font-as-export-single-masters-or-instances-as-vfcvfj.md","Order":2},{"Id":"7edfca02-c031-4cd4-88e4-fd80738585a6","Path":"glyph-names-3.md","Order":3}],"Id":"74719037-fb7a-45aa-bc6d-aa98440912cb","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Support and exporting of OpenType fonts","Languages":[{"Code":"en","Title":"Support and exporting of OpenType fonts","Slug":"support-and-exporting-of-opentype-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9c130286-efc9-43e9-a16c-f63f6454671b","Path":"tracking-slant-stretch.md","Order":11},{"Id":"30fd8bdc-e99d-497a-b2d7-3630adad328c","Path":"preview-panel-sidebar-1.md","Order":8},{"Id":"bc342bed-97da-49e5-9c85-57ff3fe20d8c","Path":"preview-panel1-1.md","Order":9},{"Id":"befe0fc6-9569-445f-8b90-c7f9135ea87f","Path":"color-3.md","Order":4},{"Id":"8ea97c26-e971-477a-8f33-9aec38f2d74b","Path":"fill-outline-nodes.md","Order":7},{"Id":"7ecb318d-e6cf-4f43-a112-eaa2a747f04e","Path":"content-settings.md","Order":5},{"Id":"e70a3dcd-aee1-49e0-a8a3-29c6b07e2f49","Path":"current-glyph-placeholder.md","Order":1},{"Id":"d8a0d85f-ab28-4fac-8427-c05a6a1eface","Path":"align-and-flip-settings.md","Order":2},{"Id":"05707b40-4914-4b41-89a5-ed366fd7c6f1","Path":"export-preview-panel-content-to-pdf.md","Order":6},{"Id":"e29c5d95-984c-408e-922f-e3f14eb9be5c","Path":"show-names.md","Order":10},{"Id":"0efb529e-03be-4876-af46-f54d29957023","Path":"xray-view-blur.md","Order":12},{"Id":"b55fb3c6-6010-4455-9a3e-579f3e700bd7","Path":"apply-features.md","Order":3}],"Id":"5a184c2d-432b-4611-bc59-b1baacf523ba","Path":"preview-panel-2.md","Order":10,"CategoryType":1,"Icon":null,"Title":"Preview panel","Languages":[{"Code":"en","Title":"Preview panel","Slug":"preview-panel-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a03f2f60-60ee-4140-a4c1-8cb1503fe837","Path":"hinting-in-otf-1.md","Order":1},{"Id":"3bb134b6-c8ba-45b0-8113-931a1a9b88f8","Path":"color-fonts-1.md","Order":2},{"Id":"940b6f9c-db97-490f-bda8-19d009307af3","Path":"export1.md","Order":3},{"Id":"beb1a5f0-9e44-4600-8dba-ae1e2c0c63a9","Path":"font-info-slope-and-sorting-of-styles-in-font-menus.md","Order":4},{"Id":"780d0b7c-bdfc-47c1-8894-c6b633c9b2ed","Path":"bitmap-fonts-1.md","Order":5}],"Id":"0d74d8cb-afd4-4558-b42c-978542797b0a","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Export","Languages":[{"Code":"en","Title":"Export","Slug":"export-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2cd64149-2ade-4c64-a130-fe920d37c90e","Path":"metrics-linking-in-set-width-action.md","Order":2},{"Id":"4a65b9de-7e21-456e-af69-91be229ceabd","Path":"open-and-export.md","Order":3},{"Id":"2e17e383-481a-4fca-9f42-a21df9dde705","Path":"stat-table-in-variable-opentype-fonts.md","Order":4},{"Id":"c1a8652a-d59d-4a4a-85df-ebf8c0ab7e82","Path":"implicit-weight-andor-width-axis-location.md","Order":1}],"Id":"54b25384-cd36-44dd-8116-22fdf27d3b98","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Exporting Fonts","Languages":[{"Code":"en","Title":"Exporting Fonts","Slug":"exporting-fonts-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"6fa08b25-2c50-4d26-a005-51d5eecc39af","Path":"export-rr.md","Order":3},{"Id":"49c3a14d-ac6e-4fe6-9ac0-8231544e2f77","Path":"glyphs-1.md","Order":6},{"Id":"674bd430-3425-479e-a2d9-8c9aaa16955e","Path":"hints-3.md","Order":7},{"Id":"517fe3ab-c4c8-4825-820c-791168d33cbc","Path":"kerning-and-opentype-layout-features.md","Order":8},{"Id":"6d7cadc4-23a7-4dbc-b900-71b69906579e","Path":"font-info-8.md","Order":5},{"Id":"0ef70ff8-374b-42dc-bd50-ade9f447ba2a","Path":"character-set.md","Order":1}],"Id":"3eed6a48-9160-4680-8b92-895cf3f5fcb0","Path":"before-you-export.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Before You Export","Languages":[{"Code":"en","Title":"Before You Export","Slug":"before-you-export","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"24fd803c-4a6d-4dba-b63c-2d8c9a232e9a","Path":"exporting-fonts1.md","Order":2},{"Id":"507c497a-3bf5-475e-84ff-bf17219da05d","Path":"saving-as-vfb.md","Order":1},{"Id":"b7609184-fff2-498c-bf3b-e3c9dc5adfcb","Path":"glyph-ordering-in-ufo.md","Order":4}],"Id":"9b6ebd74-0888-4eed-b0d8-a3e4e08a5db7","Path":"exporting-fonts.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Exporting Fonts","Languages":[{"Code":"en","Title":"Exporting Fonts","Slug":"exporting-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b8ea0b39-9f4d-4154-8d74-470c21a48b97","Path":"build-style-names.md","Order":1},{"Id":"5922c783-dc40-4532-9a7d-2b8d93722949","Path":"families-from-postscript-name.md","Order":3},{"Id":"57655b40-fe9c-4d53-8c60-93d791bb1afd","Path":"build-styling-group-names.md","Order":2},{"Id":"3ffdad22-a1ad-48ba-99c6-282d7b4e2bc8","Path":"merge-families.md","Order":6},{"Id":"d1eacef6-4e11-45f3-96c6-1dcf0dfb22b3","Path":"families-from-styling-group.md","Order":4},{"Id":"f0665839-6a03-4146-9599-30a80c7a77dc","Path":"separate-families.md","Order":8},{"Id":"4b72bfd1-e9fd-4c2b-8e36-cb5809aa0f9e","Path":"optimal-styling.md","Order":7},{"Id":"29daf763-493b-473f-90f8-973ad4d9b238","Path":"separate-styling.md","Order":9},{"Id":"fb9f22a7-edae-4a56-8ff7-29c4b3e5123b","Path":"italic-styling.md","Order":5}],"Id":"0d05c921-2899-4429-bf83-5446e62e0f17","Path":"organizing-font-families.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Organizing Font Families","Languages":[{"Code":"en","Title":"Organizing Font Families","Slug":"organizing-font-families","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"82ce087f-ec96-48f5-af5d-6e8341af885b","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Font families","Languages":[{"Code":"en","Title":"Font families","Slug":"font-families","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"10a2915c-79fa-41af-9c9a-3c01b1e790c1","Path":"defining-axis-instances.md","Order":2},{"Id":"74d36b05-595a-40bf-878e-8d9f15323b73","Path":"adding-a-predefined-instance.md","Order":1},{"Id":"2fd2e2d4-7849-4022-aadd-2c2badae14d4","Path":"removing-a-predefined-instance.md","Order":4},{"Id":"eae43f27-0601-4cf7-a75f-bf992d8c6868","Path":"working-with-instances.md","Order":5},{"Id":"9c9f9fa7-651d-4193-8e2e-b0924cd95173","Path":"editing-predefined-instance-properties.md","Order":3}],"Id":"d7e5b649-5906-4bf1-9921-bae9dff5716c","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Instances","Languages":[{"Code":"en","Title":"Instances","Slug":"instances","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"14a594c3-1ab7-4adb-90f6-9ec81b4c7e87","Path":"add-layers-and-masters1.md","Order":10},{"Id":"9940948b-bc39-452f-aab2-9e92227a5d77","Path":"adding-layers-and-masters.md","Order":2},{"Id":"314a3f16-f8bd-470a-8b3e-d7dbc22ec6f3","Path":"add-layers-and-masters.md","Order":1},{"Id":"869a1b6c-87d9-4ace-8db5-3ef9ec30966c","Path":"current-master-or-instance.md","Order":5},{"Id":"1dc2ed40-1c9e-4268-a594-93feb796bbe0","Path":"layers-masters-panel-1.md","Order":8},{"Id":"46a06009-0e49-43d1-9a49-90ce3a0f1406","Path":"removing-a-font-master.md","Order":15},{"Id":"11c65732-cfe0-4784-b90c-6ac9d63b2d3f","Path":"master-switching-on-empty-glyph-cells.md","Order":9},{"Id":"7af44d56-2629-405f-9242-815ccd8d9eca","Path":"switching-masters.md","Order":19},{"Id":"25dc239e-ff53-4cfb-b321-9619b45f20ab","Path":"rename-masters.md","Order":16},{"Id":"b4c1a2f9-6e68-467e-8b72-2869c0f10b31","Path":"working-with-masters.md","Order":20},{"Id":"d1c37ddf-d3ee-41f0-966c-c0f8ebf3e468","Path":"sparse-masters-intermediate-masters.md","Order":18},{"Id":"99b5ccce-eea9-430a-9e6a-db0a91d9b357","Path":"matchmaker1.md","Order":12},{"Id":"80d5b03c-61d0-4d67-bafb-1a018ae665ee","Path":"editing-font-master-properties.md","Order":6},{"Id":"661e8048-83c1-4f07-9757-3c66009825f4","Path":"renaming-font-masters-and-their-layers.md","Order":17},{"Id":"83512631-884f-4ce5-bcd3-f4889b7f2be1","Path":"matchmaker.md","Order":13},{"Id":"2c781efe-0c59-4755-b3c9-88880241249f","Path":"match-masters.md","Order":11},{"Id":"9270dc39-d0b5-4760-b993-fb052714c447","Path":"copy-to-masters.md","Order":4},{"Id":"dccbf07b-e410-461a-95f3-078d63b454fd","Path":"multiple-masters.md","Order":14},{"Id":"80d9ccc4-96d0-484e-844a-5eb35ae3c2a9","Path":"adding-a-font-master.md","Order":3},{"Id":"9e40ac09-67c8-41de-bf82-6ab9d50de777","Path":"font-info-adding-font-masters-improved.md","Order":7}],"Id":"1e4c3fb7-424f-448a-ae6f-aa1cfa73ca7e","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Masters","Languages":[{"Code":"en","Title":"Masters","Slug":"masters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2b5ea6fa-5a7c-42e3-abd8-dda40eaa512e","Path":"notes-about-conditional-glyph-substitution.md","Order":2},{"Id":"6e91254d-9573-4915-a157-2e3169daef0a","Path":"conditional-glyphs-rvrn-rules.md","Order":1},{"Id":"4ef6a6d7-1995-4b3c-bc61-23c3491e44e0","Path":"tilde-tags.md","Order":3}],"Id":"5205904d-cbc5-4c75-8ea2-e2c68b03efdf","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Conditional Glyphs","Languages":[{"Code":"en","Title":"Conditional Glyphs","Slug":"conditional-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e7ca0f9a-97ca-489f-9864-b8eddb63da61","Path":"variation1.md","Order":14},{"Id":"a4baa4c4-d6d6-4d74-b743-d8561f05c5e3","Path":"interpolation-of-named-elements.md","Order":6},{"Id":"4b236e71-06a9-4fc7-9f3b-50804578faa4","Path":"style-phrase.md","Order":12},{"Id":"8ad42b26-f2ac-4bb0-b855-8434733eadf6","Path":"match-when-editing-1.md","Order":8},{"Id":"ce0509fb-c7da-40bb-9086-99be209b3557","Path":"adding-dynamic-variation-as-font-master.md","Order":2},{"Id":"00b9a713-a9a0-47e3-a5e2-e952d145476e","Path":"variations-panel-4.md","Order":15},{"Id":"1cdef23b-61ed-4bcd-8450-7528df769b2e","Path":"nonmatching-glyphs-in-font-window-sidebar.md","Order":9},{"Id":"124aca1e-c62a-4622-9e32-928f71d0853a","Path":"add-variation.md","Order":1},{"Id":"885ad672-47dc-4fc9-b50f-3b0b25484a4c","Path":"interpolation-steps.md","Order":7},{"Id":"5d15beb3-3296-48f1-814b-9abf60afb01d","Path":"notes.md","Order":10},{"Id":"ec0370de-e563-4d14-92c8-cf8de7063b32","Path":"variation-panel.md","Order":13},{"Id":"6ad0188a-22c2-4a23-9c2b-31b7ecfe9ba5","Path":"working-with-font-variations-1.md","Order":16},{"Id":"0230e111-af83-405f-8a7b-6594e8adacf6","Path":"importing-fonts.md","Order":5},{"Id":"ec7a86c1-d679-46f8-93a5-8dcaeec7bc4e","Path":"reinterpolate.md","Order":11},{"Id":"e301aaa2-2f65-40cd-a274-e7f8b31176a4","Path":"creating-a-variable-font-example-1.md","Order":4},{"Id":"a70cee2d-55a7-4173-bd8a-57459e47b5f4","Path":"automatic-master-location-on-the-width-and-weight-axes.md","Order":3}],"Id":"f98a682c-5fe1-45bf-a4f8-18c04c40253d","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Variation","Languages":[{"Code":"en","Title":"Variation","Slug":"variation-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8fda3293-cb20-410f-aa27-021e2902fcd5","Path":"userlocation.md","Order":13},{"Id":"0def4a51-505a-453d-9456-eb96df30a38f","Path":"designlocation.md","Order":9},{"Id":"2a89cad8-18da-44bb-9e55-c8ca119ad446","Path":"axis-graph2.md","Order":4},{"Id":"71ca4569-1b63-429e-b436-0f7677636149","Path":"implicit-weight-and-width-axes.md","Order":11},{"Id":"79c83d54-cf5d-4690-9796-1ef42e0d3ab1","Path":"axis-graph.md","Order":6},{"Id":"c60ed6a5-d20b-43a0-80d9-4251a8a86207","Path":"axis-instances-from-masters.md","Order":1},{"Id":"4ade9c17-dd93-4eec-9e5f-f40d95a17798","Path":"adding-an-axis.md","Order":7},{"Id":"80f41fdb-d582-46e1-be7e-29497b43a90b","Path":"removing-an-axis.md","Order":12},{"Id":"964192f8-8a8b-4616-8411-c351ccf11b34","Path":"axis-graph3.md","Order":5},{"Id":"88e9b42c-8e27-4321-a05b-341600748a32","Path":"axis-graph1.md","Order":3},{"Id":"938dda21-897f-4739-833e-445b24dfb225","Path":"axis-instances-from-masters1.md","Order":8},{"Id":"67dcd31f-f329-41db-a262-9d114ef5dd7a","Path":"editing-axis-properties.md","Order":10},{"Id":"dd14c397-dd86-4a70-8d53-f1e037facf1d","Path":"anisotropic-interpolation-separate-axis-locations-for-xy-coordinates.md","Order":2}],"Id":"0485ac34-7a73-4679-a98d-b6c95225d85b","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Axes","Languages":[{"Code":"en","Title":"Axes","Slug":"axes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"86edc48c-132c-4842-80d2-975845e0d45c","Path":"preview-variations.md","Order":1},{"Id":"db927689-abf8-4e0a-a608-4f44191a0fc9","Path":"preview-of-multiple-masters.md","Order":2},{"Id":"85ccc388-8697-4338-bd9b-d65dea81a0af","Path":"previewing-instances-and-interpolation-results.md","Order":3},{"Id":"2f5d41dd-78af-4728-aa2c-78472a8bb235","Path":"preview-panel-content-masters.md","Order":5},{"Id":"ae26387d-b22c-4fb1-b6f7-7b91b4db4d84","Path":"crossmaster-components.md","Order":6},{"Id":"89562e32-176d-4fd2-b666-0c3cdf0060ba","Path":"preview-panel-content-masters1.md","Order":7},{"Id":"5d26ad01-e4a8-4488-bc5d-b7189a3b7f08","Path":"preview-variations1.md","Order":4}],"Id":"59d3cd54-61dd-43ad-a679-6811c5f88f90","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Preview","Languages":[{"Code":"en","Title":"Preview","Slug":"preview-2","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"77491e20-111b-42e0-a0ff-1399c9d931cc","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Editing VF","Languages":[{"Code":"en","Title":"Editing VF","Slug":"editing-vf","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"da23dc0b-2d6b-4ed1-8968-6e7dcb3538d3","Path":"using-the-layer-preview-color.md","Order":4},{"Id":"13c65c53-91db-42f4-b7ea-97727e85818d","Path":"faster-interpolation.md","Order":3},{"Id":"d4cd7962-6943-42d6-92a8-60b373197a5c","Path":"axis-user-range.md","Order":5},{"Id":"ec5133ab-7805-4070-a119-8ff53962d1b5","Path":"variations-panel-3.md","Order":6},{"Id":"43db86ea-4106-44c5-b9d5-abc417002278","Path":"viewing-the-dynamic-instance.md","Order":7}],"Id":"b4647ded-1872-45d9-8360-84930ab13c62","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Variable Fonts","Languages":[{"Code":"en","Title":"Variable Fonts","Slug":"variable-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b7055a90-6a96-4d8d-b0ca-9427bd0f75de","Path":"welcome-to-fontlab.md","Order":1}],"Id":"f40b666a-4b20-4c1d-adc0-8d27381facb0","Path":"welcome-dialog-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Welcome dialog","Languages":[{"Code":"en","Title":"Welcome dialog","Slug":"welcome-dialog-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0cf2c046-4622-4ae8-b1bb-97ba5107b9ca","Path":"generate-glyphs-custom.md","Order":2},{"Id":"8c836c6b-1ef6-4054-a53c-f05a9d157ac8","Path":"generate-glyphs-characters.md","Order":1},{"Id":"4c849506-5270-41d6-b085-390b2a4933b5","Path":"generate-glyphs-variants.md","Order":5},{"Id":"17f95cfe-ad0d-40fd-bacf-4b901e183fb9","Path":"generate-glyphs-precomposed.md","Order":4},{"Id":"19e44908-515d-4811-b9dd-a8170e41b5d8","Path":"generate-glyphs-ligature.md","Order":3}],"Id":"7c2d6dc9-7730-4b50-98be-c7b3b48abc18","Path":"generate-glyphs.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Generate Glyphs","Languages":[{"Code":"en","Title":"Generate Glyphs","Slug":"generate-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1db5e063-4a60-4650-ad7e-a32b18bbee25","Path":"add-layer.md","Order":3},{"Id":"4618e284-eb76-481b-8b01-ff41112d017b","Path":"add-suffix-to-name.md","Order":4},{"Id":"874fd495-61d0-48a3-96ed-27c8e9bc56d5","Path":"find-glyphs-1.md","Order":7},{"Id":"f81d7d3f-4c95-4813-bbe8-141f5f5067b7","Path":"generate-instance.md","Order":9},{"Id":"738ce222-e371-4678-92fc-abfa32f3298a","Path":"workspaces-4.md","Order":13},{"Id":"5c8512ed-5800-4cb9-a484-ece7dbca4647","Path":"rename-glyph.md","Order":12},{"Id":"afadef43-2da7-4138-9c31-305ad8181994","Path":"export-fonts.md","Order":6},{"Id":"7a3fc5ab-f08c-4688-ac2f-bfd5936fb166","Path":"find-outline.md","Order":8},{"Id":"b68490a3-bf0e-4e37-bfc9-ccb97ab9cef2","Path":"overlay-fonts-1.md","Order":10},{"Id":"63239b5d-66e1-440d-8049-d18c62b87274","Path":"commands-1.md","Order":5},{"Id":"1ca3650d-f0a6-41e1-bd5f-7b9436d59e5c","Path":"profiles-2.md","Order":11},{"Id":"93803dea-8369-41f2-bd02-8688f278a9fa","Path":"add-glyphs-1.md","Order":2},{"Id":"91938f17-71d7-4174-9f30-bbb15a7c61c1","Path":"add-element-reference.md","Order":1}],"Id":"19d3a5d8-7397-40ef-85f4-aff4d78f30b2","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Other dialogs","Languages":[{"Code":"en","Title":"Other dialogs","Slug":"other-dialogs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d89a6d08-fed3-4cb7-8ee1-0cb432804516","Path":"font-info1.md","Order":14},{"Id":"70e58e9b-4bcf-454c-9d70-3d4680413971","Path":"font-info-parameters-1.md","Order":10},{"Id":"04730fd6-59e0-4040-88e5-16dc469428d0","Path":"font-info-other-values.md","Order":9},{"Id":"fbe0729d-50c2-4bd8-92a5-94d7dbb48589","Path":"other-values-page.md","Order":15},{"Id":"4318ff24-4a01-4154-aed4-2f68fb00aff1","Path":"font-info-names.md","Order":7},{"Id":"9456fa09-ab3a-4f10-a2d7-0993d1bd041c","Path":"font-info-note.md","Order":8},{"Id":"3adadd3a-d65c-4f0d-86b1-33f4f2dfc3f8","Path":"font-info-zones.md","Order":13},{"Id":"fc153b50-7c57-4f22-ac62-7c9887bcd507","Path":"font-info-family-dimensions.md","Order":3},{"Id":"ab1f65c8-12e8-446b-9f76-1dbf6169144b","Path":"font-info-legal.md","Order":6},{"Id":"8a712527-b579-4183-8d7b-9f93bdd6b423","Path":"font-info-stems.md","Order":11},{"Id":"fcae58c1-8c05-430a-aaea-0eb056399870","Path":"font-info-creator.md","Order":2},{"Id":"23990ba1-a9af-4a86-bd64-3b83f83841e7","Path":"font-info-codepages.md","Order":1},{"Id":"1b4b376e-35ba-41ff-a740-efabfda045ad","Path":"font-info-guides.md","Order":5},{"Id":"1516fd0e-06c6-4951-8ae2-5701b5be2cb1","Path":"font-info-font-dimensions.md","Order":4},{"Id":"848ed129-2069-42bd-8ece-c7f19cad66fe","Path":"font-info-unicode-ranges.md","Order":12}],"Id":"6c6f084d-3405-428d-96c9-e3b8cb62bf3c","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Font Info","Languages":[{"Code":"en","Title":"Font Info","Slug":"font-info-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0a51ad18-06db-4401-8973-2b1f717074a7","Path":"font-info-masters.md","Order":3},{"Id":"0a1d1aa4-ab4f-4967-bccc-fd3372e2316a","Path":"font-info-instances.md","Order":2},{"Id":"07da5ea9-b18f-4be8-ba1c-f99004698d0c","Path":"font-info-axes.md","Order":1}],"Id":"13fed40a-54a3-41e4-97b5-e5af2556f887","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Font Info for Masters","Languages":[{"Code":"en","Title":"Font Info for Masters","Slug":"font-info-for-masters","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"63fc59f9-fd0c-4716-8a33-f96c0139726c","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Dialogs","Languages":[{"Code":"en","Title":"Dialogs","Slug":"dialogs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"feb19ce5-7637-4c90-b263-2794fbdd7468","Path":"preview-panel1-2.md","Order":1}],"Id":"48c3616e-e2cb-422e-b7a0-4708e1c864f3","Path":"preview-panel-3.md","Order":26,"CategoryType":1,"Icon":null,"Title":"Preview Panel","Languages":[{"Code":"en","Title":"Preview Panel","Slug":"preview-panel-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a2efc53c-b8c9-4236-8818-98a9a2031187","Path":"history-panel1.md","Order":1}],"Id":"0976ddbc-6534-4e06-b067-3b901d64a55e","Path":"history-panel.md","Order":23,"CategoryType":1,"Icon":null,"Title":"History Panel","Languages":[{"Code":"en","Title":"History Panel","Slug":"history-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"59c550f5-b96e-4bf0-8b85-c861f3ca7bdf","Path":"tables-panel1.md","Order":1}],"Id":"c8e4d6a7-44cc-47a5-813e-dc81948e38c3","Path":"tables-panel.md","Order":31,"CategoryType":1,"Icon":null,"Title":"Tables Panel","Languages":[{"Code":"en","Title":"Tables Panel","Slug":"tables-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3de1c36d-ca73-4185-ba8b-ddf3542590eb","Path":"swatches-panel1.md","Order":1}],"Id":"c547c677-423c-4ebb-a43d-2e9d871faffa","Path":"swatches-panel.md","Order":30,"CategoryType":1,"Icon":null,"Title":"Swatches Panel","Languages":[{"Code":"en","Title":"Swatches Panel","Slug":"swatches-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"797e50ed-6f93-4c1c-8957-419ca7ff21c6","Path":"features-panel1.md","Order":1}],"Id":"4e977bcc-1345-4d49-9d82-75ca9722e505","Path":"features-panel-1.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Features Panel","Languages":[{"Code":"en","Title":"Features Panel","Slug":"features-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"67b2f6d9-a578-4b51-9ef2-d8957739a469","Path":"lookups-panel1.md","Order":1}],"Id":"2c6f7b41-0db0-46d1-adb7-ad07a3450995","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Lookups Panel","Languages":[{"Code":"en","Title":"Lookups Panel","Slug":"lookups-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"db85e30d-ddaf-4932-9158-26276617a576","Path":"font-map-panel1.md","Order":1}],"Id":"5f3400a9-a264-4a20-9bf4-d4c48a0fc2bc","Path":"font-map-panel.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Font Map Panel","Languages":[{"Code":"en","Title":"Font Map Panel","Slug":"font-map-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"635876c6-6bf4-46a3-b401-aeae56e6312a","Path":"anchors-and-pins-panel2.md","Order":2},{"Id":"9d8e15a3-34f5-4ae0-bf36-c16b334426b4","Path":"anchors-and-pins-panel1.md","Order":1}],"Id":"7c0a09fb-27e5-4c54-a81f-712f990eee81","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Anchors and Pins panel","Languages":[{"Code":"en","Title":"Anchors and Pins panel","Slug":"anchors-and-pins-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d4efb150-7be3-4902-a32b-41374edda9a7","Path":"font-info-panel1.md","Order":1},{"Id":"01bf3064-6845-4a51-9ba0-a2a4d37019ad","Path":"font-info-panel2.md","Order":2}],"Id":"f7d114bf-1e2c-4623-85ef-dfc04360a232","Path":"font-info-panel.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Font Info Panel","Languages":[{"Code":"en","Title":"Font Info Panel","Slug":"font-info-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ccfafca2-5439-41d1-b56b-d736f555f624","Path":"custom-glyph-recipes.md","Order":1},{"Id":"6cff3b42-faf4-483c-aeaa-2b5ba7a73309","Path":"layers-and-masters-panel1.md","Order":2}],"Id":"d8be397e-c79d-4ad5-9d51-16a24703b674","Path":"layers-and-masters-panel.md","Order":16,"CategoryType":1,"Icon":null,"Title":"Layers and Masters Panel","Languages":[{"Code":"en","Title":"Layers and Masters Panel","Slug":"layers-and-masters-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c5885a38-a895-4893-9078-0b0e8ef18c8d","Path":"variations-panel1.md","Order":1}],"Id":"4806e684-968f-461f-960e-f7bce866209b","Path":"variations-panel-1.md","Order":33,"CategoryType":1,"Icon":null,"Title":"Variations Panel","Languages":[{"Code":"en","Title":"Variations Panel","Slug":"variations-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2c650ba8-a464-4542-8342-b25660b8d2ca","Path":"image-panel1.md","Order":1}],"Id":"3b405bb2-c280-4649-b198-335ca93d7006","Path":"image-panel.md","Order":14,"CategoryType":1,"Icon":null,"Title":"Image Panel","Languages":[{"Code":"en","Title":"Image Panel","Slug":"image-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3a56dd8c-6168-46ed-a3ca-f39b3d59698e","Path":"element-properties.md","Order":1},{"Id":"db1980c0-916d-4323-a8f9-3d8e9aff2157","Path":"element-name.md","Order":2},{"Id":"f743bea5-6ab1-411a-b533-1fac87527692","Path":"elements-panel1.md","Order":3}],"Id":"31b5f494-ea1a-4bc2-989e-6e7f711d6e4d","Path":"elements-panel-1.md","Order":3,"CategoryType":1,"Icon":null,"Title":"Elements Panel","Languages":[{"Code":"en","Title":"Elements Panel","Slug":"elements-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c2cd7033-76ed-458b-8d6e-955de4471a05","Path":"output-panel1.md","Order":1}],"Id":"1182d48a-0480-470a-bf98-8f995a791c14","Path":"output-panel-1.md","Order":34,"CategoryType":1,"Icon":null,"Title":"Output Panel","Languages":[{"Code":"en","Title":"Output Panel","Slug":"output-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"60f3fa04-c2aa-464a-9cff-67109d24d50d","Path":"stroke-panel1.md","Order":1}],"Id":"2240ea99-6120-444e-906b-707a85f54346","Path":"stroke-panel-1.md","Order":29,"CategoryType":1,"Icon":null,"Title":"Stroke Panel","Languages":[{"Code":"en","Title":"Stroke Panel","Slug":"stroke-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"886b75da-f42a-4ef9-97e5-c282e8dc38e5","Path":"scripting-panel1.md","Order":1}],"Id":"2d8975db-2e90-4de1-ba3c-99661da456ad","Path":"scripting-panel-1.md","Order":27,"CategoryType":1,"Icon":null,"Title":"Scripting Panel","Languages":[{"Code":"en","Title":"Scripting Panel","Slug":"scripting-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e45674cf-908b-4d90-8960-a8b58eff8786","Path":"metrics-and-kerning-3.md","Order":1}],"Id":"1426e826-91b8-4b86-8bc8-3b4a7e2cee06","Path":"view-panel.md","Order":21,"CategoryType":1,"Icon":null,"Title":"View Panel","Languages":[{"Code":"en","Title":"View Panel","Slug":"view-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d7e34e16-68e3-43e5-9b34-5b4a1bc6d905","Path":"gallery-panel1-1.md","Order":1}],"Id":"2b1cddf5-67f2-4ab8-8673-e5aa33a36865","Path":"gallery-panel-1.md","Order":9,"CategoryType":1,"Icon":null,"Title":"Gallery Panel","Languages":[{"Code":"en","Title":"Gallery Panel","Slug":"gallery-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5b6de0bc-cf42-46a8-98ea-d6807df6b793","Path":"transform-panel1.md","Order":1}],"Id":"dbee509e-1c83-4764-bf63-d26622c8d285","Path":"transform-panel-2.md","Order":32,"CategoryType":1,"Icon":null,"Title":"Transform Panel","Languages":[{"Code":"en","Title":"Transform Panel","Slug":"transform-panel-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6e178f76-432a-40f6-bc5d-42436846b939","Path":"brush-panel1.md","Order":1}],"Id":"fe4e7e88-684e-4b2a-9131-1577ffcc137e","Path":"brush-panel-1.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Brush Panel","Languages":[{"Code":"en","Title":"Brush Panel","Slug":"brush-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"57b593c4-31f2-4912-a017-5e1e5c059721","Path":"pairs-and-phrases-panel1.md","Order":1}],"Id":"26604fac-a2ee-4f30-8345-0a1e7f2018d6","Path":"pairs-and-phrases-panel.md","Order":25,"CategoryType":1,"Icon":null,"Title":"Pairs and Phrases Panel","Languages":[{"Code":"en","Title":"Pairs and Phrases Panel","Slug":"pairs-and-phrases-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5066bd8d-9783-4a69-b1b7-0708e1ef8851","Path":"measurements-panel1.md","Order":1}],"Id":"e7b773dc-3a87-424f-8b31-b789b6aaf09a","Path":"measurements-panel-1.md","Order":18,"CategoryType":1,"Icon":null,"Title":"Measurements Panel","Languages":[{"Code":"en","Title":"Measurements Panel","Slug":"measurements-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"abdc1118-f6a5-4e45-af42-3a6a944c20b8","Path":"some51.md","Order":1}],"Id":"14ffaecc-d365-4b6b-84b6-0aff1bb8f9f4","Path":"fonts-panel-1.md","Order":8,"CategoryType":1,"Icon":null,"Title":"Fonts Panel","Languages":[{"Code":"en","Title":"Fonts Panel","Slug":"fonts-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f9bc011f-4b64-48a0-84a5-793aee34d697","Path":"hidden-panels.md","Order":1},{"Id":"1ee2229f-05e3-4a3a-9560-573cf8a52e55","Path":"list-of-panels.md","Order":2},{"Id":"dee050c5-b44f-4c33-ae5a-34ccaaab0d7c","Path":"panel-groups.md","Order":3}],"Id":"fc31300b-856a-4091-b0c8-169c428a13cd","Path":"general-information.md","Order":2,"CategoryType":1,"Icon":null,"Title":"General information","Languages":[{"Code":"en","Title":"General information","Slug":"general-information","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a6743c4c-20d6-4bff-a58b-53fc1a8bb958","Path":"guide-panel.md","Order":1}],"Id":"db799f41-7a71-4a06-906a-aea4d196421a","Path":"guideline-panel.md","Order":24,"CategoryType":1,"Icon":null,"Title":"Guideline Panel","Languages":[{"Code":"en","Title":"Guideline Panel","Slug":"guideline-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b8a53f26-171f-4542-85b1-cf81842e114d","Path":"color-panel1.md","Order":1}],"Id":"9f008c9a-cd66-424c-a1c2-6ba4fa4d2f21","Path":"color-panel.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Color Panel","Languages":[{"Code":"en","Title":"Color Panel","Slug":"color-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"113719b9-5b46-42cb-bc7b-f9a778d90bd3","Path":"source-panel1.md","Order":1}],"Id":"4dde645d-cd16-4734-a178-875304dd6995","Path":"source-panel.md","Order":28,"CategoryType":1,"Icon":null,"Title":"Source Panel","Languages":[{"Code":"en","Title":"Source Panel","Slug":"source-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"76ff710f-ea02-49dc-978d-95d0785b6506","Path":"panels-list1.md","Order":1}],"Id":"b52f8f40-0260-4753-b32a-d52ea4b1748a","Path":"panels-list.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Panels List","Languages":[{"Code":"en","Title":"Panels List","Slug":"panels-list","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"43d799a6-74f2-4d7c-8c43-65a5657fd13f","Path":"glyph-panel1.md","Order":1}],"Id":"ebc7f7ea-dc69-4a05-a8cd-bcfcdf2abc73","Path":"glyph-panel.md","Order":22,"CategoryType":1,"Icon":null,"Title":"Glyph Panel","Languages":[{"Code":"en","Title":"Glyph Panel","Slug":"glyph-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"66bb3896-f19b-450b-893e-6f24b4fcee03","Path":"fontaudit-panel1.md","Order":1}],"Id":"f1353223-99d5-4db2-8f16-95beeadbcaec","Path":"fontaudit-panel.md","Order":10,"CategoryType":1,"Icon":null,"Title":"FontAudit Panel","Languages":[{"Code":"en","Title":"FontAudit Panel","Slug":"fontaudit-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c25fa797-ddb5-431f-b361-faa2d29dd1cc","Path":"kerning-panel1.md","Order":1}],"Id":"01433eaf-87c8-4d02-9c21-31e1a4c0168c","Path":"kerning-panel.md","Order":15,"CategoryType":1,"Icon":null,"Title":"Kerning Panel","Languages":[{"Code":"en","Title":"Kerning Panel","Slug":"kerning-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cc0acc3e-164f-45ba-b253-a45cfe316cc0","Path":"metrics-panel1.md","Order":1}],"Id":"09246d1c-ab82-4304-b05e-d958648dff12","Path":"metrics-panel.md","Order":19,"CategoryType":1,"Icon":null,"Title":"Metrics Panel","Languages":[{"Code":"en","Title":"Metrics Panel","Slug":"metrics-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"01fae3a9-d270-4523-a4f7-d32d646cbb66","Path":"clean-up-selected-classes.md","Order":2},{"Id":"6fa76cf4-cd10-4774-9326-32e1dbc607bb","Path":"view-modes-1.md","Order":17},{"Id":"d7242d4f-9d52-4bbc-be6c-458c2bf7c453","Path":"table-area-1.md","Order":16},{"Id":"aae69e09-08b9-46e3-884f-76687cdbda2f","Path":"marking-classes.md","Order":9},{"Id":"44d57a99-fbe8-447e-b10f-169a094c2560","Path":"importing-classes.md","Order":6},{"Id":"d91d7977-95f1-47f6-9b2c-ef58a4546f95","Path":"modifying-classes-or-tags.md","Order":11},{"Id":"41950063-2a08-4c62-9653-94ab71f8b1b0","Path":"preview-area.md","Order":12},{"Id":"ee6f801e-f3a3-4377-9d08-726b2d2f66eb","Path":"status-bar-2.md","Order":15},{"Id":"0b6a64aa-4564-4d3a-b197-6e9e79e2c0bc","Path":"sorting-classes.md","Order":14},{"Id":"e162acc4-250a-42de-9470-f1bf7280b942","Path":"removing-classes-and-tag-groups.md","Order":13},{"Id":"fade5b9c-43c6-4b2e-8ccf-221813bd116d","Path":"generating-kerning-classes-automatically.md","Order":5},{"Id":"60dc4c07-8574-46a1-91c2-bb7fe6390bd3","Path":"defining-a-new-class-or-tag.md","Order":4},{"Id":"93295e49-cfbc-4cd1-afae-29249b139e15","Path":"list-sidebar.md","Order":7},{"Id":"4aad5066-797a-4d6b-872a-90d5f14ae160","Path":"local-toolbar.md","Order":8},{"Id":"f9b0d94c-09b6-4bf1-b2f0-41d8daff76d0","Path":"classes-panel1.md","Order":1},{"Id":"56b60d09-638a-4f6c-a72d-d91afad6397f","Path":"merging-classes.md","Order":10},{"Id":"f0035098-fb31-4fea-9c1a-7f334d9d6529","Path":"copying-classes.md","Order":3}],"Id":"00965c8f-a752-48a9-9d52-106ceb36e8ea","Path":"classes-panel-1.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Classes Panel","Languages":[{"Code":"en","Title":"Classes Panel","Slug":"classes-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9989dda5-97c6-4baf-bdff-dd337eada5a2","Path":"node-panel1.md","Order":1}],"Id":"b7f09de7-4167-43ae-af8f-85ba7a8d39c3","Path":"node-panel.md","Order":20,"CategoryType":1,"Icon":null,"Title":"Node Panel","Languages":[{"Code":"en","Title":"Node Panel","Slug":"node-panel","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7290dcc0-ed59-4794-bfd4-ad29df9c8b34","Path":"view-panel1-1.md","Order":1},{"Id":"cfdfe35b-0e0f-4406-b778-80aaa4e84b6f","Path":"view-panel-4.md","Order":2}],"Id":"fd8b4108-1650-40c2-97b5-3bb1d0b367c6","Path":null,"Order":35,"CategoryType":0,"Icon":null,"Title":"View Panel-1","Languages":[{"Code":"en","Title":"View Panel-1","Slug":"view-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"769c748a-46ee-4d77-9907-0dd18e2bd9db","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Panels","Languages":[{"Code":"en","Title":"Panels","Slug":"panels-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7188d601-e3d3-43d7-89db-0300bbc0ad6e","Path":"indicators.md","Order":9},{"Id":"a53f4be7-ad2a-493f-b649-203e27a692ff","Path":"property-bar-6.md","Order":11},{"Id":"0ca0b6d9-9054-4034-974a-17f9e5139942","Path":"sortering.md","Order":14},{"Id":"3cfa46f3-77d4-4b2e-b85a-46bf5923622c","Path":"captions.md","Order":1},{"Id":"5525e817-7777-430f-834e-a39375478ab0","Path":"filters.md","Order":5},{"Id":"8e5ea931-ce10-4166-94a7-7236c13dc6e5","Path":"sidebar-filters.md","Order":12},{"Id":"bd17a2b5-2932-4475-94e5-18c98869ca66","Path":"sidebar-tools.md","Order":13},{"Id":"f20753f2-b6b7-4c49-b81c-fd022a4afa02","Path":"color-filter-1.md","Order":3},{"Id":"d0babd7e-2b96-4b03-8017-c6457c356c0d","Path":"encodings-1.md","Order":4},{"Id":"6fedf92f-ebb8-43d6-b402-456e6c60826d","Path":"clean-recent-fonts-list.md","Order":2},{"Id":"c1ee4c7d-4c07-49df-83e6-900838309e28","Path":"font-window1.md","Order":6},{"Id":"f3abb832-b464-4a4c-b15c-bc70f61e8d06","Path":"glyph-table-1.md","Order":8},{"Id":"9676aca2-4e61-41d0-af7c-ca9aefcdfb67","Path":"list-view-2.md","Order":10},{"Id":"50209742-d8dc-4ad3-8fea-75d1af357ca5","Path":"footer.md","Order":7}],"Id":"d6d9d865-7f5c-4c0e-a6f5-4dca8d412731","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Font Window","Languages":[{"Code":"en","Title":"Font Window","Slug":"font-window-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"4c2a2565-18b4-4490-a7fe-1963f1666b0c","Path":"ellipse-or-rectangle-tool.md","Order":3},{"Id":"6a819e7d-1b38-4739-b44b-a0badfd72a32","Path":"free-transform-tool.md","Order":4},{"Id":"2b9728ec-9b3a-4d2a-a9b2-ef987c0a964c","Path":"kerning-tool-2.md","Order":7},{"Id":"28dd0d5a-70b4-42db-ab08-9cc4eb40efe6","Path":"brush-tool-5.md","Order":1},{"Id":"170de5e4-7549-42b0-b2b9-e95b8591a38a","Path":"guides-tool-3.md","Order":6},{"Id":"aae9479c-4abe-4430-a63d-75b8319103cc","Path":"metric-tool.md","Order":8},{"Id":"a5a971a6-0b8e-45dc-89d1-73f1b8904a8e","Path":"one-or-more-points-selected.md","Order":9},{"Id":"55c0e101-8776-4b02-9218-a725e081e00f","Path":"when-the-matchmaker-tool-is-active-1.md","Order":11},{"Id":"c59156b5-fe9a-4ea4-a520-d8435f720450","Path":"default-state.md","Order":2},{"Id":"8b119b6d-8b97-4aa9-a602-e29acaca9eb8","Path":"guideline-or-hint.md","Order":5},{"Id":"0e0acef6-a743-4677-bead-fcd773129776","Path":"text-tool-4.md","Order":10}],"Id":"de58e045-290b-43ae-8e4d-856a96b8cc3b","Path":"property-bar-1.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Property bar","Languages":[{"Code":"en","Title":"Property bar","Slug":"property-bar-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"d4cc903c-ad94-4aa6-9930-a5b74da06c10","Path":"scoreboard-3.md","Order":6},{"Id":"4da550ab-4521-4cb9-875a-54a28e7c3498","Path":"zoom-controls.md","Order":7},{"Id":"e815816f-96f9-4d54-8dcf-9812621b7eb5","Path":"rulers-1.md","Order":5},{"Id":"982ef195-e216-4d18-b5b5-0822d89c0e71","Path":"glyph-window1.md","Order":2},{"Id":"7ed87219-1f69-4037-b193-eda5d479a4f9","Path":"font-dimension-lines.md","Order":1},{"Id":"bf951e64-c795-4def-ad08-ee21518cc37f","Path":"grid-2.md","Order":3}],"Id":"7afa28ca-21d3-4f0f-a33a-0a411c78ad99","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Glyph Window","Languages":[{"Code":"en","Title":"Glyph Window","Slug":"glyph-window-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"0ddef1a8-37c2-4a3e-9b9b-06ae96568214","Path":"workspaces-on-windows-1.md","Order":5},{"Id":"d01cc10c-721e-4e96-a91d-af310ac7f132","Path":"creating-workspaces-1.md","Order":1},{"Id":"553a67ab-37f1-46d2-b4af-e99f9f78e6be","Path":"managing-workspaces-1.md","Order":2},{"Id":"c79901ed-a814-4028-950d-d5ba6b9db64a","Path":"switching-workspaces-1.md","Order":4},{"Id":"6a2b00dc-af7f-494a-a8c2-149c649e22e3","Path":"shortcuts-for-workspaces-1.md","Order":3}],"Id":"456dc62f-a8e9-4308-bc68-faa80b69a47f","Path":"workspaces-1.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Workspaces","Languages":[{"Code":"en","Title":"Workspaces","Slug":"workspaces-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"181eda3b-c845-49d4-8e37-231f07b40a15","Path":"curvature.md","Order":3},{"Id":"9160dd2d-e6fd-43e1-9072-04bf46c62fc9","Path":"grid-3.md","Order":7},{"Id":"66d1aef7-01e6-43aa-8b73-2bac4368a100","Path":"all-nodes.md","Order":1},{"Id":"97b276ee-52f9-4c9e-81c4-f26296f12526","Path":"font-guides.md","Order":4},{"Id":"9aea79a4-d699-46cf-9a5a-47c836e40fde","Path":"hints-4.md","Order":8},{"Id":"c7431c0e-f155-4cc3-88d4-6ce959cd9884","Path":"glyph-guides.md","Order":6},{"Id":"09bb98e7-288d-4643-a496-6542a2c3253c","Path":"fontaudit-7.md","Order":5},{"Id":"48015351-5e31-45c4-9879-5207b9e61558","Path":"coordinates-3.md","Order":2}],"Id":"40ca8603-14b2-4d1e-bbeb-ed7a8873b739","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"View Options","Languages":[{"Code":"en","Title":"View Options","Slug":"view-options-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"3f18e272-840c-4336-aeb5-69443d746e1f","Path":"alignment-zones-2.md","Order":1},{"Id":"2973599c-9ae9-44fa-a582-c875bfcc8909","Path":"toolbar-4.md","Order":4},{"Id":"86caf691-ff2e-4705-ba8e-e6e58ff50235","Path":"paste-special-1.md","Order":7},{"Id":"8f0139f4-dd4a-4481-bf8f-f03e2a9b707e","Path":"sketchboard-2.md","Order":5},{"Id":"f15e3d14-3b4b-4df0-b931-eed38ce4ed55","Path":"sketchboard-3.md","Order":8},{"Id":"cd6a877d-b4c2-4593-b228-b98240c7d8e6","Path":"dropdown-list.md","Order":12},{"Id":"279ad6c3-2855-4a35-917e-591e0648337c","Path":"history-panel-2.md","Order":10},{"Id":"57db00d3-3bbc-4396-b031-7a9edd48bbb0","Path":"quick-help-2.md","Order":9},{"Id":"213221d0-ea09-400f-831d-89a7024f83ca","Path":"user-interface-5.md","Order":11},{"Id":"96c8452e-d17b-42f1-a385-16d6cd877934","Path":"metrics-window-2.md","Order":6}],"Id":"47581be6-7c10-44b5-96fd-cb850690316e","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Other Interface Items","Languages":[{"Code":"en","Title":"Other Interface Items","Slug":"other-interface-items","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"82518599-6e79-44e7-9146-f31ac6d3c101","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"Interface Reference","Languages":[{"Code":"en","Title":"Interface Reference","Slug":"interface-reference","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"23141c52-20f9-4a70-b8f1-99e1f6be17cf","Path":"viewing-the-dynamic-instance-1.md","Order":5},{"Id":"8da131f4-5f9e-4760-8114-f7feebab80ea","Path":"variations-panel-5.md","Order":3},{"Id":"0c440184-a66f-498f-9803-714c10cac01b","Path":"using-the-layer-preview-color-1.md","Order":2},{"Id":"31296ca9-466a-47bc-a140-6aa5e2c45428","Path":"faster-interpolation-1.md","Order":1},{"Id":"a4919b8f-4d41-4dc0-8fba-d7281237ef21","Path":"axis-user-range-1.md","Order":4}],"Id":"cf07cf0e-3c73-4634-b67e-423624293ae4","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Variations","Languages":[{"Code":"en","Title":"Variations","Slug":"variations-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bc4315f7-73c8-47f7-ae12-d5f87b7a52aa","Path":"preview-panel-7.md","Order":3},{"Id":"00ab099b-42ef-41f4-9276-07746d49a0c4","Path":"details-across-glyphs-1.md","Order":5},{"Id":"8102eb99-0b8a-44b5-97ef-c6b0134c3093","Path":"glyph-metrics-6.md","Order":1},{"Id":"777c3490-ea33-40e8-8fdc-62be9890f54c","Path":"glyph-window-modes-1.md","Order":8},{"Id":"98ab8bb8-7d19-4216-8a56-fb6103d125a0","Path":"glyph-window-text-1.md","Order":9},{"Id":"22c44387-7ca8-4d4d-a18e-20596f5c13fb","Path":"glyph-window-views.md","Order":11},{"Id":"7a1ee9cc-45d1-44c4-b624-ee1073dec4a5","Path":"glyph-window-view-sets-basic-view-and-alternative-view.md","Order":10},{"Id":"f6a0e0b8-73ee-44c2-b958-cea238fc8ef9","Path":"noncurrent-glyph-details-1.md","Order":13},{"Id":"5eff77a4-0acc-490d-94b2-6546e2e4fa9e","Path":"glyph-window-11.md","Order":12},{"Id":"c5d7f9bd-a340-4ff0-9610-352537dd7437","Path":"current-glyph-details-1.md","Order":4},{"Id":"31d5fbe7-3dc8-4d16-9f42-3388669c239b","Path":"edit-across-glyphs-1.md","Order":6},{"Id":"a3f2f8c2-d050-4882-b7bb-6fa4eb2080d8","Path":"outline-color-in-glyph-window-1.md","Order":2},{"Id":"3cd2470a-b022-4f54-b49c-ed731a715c72","Path":"edit-across-layers.md","Order":7}],"Id":"07c52eea-3fe6-44fb-b47f-9d23430bd73e","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Glyph window","Languages":[{"Code":"en","Title":"Glyph window","Slug":"glyph-window-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"396fd160-0c8b-4384-b279-d13b050089ad","Path":"action-sections-2.md","Order":4},{"Id":"2b198d8f-c054-4a81-bc4a-36e7ae398da9","Path":"change-height-2.md","Order":5},{"Id":"5b572890-a03e-4aa6-81b5-f46c79065c9f","Path":"change-width-and-change-weight-1.md","Order":6},{"Id":"f5f18718-66f3-4d48-a250-63b62d9f9cb6","Path":"close-actions-dialog-with-esc-1.md","Order":1},{"Id":"473dd5df-a419-4137-8b8b-ca9518dfa918","Path":"glyph-scope-1.md","Order":8},{"Id":"3b4d4c87-f8ae-4aa6-87c7-0682fb053540","Path":"keyboard-shortcut-1.md","Order":9},{"Id":"040ff5a1-6d50-4e85-b47d-5fdb0601d8e8","Path":"manually-improve-the-results-1.md","Order":11},{"Id":"3171c5a8-3024-463b-8398-e8d969c763f5","Path":"change-width-3.md","Order":7},{"Id":"8ba2f6cc-56d5-4c99-a7ae-db36b10b53e8","Path":"remarks-2.md","Order":12},{"Id":"20ceeb54-38d4-4bfa-9e22-d80838a7c88f","Path":"scope-of-actions-1.md","Order":13},{"Id":"dae89274-f1f7-4a15-b8f3-77e12b41bcce","Path":"perspective-action-1.md","Order":2},{"Id":"8417f4f8-2c59-4ebd-aa17-f1c218e4545a","Path":"layer-scope-1.md","Order":10},{"Id":"8d2eee45-f760-41ff-b972-6c7683f46983","Path":"slant-action-1.md","Order":3}],"Id":"f75dfc27-dcc4-44d6-93ed-d7a40fc23bcf","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Actions","Languages":[{"Code":"en","Title":"Actions","Slug":"actions-5","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"985d67c1-09b9-4b9f-9c99-e7b64e79b811","Path":"import-kerning-from-kern-feature-1.md","Order":1}],"Id":"79129fe1-cc28-4441-9c30-53f2030b1909","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Kerning","Languages":[{"Code":"en","Title":"Kerning","Slug":"kerning-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3b98ce68-f986-4eee-99b5-a221c4864b72","Path":"add-nodes-at-inflections-with-knife-1.md","Order":1},{"Id":"b6ba3ff8-ef95-4a38-bbeb-8f41c5288eff","Path":"duplicate-nodes-3.md","Order":3},{"Id":"52f3a8f1-3f99-407f-ae54-e723d620fe9a","Path":"simple-calculations-1.md","Order":7},{"Id":"4531465b-93b8-48b1-877a-2b5a0d6e3582","Path":"copy-and-paste-from-adobe-illustrator-1.md","Order":9},{"Id":"ff8d156b-f45c-4937-ad08-a9d12321e784","Path":"pen-tool-5.md","Order":6},{"Id":"a4ac9b42-51de-407a-87c6-a568a919a31a","Path":"copy-and-paste-from-fontlab-studio-5-1.md","Order":10},{"Id":"9cb6e5b3-5c57-42be-9269-17d7cc8c8700","Path":"element-references-3.md","Order":11},{"Id":"a952b3ce-d2bf-41df-976b-c67954dac96b","Path":"fontaudit-8.md","Order":12},{"Id":"d6609615-9238-46fe-9858-fb67a1f4b626","Path":"slide-node-1.md","Order":14},{"Id":"7b8e92b3-b27c-495a-8395-4ac4fd5b081d","Path":"doubleclick-a-node-has-precedence-over-activating-another-glyph-1.md","Order":4},{"Id":"085868b9-591a-426e-91be-b0f7be482458","Path":"copypaste-1.md","Order":5},{"Id":"751f5c0c-e408-4179-bfdc-c94cf8c26f37","Path":"components-2.md","Order":8},{"Id":"1284397f-eced-4b86-aa15-13ef73598f62","Path":"mask-layer-1.md","Order":13},{"Id":"7374324a-1515-45ef-8217-2a64f9123fab","Path":"adding-a-node-selects-it-1.md","Order":2}],"Id":"2057eb55-da71-4c88-bff8-7d417833faae","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Contour editing","Languages":[{"Code":"en","Title":"Contour editing","Slug":"contour-editing-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ad1d3c9a-d65f-4135-90df-08cb9b30711a","Path":"named-bookmarks-in-font-window.md","Order":5},{"Id":"d3c13d2a-f2e9-4109-95ac-66b47710c7cd","Path":"saving-selections-and-filters-1.md","Order":14},{"Id":"66fb9573-0385-405f-8b4e-0db0387f5e0e","Path":"font-window-unicodename-mismatch-fontlab-uses-a-mapping-table-that-maps-unicode.md","Order":1},{"Id":"8973060c-096f-47c9-b86a-7f3240da77c8","Path":"componentrelated-selection-1.md","Order":12},{"Id":"50f96cf5-f06c-4642-910c-c54f33824de9","Path":"rendering-of-selected-and-current-glyph-cells.md","Order":8},{"Id":"e76a207d-fda9-4f49-aa29-7a1e9efe9bd5","Path":"layers-masters-in-font-window-sidebar.md","Order":7},{"Id":"d73c8292-3063-4881-9bfe-2f056873d812","Path":"paste-in-font-window-replace-or-append-1.md","Order":19},{"Id":"61be51ae-e79a-4f5e-8f54-8cdc6761b4dd","Path":"filter-font-window-by-glyph-name-suffix-1.md","Order":4},{"Id":"0eca4e8e-3e6d-42f9-9b39-5137d950636e","Path":"same-as-current-glyph-selection-1.md","Order":13},{"Id":"2daad303-a05c-4f1f-864c-a417f8306b3b","Path":"current-instance-in-font-window.md","Order":2},{"Id":"d3e91377-dbc6-48f8-bb46-96db3071df11","Path":"add-a-new-glyph-to-the-font-2.md","Order":15},{"Id":"1af1bd3c-b77e-4a5f-8937-f0762d829091","Path":"more-selections-1.md","Order":10},{"Id":"310a622a-fd79-4914-8729-2398ae97fb51","Path":"font-window-select-in-context-menu.md","Order":11},{"Id":"aab9c4c4-ffcf-4a46-943d-7040f1973e3c","Path":"sort-font-window-by-glyph-name-suffix.md","Order":6},{"Id":"191c6733-ece5-4175-a53c-ab8caf51cf94","Path":"font-window-filters-2.md","Order":17},{"Id":"de18ee83-9ec8-49bd-93ce-5d2b346ccb62","Path":"create-new-glyphs-in-empty-font-window-cells.md","Order":16},{"Id":"eb8049eb-a66b-4d72-afd9-bc992cc74f36","Path":"font-window-status-bar-1.md","Order":18},{"Id":"ac6034e9-47af-4af5-bf2c-fb8a47f4663e","Path":"general-selection-1.md","Order":9},{"Id":"6f399863-0e2a-4fce-96c2-01598ec4387b","Path":"filter-font-window-by-color-flag-1.md","Order":3}],"Id":"5ece62b6-87d3-477b-bc0a-099484304fcd","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Font window","Languages":[{"Code":"en","Title":"Font window","Slug":"font-window-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3a7e7050-9ee5-4e60-8d3f-223a3b727690","Path":"flatten-glyph-and-flatten-layer-1.md","Order":1},{"Id":"6e27b181-710b-4256-aaa6-5d4a022d5fe4","Path":"lastused-export-profile-1.md","Order":6},{"Id":"130b66e7-67a4-4808-aa9f-0f2d14b5d357","Path":"opening-and-exporting-fonts.md","Order":7},{"Id":"f8566dc0-1b1f-4954-b179-ab182bd02613","Path":"sketchboard-4.md","Order":9},{"Id":"77483347-795c-4bcb-bd27-19f6f3607223","Path":"ufo-packages-1.md","Order":10},{"Id":"e6361d15-47af-456a-be88-0d1168d1c5b1","Path":"glyph-names-6.md","Order":11},{"Id":"fe7a910e-60f4-4561-a33e-4c67fd4a253f","Path":"keyboard-shortcuts-7.md","Order":4},{"Id":"4df37218-3d0a-42c0-8e65-833231f2f38a","Path":"numeric-text-fields.md","Order":5},{"Id":"5adcc3bd-b378-4564-aa79-966ca69fda2f","Path":"keyboard-shortcuts-on-windows.md","Order":3},{"Id":"ec4f7c50-4823-4130-9f13-c7fb693b7ec7","Path":"panels-4.md","Order":2},{"Id":"d9faaad1-d280-426f-8957-60d645fdee8a","Path":"opentype-tables-1.md","Order":8}],"Id":"94eee343-aa50-4f67-800c-71b155a2e103","Path":null,"Order":18,"CategoryType":0,"Icon":null,"Title":"User interface","Languages":[{"Code":"en","Title":"User interface","Slug":"user-interface-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ef3d914a-a413-4502-a878-3131b28f025b","Path":"lib-font-master-glyph-layer-1.md","Order":5},{"Id":"91fd7a40-d8a2-4a7e-a446-972147a0bb24","Path":"vfcvfj-format.md","Order":9},{"Id":"a127e357-f312-41f2-bb4a-88cebf787cc4","Path":"designspace-ufo-and-glif-lib-1.md","Order":1},{"Id":"d8ae9c73-96b4-42e0-9ab4-588c3b590586","Path":"save-as.md","Order":16},{"Id":"3b8649d1-8e8f-4fdb-8124-1629493f5b8f","Path":"truetype-hinting-in-ufo-1.md","Order":8},{"Id":"58d7c529-479e-4a86-9273-a66f8aabc74a","Path":"color-web-fonts-1.md","Order":10},{"Id":"0bff4956-a15e-4451-9319-8a2aa436c452","Path":"export-notification-1.md","Order":12},{"Id":"b1085328-5452-45b2-ab5b-29c9e43a7c55","Path":"glyph-ordering-in-ufo-1.md","Order":4},{"Id":"ef778f24-bebd-4880-9834-cbc75a6ba7c6","Path":"designspace-ufo3-1.md","Order":11},{"Id":"b1623557-7099-4337-bedb-5c1caefcc1c1","Path":"fontlab-json-vfj.md","Order":14},{"Id":"076276a3-2a75-4d1d-b89c-92b2b452e1ca","Path":"postscript-hinting-in-ufo-1.md","Order":7},{"Id":"cd3f009a-ee5d-4e1e-887a-026dcf64fc9b","Path":"metrics-expressions-in-glif-1.md","Order":6},{"Id":"bb52bdff-571d-4ab4-bcb8-af241a89ce8c","Path":"exporting-mark-attachment-1.md","Order":13},{"Id":"a03a0fb6-fa95-469b-bbff-5307ab0c4771","Path":"open-and-export-cff2based-variable-ps.md","Order":15},{"Id":"ed33c8c2-fa6f-4be4-848d-b711a186640d","Path":"variable-tt-1.md","Order":17},{"Id":"37aa9913-bfb6-4faa-92e4-8b22f3ed90f7","Path":"auto-layers-in-glif-1.md","Order":3},{"Id":"701a6873-bcc1-43cf-90f7-f7ca8ee40592","Path":"exporting-fonts-5.md","Order":2}],"Id":"fdd974cd-c73d-4e4d-8e01-6f0769fdffb4","Path":null,"Order":19,"CategoryType":0,"Icon":null,"Title":"Files and Formats","Languages":[{"Code":"en","Title":"Files and Formats","Slug":"files-and-formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4ee0a482-9d51-42a6-bbbe-5ac7f2472f4c","Path":"glyph-window-wrapping-1.md","Order":3},{"Id":"b03cd4df-bc0b-4dd2-8c49-c58f5d90dc0c","Path":"text-in-glyph-window-1.md","Order":4},{"Id":"cec26631-eabb-4772-9c3f-1f266e6f4c5e","Path":"apply-glyph-window-wrapping-1.md","Order":1},{"Id":"64e5fe5d-2515-4e3a-8a6f-0fc1f42ae2f9","Path":"glyph-size-in-glyph-window-1.md","Order":2}],"Id":"501996e5-0361-4242-b2d0-773d6ad2c58c","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"Glyph window text, font size and wrapping","Languages":[{"Code":"en","Title":"Glyph window text, font size and wrapping","Slug":"glyph-window-text-font-size-and-wrapping","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"61ec73c5-b0f1-43fd-b43b-018984a1105b","Path":"more-volt-resources-1.md","Order":8},{"Id":"0bc077a1-055c-4bae-9e06-d357c4b845ed","Path":"testing-mark-attachment-1.md","Order":14},{"Id":"29edffea-06bd-494a-8ae6-609b9dbd5eca","Path":"the-opentype-layout-process-1.md","Order":1},{"Id":"281f9ee6-22d7-495a-ba5f-38d1d31ba46d","Path":"lookups-area-1.md","Order":6},{"Id":"0e8d8e9d-ccb8-4ba5-a52b-467721c6dc05","Path":"testing-features-in-text-1.md","Order":12},{"Id":"bd561579-8684-4c4b-980d-c0ed443f608c","Path":"rules-area-1.md","Order":10},{"Id":"91325923-b16f-42ea-8a28-344edfb86fa8","Path":"testing-kerning-1.md","Order":13},{"Id":"0410bf45-3b99-41ac-86d3-a2ce3e28636c","Path":"features-area-1.md","Order":3},{"Id":"6ad92c4b-a39d-4050-a74f-c1a9e4c23bf9","Path":"lookups-panel-2.md","Order":7},{"Id":"de8866ee-4a85-4e85-898c-428273cd9ed2","Path":"using-microsoft-volt-3.md","Order":16},{"Id":"013cef58-c8e1-47be-b23b-1e7b9c0c49c7","Path":"visual-proofing-in-the-lookups-panel-1.md","Order":17},{"Id":"c1ae2792-b2b4-4efd-9ab6-b8bca73ab221","Path":"sample-volt-fonts-3.md","Order":11},{"Id":"ff91d3f0-ac4b-4b7d-9da0-eb94fadd3bf7","Path":"exporting-feature-definitions-to-volt-1.md","Order":15},{"Id":"becd6454-7f94-4d90-bb82-f9a615941ad1","Path":"features-panel-5.md","Order":4},{"Id":"00b3fbe9-30ab-483c-98c6-41c004b74165","Path":"proofing-opentype-features-1.md","Order":9},{"Id":"827c8e3f-ea53-4a81-9897-df5e6a86e797","Path":"interchange-with-microsoft-volt-1.md","Order":5},{"Id":"794c6d19-77a2-4f60-8734-60cb4454085c","Path":"featurecentric-vs-1.md","Order":2}],"Id":"70ec9170-0af5-4367-9e51-02a61dbd5f09","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"Features","Languages":[{"Code":"en","Title":"Features","Slug":"features-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"93af7b59-cca2-4ddd-b021-2dc2f8edd3b1","Path":"typerig-delta-machine-3.md","Order":4},{"Id":"75a2db7c-dcb8-40a3-a24c-f867def464a2","Path":"installupdate-typerig-1.md","Order":1},{"Id":"7e3ea460-7368-464b-916a-5737687287a5","Path":"typerig-panel-1.md","Order":2},{"Id":"0444f6a1-7c32-471d-b6a7-6359ad5fb0f2","Path":"other-typerig-plugins-1.md","Order":5},{"Id":"a4b15a88-e90a-4114-b579-d91f1bb443e2","Path":"typerig-is-a-powerful-set-of-extensions-for-fontlab-7-1.md","Order":3}],"Id":"9a02935b-078d-4128-8cd8-673207b41ebc","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"TypeRig & Delta Machine","Languages":[{"Code":"en","Title":"TypeRig & Delta Machine","Slug":"typerig-delta-machine-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a21bb541-bc2c-4868-80b1-99b4d9cef865","Path":"postscript-hints-1.md","Order":2},{"Id":"238fd3e0-2ff4-4844-9b45-ee2836b498b2","Path":"stdw-vs-2.md","Order":3},{"Id":"20567345-ca72-4930-99b2-63015afb2d9d","Path":"truetype-hinting-4.md","Order":4},{"Id":"1dfc5d30-acaf-4421-9c08-d1d609f5d3d9","Path":"autohint-3.md","Order":1}],"Id":"a69387d4-b1d7-460b-986f-8c035760d9d4","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Hints","Languages":[{"Code":"en","Title":"Hints","Slug":"hints-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a3887fc7-a906-460e-85b4-ef1c616fe5ae","Path":"new-fontaudit-test-nearly-flat-curve-1.md","Order":3},{"Id":"3d02727e-8347-4b63-9370-65a77afccc73","Path":"enabling-and-disabling-fontaudit-tests-1.md","Order":2},{"Id":"49b6cab0-7e04-4f3b-ba7a-5d516e10d3b7","Path":"when-you-open-the-fontaudit-panel-fontlab-runs-some-tests-and-shows-a-list-1.md","Order":1},{"Id":"fbcc9558-069a-46d9-8bdc-779486947894","Path":"new-fontaudit-tests-irregular-stem-and-uncommon-stem-1.md","Order":4},{"Id":"517c62b2-9752-4298-a553-c9718eeee63a","Path":"other-fontaudit-improvements-1.md","Order":5}],"Id":"f9eb25e9-bfc4-4c4e-92d4-b9af0c582bd6","Path":"fontaudit-4.md","Order":6,"CategoryType":1,"Icon":null,"Title":"FontAudit","Languages":[{"Code":"en","Title":"FontAudit","Slug":"fontaudit-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a0c9fad0-6cfa-4d6c-a490-f9e49c9cefcd","Path":"power-guides-6.md","Order":1},{"Id":"ffd8d830-b7d5-475a-83aa-97a063c042b2","Path":"snap-to-baseline-1.md","Order":3},{"Id":"5c827486-4a82-4a85-a2a2-61996ae94f3c","Path":"suggest-distance-1.md","Order":4},{"Id":"fc3385c1-8e7f-4aa5-837f-ebf5795c32fe","Path":"slanted-guides-1.md","Order":2}],"Id":"03caedfb-e62f-43a1-ac3d-b5f5fe1f0af5","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Guides and snapping","Languages":[{"Code":"en","Title":"Guides and snapping","Slug":"guides-and-snapping-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7067d9f5-0585-4160-baba-96f668e1b85f","Path":"working-in-fractional-coordinates-1.md","Order":4},{"Id":"1317d1e9-f12f-4a66-bbf8-04d7ff7f5019","Path":"increasing-the-precision-of-coordinates-1.md","Order":2},{"Id":"81f1ba47-4eea-4cc9-9aff-7ea1c17d0d9b","Path":"sketchboard-coordinates-1.md","Order":3},{"Id":"35bfeae9-af6e-4a4c-b496-c44711abb567","Path":"fractional-vs-1.md","Order":1},{"Id":"2b6c5df8-abc2-4529-9351-f7502423ad44","Path":"working-in-rounded-coordinates-1.md","Order":5}],"Id":"e004d968-1f01-46c0-910d-26dbb53b028a","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Coordinates","Languages":[{"Code":"en","Title":"Coordinates","Slug":"coordinates-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1fed11fa-619e-4cbc-b9af-7417a811a2a5","Path":"bidirectional-support-in-glyph-window-and-preview-panel-1.md","Order":1},{"Id":"db8fd3f2-d732-4845-8e70-a85339d2d00c","Path":"font-names-1.md","Order":3},{"Id":"7f21492b-d130-428b-963d-ea5df3f8d2cd","Path":"positional-features-1.md","Order":4},{"Id":"a15a08e4-010f-46fe-a7d2-19cf45414535","Path":"bidirectional-text-arabic-and-other-righttoleft-scripts.md","Order":2},{"Id":"b7acaf8a-0cd2-47df-9a8f-33c25fce7d7d","Path":"righttoleft-mark-attachment-1.md","Order":5},{"Id":"baf0098d-8527-4c81-813d-f55b62b2ad07","Path":"virtual-tags-3.md","Order":6}],"Id":"6c4a5c9d-2606-4159-b396-f2ed9777daa3","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Script support","Languages":[{"Code":"en","Title":"Script support","Slug":"script-support-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"91c2e2e4-ffa8-4ef1-8aa1-a9c62bc95b6f","Path":"builtin-glyph-names-1.md","Order":1},{"Id":"0eeba475-04a5-4857-8599-c77de0204670","Path":"missing-glyph-placeholders-1.md","Order":3},{"Id":"2f58f993-fcac-47e3-8bcb-dea22b57de7e","Path":"flexible-glyph-renaming.md","Order":6},{"Id":"3120aef0-273e-4ea1-9934-28be164a6372","Path":"glyph-names-5.md","Order":8},{"Id":"7c91801a-e579-4685-b71f-0ddfe7d0d31c","Path":"unixxxx-and-production-names-1.md","Order":12},{"Id":"a89ef42a-ec84-45d5-a0f5-8b5e7a39c5c2","Path":"renaming-glyphs-5.md","Order":10},{"Id":"905e1f31-0ead-466e-b5e1-96a66c1a36c3","Path":"synonyms-1.md","Order":11},{"Id":"8315fb2e-2a50-4de3-b67b-abdcbd0fac63","Path":"other-glyph-naming-improvements.md","Order":9},{"Id":"34246b4c-eff5-442f-9c10-b2aced219597","Path":"renaming-glyphs-4.md","Order":2},{"Id":"68768cbc-757a-4494-8a9f-441bcd2f4712","Path":"friendly-and-alternative-names-1.md","Order":7},{"Id":"22bbff18-8278-458a-bfed-f640af1146b2","Path":"custom-glyph-renaming.md","Order":5},{"Id":"9660a4f2-8378-47d6-a945-65459bd98597","Path":"builtin-glyph-naming-schemes-and-synonyms.md","Order":4}],"Id":"51438741-dc70-4089-b5b8-4be39f9a49ca","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"Glyph names","Languages":[{"Code":"en","Title":"Glyph names","Slug":"glyph-names-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"36307f98-17aa-47ca-9d0e-8eb63acb5efb","Path":"scale-tool-2.md","Order":3},{"Id":"ffa35b96-192b-4c3d-a673-7b3a0a2373f7","Path":"slant-tool-2.md","Order":4},{"Id":"3637fed7-c1f7-485a-a5e0-7abfb3d90524","Path":"in-fontlab-7.md","Order":1},{"Id":"27d508f4-db80-48da-9c75-a3cb6229cb10","Path":"rotate-tool-2.md","Order":2}],"Id":"16914898-57ad-406e-9e9d-040f00328dca","Path":"quick-transform-tools-rotate-scale-and-slant-1.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Quick transform tools Rotate, Scale and Slant","Languages":[{"Code":"en","Title":"Quick transform tools Rotate, Scale and Slant","Slug":"quick-transform-tools-rotate-scale-and-slant-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2c734db5-2e39-45e7-b0a6-162ce3ba4b52","Path":"anchors-pins-panel-1.md","Order":2},{"Id":"c7fbdda8-80ad-49d8-927f-04d0cbcaf658","Path":"attached-components-1.md","Order":3},{"Id":"c5ff648b-692c-4f4b-bcde-f4fe62ac449c","Path":"anchor-expressions-1.md","Order":1},{"Id":"d255c7ee-982a-4435-ac85-6669b211663c","Path":"manual-composite-layers-1.md","Order":5},{"Id":"66146a21-6729-4f00-b58c-02682a2b468c","Path":"quicker-selection-of-anchors-1.md","Order":6},{"Id":"e38b1368-2cdd-4eb6-93d3-5f1a27b6dafa","Path":"auto-layers-3.md","Order":4},{"Id":"3a3324b2-fd56-4778-b1be-17b9ea0f5ba5","Path":"variable-components-1.md","Order":7}],"Id":"908ef3fc-ff21-461e-9e97-9e5d76700892","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Components and anchors","Languages":[{"Code":"en","Title":"Components and anchors","Slug":"components-and-anchors-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"028a7e2b-de55-4151-95be-029fba6765c5","Path":"gallery-panel-3.md","Order":2},{"Id":"cfe582a6-5018-4870-8eea-e3f6a22d1d02","Path":"pressuresensitive-brush-1.md","Order":6},{"Id":"2e9553e5-31ee-423b-95e2-617edcd929d2","Path":"remove-overlap-3.md","Order":7},{"Id":"8ee4b1e9-ed85-401a-b013-255df35ca356","Path":"editing-contours-2.md","Order":1},{"Id":"6b1af52f-d051-4ade-9d27-49088adb2f7c","Path":"knife-tool-5.md","Order":4},{"Id":"e966c67c-7f88-4fac-b5d8-2c811f7bb072","Path":"add-guide.md","Order":3},{"Id":"735d3e40-cb6a-4412-91bf-3aba8bdd215b","Path":"opacity-of-guides-zones-hints-font-dimensions-2.md","Order":5}],"Id":"a1d88cf0-31a8-4ab0-8062-46a1aac7858a","Path":null,"Order":23,"CategoryType":0,"Icon":null,"Title":"General improvements","Languages":[{"Code":"en","Title":"General improvements","Slug":"general-improvements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"58c115d6-30e3-4cf6-b645-e1057ff9bae4","Path":"generate-glyphs-3.md","Order":2},{"Id":"c4fe831b-69f8-4884-a4b1-cc5c23461915","Path":"create-parallel-contour-2.md","Order":1},{"Id":"b7494acc-a439-465f-9304-49d7bceff16d","Path":"metrics-5.md","Order":4},{"Id":"982cf8a7-1ba9-44d6-9a37-96178f0c8b52","Path":"quick-measurement-3.md","Order":5},{"Id":"47a3b659-503f-49ef-9f03-93283c33e5fe","Path":"make-svg-editable-1.md","Order":3}],"Id":"2ed6e402-1b8f-4c7c-ae79-9874d00705c7","Path":null,"Order":36,"CategoryType":0,"Icon":null,"Title":"New features","Languages":[{"Code":"en","Title":"New features","Slug":"new-features","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"de65ea6a-257d-4a52-b687-b5c7e7d3f589","Path":"copied-elements-2.md","Order":4},{"Id":"732a0c40-03ed-4b62-ba56-a8b7f98bf473","Path":"copied-contours-2.md","Order":3},{"Id":"2e2ff4ad-f0b8-4faa-8522-cec17b1e304b","Path":"add-element-reference-add-contours-2.md","Order":13},{"Id":"f87b132c-bdf8-4ca8-9650-02e12c5dc707","Path":"element-references-4.md","Order":10},{"Id":"0d519905-b61f-48aa-bf57-1f613c365234","Path":"turn-dynamic-auto-layers-into-custom-auto-layers-1.md","Order":14},{"Id":"a16c7e5f-7400-4873-8607-445c78b4e490","Path":"work-with-auto-layers-1.md","Order":15},{"Id":"98352075-f5a9-427c-8154-8dc1acc9871a","Path":"dynamic-auto-layers-1.md","Order":9},{"Id":"f20411b2-cd99-43ed-817c-a335b6532171","Path":"create-new-glyphs-as-auto-layers-1.md","Order":7},{"Id":"27ab5821-a002-4d16-8ac2-8ca24a07748d","Path":"create-auto-layers-in-existing-glyphs-1.md","Order":5},{"Id":"ab4c746e-020d-4e07-beaf-f70e992deb9a","Path":"custom-auto-layers-1.md","Order":8},{"Id":"4776db81-2e88-41d0-b636-8d65bb74ae44","Path":"heres-a-summary-of-how-you-can-reuse-portions-of-glyphs-in-fontlab-7.md","Order":1},{"Id":"b4c21be0-1ef8-4279-86cf-c88ccff7d293","Path":"live-auto-layers-1.md","Order":12},{"Id":"9f089196-25cc-4fda-8962-e6d4ccc36334","Path":"auto-layers-4.md","Order":11},{"Id":"ab0af43e-94e8-42e4-b891-d50af0b2abcc","Path":"create-custom-auto-layers-in-multiple-existing-glyphs-1.md","Order":6},{"Id":"918f8d60-79bd-4507-880c-0c934f866b59","Path":"components-3.md","Order":2}],"Id":"f7cd186e-9411-4e35-9843-87e9adf7b9ba","Path":null,"Order":24,"CategoryType":0,"Icon":null,"Title":"Re-use portions of glyphs","Languages":[{"Code":"en","Title":"Re-use portions of glyphs","Slug":"re-use-portions-of-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"575709df-f160-47f2-8ed0-71c86a705baa","Path":"include-in-vfc.md","Order":4},{"Id":"00d173f2-b79a-4d34-8c4f-e5e3e40c7df1","Path":"include-in-vfj-1.md","Order":5},{"Id":"8e605205-cd6d-449c-ac02-0264b0f0d1cc","Path":"autosave-2.md","Order":1},{"Id":"79735019-41c4-42c1-905a-7b47168f3f55","Path":"existing-files-1.md","Order":2},{"Id":"29c4e843-c63a-4b60-b66a-cbca065155fb","Path":"first-save.md","Order":3}],"Id":"5e23d4c0-ac2d-4171-ba00-4561cb3fdfd0","Path":"save.md","Order":44,"CategoryType":1,"Icon":null,"Title":"Save","Languages":[{"Code":"en","Title":"Save","Slug":"save","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"97ae81db-88d4-47ab-a086-1f506bce8a12","Path":"implicit-weight-andor-width-axis-location-1.md","Order":1},{"Id":"95ef155a-ba0b-4986-ae7d-77d7a8eb9743","Path":"metrics-linking-in-set-width-action-1.md","Order":2},{"Id":"cc7d283e-cc84-4610-b3fb-c3de77fcd1da","Path":"stat-table-in-variable-opentype-fonts-1.md","Order":3}],"Id":"74162d84-5574-4129-ad58-1b397ebe3244","Path":null,"Order":51,"CategoryType":0,"Icon":null,"Title":"Exporting Fonts","Languages":[{"Code":"en","Title":"Exporting Fonts","Slug":"exporting-fonts-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"325c754c-f9bc-4fc8-9617-8b015d3285d5","Path":"font-info-overview-copypaste-and-edit-info-in-a-multimaster-table-1.md","Order":3},{"Id":"4f5fd6d2-9116-49c5-b376-e7aa084860ac","Path":"new-syntax-for-axis-instances-1.md","Order":4},{"Id":"0751825d-43fa-4f4d-b7bf-e223b1812238","Path":"variations-in-font-info-1.md","Order":5},{"Id":"bada3fe8-7d19-4e4e-977c-24c735f70a9a","Path":"change-the-axis-range-and-define-nonlinear-mapping-between-design-and-user-1.md","Order":1},{"Id":"df9ec599-1152-415b-b4eb-12ad2ec6e74a","Path":"copypaste-font-info-between-fonts-and-masters-1.md","Order":2}],"Id":"724ced55-5912-4752-9789-7485afe5d174","Path":"font-info-3.md","Order":58,"CategoryType":1,"Icon":null,"Title":"Font Info","Languages":[{"Code":"en","Title":"Font Info","Slug":"font-info-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0fd8f5f8-d99b-41a3-947c-3760ea4d7eb3","Path":"microsoft-volt-and-features-for-complex-scripts-2.md","Order":3},{"Id":"4ade0f6b-a8be-47ec-acdd-4cf7481bfbcb","Path":"sample-volt-fonts-4.md","Order":5},{"Id":"560e1e6f-7579-4411-83fa-a759f03e21e2","Path":"volt-tutorials-and-info-1.md","Order":7},{"Id":"a18d195c-efd6-4f40-a972-182548bcb0a4","Path":"using-microsoft-volt-4.md","Order":6},{"Id":"2bd46f45-c2e9-4146-af40-76dafc060417","Path":"exporting-fea-features-to-volt-2.md","Order":1},{"Id":"03ddca82-52ee-4f06-aac5-cb87adc3f097","Path":"more-voltrelated-tools-2.md","Order":4},{"Id":"1659e55c-6a7f-4988-89ac-16536f2e9126","Path":"fontlab-7-3.md","Order":2}],"Id":"8115b2ba-4b75-4033-bd42-c2fe10cd0321","Path":null,"Order":30,"CategoryType":0,"Icon":null,"Title":"OpenTye Features","Languages":[{"Code":"en","Title":"OpenTye Features","Slug":"opentye-features-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6edcb274-7230-40ac-8c32-dfeb9dfbe470","Path":"simple-stickers-1.md","Order":1},{"Id":"21e112ba-43d3-40c8-826d-df77dda43be0","Path":"text-stickers-1.md","Order":3},{"Id":"25cddc21-b878-4152-b437-e9ff09f000c8","Path":"stickers-3.md","Order":2}],"Id":"c4847884-df2a-4732-bea2-3359c90670f3","Path":null,"Order":26,"CategoryType":0,"Icon":null,"Title":"Annotate glyphs visually with stickers","Languages":[{"Code":"en","Title":"Annotate glyphs visually with stickers","Slug":"annotate-glyphs-visually-with-stickers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ce960ce3-6635-4f1f-8c8e-62c5e677bbdd","Path":"showing-handles-in-mask-and-inactive-layers-1.md","Order":7},{"Id":"3e07bccb-350a-4894-97f7-eae822d9fd75","Path":"clicking-near-a-node-handle-or-segment-1.md","Order":1},{"Id":"da33d75c-a599-4e5e-a056-1ada4f42615c","Path":"precision-cmdctrldragging-of-nodes-and-handles-1.md","Order":4},{"Id":"c9693773-97cd-42dc-be00-5cbd5a860106","Path":"smart-corners-1.md","Order":8},{"Id":"ba3a70c2-bb89-4149-b4e0-7ef4264796e2","Path":"quick-measurement-5.md","Order":5},{"Id":"d3cf9e68-8498-4b4e-93cd-316dc3dc9dcc","Path":"more-flexible-shiftdragging-of-points-1.md","Order":3},{"Id":"269d5106-aa9e-4a18-82b2-61619df0ca5d","Path":"end-lines-center-line-rainbow-1.md","Order":2},{"Id":"e2c05dae-2a0d-42a2-b89d-a2fb1ee5a8a6","Path":"refined-arrow-key-shortcuts-for-moving-nodes-and-selections-1.md","Order":6},{"Id":"40972967-62b8-4bc6-ac00-eae92f16aa80","Path":"stickers-4.md","Order":9},{"Id":"c3ff1e8a-2ff8-4660-a6ac-22f8ba8c77df","Path":"tangent-start-points-1.md","Order":10}],"Id":"5e5d85a5-0350-427c-9d26-f590b24532c0","Path":null,"Order":57,"CategoryType":0,"Icon":null,"Title":"Editing glyphs","Languages":[{"Code":"en","Title":"Editing glyphs","Slug":"editing-glyphs-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a61b48b0-df22-4e93-bef3-c6ce6b6c0928","Path":"classes-improvements.md","Order":1}],"Id":"ad5cc571-9f47-442c-bc8f-c2efe05275f6","Path":null,"Order":60,"CategoryType":0,"Icon":null,"Title":"Classes","Languages":[{"Code":"en","Title":"Classes","Slug":"classes-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e28339cc-0707-454f-9b5b-be01cdc24dbb","Path":"guides-3.md","Order":2},{"Id":"b61ea937-2f54-4283-a032-6c33df06173d","Path":"quick-measurement-4.md","Order":3},{"Id":"a5d76172-1035-4f9b-8699-05121051d520","Path":"autostems-and-suggest-stems-1.md","Order":1}],"Id":"0d491acc-e42b-4c22-9bde-4ef4e446aac4","Path":null,"Order":47,"CategoryType":0,"Icon":null,"Title":"Guides, Measurement, Stems","Languages":[{"Code":"en","Title":"Guides, Measurement, Stems","Slug":"guides-measurement-stems","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"144a6831-2ab8-4604-8176-800fe773ec8b","Path":"add-layers-and-masters-1.md","Order":4},{"Id":"4f4f8cdb-5ca6-4c0d-9bad-c05dd19c6763","Path":"reinterpolate-1.md","Order":10},{"Id":"fe910078-3b28-4d93-b9cd-dc45497ebabc","Path":"add-variation-1.md","Order":1},{"Id":"b6119621-a891-45db-8f85-2b8a257c4edf","Path":"layers-visibility-1.md","Order":6},{"Id":"90b5f3cf-263b-4391-92fe-4594774f02c0","Path":"match-masters-1.md","Order":7},{"Id":"f1a40fd0-3c5a-4372-9c62-227a769da5ff","Path":"matchmaker-1.md","Order":8},{"Id":"39770f9e-77ef-4e7f-9595-68952a494af4","Path":"preview-variations-1.md","Order":9},{"Id":"5e8793e8-4135-4395-b394-5680bd7b49a9","Path":"axis-graph-1.md","Order":2},{"Id":"80f9fd30-c80d-4478-b020-827112841ee2","Path":"rename-masters-1.md","Order":11},{"Id":"22976fc0-7ab2-4795-b7ae-9c061b483ad9","Path":"axis-instances-from-masters-1.md","Order":3},{"Id":"379f8451-7057-49d3-be5b-53a5a93df2c2","Path":"layers-in-new-glyphs-1.md","Order":5}],"Id":"da6d6eac-c3c0-4928-9c74-b1940130f20b","Path":null,"Order":25,"CategoryType":0,"Icon":null,"Title":"Layers and Variations","Languages":[{"Code":"en","Title":"Layers and Variations","Slug":"layers-and-variations","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d8ef22d8-56ab-406c-8c82-71f6e825e6f5","Path":"more-improvements-to-autotrace-and-bitmap-images-1.md","Order":2},{"Id":"57886b0e-4cfa-4829-963b-ead6c247a0be","Path":"build-the-initial-contours-1.md","Order":1},{"Id":"3f868386-978d-449c-986a-46c3234f3e92","Path":"postprocess-the-initial-contours-1.md","Order":4},{"Id":"070c9e96-a0e2-4d72-b5f0-e826e391c04a","Path":"postprocess-the-image-1.md","Order":3},{"Id":"bae6da22-b8ce-4eb6-b64e-84e85b0509e4","Path":"prepare-the-image-1.md","Order":5}],"Id":"8c295448-9500-41cc-b2ec-6bf82af31698","Path":"bitmaps-and-autotrace.md","Order":63,"CategoryType":1,"Icon":null,"Title":"Bitmaps and Autotrace","Languages":[{"Code":"en","Title":"Bitmaps and Autotrace","Slug":"bitmaps-and-autotrace","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d099787b-6b14-4c5b-a3fb-ceb7d38ba6da","Path":"quick-help-4.md","Order":2},{"Id":"778ac0c3-994d-4fe2-af39-1ba02c542875","Path":"app-start-and-macos-10-1.md","Order":1}],"Id":"8aa44b97-b722-4d99-9ba9-80c98ee0a7b4","Path":null,"Order":55,"CategoryType":0,"Icon":null,"Title":"General","Languages":[{"Code":"en","Title":"General","Slug":"general-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d25ba37a-08bd-4c90-816f-7ded98b7dad4","Path":"new-jsonbased-copypaste-system.md","Order":1}],"Id":"a70bae16-4732-47e1-abff-432640a62871","Path":"copy-paste.md","Order":56,"CategoryType":1,"Icon":null,"Title":"Copy-paste","Languages":[{"Code":"en","Title":"Copy-paste","Slug":"copy-paste","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0c3ac3cf-139e-48e0-9b40-1c048da20de7","Path":"looped-corners-1.md","Order":3},{"Id":"eaf24578-0619-4b1c-99f7-054a47ee1755","Path":"genius-nodes-and-power-nudge.md","Order":2},{"Id":"ead91340-c630-4a81-b917-f3d4f1470919","Path":"contour-tool-cheat-sheet-1.md","Order":1},{"Id":"658185bb-d859-4170-a940-1e351c04267d","Path":"measurement.md","Order":4},{"Id":"4541b8af-ffdf-45ab-8ade-0e0a484c0aa5","Path":"rectangle-and-ellipse-tools-1.md","Order":5},{"Id":"efddb51f-d1a4-443f-a24c-0e759dba0e8f","Path":"transform-panel-5.md","Order":6}],"Id":"0793f828-eeb7-4cc3-bba1-7ef9e09fc71b","Path":null,"Order":41,"CategoryType":0,"Icon":null,"Title":"Glyph design","Languages":[{"Code":"en","Title":"Glyph design","Slug":"glyph-design-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4f6ead7f-b044-4bd8-8266-9daacb6a157f","Path":"auto-layers-for-all-masters-and-multiple-glyphs-1.md","Order":1},{"Id":"5ff0d5ba-3371-4a5e-afb6-3142b44959df","Path":"crossmaster-components-1.md","Order":3},{"Id":"805d45c8-9219-48d5-8898-f56a4651eaaf","Path":"decomposing-composite-glyphs-1.md","Order":4},{"Id":"7c322551-0a34-448e-a35c-751d6288bf5b","Path":"copy-recipes-1.md","Order":2},{"Id":"000e6c15-15ea-4daa-8ad1-5a07813910fe","Path":"elements-6.md","Order":5},{"Id":"71caf60a-fc4e-4b78-b5b8-e3a858c4eea5","Path":"flatten-layer-and-flatten-glyph-1.md","Order":6}],"Id":"e0370c52-1ab5-4a59-a826-295fd164e1e1","Path":null,"Order":62,"CategoryType":0,"Icon":null,"Title":"Components and Auto Layers","Languages":[{"Code":"en","Title":"Components and Auto Layers","Slug":"components-and-auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8e89e1a9-75b8-4174-9c95-9a7aed969a57","Path":"opentypesvg-fonts-1.md","Order":1},{"Id":"3b0be707-3ce3-4330-b46f-879f1da0bf4a","Path":"pasting-vector-artwork-1.md","Order":2}],"Id":"e0368cae-881f-4dd2-8b47-285319163168","Path":null,"Order":53,"CategoryType":0,"Icon":null,"Title":"Importing Contents","Languages":[{"Code":"en","Title":"Importing Contents","Slug":"importing-contents","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"297e8708-a99b-4b4e-9503-b1354424206d","Path":"bitmap-fonts-4.md","Order":1},{"Id":"f319e569-ac8c-4adb-857e-22772341e8e4","Path":"glyph-names-and-unicode-2.md","Order":3},{"Id":"8fdf3672-04a8-4f88-aaf3-a5b42a2d8d29","Path":"python-scripting-2.md","Order":5},{"Id":"ae032671-d041-4078-80b6-66747fe85917","Path":"open-and-export-1.md","Order":4},{"Id":"1a4c63ff-a626-4c8e-b43e-7b2bb9d8596e","Path":"user-interface-6.md","Order":6},{"Id":"9c7478c9-e06d-4045-94ae-8049e32b5fd2","Path":"varia.md","Order":7},{"Id":"f361ff21-4d8f-4173-8347-d559a17cd25b","Path":"fonts-panel-3.md","Order":2}],"Id":"e92b1c1d-c5e7-4643-9eda-0b48810bf344","Path":null,"Order":42,"CategoryType":0,"Icon":null,"Title":"Other","Languages":[{"Code":"en","Title":"Other","Slug":"other-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a0255998-b7ab-4f08-9f87-4b17d4a07468","Path":"conditional-glyphs-rvrn-rules-1.md","Order":6},{"Id":"1443bedd-c077-44ec-affe-6ae79d42e743","Path":"sparse-masters-intermediate-masters-1.md","Order":16},{"Id":"945e8ae4-ae1f-4094-9201-69d63bea55e3","Path":"matchmaker-2.md","Order":17},{"Id":"964065cc-ccf2-48d7-8bf0-8c930855dfa5","Path":"anisotropic-interpolation-separate-axis-locations-for-xy-coordinates-1.md","Order":5},{"Id":"f94d4bcf-408f-41a1-ac38-863fae2eef1b","Path":"match-when-editing-2.md","Order":9},{"Id":"e2886567-d873-45b5-a5af-83fc6c3b6c2d","Path":"copy-to-masters-1.md","Order":7},{"Id":"5a116ae0-e1f0-4639-a470-f840003eb086","Path":"variations-panel-6.md","Order":10},{"Id":"bd479ded-efed-448f-9e35-20f9512601e6","Path":"notes-about-conditional-glyph-substitution-1.md","Order":12},{"Id":"50a53dfb-9dfc-4aca-ac8d-91cf72844545","Path":"show-inactive-layers-as-wireframes-1.md","Order":13},{"Id":"ed639beb-2a3d-4728-89df-f0116ed948e3","Path":"tilde-tags-1.md","Order":14},{"Id":"138a4b1e-4af6-49fd-bce2-ffa11f0ea745","Path":"preview-panel-content-masters-1.md","Order":1},{"Id":"a27a583b-13b7-4582-9429-3937efdf885e","Path":"layers-masters-panel-2.md","Order":8},{"Id":"c15c968f-8b75-4b69-91f5-d0abf757bb14","Path":"variation-panel-1.md","Order":3},{"Id":"bc33e5f8-a278-4b8a-bd66-630ae4a3a5bc","Path":"spacing-4.md","Order":4},{"Id":"f16ba813-0a93-4403-b34f-84abdb96884f","Path":"axis-graph-2.md","Order":2},{"Id":"d51f2829-4ad7-40c4-9ee3-6345d81d4298","Path":"nonmatching-glyphs-in-font-window-sidebar-1.md","Order":11},{"Id":"998e2737-1821-47ac-8b87-3e3cfa9238a3","Path":"variation1-1.md","Order":15}],"Id":"fceaeae9-6654-4880-b26c-77c94f715d2f","Path":null,"Order":40,"CategoryType":0,"Icon":null,"Title":"Variation","Languages":[{"Code":"en","Title":"Variation","Slug":"variation-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"757569ac-d423-4644-b0bc-054cf6892f3e","Path":"glyphs-and-opentype.md","Order":6},{"Id":"15c96410-59e7-421c-937f-cbee4b61d09b","Path":"fonts-and-variations.md","Order":4},{"Id":"c3436e48-c694-469d-a914-69c7fdf8d8f1","Path":"editing-glyph-drawings.md","Order":3},{"Id":"e9026d54-bbd5-4280-b1b6-f225f5f085c4","Path":"highlights1-1.md","Order":2},{"Id":"89f218ea-f35c-47a9-b5db-2b89b899679d","Path":"highlights1.md","Order":1},{"Id":"0920948f-8c89-4ef0-9100-749b313f9f3d","Path":"glyph-design-3.md","Order":5},{"Id":"ace137e7-8180-4776-9ce3-22eb35cbe84b","Path":"other-4.md","Order":8},{"Id":"3746a336-436a-4896-ae12-552cb14eeb04","Path":"metrics-and-kerning-5.md","Order":7}],"Id":"5144869b-8ee1-4d6b-b61e-198d0d86da58","Path":null,"Order":39,"CategoryType":0,"Icon":null,"Title":"Highlights","Languages":[{"Code":"en","Title":"Highlights","Slug":"highlights","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"45002fdb-5864-4fca-9885-00b2dcf8af38","Path":"fit-artwork-section-1.md","Order":1},{"Id":"e41f8ba2-1bbc-4653-a115-53e6177259bd","Path":"placing-artwork-2.md","Order":3},{"Id":"2ff90f0d-2268-41d9-9894-b0ea009ed60c","Path":"vector-artwork-section-1.md","Order":4},{"Id":"875d0d74-ca8f-4110-8a4a-da9367f28387","Path":"keep-artwork-size-section-1.md","Order":2}],"Id":"35802a65-8617-4814-9647-dda2748d6c7a","Path":null,"Order":43,"CategoryType":0,"Icon":null,"Title":"Placing artwork","Languages":[{"Code":"en","Title":"Placing artwork","Slug":"placing-artwork","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9deeee0c-de16-4686-aae3-3b6704458099","Path":"glyph-names-8.md","Order":1},{"Id":"50a2d4b3-5759-4b17-b98b-eca92b1356ff","Path":"spaces-in-tag-names.md","Order":2},{"Id":"08a17d16-0eaf-42fd-b333-257475b846d2","Path":"unicode-in-cjk-fonts-1.md","Order":3}],"Id":"c52541a8-54dc-46ae-90a0-e4480e483295","Path":null,"Order":49,"CategoryType":0,"Icon":null,"Title":"Glyphs & tags","Languages":[{"Code":"en","Title":"Glyphs & tags","Slug":"glyphs-tags","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bdf2bf80-92f6-45be-957f-7c399eec3490","Path":"make-existing-glyphs-blank-2.md","Order":2},{"Id":"566bc59c-fcb7-4038-abf2-a263443d7e31","Path":"create-a-new-blank-glyph.md","Order":1}],"Id":"982bab19-acdc-4c7c-ab8e-360a7e2ad3de","Path":null,"Order":28,"CategoryType":0,"Icon":null,"Title":"Make Blank Glyphs","Languages":[{"Code":"en","Title":"Make Blank Glyphs","Slug":"make-blank-glyphs","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"adfa8088-3870-4717-8b1b-860e983c9d95","Path":"color-fonts-3.md","Order":1},{"Id":"f2fccd15-e65a-4ef1-8ccd-1ef8e1c7f800","Path":"font-info-slope-and-sorting-of-styles-in-font-menus-1.md","Order":2},{"Id":"de79996f-519d-4f28-bde0-cab59755ba3d","Path":"hinting-in-otf-2.md","Order":3}],"Id":"68bedbe5-906c-4c1d-949f-9ebe9cc4dde4","Path":null,"Order":32,"CategoryType":0,"Icon":null,"Title":"Export","Languages":[{"Code":"en","Title":"Export","Slug":"export-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a04b332d-bda1-492f-8840-fd2f86d369d4","Path":"autohinting-3.md","Order":1},{"Id":"74822e14-2c24-4c97-937d-bc7c6966d183","Path":"updated-friendly-glyph-names.md","Order":5},{"Id":"2f129d21-0b74-411c-b484-c54b8da6ecaf","Path":"replace-component-1.md","Order":4},{"Id":"abd05745-6091-4429-8dde-3739f0e02235","Path":"font-window-filters-3.md","Order":2},{"Id":"7af42cdb-8d4d-4862-9b62-4ee4e3596331","Path":"preview-panel-8.md","Order":3}],"Id":"580f72f6-df42-4788-94ff-7753a722647f","Path":null,"Order":50,"CategoryType":0,"Icon":null,"Title":"Additional Improvements","Languages":[{"Code":"en","Title":"Additional Improvements","Slug":"additional-improvements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"602162d4-ad48-43b1-83ee-480db7e5c98a","Path":"nodes-at-extremes-3.md","Order":1},{"Id":"057dbf46-1fe4-4fa7-93f0-4dd8c89c17f0","Path":"precision-drag.md","Order":2}],"Id":"ae492e20-88bc-4f01-bdcc-4e38846755d1","Path":null,"Order":52,"CategoryType":0,"Icon":null,"Title":"Glyph Drawing","Languages":[{"Code":"en","Title":"Glyph Drawing","Slug":"glyph-drawing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4567b2f2-1ebb-42d0-9a53-8a04192fef2b","Path":"find-characters-and-categories-1.md","Order":8},{"Id":"e2a23b98-4f88-462f-a634-1958a9fc6654","Path":"exporting-looped-corners-1.md","Order":5},{"Id":"90a92a34-c34d-4793-bab7-fe4ff745dd7a","Path":"move-to-trash-recycle-bin-1.md","Order":10},{"Id":"47cea5b8-3985-4ca4-9881-27d91ca44fa4","Path":"export-profiles-3.md","Order":4},{"Id":"10e43348-f971-4fbc-b28e-d5ef572c0ece","Path":"exporting-variable-fonts-1.md","Order":6},{"Id":"df1145b1-6eee-4436-9c94-81e775230ce9","Path":"font-dimensions-3.md","Order":9},{"Id":"a8b5b800-5c44-4eb4-9797-079412c1bd7b","Path":"family-name-visible-when-exporting-instances-1.md","Order":7},{"Id":"8d1f757a-c9f2-4b84-a329-1ca316de9113","Path":"quick-help-3.md","Order":12},{"Id":"e2c5ea7e-cf9f-4b0f-887b-34634db3854c","Path":"bundled-adobe-fdk-for-opentype-afdko.md","Order":1},{"Id":"8a03f04b-c6ac-4dd8-a5db-f88f999ae765","Path":"tips-1.md","Order":13},{"Id":"5972d428-b9f2-4a06-bf50-ef788e04567d","Path":"color-fonts-4.md","Order":2},{"Id":"98362564-59c5-492c-a9bd-d8e5e873126e","Path":"panels-list-3.md","Order":11},{"Id":"8ca0bb8d-0572-4292-b1af-804b66907ccf","Path":"user-interface-7.md","Order":14},{"Id":"4bbcfdb8-56ed-4b9b-966f-6a11d72c02a0","Path":"export-and-import-encoding-1.md","Order":3}],"Id":"60f01cf6-2c97-44a2-ab19-92bb71701ce5","Path":null,"Order":48,"CategoryType":0,"Icon":null,"Title":"Encodings & font filters","Languages":[{"Code":"en","Title":"Encodings & font filters","Slug":"encodings-font-filters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"12629802-2849-4e00-8409-361435370f85","Path":"scrolling-1.md","Order":4},{"Id":"7b3e386c-3265-452f-89f6-b5e56320b7f1","Path":"composite-glyphs-and-auto-layers-1.md","Order":7},{"Id":"a60b1030-53ea-45bb-8a2e-b5f7b93db2cb","Path":"cell-size-1.md","Order":1},{"Id":"1e67763d-0a55-48a7-903b-ca60c0195ac5","Path":"elements-5.md","Order":9},{"Id":"1e8767fb-2852-456c-b9be-e02c48e26c91","Path":"variation-3.md","Order":15},{"Id":"ca953cdd-2943-4819-be77-57c5a20249a8","Path":"elements-panel-4.md","Order":8},{"Id":"3e401c62-5d80-43cc-8e0f-7bdeefc8eef7","Path":"other-improvements-2.md","Order":12},{"Id":"09ebf214-8fa4-441e-80b3-50589e233449","Path":"brush-tool-6.md","Order":6},{"Id":"de90a20f-4fe8-48c6-8c1c-126c8e627fc0","Path":"glyph-tags-2.md","Order":3},{"Id":"73bc05f5-4937-499e-84cf-726382cfd543","Path":"text-in-preview-panel-1.md","Order":14},{"Id":"496167cf-ce2d-459a-ad77-8ffa3bf6e309","Path":"paste-special-2.md","Order":13},{"Id":"1d68d7e9-b217-43b9-9985-2ef05a890072","Path":"hints-5.md","Order":11},{"Id":"9a999f8f-f68f-4748-ad20-f40ca7930ba1","Path":"windows-with-multiple-monitors-1.md","Order":5},{"Id":"ae254d09-a4f4-46ed-8fba-e192e822c759","Path":"glyph-names-7.md","Order":2},{"Id":"f10a1b66-b4ff-462f-9793-0e0e81185055","Path":"gallery-panel-4.md","Order":10}],"Id":"1e1da29a-4d9c-446a-af67-83e96bf52326","Path":null,"Order":31,"CategoryType":0,"Icon":null,"Title":"Other Improvements","Languages":[{"Code":"en","Title":"Other Improvements","Slug":"other-improvements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9c4c5150-020a-46fe-ae14-66ae14ce31bf","Path":"slanting-anchors-1.md","Order":7},{"Id":"c4633863-ce53-4abb-a048-99c360a7ed4f","Path":"copying-anchors-and-pins-1.md","Order":1},{"Id":"cb23394f-6081-4fec-82ae-636084e134c1","Path":"moving-anchors-and-contour-selections-1.md","Order":3},{"Id":"d9fc51d2-2e33-4feb-8481-b1ee8aaf56a1","Path":"removing-anchors-1.md","Order":4},{"Id":"2ac42d2c-9689-4ccf-b2b6-151f6075bee9","Path":"exporting-mark-attachment-features-1.md","Order":2},{"Id":"30b7c56b-2224-4c4e-b316-db9b26e52563","Path":"selecting-anchors-and-pins-1.md","Order":5},{"Id":"04babf93-a96f-40e1-a5ca-35d439e3544e","Path":"show-mark-attachment-no-longer-normalizes-text-1.md","Order":6}],"Id":"a91b2123-1768-4767-a9a9-ccad5a097715","Path":null,"Order":54,"CategoryType":0,"Icon":null,"Title":"Anchors, Pins and Mark Attachment","Languages":[{"Code":"en","Title":"Anchors, Pins and Mark Attachment","Slug":"anchors-pins-and-mark-attachment-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"963dccfc-4743-4dbe-9f90-d88e20952274","Path":"linked-nodes-and-power-guides-1.md","Order":2},{"Id":"f696c055-132b-43d5-95fb-f3c235dd78eb","Path":"manually-adding-hints-with-the-magnet-tool-1.md","Order":3},{"Id":"7c04550a-19fc-436c-b8d4-fa9773b19ae8","Path":"autohinting-4.md","Order":1}],"Id":"d3e5d526-8a4f-4d1c-b9e9-fb5e04b769e0","Path":"hints-and-power-guides.md","Order":59,"CategoryType":1,"Icon":null,"Title":"Hints and Power guides","Languages":[{"Code":"en","Title":"Hints and Power guides","Slug":"hints-and-power-guides","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"10e989e0-0745-4234-8e27-ccad9eb1d353","Path":"copypaste-and-import-artwork-in-pdf-format-1.md","Order":1},{"Id":"4da3d2d6-996c-4700-a188-e201bebe63b8","Path":"improved-conversion-from-svg-to-editable-contours-1.md","Order":2},{"Id":"17ff7920-7ff3-49a6-8b8e-86ccc71c88f3","Path":"pasteimport-of-vector-artwork-coordinate-rounding-1.md","Order":3},{"Id":"27ce4403-8d07-4837-9e52-1c547ad814e3","Path":"pasteimport-of-vector-artwork-monochrome-artwork-1.md","Order":4}],"Id":"7b1ed4e2-aafd-43ae-98f8-8ee7013082ca","Path":null,"Order":61,"CategoryType":0,"Icon":null,"Title":"Vector artwork","Languages":[{"Code":"en","Title":"Vector artwork","Slug":"vector-artwork","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ab4133ee-486d-4b8f-980a-60ea7c5f6695","Path":"fontlab-7-4.md","Order":1},{"Id":"b6213dc7-2137-4222-aba1-453a090539bd","Path":"bug-fixes-5.md","Order":2}],"Id":"a0d0a76e-5aa9-4a5d-bd9a-e5b9285f7ded","Path":"bug-fixes.md","Order":45,"CategoryType":1,"Icon":null,"Title":"Bug fixes","Languages":[{"Code":"en","Title":"Bug fixes","Slug":"bug-fixes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7eaf9171-fd9e-4e84-b8a0-4272d7eddb2f","Path":"use-classes-panel-classes-tags-and-virtual-tags-in-feature-code-1.md","Order":14},{"Id":"30db11ea-e72b-4c0d-89e1-b6d32e4be1d2","Path":"naming-glyphs-for-auto-feature-generation-1.md","Order":11},{"Id":"3761d6a6-4488-4173-9693-fe2755ecf839","Path":"interpolable-positioning-features-cpsp-etc-1.md","Order":9},{"Id":"52efef5b-334c-41b7-bfce-fce0fcf7014d","Path":"adding-custom-code-to-autogenerated-feature-definitions-1.md","Order":3},{"Id":"7187b497-1788-4fbf-825f-1154c53f9875","Path":"gdef-glyph-definition-classes-1.md","Order":8},{"Id":"670d5857-1701-46d0-bd12-89539e8e05d7","Path":"auto-opentype-features-and-the-features-panel-1.md","Order":5},{"Id":"9f15dcc4-dee0-4dae-8b9e-bcc8a4fc1bf1","Path":"adding-custom-kerning-lookups-kern-1.md","Order":4},{"Id":"f58385cb-4a4a-4a97-9b20-e651dcfe8822","Path":"updating-auto-features-1.md","Order":13},{"Id":"dfe770e6-31f7-4d55-af9a-24ea276db788","Path":"adding-autogenerated-code-to-existing-feature-definitions-1.md","Order":2},{"Id":"d71f983f-955d-42af-a2df-dcd673759b07","Path":"automatically-generate-code-for-common-opentype-features-1.md","Order":7},{"Id":"2f96abf6-e1a7-4548-bcd9-8342749906b6","Path":"adding-auto-features-1.md","Order":1},{"Id":"bfaa0021-c997-47e8-a09e-ef2beba6be6a","Path":"autogenerated-portion-of-a-feature-definition-1.md","Order":6},{"Id":"1a202912-820f-4cf6-bcf9-7c293ff1fa36","Path":"using-tags-and-classes-in-feature-code-1.md","Order":15},{"Id":"4e168373-d2e8-4e39-a1a3-0cf90fb13f61","Path":"modifying-auto-feature-definitions-1.md","Order":10},{"Id":"89204c4f-e856-440a-a217-718628f8e2a9","Path":"update-current-auto-feature-or-all-auto-features-1.md","Order":12},{"Id":"ced01710-b06d-4433-872f-3e1f8b2c5780","Path":"view-features-that-are-or-can-be-aurogenerated-1.md","Order":16}],"Id":"c278e018-0cdb-418d-9928-c42b418cdf4b","Path":null,"Order":64,"CategoryType":0,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features-5","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f279238d-e943-41b7-8471-3e450d577da5","Path":"fill-outline-nodes-1.md","Order":6},{"Id":"311b33b5-eb82-4fb6-ad39-066496b36548","Path":"current-glyph-placeholder-1.md","Order":1},{"Id":"54c794cf-dd19-48cc-89d1-11fb418a1f11","Path":"color-4.md","Order":7},{"Id":"aff166fd-0dba-4743-bf0d-06276b62d347","Path":"content-settings-1.md","Order":4},{"Id":"2f2ff7df-fbd1-484b-80c7-f5f7b4c0680b","Path":"show-names-1.md","Order":9},{"Id":"e45acbc4-d1b4-48a2-8ac1-2d7bde1006c1","Path":"tracking-slant-stretch-1.md","Order":10},{"Id":"f406fb6e-a2b5-4aea-853f-c2ed94ef88b2","Path":"xray-view-blur-1.md","Order":11},{"Id":"b8fb7f7a-c230-468c-883e-8fa93ede2536","Path":"preview-panel-sidebar-2.md","Order":3},{"Id":"255f9997-24b1-46fa-941e-79e66c17fd40","Path":"apply-features-1.md","Order":8},{"Id":"ad1e1a4b-0031-4a51-9dc8-21f3a73f0f9f","Path":"export-preview-panel-content-to-pdf-1.md","Order":5},{"Id":"22ecfdfa-96d2-4287-86f0-b57a9be79331","Path":"align-and-flip-settings-1.md","Order":2}],"Id":"7086ffa0-0d36-4a30-b007-0541558e3d70","Path":"preview-panel-4.md","Order":27,"CategoryType":1,"Icon":null,"Title":"Preview panel","Languages":[{"Code":"en","Title":"Preview panel","Slug":"preview-panel-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9fc21e6d-c850-4fd6-9c1a-da017c4f68ea","Path":"lib-in-python-1.md","Order":5},{"Id":"eeb13fbc-bb51-4920-9acd-95b262ab80f6","Path":"fontlab-and-fontgate-1.md","Order":4},{"Id":"864e9fb8-d304-494a-b232-4a88008c2880","Path":"fl-1.md","Order":3},{"Id":"c5ccc99c-fef3-4069-b048-bc7f968de37b","Path":"python-api-1.md","Order":7},{"Id":"6233ad8a-7c5a-4310-b82b-43c9c7e6e94b","Path":"typerig-3.md","Order":9},{"Id":"2b9ded6c-f741-4c83-b8f8-044a698497e6","Path":"preferences-in-python-2.md","Order":6},{"Id":"59afef56-f6fb-4deb-93bd-80f55b11b854","Path":"anchors-in-python-1.md","Order":1},{"Id":"dd7b6baa-2d53-4f97-a690-03418504bb3d","Path":"autokerning-in-python-1.md","Order":2},{"Id":"1868ed5f-69e1-4556-aca4-98aa5bf7d976","Path":"pythonqt-2.md","Order":8}],"Id":"36d1c3c4-3580-4ace-bd6c-5d1937e22a6a","Path":null,"Order":22,"CategoryType":0,"Icon":null,"Title":"Improvements","Languages":[{"Code":"en","Title":"Improvements","Slug":"improvements-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f88d7345-c57d-48dc-b0e5-f433a3771971","Path":"metric-expressions-in-glyph-panel-1.md","Order":9},{"Id":"391597b1-ede3-40aa-85ce-4316b1fa4dd0","Path":"glyph-names-and-unicode-1.md","Order":6},{"Id":"63d3781c-1634-4e28-b740-621762953a4d","Path":"import-metrics-1.md","Order":7},{"Id":"a26da742-4773-46c5-97d3-c58fad272a81","Path":"copy-expressions-to-masters-in-glyph-panel-1.md","Order":3},{"Id":"0b44fa9a-2c95-4d31-bb71-2db704ef4a9e","Path":"variations-5.md","Order":15},{"Id":"010077c9-0f93-42a3-ac83-b4d4bf08919d","Path":"shift-anchors-with-contours-1.md","Order":12},{"Id":"dfbc5ca2-a8a7-49bf-bbea-f16bac770b56","Path":"opposite-sidebearing-1.md","Order":11},{"Id":"4bc04976-ba9b-4910-b44b-eb81ba73f2ca","Path":"combine-contours-to-element-1.md","Order":2},{"Id":"7c6bb19b-78c5-44a0-9c0e-f394edde82f8","Path":"custom-appearance-or-anchors-and-pins-1.md","Order":4},{"Id":"7d56619c-de29-4156-bcae-07e924caf2fc","Path":"unfill-element-references-in-element-groups-1.md","Order":14},{"Id":"e341c228-4af3-44b6-9caf-23a2602fe75a","Path":"negative-widths-1.md","Order":10},{"Id":"c6076104-8d06-4f56-9241-f750fcda0950","Path":"font-info-italic-angle-1.md","Order":5},{"Id":"91b8e74b-04ce-450f-99ac-9d2f257e959b","Path":"stroke-2.md","Order":13},{"Id":"0d92a24c-1ae8-4253-9fc3-98b2b0bdf904","Path":"join-open-contours-across-elements-1.md","Order":8},{"Id":"000c78ba-fed9-463a-be46-333427fffcbe","Path":"appearance-of-automaticallynamed-anchors-1.md","Order":1}],"Id":"31fd26e4-e029-417f-b7d8-4ae9a67e119a","Path":null,"Order":35,"CategoryType":0,"Icon":null,"Title":"Elements","Languages":[{"Code":"en","Title":"Elements","Slug":"elements-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1b0d4dac-9b87-48db-807f-79375699489b","Path":"additions-to-the-fontlab-7-python-api-1.md","Order":1},{"Id":"e530dde5-1b68-4b44-ae5f-6ce6b78d849b","Path":"typerig-with-delta-machine-1.md","Order":5},{"Id":"02c984b5-0e67-49e1-9c08-d643246f7c77","Path":"execute-1.md","Order":2},{"Id":"98212d0a-6d80-4b31-8ca2-8b4156d32bfc","Path":"scripting-panel-4.md","Order":4},{"Id":"5084ecdc-18ef-4790-9cc7-ecf646af50e3","Path":"exporting-fonts-via-python-1.md","Order":3}],"Id":"ea4f7496-2e1f-41e1-a28b-da4d1d567ea8","Path":null,"Order":37,"CategoryType":0,"Icon":null,"Title":"Python scripting","Languages":[{"Code":"en","Title":"Python scripting","Slug":"python-scripting-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8a2c7039-e295-4200-a811-e6a3ca0e5b94","Path":"paste-or-import-vector-artwork-1.md","Order":14},{"Id":"31201253-941f-4b1f-999b-e1cb70b6f533","Path":"anchors-3.md","Order":19},{"Id":"e2883797-6506-4be5-8388-d307086e6ba6","Path":"curvature-and-smoothness-1.md","Order":3},{"Id":"1556ef63-c30d-494f-a6a4-de035a8faea2","Path":"fontaudit-9.md","Order":17},{"Id":"ab3917c2-21d7-459a-b1bb-18ac8ebff732","Path":"autodetection-of-smooth-nodes-g1-1.md","Order":18},{"Id":"7e0173b1-137f-42dd-b057-95cff7f2d0f6","Path":"knife-tool-duplicate-nodes.md","Order":8},{"Id":"7bccb869-0f8e-40d3-ab76-2a9439ec560e","Path":"handle-selection.md","Order":9},{"Id":"68698a77-2e34-4903-b661-acf045ebc878","Path":"g0-continuity.md","Order":16},{"Id":"2e9a2199-73a6-4824-8db1-80886ac566ea","Path":"genius-nodes-power-nudge-servant-1.md","Order":20},{"Id":"cd9ddb77-63a4-4077-9b90-4f32bcdf44fe","Path":"scissors-tool-simple-ink-traps-and-blunt-corners-1.md","Order":5},{"Id":"6a2ff995-49b5-45da-b70a-53ad204ba0ab","Path":"looped-corners-2.md","Order":7},{"Id":"8ad22a75-06ba-40bb-a478-a561e5f5d2c9","Path":"g3-curve-continuity-smooth-nodes-with-harmonized-handles-1.md","Order":10},{"Id":"3b07df7e-19eb-44db-b5aa-36f9dd01b74f","Path":"harmonizing-nodes-g2-and-handles-g3-1.md","Order":11},{"Id":"640883cd-734b-41f1-9f80-cee1a5291378","Path":"g0-g1-g2-g3-curve-continuity-1.md","Order":15},{"Id":"90a8a611-4d22-42ab-8ca4-4ba3d1be24f2","Path":"working-with-fractional-coordinates-1.md","Order":1},{"Id":"676e1b32-111c-424d-b0cd-a439bf603d5d","Path":"relative-handle-positions-2.md","Order":6},{"Id":"3ef1a8e0-4aa1-4c60-a9e9-92e72ba624c3","Path":"g1-curve-continuity-smooth-nodes.md","Order":13},{"Id":"26beaee4-e66f-42d1-9936-c438b5bd7ce9","Path":"unfill-looped-corners-1.md","Order":4},{"Id":"c0beba84-0c02-453d-9724-bd1d3b7f519a","Path":"g2-curve-continuity-harmonized-smooth-nodes.md","Order":12},{"Id":"d2d0c12f-3b04-4a80-b695-d0df37d4416a","Path":"unlink-node-1.md","Order":2}],"Id":"4231a573-7a69-4b6d-af97-6d4f1273828f","Path":null,"Order":46,"CategoryType":0,"Icon":null,"Title":"Editing contours","Languages":[{"Code":"en","Title":"Editing contours","Slug":"editing-contours-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bd11c620-8210-4a45-bfdc-dda37214d54b","Path":"testing-languagedependent-opentype-features-locl-1.md","Order":5},{"Id":"49ad7634-65b0-47e9-9b8d-20d4ea5c8df5","Path":"printing-3.md","Order":3},{"Id":"2140eb06-2fa3-42a3-a901-88a9998f974d","Path":"typing-glyphs-in-glyph-window-1.md","Order":8},{"Id":"269d2bc7-ee0c-49fa-8f52-1483b43af309","Path":"copy-unicode-text-glyph-names-or-auto-layer-recipes-1.md","Order":1},{"Id":"1e44c470-2c99-48c5-bd8a-0c18c5c84eea","Path":"layers-and-color.md","Order":2},{"Id":"2ff8777f-30ad-4619-ab24-323efa1c9715","Path":"text-copy-text-as-1.md","Order":6},{"Id":"81207cc6-1065-4067-b262-49068c9834e2","Path":"text-features-selector-1.md","Order":7},{"Id":"70a44a74-33fb-4608-8506-2712bc573f98","Path":"test-script-and-languagespecific-opentype-features-1.md","Order":4}],"Id":"5ef0ace7-d9d3-49a9-bbcc-3687e90948b0","Path":null,"Order":65,"CategoryType":0,"Icon":null,"Title":"Text","Languages":[{"Code":"en","Title":"Text","Slug":"text-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"82861575-c1ba-47a8-9ba0-b04f5f5fc554","Path":"set-kerning-class-1.md","Order":13},{"Id":"55ae4e19-f1e1-455b-ac86-73528fac6696","Path":"linked-metrics-1.md","Order":6},{"Id":"813d5eb2-e03c-4d96-b11e-e23d77337600","Path":"metrics-and-kerning-4.md","Order":9},{"Id":"41c7ceec-afce-4d61-afcc-22a1069c9199","Path":"measurement-line-4.md","Order":3},{"Id":"d98cc60f-4dd6-4fd2-87cd-74d5b7abe570","Path":"quick-autospacingautokerning-the-key-1.md","Order":8},{"Id":"1325f6b2-f95d-47a2-84e6-26f729ee1c78","Path":"linking-metrics-1.md","Order":10},{"Id":"8554ef1b-0156-425d-ae19-2ad3892808c5","Path":"bothsided-kerning-class-1.md","Order":12},{"Id":"728c8e50-b081-4525-9867-bfac229223d3","Path":"warnings-about-problematic-linked-metrics-1.md","Order":14},{"Id":"cbd2e7ac-6a01-4d3b-9780-a07cab7c14e3","Path":"pairs-phrases-panel-2.md","Order":11},{"Id":"b85a0c4b-dac1-4dd2-85b2-b643295ddad1","Path":"linked-metrics-and-live-metrics-1.md","Order":2},{"Id":"a2bded88-859b-492d-8653-7811a08ca1a8","Path":"metrics-table-3.md","Order":4},{"Id":"45f8e8a1-91c3-448b-96bc-e93496056044","Path":"copypaste-sidebearings-1.md","Order":5},{"Id":"ce0a4ed3-ac06-477a-a90a-f89635bfc4f2","Path":"kerning-10.md","Order":7},{"Id":"2eaa7982-b1b3-4f44-992f-c8c13ff109c5","Path":"classes-and-kerning-1.md","Order":1}],"Id":"e2a4c991-1ce7-4479-8130-01ca4a2c78b9","Path":null,"Order":29,"CategoryType":0,"Icon":null,"Title":"Metrics","Languages":[{"Code":"en","Title":"Metrics","Slug":"metrics-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"39881071-bea5-4123-a129-3ed42a40b419","Path":"note.md","Order":34},{"Id":"68312e25-40ea-4f36-9999-60a0b640ad49","Path":"bug-fixes-3.md","Order":33},{"Id":"1c5fb2aa-ac46-4465-92e5-6c4fc36224e5","Path":"bug-fixes-4.md","Order":38},{"Id":"6660593d-0973-4431-9669-e456cec8d30c","Path":"bug-fixes-2.md","Order":21},{"Id":"7642b4b3-d249-4a86-b3e4-b26e1181fca8","Path":"highlights-3.md","Order":2}],"Id":"c8d0273d-0c3c-456e-820e-ed8886d12eaf","Path":"fontlab-7.md","Order":1,"CategoryType":1,"Icon":null,"Title":"FontLab 7","Languages":[{"Code":"en","Title":"FontLab 7","Slug":"fontlab-7","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"34a92999-cf04-41a2-8849-5fff430e2270","Path":"snapping-knife-1.md","Order":8},{"Id":"e3547da0-1577-447b-ae36-c90f4e4ac01a","Path":"selection-frame-1.md","Order":7},{"Id":"661ec75e-deae-462d-a83b-2a57816bc09f","Path":"glyph-window-oncanvas-text-fields-1.md","Order":2},{"Id":"952a25ab-217c-425d-8fe9-d35fe2cae946","Path":"highprecision-nonnode-editing-1.md","Order":4},{"Id":"af06e103-3088-494d-86bf-fbbb96c847c9","Path":"remove-overlap-4.md","Order":6},{"Id":"9c70f030-6305-407a-8c2d-41ea17b804d7","Path":"contour-operations-in-the-node-panel-1.md","Order":1},{"Id":"e3dfeace-dced-495b-869d-cf4b541d3c1c","Path":"italic-contours-follow-italic-angle-1.md","Order":5},{"Id":"34c3fe58-d466-4ff4-b761-8949639a2a1b","Path":"glyph-window-zooming.md","Order":3}],"Id":"35688f3c-e83b-4500-8202-5c3f3c1c498b","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Drawing and glyph editing","Languages":[{"Code":"en","Title":"Drawing and glyph editing","Slug":"drawing-and-glyph-editing","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"45f8424c-3507-4398-80ab-49a9613cfb66","Path":"better-optical-separation-1.md","Order":1}],"Id":"677d7593-237d-4d59-a062-99bf95dc92ee","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"Importing Artwork","Languages":[{"Code":"en","Title":"Importing Artwork","Slug":"importing-artwork-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"850a8cde-e705-4758-90b3-b204706ffcae","Path":"sketchboard-and-text.md","Order":9},{"Id":"1a42dfde-d960-4926-9d26-dc325218c951","Path":"additional-bug-fixes-build-7016.md","Order":13},{"Id":"b3b48330-cbe9-43ab-8c1c-884c4e01d21c","Path":"glyphs-and-auto-layers.md","Order":4},{"Id":"1369c63d-cca4-44d1-acc4-ba503273047f","Path":"hints-and-zones.md","Order":6},{"Id":"11604c7e-9492-448a-82e4-142ef3493727","Path":"elements-and-components-2.md","Order":3},{"Id":"f70c65d3-b743-45c7-a597-d14484bd9bea","Path":"user-interface-8.md","Order":12},{"Id":"b635b4a7-cfef-4a6a-8eb1-dcc70ea54f1b","Path":"classes-and-tags-1.md","Order":1},{"Id":"17cda332-83e3-40a7-abda-109d8084b3ab","Path":"glyph-drawing-and-editing.md","Order":15},{"Id":"792f8e1c-6d18-4537-ade9-6554dd738c2d","Path":"opening-saving-and-exporting.md","Order":16},{"Id":"1cd9c93f-b5d2-469f-9f2b-23bb0647c0c9","Path":"bug-fixes-7.md","Order":17},{"Id":"01230165-9a5a-4e0d-b6d7-da5102096873","Path":"bug-fixes-6.md","Order":14},{"Id":"dede8f51-7700-4d76-90c8-b0d31c6d96d8","Path":"metrics-and-kerning-6.md","Order":7},{"Id":"b29fc7c1-c111-41f4-b5db-2bda38022528","Path":"drawing-and-glyph-editing-2.md","Order":2},{"Id":"7923a1bd-c6b2-42b3-9d80-56e1aba34161","Path":"guides-and-grid.md","Order":5},{"Id":"875023ca-2a86-4a01-99e1-60968563dcd3","Path":"truetype-hinting-5.md","Order":10},{"Id":"314e2081-f9ac-41d9-90a3-3d149b8d2de0","Path":"undo.md","Order":11},{"Id":"5d44be70-88a0-4244-98b7-f95efaf0d1c8","Path":"opening-and-exporting-fonts-1.md","Order":8}],"Id":"00e7a0a7-fdbd-4cc9-99e4-267a4ce421cf","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Bug fixes","Languages":[{"Code":"en","Title":"Bug fixes","Slug":"bug-fixes-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"fbee3cb8-7eb9-4c18-a3ce-621fa5e17610","Path":"from-glyph-window-to-font-window-1.md","Order":2},{"Id":"f82f590b-1b96-47c8-ada6-7feda581940b","Path":"sidebar-virtual-tags-and-expressions.md","Order":4},{"Id":"660daf94-7db6-4932-8c74-4080032845c2","Path":"keyboard-zooming-1.md","Order":3},{"Id":"425dce60-8c8d-4c8a-b460-3db7da9a3f8b","Path":"font-window-deleting-glyphs.md","Order":1}],"Id":"3ffec0a9-0c91-4ab7-9a20-0b3a75990c51","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Font window","Languages":[{"Code":"en","Title":"Font window","Slug":"font-window-5","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"62668bb4-2a4a-4429-b288-93f5387ec1bf","Path":"autohinting-glyphs-with-overlaps-1.md","Order":2},{"Id":"793b9f21-9b98-4057-9499-c9db200521de","Path":"problematic-zones-1.md","Order":6},{"Id":"0366c178-c7f8-4cba-a4e5-68efd5e4f381","Path":"anchors-anchor-cloud-only-for-selected.md","Order":1},{"Id":"8e185bb5-05f5-419f-a03d-0edb177abd70","Path":"guides-anchors-pins-snapping-1.md","Order":4},{"Id":"2a79c87d-f783-4c36-b311-c9e346c958d5","Path":"converting-thick-guides-to-zones-or-hints.md","Order":3},{"Id":"074d2d77-cfc3-4ea8-bafa-7c762c10acc1","Path":"measurement-markers-1.md","Order":5}],"Id":"d9520687-0b55-45ee-b056-65518a93913a","Path":"guides-hints-anchors-and-zones.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Guides, hints, anchors and zones","Languages":[{"Code":"en","Title":"Guides, hints, anchors and zones","Slug":"guides-hints-anchors-and-zones","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"24e16915-56c6-45fc-8506-150da807a8ef","Path":"glyph-window-12.md","Order":6},{"Id":"53a233a9-faed-4f13-abb5-838c8cd568a5","Path":"metrics-and-kerning-walking-in-the-glyph-window-1.md","Order":10},{"Id":"97cbefb8-6ca5-4c7e-8fb5-d63fb7a948e2","Path":"switching-masters-1.md","Order":11},{"Id":"deef0ace-0896-4e97-877a-2fb63b384a82","Path":"metrics-and-kerning-clean-view-1.md","Order":8},{"Id":"31b616e3-71b8-49e7-8fbf-27493845979c","Path":"gallery-panel-5.md","Order":3},{"Id":"46f7619e-696d-4ac1-aafd-f66e731622be","Path":"glyph-window-get-glyph-by-name-1.md","Order":4},{"Id":"33381488-c396-4dc6-869f-2feb606f5f0a","Path":"metrics-and-kerning-smart-navigation-with-the-updown-keys-1.md","Order":9},{"Id":"9a313b50-9925-45d5-8484-c80c3c89f8b9","Path":"glyph-window-pairs-and-phrases-1.md","Order":5},{"Id":"169813cf-f604-4044-abe6-7303b41c6663","Path":"anchors-in-auto-layers-and-composites-1.md","Order":2},{"Id":"a4738944-d5fb-4fe1-a583-2aa13d7f40ac","Path":"images.md","Order":7},{"Id":"96795e98-0df3-4968-92e9-b932a95c30f4","Path":"activating-components-in-glyph-window-1.md","Order":1}],"Id":"8ad12513-dc63-4fee-a490-1976ed4cc641","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Elements, components and auto layers","Languages":[{"Code":"en","Title":"Elements, components and auto layers","Slug":"elements-components-and-auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a3bc1314-71c0-4df4-8398-b802598c1c25","Path":"no-style-linking-1.md","Order":1}],"Id":"d0700c4b-cce0-4319-a221-cb0b6beb57be","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Font info","Languages":[{"Code":"en","Title":"Font info","Slug":"font-info-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6b60fe63-0889-436f-bf8e-5d4a957ba25f","Path":"kerning-class-cloud-no-longer-shown-behind-exceptions-1.md","Order":1},{"Id":"803c8293-525d-4509-b5a6-00d3f12334b2","Path":"kerning-get-existing-pairs-1.md","Order":4},{"Id":"4ea70a31-bbf1-4fee-af92-664d3ffd8f97","Path":"kerning-get-glyphs-1.md","Order":5},{"Id":"c3211447-4e06-4a65-8520-44738d601a74","Path":"kerning-get-class-pairs-or-exceptions-1.md","Order":3},{"Id":"894dda7c-843f-4738-9682-189984dd1d22","Path":"kerning-show-all-combinations-1.md","Order":6},{"Id":"9f2e6265-3ff9-4b90-aea4-c58a13da3c43","Path":"kerning-editing-kerning-1.md","Order":2}],"Id":"87c73c97-0bd0-488d-a9d3-b5ebec366606","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Kerning","Languages":[{"Code":"en","Title":"Kerning","Slug":"kerning-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4317bcf9-1d12-410d-8c71-2a62d8323067","Path":"tags-in-classes-panel-1.md","Order":6},{"Id":"15c17019-7600-4aec-811b-181bf0131b8f","Path":"virtual-tags-4.md","Order":7},{"Id":"1219b316-e931-4787-84b6-9fdc1413ae16","Path":"adding-glyphs-into-a-kerning-class-1.md","Order":1},{"Id":"f2981396-9648-4b15-80ba-9095817cd548","Path":"stdw-vs-3.md","Order":5},{"Id":"5ed0a75d-4a38-4c13-ac2f-5be6376023b7","Path":"classes-and-tags-2.md","Order":2},{"Id":"176a777a-ab2e-4a3d-a4a5-bd39be4faaeb","Path":"ghost-hints-2.md","Order":3},{"Id":"ca679f71-6dca-450c-a4f1-2039a17ed707","Path":"import-and-export-classes-1.md","Order":4},{"Id":"3f592acf-7f3f-42e4-a9d4-136c52187a14","Path":"wildcards-in-tags-search-1.md","Order":8}],"Id":"dc702bea-d47f-4126-a5bb-0e7bc16d1b83","Path":null,"Order":19,"CategoryType":0,"Icon":null,"Title":"Hinting","Languages":[{"Code":"en","Title":"Hinting","Slug":"hinting-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ca55ce6d-0400-4b9a-b400-ce353fc8ffb7","Path":"decompose-1.md","Order":3},{"Id":"619e890a-6356-4c6c-82f3-3eb487ac47d7","Path":"italic-metrics-1.md","Order":4},{"Id":"fa949ff5-e453-4a2e-a86f-c7a7a157506d","Path":"linked-metrics-2.md","Order":6},{"Id":"a51e998a-90b3-4d15-bb60-8c52917bf898","Path":"auto-layers-5.md","Order":2},{"Id":"4ba4c3c3-cabe-4859-a30a-68d163b6a016","Path":"auto-layer-and-composite-glyph-cell-icons-1.md","Order":1},{"Id":"ab6bfac8-9d0f-4db7-bd50-cc1bec8c9df6","Path":"to-references-1.md","Order":7},{"Id":"aea9d2a7-ad5a-4782-bc86-8111805a57d5","Path":"keep-source-glyphs-1.md","Order":5}],"Id":"3eae0ce1-861a-4ac5-b24d-3f0b7496564c","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"Metrics","Languages":[{"Code":"en","Title":"Metrics","Slug":"metrics-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e0984e29-31c0-4b5f-a28b-0b722dc202ee","Path":"exporting-masters-designspaceufo-opentype-variations-1.md","Order":1},{"Id":"c21cdf9d-65da-4ff5-8edd-398efe612a1c","Path":"quick-help-5.md","Order":5},{"Id":"bd56a68d-cd0b-4329-8e4f-9ced29d2fbdd","Path":"opening-and-exporting-1.md","Order":4},{"Id":"46a874ce-a321-40a2-91f8-e92ebe7a6c92","Path":"exporting-opentype-ps-1.md","Order":2},{"Id":"717e90ec-9f3d-46e6-b3dc-221d79c688ad","Path":"exporting-opentype-variations-tt-1.md","Order":3}],"Id":"56b28953-f85d-4fe1-94c8-720128e42520","Path":null,"Order":11,"CategoryType":0,"Icon":null,"Title":"Opening, saving and exporting fonts","Languages":[{"Code":"en","Title":"Opening, saving and exporting fonts","Slug":"opening-saving-and-exporting-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"3d07685a-0b2e-428f-8375-d21fde779960","Path":"automatic-master-location-on-the-width-and-weight-axes-1.md","Order":1},{"Id":"b7c8652c-2ed3-48c2-8950-e36faebe1216","Path":"font-info-adding-font-masters-improved-1.md","Order":2},{"Id":"1ec04629-e91a-4b35-9f0e-b28100115b6a","Path":"font-info-parameters-2.md","Order":4},{"Id":"68c4490e-1a77-488e-a3f8-d5fba6fc15f8","Path":"hinting-6.md","Order":5},{"Id":"a6837908-6689-427e-aab7-200d48e07f61","Path":"font-info-guide-expressions-1.md","Order":3},{"Id":"562b4025-1f10-437f-9049-79f2c839b429","Path":"user-interface-enhancements.md","Order":6}],"Id":"86a16045-c03b-49b3-84a8-c1d9781664e4","Path":null,"Order":25,"CategoryType":0,"Icon":null,"Title":"Font Info and Variation","Languages":[{"Code":"en","Title":"Font Info and Variation","Slug":"font-info-and-variation","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f0ea6bf9-6b77-40c8-bb26-bdf536e4b608","Path":"new-action-add-nodes.md","Order":9},{"Id":"7aa5dd3f-d421-40b9-8a09-49b1888a2ffa","Path":"esc-key-in-the-glyph-window-1.md","Order":4},{"Id":"9c6cbb01-4a64-4339-94af-a696dc1db976","Path":"move-nodes-or-handles-with-cursor-keys-after-dragging-1.md","Order":8},{"Id":"4ebe1002-1b56-4019-b8a0-5f44eba9294f","Path":"deselecting-nodes-and-handles-1.md","Order":1},{"Id":"75b89f37-dba7-4011-8eb9-82b1ae7aa68e","Path":"scale-and-flip-selections-with-selection-frame-1.md","Order":11},{"Id":"1938ff88-9922-4568-bef8-2ea7a4be6acb","Path":"tunni-lines-4.md","Order":13},{"Id":"9d729ac9-21ec-43ea-b83c-5cd6f517b89a","Path":"make-slanted-glyph-guides-1.md","Order":7},{"Id":"7978e56b-70bc-4ca9-8ede-7b3277cafce1","Path":"improved-set-start-point.md","Order":6},{"Id":"b95bcfb7-3259-45ac-aa95-adb5553deafc","Path":"performance.md","Order":10},{"Id":"3fa5fe29-bb3f-4950-833d-951cac9e6b88","Path":"pantograph-nonnode-editing-1.md","Order":14},{"Id":"2c9b48d9-9d5b-48b6-9a3d-acb94b2065ee","Path":"improved-action-set-contour-direction-1.md","Order":5},{"Id":"407c3523-b647-4465-8594-469e114bf6aa","Path":"drawing-and-glyph-editing-4.md","Order":2},{"Id":"d113221a-f2fd-49c1-a659-5bcdd1f42e50","Path":"drawing-ellipses-and-rectangles-1.md","Order":3},{"Id":"b79a3c02-b3dd-4a8f-a271-75e8d751bb4c","Path":"smart-corners-2.md","Order":12}],"Id":"109cfe6f-0678-42ee-9175-91a6a8b97df8","Path":"new-featuresenhancements.md","Order":21,"CategoryType":1,"Icon":null,"Title":"New featuresEnhancements","Languages":[{"Code":"en","Title":"New featuresEnhancements","Slug":"new-featuresenhancements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"238ccebe-b5ec-4224-872f-41ca8c3d33e6","Path":"classes-and-tags-in-feature-definitions-1.md","Order":2},{"Id":"267ae198-6716-48e3-90b0-0c827a5b184d","Path":"opening-glyph-tabswindows-from-a-font-window.md","Order":8},{"Id":"7935aed7-23f2-410d-a0a3-79844b323a26","Path":"font-window-filters-4.md","Order":5},{"Id":"fdc9323d-d951-40d0-b740-4fb749c63639","Path":"import-features-1.md","Order":7},{"Id":"c29cc57f-fcc5-4ae8-bb24-4a4ce1a39208","Path":"font-window-cells-1.md","Order":4},{"Id":"fd332fc6-20f7-4886-8b58-9ef3a562a5ae","Path":"features-panel-6.md","Order":3},{"Id":"fa5ae30c-b2d5-4b9d-b3db-eb4cd135f010","Path":"applying-features-in-glyph-window-and-preview-panel-1.md","Order":1},{"Id":"83cc882b-e942-4b05-892c-deafd249f56e","Path":"font-window-10.md","Order":6}],"Id":"e6c934ad-3307-47b4-b6f5-4156cd15f471","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"Features","Languages":[{"Code":"en","Title":"Features","Slug":"features-3","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9ae71849-0b66-46f2-986b-be7d8ef203e7","Path":"measurements-panel-3.md","Order":5},{"Id":"d985be6e-40d1-4b9c-b531-98ccc0548ea7","Path":"anchors-and-pins-panel-3.md","Order":2},{"Id":"f9843b30-678f-4fbb-a367-0307e71f6a27","Path":"windows-and-tabs-configuration-1.md","Order":9},{"Id":"a632c98a-814b-4f3b-8ac1-6acf9fca2c9a","Path":"output-panel-3.md","Order":6},{"Id":"45f30491-3b22-4d78-a044-f9c130705d00","Path":"toolbar-and-dropdown-text-buttons-are-easier-to-click.md","Order":8},{"Id":"e5e8fab9-ffd2-4d2b-9de6-a07eee3ecbd8","Path":"sketchboard-text-boxes.md","Order":7},{"Id":"21cc2c22-7e4e-4a77-a349-9bd3f56e5bea","Path":"cell-sizes-in-add-glyphs-dialog.md","Order":3},{"Id":"de658350-5826-4841-aa5d-7131c23ca049","Path":"keyboard-shortcuts-8.md","Order":4},{"Id":"c0c10a67-b340-4580-abeb-d21650194a59","Path":"easier-to-click-buttons.md","Order":1}],"Id":"e8f9ae89-bd8f-4f60-8e70-bdd7118a4e22","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"User interface","Languages":[{"Code":"en","Title":"User interface","Slug":"user-interface-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"85a9872d-f75d-4cc7-8cc5-9c23f3b4dc93","Path":"export-font-as-enable-and-disable-instances-1.md","Order":1},{"Id":"f114fd9c-35cd-4f90-a6ea-4349fc823155","Path":"opentype-symbol-fonts-1.md","Order":4},{"Id":"65d84c98-c95e-4215-9679-4eea82778067","Path":"tables-panel-define-custom-opentype-tables-1.md","Order":6},{"Id":"9df9a355-785e-4d15-ae3e-87e558ca7e10","Path":"glyph-names-9.md","Order":3},{"Id":"1b76ffc3-3f34-40bf-b9ab-558d88ff23ab","Path":"export-font-as-export-single-masters-or-instances-as-vfcvfj-1.md","Order":2},{"Id":"fffd9c8f-0253-4bb6-abd5-1c9a93040c83","Path":"special-glyphs-null-and-cr-1.md","Order":5}],"Id":"d19ee4d8-c448-4d1d-8155-4e46014eb0b1","Path":null,"Order":30,"CategoryType":0,"Icon":null,"Title":"Support and exporting of OpenType fonts","Languages":[{"Code":"en","Title":"Support and exporting of OpenType fonts","Slug":"support-and-exporting-of-opentype-fonts-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"26f46c19-e33f-4398-97a9-7b08ce403b8d","Path":"classes-panel-4.md","Order":1},{"Id":"11bc3bc6-7f8d-4381-adab-4d7b22ec10cb","Path":"glyph-metrics-without-and-with-measurement-line-1.md","Order":2},{"Id":"4411953e-7e5a-4785-9720-ea8d2e9172b4","Path":"metrics-panel-3.md","Order":3}],"Id":"363d38d1-ded8-416d-b9a9-db3ce88aa91b","Path":null,"Order":28,"CategoryType":0,"Icon":null,"Title":"Metrics and Classes","Languages":[{"Code":"en","Title":"Metrics and Classes","Slug":"metrics-and-classes","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b29feb91-4b9e-4aa3-aa10-377a8a9ca3f0","Path":"demo-mode-3.md","Order":1},{"Id":"5b107058-25bf-439a-9311-2aef4cd4b5e9","Path":"updated-fontlab-eula.md","Order":2}],"Id":"eea534f7-43f1-40d8-9b5c-51b0ae05e80e","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"New features and enhancements","Languages":[{"Code":"en","Title":"New features and enhancements","Slug":"new-features-and-enhancements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5dde7b7c-d037-42a9-8079-d79d4c328d54","Path":"print-from-a-font-window-1.md","Order":1},{"Id":"49ec7160-51d7-44cf-9878-9071c09dc8ea","Path":"print-from-the-font-window-or-the-glyph-window.md","Order":3},{"Id":"6bb1924c-a179-4cce-838e-a1fff44f0e4c","Path":"print-from-a-glyph-window-1.md","Order":2}],"Id":"d7925bb8-353b-4b70-a7d0-e7e11822c59b","Path":"new-features-enhancements.md","Order":29,"CategoryType":1,"Icon":null,"Title":"New Features Enhancements","Languages":[{"Code":"en","Title":"New Features Enhancements","Slug":"new-features-enhancements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2428ea98-06db-46e0-8ece-7dfb6dc891ff","Path":"loop-corners-with-scissors-tool-1.md","Order":5},{"Id":"c86ef6b1-601f-4da1-a0e6-6ef52588536a","Path":"aligning-of-nodes-handles-and-contours-1.md","Order":1},{"Id":"29564c6f-d34e-4309-ae0e-a652c24ad16d","Path":"altdragging-a-node-1.md","Order":2},{"Id":"c9a6babb-c62c-4c27-990a-7230f771fc1d","Path":"coordinates-and-measurements-1.md","Order":3},{"Id":"7373bdf5-944a-4fb2-a15d-66f26f5067bc","Path":"free-transform-2.md","Order":4},{"Id":"1930eb26-db5f-4b5f-a8c5-f2863cfa9df0","Path":"marquee-selection-of-nodes-vs.md","Order":6},{"Id":"ea3f4297-ae6e-495f-af86-50b44f7955aa","Path":"paste-mask-1.md","Order":7},{"Id":"8b612aab-4126-4403-83ef-5e6e9655d3db","Path":"paste-special-element-references-linked-metrics-tags-1.md","Order":8},{"Id":"24184f39-a14d-426c-8c6c-9065241f49fd","Path":"stroke-and-power-brush-1.md","Order":9}],"Id":"5c8145a3-5dd0-46c5-a4ed-b751c1926f6e","Path":"glyph-design-2.md","Order":27,"CategoryType":1,"Icon":null,"Title":"Glyph Design","Languages":[{"Code":"en","Title":"Glyph Design","Slug":"glyph-design-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5833afba-5909-455e-b6a4-5bf5558800df","Path":"navigate-in-glyph-window-with-missing-glyph-placeholders.md","Order":2},{"Id":"ca2f27a7-6f58-4a99-91f6-d6b069313751","Path":"pairs-phrases-panel-3.md","Order":3},{"Id":"afa46dfc-5ee3-405e-a703-a6239679293d","Path":"unicode-glyph-specifiers-1.md","Order":4},{"Id":"3eaf0287-fb1d-459c-b5f4-1100c90ea9cf","Path":"echo-text-synchronize-text-between-glyph-windows.md","Order":1}],"Id":"ded9522b-2996-411a-8d7d-5bd90ccdadad","Path":"text-improvements.md","Order":31,"CategoryType":1,"Icon":null,"Title":"Text Improvements","Languages":[{"Code":"en","Title":"Text Improvements","Slug":"text-improvements","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e9d24c11-ef33-4f8d-ad16-b5172b8e7aa3","Path":"classes-tags-and-features.md","Order":2},{"Id":"135cb988-64f0-440c-957e-037242877d5d","Path":"drawing-and-editing-glyphs-1.md","Order":3},{"Id":"82122a7c-84b2-458f-a45e-1de020be7646","Path":"elements-7.md","Order":4},{"Id":"998bb299-182d-4467-bf13-654cf905ff71","Path":"metrics-auto-layers-and-expressions.md","Order":6},{"Id":"278946d7-3cd9-47f0-9f01-58a08b81e79f","Path":"bug-fixes-8.md","Order":1},{"Id":"5512e311-6b5d-4905-9bcc-64961ad02ddb","Path":"performance-and-updates.md","Order":7},{"Id":"19b3ecae-2af1-431d-ba16-34c64c98349f","Path":"font-formats-2.md","Order":5}],"Id":"4a2f1c29-72f4-4011-b984-bed831cb9f5a","Path":"highlights-1.md","Order":18,"CategoryType":1,"Icon":null,"Title":"Highlights","Languages":[{"Code":"en","Title":"Highlights","Slug":"highlights-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"864a8726-c59b-4d30-a2f2-0a2ae31266e1","Path":"control-bars-view-settings-1.md","Order":1},{"Id":"b63bc700-fcf5-4bac-9b7a-a90fadc74492","Path":"windows-and-window-tabs-1.md","Order":3},{"Id":"5dcd98fd-788e-494e-9caa-e62c52d92feb","Path":"save-and-restore-windows-tabs-panels-and-font-filters-1.md","Order":2}],"Id":"6e99fbff-aa5d-418f-94d4-8a7c22d2ad21","Path":"windows-and-panels-management.md","Order":32,"CategoryType":1,"Icon":null,"Title":"Windows and Panels management","Languages":[{"Code":"en","Title":"Windows and Panels management","Slug":"windows-and-panels-management","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b638cb5c-1c12-4810-994c-9e4c47aaf912","Path":"class-glyphs-behind-exception-glyphs-1.md","Order":1},{"Id":"ffe64ed9-599e-40a2-884b-b97b3c88cc9b","Path":"editing-kerning-exceptions-1.md","Order":3},{"Id":"089d18ff-ef59-471d-9d48-6d6e5026fd93","Path":"class-kerning-with-exceptions-1.md","Order":2}],"Id":"b71d658e-97fe-4c10-83be-6cbf0ca3e4a3","Path":null,"Order":22,"CategoryType":0,"Icon":null,"Title":"Metrics and Kerning","Languages":[{"Code":"en","Title":"Metrics and Kerning","Slug":"metrics-and-kerning","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"06e5b67a-d6b1-41c6-855c-195692d72227","Path":"strong-ligature-attachment-in-legacy-recipe-syntax-1.md","Order":8},{"Id":"9e18db29-09a6-4728-9600-d6a3b781fa49","Path":"location-expressions-2.md","Order":7},{"Id":"d36a3d20-a1e6-45cf-a3b3-aa85bedbc82e","Path":"live-update-of-metrics-and-auto-layers-1.md","Order":6},{"Id":"1f99b7c3-4ab9-4bb0-b50e-7062925f89b6","Path":"anchors-when-decomposing-composite-glyphs-1.md","Order":1},{"Id":"2f9bcc35-31b8-4932-a2f1-ce131c0a1339","Path":"calculation-of-zones-hints-and-guides-thickness-1.md","Order":4},{"Id":"f7cd0790-c766-46ff-a7ac-cb908b2062b8","Path":"auto-layer-contents-1.md","Order":2},{"Id":"b2dc4050-9773-428e-a196-d74e0b129205","Path":"auto-layer-for-all-layers-1.md","Order":3},{"Id":"42d03c91-ad14-49d6-b309-cfea19d0840e","Path":"calculations-in-numeric-text-fields-1.md","Order":5}],"Id":"2a9323e4-43f5-4830-98db-ddcb4b89fcd8","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"Linked metrics and auto layers","Languages":[{"Code":"en","Title":"Linked metrics and auto layers","Slug":"linked-metrics-and-auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b489d6ee-ab90-413a-9ce1-ae0e87909811","Path":"other-improvements-3.md","Order":5},{"Id":"67e1bf6a-7361-4cd5-9650-be179d9d2312","Path":"custom-glyph-metrics-in-auto-layers-1.md","Order":3},{"Id":"724491e9-5a50-4020-8fec-eb8cbc49e1ff","Path":"auto-layers-showing-builtin-recipes-1.md","Order":2},{"Id":"9165dedd-8c10-44df-9483-056d2963689c","Path":"auto-layer-column-in-font-window-list-view-1.md","Order":1},{"Id":"9f92ce62-21e6-4c18-a2ff-fa3b14a94252","Path":"generate-glyphs-4.md","Order":4}],"Id":"9c0a9a50-019f-42fc-9c54-5331c6e1a86b","Path":null,"Order":24,"CategoryType":0,"Icon":null,"Title":"Components, Generate Glyphs and auto layers","Languages":[{"Code":"en","Title":"Components, Generate Glyphs and auto layers","Slug":"components-generate-glyphs-and-auto-layers","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2f65be3d-a8df-4fa0-a760-f0d2e34cae84","Path":"editing-across-exportable-and-service-layers-1.md","Order":3},{"Id":"c8f692a2-3732-4c2a-906d-08bb60c45697","Path":"locked-metrics-1.md","Order":6},{"Id":"e944c78c-3f6e-4894-8fbc-1e475ddcc1e9","Path":"metrics-and-kerning-7.md","Order":7},{"Id":"73e40ea8-1eea-4388-8ce2-fb4f5f4f9189","Path":"adding-glyphs-1.md","Order":1},{"Id":"7b190bee-2ea2-400f-90f2-195ad3410b07","Path":"append-glyphs-now-uses-references-1.md","Order":2},{"Id":"e7ec5764-e54d-413e-b548-6156732990b5","Path":"interpolation-of-named-elements-1.md","Order":5},{"Id":"0e710dfd-f2ce-4634-95b1-05c5bf2fe196","Path":"metrics-table-4.md","Order":8},{"Id":"582962e3-5f22-43de-85e2-9128f8dcf9c4","Path":"filling-layers-with-the-content-of-other-fonts-or-masters-1.md","Order":4},{"Id":"de28eda7-52e4-4f1b-8e81-a1068b0b92de","Path":"open-glyphs-for-editing-more-easily-1.md","Order":9},{"Id":"fe7af098-e171-4835-ad58-562b5322ed4c","Path":"rightclick-to-remove-kerning-pair-1.md","Order":10}],"Id":"38738b79-8f43-4e09-bf7f-ffe1fceb15e0","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"Glyphs, layers, and masters","Languages":[{"Code":"en","Title":"Glyphs, layers, and masters","Slug":"glyphs-layers-and-masters","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ed438b10-f015-43f9-8fd7-36e8077b765f","Path":"drawing-and-glyph-editing-3.md","Order":1},{"Id":"2526887d-a42a-45ed-bfeb-06ceac3dec21","Path":"move-nodes-and-handles-along-the-vertical-italic-axis-1.md","Order":2}],"Id":"ce46da82-479a-4d8e-adcb-7de6a2feacc2","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Glyph Drawing","Languages":[{"Code":"en","Title":"Glyph Drawing","Slug":"glyph-drawing-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a4c287cd-a6e4-4934-a22c-85b4d22be173","Path":"exporting-opentypecbdt-color-fonts-1.md","Order":3},{"Id":"a7862d35-f56c-4538-a8ae-9739011616eb","Path":"easier-handling-of-export-profiles-1.md","Order":1},{"Id":"5af2ad70-ea44-4910-bd02-5ee00f061433","Path":"improved-backups-when-saving-files.md","Order":5},{"Id":"3a4f5ae8-66c2-494e-960d-26427b981f0e","Path":"opening-and-exporting-ufo-1.md","Order":7},{"Id":"de111ab4-0574-4f08-b7cb-b07eff03fd5e","Path":"exporting-open-contours-as-singlestroke-fonts-for-engravers-and-plotters-1.md","Order":2},{"Id":"fe574ec0-b7a9-40c8-9834-a9c491aeabd0","Path":"install-stable-or-beta-versions-of-fontlab-1.md","Order":6},{"Id":"42cf32d5-e2f4-4334-9679-dc94c39817ec","Path":"hyphens-in-glyph-names-1.md","Order":4}],"Id":"fea305a9-33cd-430c-9df2-be85ec1db3b3","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Opening, saving, and exporting fonts","Languages":[{"Code":"en","Title":"Opening, saving, and exporting fonts","Slug":"opening-saving-and-exporting-fonts-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1631bd24-63fd-42c1-94d9-6342e1b92a77","Path":"index-filter-in-font-window.md","Order":3},{"Id":"ef0deea5-f2f6-4f04-a2c7-6cea13867922","Path":"glyph-name-synonyms-in-font-window-quick-preview-1.md","Order":1},{"Id":"3348c428-b025-4ea0-8c28-21d4bfa5769f","Path":"glyph-panel-with-multiple-selected-glyphs-1.md","Order":2},{"Id":"2d6fb177-f6ae-46cb-b90c-7528d69fa74f","Path":"master-switching-on-empty-glyph-cells-1.md","Order":4}],"Id":"3bae5b63-3f37-4580-89ed-18033c763a2d","Path":null,"Order":26,"CategoryType":0,"Icon":null,"Title":"Font window and Glyph panel","Languages":[{"Code":"en","Title":"Font window and Glyph panel","Slug":"font-window-and-glyph-panel-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4d9dad89-202a-4dad-8680-1e0d2b506c14","Path":"active-elements-when-you-open-a-glyph-1.md","Order":1},{"Id":"4561c862-018e-42a6-9c36-4341e503f8f2","Path":"free-transform-across-elements-and-layers-1.md","Order":3},{"Id":"55eae481-4085-4b89-ad20-cb200a4f5461","Path":"context-menu-1.md","Order":2},{"Id":"018b1532-0c46-411d-9e3c-d3aadf54ef81","Path":"selection-remembered-when-changing-glyphs-or-layers.md","Order":4}],"Id":"4b803ca7-c6fe-4e63-ae81-6952a68d6657","Path":null,"Order":23,"CategoryType":0,"Icon":null,"Title":"Glyph window","Languages":[{"Code":"en","Title":"Glyph window","Slug":"glyph-window-5","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b63b6ec2-fc0c-4b0a-87bb-92b04c91a832","Path":"metrics-when-inserting-a-component-or-reference-1.md","Order":6},{"Id":"692d2a1f-deda-47c3-809d-3c3e9128c55a","Path":"remove-or-reorder-elementscomponents-while-in-font-window-1.md","Order":7},{"Id":"95d44476-a350-42ce-b67e-a5e8e7c053dc","Path":"components-coordinates-and-index-1.md","Order":3},{"Id":"f5025bad-3a8b-47fd-a084-a946ff59b6e8","Path":"better-rendering-of-selected-elements.md","Order":2},{"Id":"4471e1f7-d700-43d1-b7a6-f3d3336b722c","Path":"elementscomponents-in-scoreboard-1.md","Order":4},{"Id":"b3ab0b7f-41e5-47a2-8114-2adb5fb46a80","Path":"gallery-panel-filter-and-remove-elements-1.md","Order":5},{"Id":"d590838d-b4fc-4466-85ed-2ad311392514","Path":"add-new-elementscomponents-to-a-group-1.md","Order":1}],"Id":"dc9028c1-a6df-46d6-b4f7-c58bc85fc6d6","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"Elements and components","Languages":[{"Code":"en","Title":"Elements and components","Slug":"elements-and-components-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"10c716ff-9954-4591-9377-a741f87f2358","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Release Notes","Languages":[{"Code":"en","Title":"Release Notes","Slug":"release-notes-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"1d269028-1e8d-45d2-ad28-1363961d2a6a","Path":"web-fonts-1.md","Order":1},{"Id":"85b06e59-aa0c-4eab-a291-c1c296d71caa","Path":"web-fonts1.md","Order":2},{"Id":"55a1f9ed-a2a1-436d-8686-a096132bf9b3","Path":"web-open-font-format-woff-and-woff2.md","Order":3}],"Id":"b83124ee-b6dd-4d50-a998-37659fa08bbf","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Web Fonts","Languages":[{"Code":"en","Title":"Web Fonts","Slug":"web-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8178096e-665a-48f5-8ad3-acf35c63fe8b","Path":"color-font-formats-1.md","Order":3},{"Id":"d4f4cb3a-d8c4-4758-8cac-1e8897ab3112","Path":"color-font-formats1.md","Order":2},{"Id":"629dcc3d-56fc-4b49-848f-d8d5379f56a8","Path":"bitmap-fonts-3.md","Order":1},{"Id":"dc375666-770b-4c76-88ed-b6c373aa7da9","Path":"eot.md","Order":4},{"Id":"f3f8e6c4-1c20-4d47-80d1-168e817e1217","Path":"opentype-svg.md","Order":5},{"Id":"1f6044aa-ee9c-4557-ae6f-f195b8ae0e6a","Path":"photofont-phf.md","Order":6},{"Id":"6a49c579-0640-460d-ac9b-53d3f066d99b","Path":"woff-and-woff2.md","Order":7}],"Id":"d2475691-04d1-488c-b25c-7431545f7948","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Color Fonts","Languages":[{"Code":"en","Title":"Color Fonts","Slug":"color-fonts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9e1d506b-f695-43f1-982c-f2115db98f6c","Path":"truetype.md","Order":2},{"Id":"7db798a1-9f7c-4c72-af0a-7ebcbbe24ad8","Path":"pfapfb.md","Order":1}],"Id":"2696838e-247a-432a-883d-9b5650e640cc","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"TrueType and Type1","Languages":[{"Code":"en","Title":"TrueType and Type1","Slug":"truetype-and-type1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ad1290ba-57ff-49e0-8137-e3c05f7b28bb","Path":"table-of-formats.md","Order":2},{"Id":"534911d6-ec6c-4bb4-ab09-fe0a1299cef3","Path":"final-font-formats1.md","Order":1}],"Id":"d28ed75b-c0e1-4b08-8d68-037d05f7ea82","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Final Font Formats","Languages":[{"Code":"en","Title":"Final Font Formats","Slug":"final-font-formats-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9f7fdcc6-3408-4912-b7f4-f16ad0495aaf","Path":"opentype-overview.md","Order":3},{"Id":"403fd036-462b-4876-9bc9-2e86ed083a70","Path":"opentype-cbdt-format.md","Order":2},{"Id":"a114e47a-6c89-415c-84a6-1444410d2f86","Path":"opentype-tt-ttf.md","Order":4},{"Id":"d64c7fe2-1ae4-4ad0-92cb-d6e7da159d95","Path":"opentype-cff-otf.md","Order":1}],"Id":"9ca7ee44-2543-4519-b5c8-9e398b721f83","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"OpenType","Languages":[{"Code":"en","Title":"OpenType","Slug":"opentype-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"2f2d8552-1a52-4318-9f92-888236e4498f","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Final Font Formats","Languages":[{"Code":"en","Title":"Final Font Formats","Slug":"final-font-formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"c42a8734-df2c-4ab0-ad48-7a564c00d8d5","Path":"cjk-fonts.md","Order":1},{"Id":"2b172655-d2a2-42cf-b499-e7cbb4053900","Path":"font-dimensions-1.md","Order":2},{"Id":"efe856bb-7c7a-4f5b-99e4-3149bf777941","Path":"obligatory-glyphs.md","Order":3}],"Id":"40bebb91-7d36-4283-be58-b58beef1e562","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Font","Languages":[{"Code":"en","Title":"Font","Slug":"font","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f862f840-73ec-4736-9e00-299aa29b601e","Path":"advance-width-2.md","Order":1},{"Id":"274c51d2-dccb-44f2-a004-e041f22d38ca","Path":"sidebearings-4.md","Order":7},{"Id":"2343493f-7b75-4dfd-a683-ab60d0fc550f","Path":"glyph-metrics-5.md","Order":4},{"Id":"927c78e9-5f8c-49ce-8b2c-024989373627","Path":"vertical-metrics.md","Order":8},{"Id":"9be40bde-9f08-48de-964b-a60c34be3c42","Path":"kerning-9.md","Order":5},{"Id":"f746ed31-2774-416b-9520-1acb111410a6","Path":"font-dimensions-2.md","Order":3},{"Id":"7110a771-e6a0-411f-aeb3-43b6e3ce1b43","Path":"nonspacing-lgyph.md","Order":6},{"Id":"4b4d8fa0-1ca5-4a92-bc99-0edba365dce8","Path":"family-dimensions-1.md","Order":2}],"Id":"aaad605e-60ce-429d-b179-959f4c1855a0","Path":null,"Order":10,"CategoryType":0,"Icon":null,"Title":"Metrics","Languages":[{"Code":"en","Title":"Metrics","Slug":"metrics","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"89c60e2d-bacb-44b2-b6d6-b5f912367d4b","Path":"reset-font-info-page-data.md","Order":6},{"Id":"aa63e77c-ed1e-4737-82ab-7914fadd240e","Path":"panose-identifier.md","Order":5},{"Id":"8f0147bf-bf86-4f47-b441-f928cca3af8e","Path":"font-info-panel-2.md","Order":1},{"Id":"ffa449c0-1209-4932-922d-b2689374e74e","Path":"other-values-page-1.md","Order":2},{"Id":"ad9a96bd-81bf-4b23-81ee-4f4118c31ca3","Path":"panose-and-monospaced-fonts.md","Order":3},{"Id":"26b42af8-3f87-485f-be32-4d8051cc915b","Path":"panose-identifier1.md","Order":4}],"Id":"160a6ff2-2865-45fa-b2eb-2d88cc36fd92","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"PANOSE","Languages":[{"Code":"en","Title":"PANOSE","Slug":"panose","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a403fdf9-fb55-45a9-912c-46ea1baed3fe","Path":"em-square.md","Order":1}],"Id":"b0ab76f2-b8c1-4ee4-a28b-e62a9e542b19","Path":"upm.md","Order":9,"CategoryType":1,"Icon":null,"Title":"UPM","Languages":[{"Code":"en","Title":"UPM","Slug":"upm","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"acfdfc5b-4308-4d5a-86e5-ab4312910cb6","Path":"glyphs-are-identified-in-several-different-ways.md","Order":1}],"Id":"9682edf1-3e62-429d-9c63-b320d50b1acc","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Glyph","Languages":[{"Code":"en","Title":"Glyph","Slug":"glyph","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"764f6073-fd55-4f58-9a2d-29fc754365ce","Path":"rule.md","Order":14},{"Id":"a0f3931b-f9ef-452c-b068-8b6fc74a3135","Path":"feature-2.md","Order":17},{"Id":"745e50ef-50ea-4a92-bc95-ae1949bf1226","Path":"lookup-2.md","Order":11},{"Id":"55385592-665d-43c1-a500-1f3bed5e472d","Path":"overshoot.md","Order":18},{"Id":"0282034c-8c02-48f0-9918-0d4822eae59a","Path":"positioning-2.md","Order":13},{"Id":"c5ce8182-a86e-46db-b3cb-4655524784e8","Path":"font-licenses.md","Order":16},{"Id":"753b42f7-cb5a-4f36-8d85-cfc8c5ba87f6","Path":"serifs.md","Order":15},{"Id":"57d73f87-b5a8-4f9f-a2d9-645e7d82f828","Path":"unicode-1.md","Order":3},{"Id":"8e220366-26bc-4989-9955-80c4ce0dbec7","Path":"codepage.md","Order":1},{"Id":"9d86c947-80bf-4cd0-9a9e-d6d5afacb1fa","Path":"encoding.md","Order":2},{"Id":"70f16508-2e36-4da4-b953-db889311a5ca","Path":"script-2.md","Order":8},{"Id":"f731cc4f-06ed-4a5b-9c96-d0645cb844f5","Path":"hinting-5.md","Order":7},{"Id":"50dce260-562d-4bcf-b853-11ff9c20a22b","Path":"small-caps.md","Order":5}],"Id":"e297593e-f3ad-4e20-bc0f-acbffd627a89","Path":"type-design-definitions.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Type Design definitions","Languages":[{"Code":"en","Title":"Type Design definitions","Slug":"type-design-definitions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"238fe6f5-d3c3-4449-a8f5-1dd2ccf2212a","Path":"code-structure.md","Order":2},{"Id":"8b9cbd55-5d1f-4216-80bf-2616a89f7103","Path":"gdef-mark.md","Order":3},{"Id":"774d4f4b-2561-4bdc-9ae2-6a62da44fb56","Path":"gsub-tables.md","Order":5},{"Id":"f10fa3b0-0641-4e69-9ec1-1d96a5f1fccb","Path":"sfnt.md","Order":9},{"Id":"3a6c5ac7-02db-472e-bfb9-465087060709","Path":"scope.md","Order":1},{"Id":"b6aaa15a-82c4-4363-afe8-7abdaa7b97a9","Path":"fea-files.md","Order":7},{"Id":"c52d55d0-faf4-4859-9db4-e23a0eff2f13","Path":"ss01.md","Order":10},{"Id":"379e4559-2bbb-4a25-b36e-18f5aaa6ba09","Path":"modifier-symbol.md","Order":6},{"Id":"2e7cd09c-60c9-45de-81fb-17de744bcdfd","Path":"aalt.md","Order":8},{"Id":"05b70cb3-497c-4855-8dda-df73d2b7f895","Path":"gpos-tables.md","Order":4}],"Id":"f7783798-1f31-4d1a-9042-3af37a459891","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"OpenType Features","Languages":[{"Code":"en","Title":"OpenType Features","Slug":"opentype-features-4","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"41417381-77cd-4237-9d9b-3fa7d402c0be","Path":"other-file-formats-1.md","Order":2},{"Id":"2cc10da0-8ed6-418e-96a6-f561a462b919","Path":"font-metadata-formats.md","Order":4},{"Id":"f6188fd3-cc47-44d7-bdbd-08778586126b","Path":"fea.md","Order":3},{"Id":"ba4fb7f2-fc9a-41fc-b767-15178ab1bb41","Path":"artwork-file-formats.md","Order":1},{"Id":"7ec343f6-ad43-4ae7-911f-dd1bbc02c83a","Path":"fontlab-metrics-json-vfm.md","Order":5},{"Id":"32a1023a-8c8c-491b-bafb-bf81de171e37","Path":"encodings-2.md","Order":6},{"Id":"a1b1b611-8be5-4f14-8a58-540becfbeb98","Path":"pdf.md","Order":7}],"Id":"f275f327-2a20-4d76-8e36-d517172c5297","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Auxiliary file formats","Languages":[{"Code":"en","Title":"Auxiliary file formats","Slug":"auxiliary-file-formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d2cc8107-104d-4a39-a71c-d6e094be81ec","Path":"ufo-packages.md","Order":1},{"Id":"924fa05b-4570-416f-aa1b-d1ea58a96089","Path":"unified-font-object-ufo.md","Order":2},{"Id":"2107e1d6-5a5a-463a-904f-865391c52417","Path":"xfo-format.md","Order":3}],"Id":"d70562f4-400e-4b8d-adb4-970de40a3a5c","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"UFO","Languages":[{"Code":"en","Title":"UFO","Slug":"ufo","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"cc29c077-0477-40e8-809e-800ab06abbd7","Path":"source-font-formats.md","Order":2},{"Id":"8e795e9d-8d1d-474a-8c1d-9e8c19f8c071","Path":"fontlab-format-vfc.md","Order":3},{"Id":"fe2bedd3-d286-420d-95eb-04157f232de2","Path":"fontlab-json-format-vfj.md","Order":1}],"Id":"9af924f2-a69a-4d83-9c6f-04114e811bd4","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"VFC and VFJ","Languages":[{"Code":"en","Title":"VFC and VFJ","Slug":"vfc-and-vfj","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5828d74d-adf1-4573-b8e3-93747f40fa38","Path":"fontlab-studio-5-vfb.md","Order":1}],"Id":"256712d7-dcda-4b68-b2f8-d66c56f0efb0","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"VFB","Languages":[{"Code":"en","Title":"VFB","Slug":"vfb","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9d359859-611e-48cb-b15a-3ddece293ae2","Path":"fog-format.md","Order":1},{"Id":"31c9c5d4-b5f5-48e6-87eb-aecc54c11f48","Path":"interchange-font-formats.md","Order":4},{"Id":"9dd472ec-8f37-444a-bc99-fe06942198d7","Path":"ik-ikarus-format.md","Order":3},{"Id":"ce436414-4803-4fc5-9ec5-a4a8c4223fef","Path":"glyphs-format.md","Order":2},{"Id":"3dc69b4b-fdb2-49b3-8b8d-1fbb00b7b132","Path":"phc-format.md","Order":5},{"Id":"5d394a95-9b26-4bda-8bf6-24e9de76a29d","Path":"phf-format.md","Order":6}],"Id":"f442bdcc-1a3b-4a7b-a0bd-499af412eac0","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Interchange File Formats","Languages":[{"Code":"en","Title":"Interchange File Formats","Slug":"interchange-file-formats","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"97b5a006-5ae2-4fab-b96a-c5dba6add6c8","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Source Formats","Languages":[{"Code":"en","Title":"Source Formats","Slug":"source-formats","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"367edc7b-5ce7-49a5-b7fc-6ab31b30ef12","Path":"towards-opentype.md","Order":3},{"Id":"08329a63-48fd-4d4d-83d6-a5928cd3a003","Path":"from-opentype-to-fontlab-studio-5.md","Order":1},{"Id":"bc473dff-9380-4190-b888-9475945e2b2a","Path":"python-robofab-ufo-robofont.md","Order":2}],"Id":"e41af297-fc39-4a18-ada3-134b352d1c91","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"The Screen Reader","Languages":[{"Code":"en","Title":"The Screen Reader","Slug":"the-screen-reader","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bc67c880-a6bf-462f-9aff-17004c9cd91f","Path":"variable-opentype-fonts.md","Order":4},{"Id":"de2cbea5-ca92-4feb-86bb-1949d822e24e","Path":"color-fonts-2.md","Order":1},{"Id":"1d3916dd-d154-4010-ad1b-a1c2c656c978","Path":"fontlab-7-1.md","Order":2},{"Id":"99ceb458-2023-410c-bfc6-fb69372aa7b1","Path":"fontlab-vi.md","Order":3}],"Id":"0c26ba90-afa8-4c6a-92f0-90ff60df766e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"The Mobile Reader","Languages":[{"Code":"en","Title":"The Mobile Reader","Slug":"the-mobile-reader","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2e0f85e5-d719-4c51-afb2-61d1c141f6ca","Path":"fontlab-2.md","Order":1},{"Id":"4587aaa5-0e7e-4065-8554-eac5c0eb2687","Path":"ikarus-tex-postscript.md","Order":3},{"Id":"29ebb2ff-f101-430e-8674-e19babc584e1","Path":"unicode-multiple-master.md","Order":5},{"Id":"5e1de858-983f-4d46-9be6-435da32a6e2d","Path":"fontographer-truetype.md","Order":2},{"Id":"db973f27-5609-4ebb-8f3f-98a747c8d273","Path":"type-1-macintosh.md","Order":4}],"Id":"7ae47286-4cd6-4d68-a9de-9e820f968f47","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"The Print Reader","Languages":[{"Code":"en","Title":"The Print Reader","Slug":"the-print-reader","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"42f43603-24e5-4166-a27a-82ed00eceb1b","Path":"axes-2.md","Order":1},{"Id":"e2f267a6-989b-4601-b229-9e2f28ce3a2c","Path":"axis-coordinate-systems.md","Order":2},{"Id":"8bd4071b-e0e0-44b6-bae1-740864d2686f","Path":"instances-3.md","Order":10},{"Id":"f32b8db0-907e-4bb0-bd88-e265e629bbb2","Path":"interpolation.md","Order":11},{"Id":"7d0e4782-928e-4411-abb4-2004654e2089","Path":"normalized-coordinates-in-variable-opentype.md","Order":12},{"Id":"a9858d42-aacd-49a7-9086-e87dfac58f4b","Path":"user-coordinates.md","Order":13},{"Id":"1f1b802b-7c26-44b7-b94f-3bc02196aac7","Path":"design-coordinates.md","Order":5},{"Id":"48cf5b2b-3878-4453-a96e-22b9a7fd4a9b","Path":"design-space.md","Order":6},{"Id":"5f4268ac-b481-48e5-95f9-278b1c64b8dc","Path":"extrapolation.md","Order":7},{"Id":"7be8aa09-d879-41e8-984b-4eb7a41a1360","Path":"axis-instances.md","Order":3},{"Id":"f777e242-71c6-4fad-8dd7-36d418ab8124","Path":"variations-4.md","Order":14},{"Id":"db08e434-e0ca-4480-b51a-5d60316e4363","Path":"axis-ranges.md","Order":4},{"Id":"42ee6fb4-8ac1-4289-bf05-ed13ba32c5fa","Path":"font-masters.md","Order":8},{"Id":"77c53a2a-0b95-48e2-8c4c-a22b1451e62a","Path":"fontless-masters.md","Order":9}],"Id":"f61935a6-3ce7-49c2-ab55-c97fc19e16de","Path":null,"Order":4,"CategoryType":0,"Icon":null,"Title":"Variable Fonts","Languages":[{"Code":"en","Title":"Variable Fonts","Slug":"variable-fonts-1","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"40859d0b-5e53-4510-9468-66c874d5cd92","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Type Reference","Languages":[{"Code":"en","Title":"Type Reference","Slug":"type-reference","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"60d46e35-be70-4ab2-adca-5c9149583f19","Path":"tba-15.md","Order":1}],"Id":"7b3e78e2-d131-402e-b4e3-0373432f8662","Path":null,"Order":6,"CategoryType":0,"Icon":null,"Title":"Fervor","Languages":[{"Code":"en","Title":"Fervor","Slug":"fervor","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"89471c0e-7922-4724-a19a-a0849e0d6d7c","Path":"tba-22.md","Order":1}],"Id":"b8bbb1bb-39d6-4398-b618-0803a464fd93","Path":null,"Order":13,"CategoryType":0,"Icon":null,"Title":"GlyphsInfo","Languages":[{"Code":"en","Title":"GlyphsInfo","Slug":"glyphsinfo","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"712a3d33-5d49-4e1b-af57-1454964f865a","Path":"tba-31.md","Order":1}],"Id":"eb31c1ff-fcf9-47db-a2a0-6af11d600954","Path":"microsoft-software.md","Order":22,"CategoryType":1,"Icon":null,"Title":"Microsoft software","Languages":[{"Code":"en","Title":"Microsoft software","Slug":"microsoft-software","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8ccbd73b-3944-47f6-9fc8-a1689c87245f","Path":"tba-24.md","Order":1}],"Id":"6e68f4c4-0297-4b19-8b7b-562940ef9c3a","Path":null,"Order":15,"CategoryType":0,"Icon":null,"Title":"ICU","Languages":[{"Code":"en","Title":"ICU","Slug":"icu","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c33ece13-0771-4267-8a7b-90f31180f7f0","Path":"tba-25.md","Order":1}],"Id":"e01db24e-2f9b-41ec-8157-349535598b69","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"Iex","Languages":[{"Code":"en","Title":"Iex","Slug":"iex","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6b62419c-5a4f-48fb-8323-144367d42d75","Path":"tba-14.md","Order":1}],"Id":"5bea9996-b311-4482-ae7b-f24ae87ebf26","Path":null,"Order":5,"CategoryType":0,"Icon":null,"Title":"Expat","Languages":[{"Code":"en","Title":"Expat","Slug":"expat","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"43df4101-fc62-4383-9ab5-ea4fca1e852c","Path":"tba-30.md","Order":1}],"Id":"e97c53e5-2236-4704-a709-b606a23168e5","Path":null,"Order":21,"CategoryType":0,"Icon":null,"Title":"libzip","Languages":[{"Code":"en","Title":"libzip","Slug":"libzip","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"e2db70c6-400f-4fb4-9b18-529990ade364","Path":"tba-18.md","Order":1}],"Id":"fe68de43-30a4-4495-9bf9-fe2cf554ef6a","Path":null,"Order":9,"CategoryType":0,"Icon":null,"Title":"fontTools","Languages":[{"Code":"en","Title":"fontTools","Slug":"fonttools-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"be0519e4-45aa-48d6-af38-258b4542032b","Path":"tba-17.md","Order":1}],"Id":"eef320df-18ca-4978-b2db-39d5c2152909","Path":null,"Order":8,"CategoryType":0,"Icon":null,"Title":"Brotli","Languages":[{"Code":"en","Title":"Brotli","Slug":"brotli","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"130939d9-26bc-4276-87b6-611dd97f621e","Path":"tba-23.md","Order":1}],"Id":"14f7c4a9-b92e-4388-8ba1-69f1d1e2b5d2","Path":null,"Order":14,"CategoryType":0,"Icon":null,"Title":"HarfBuzz","Languages":[{"Code":"en","Title":"HarfBuzz","Slug":"harfbuzz","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8d2d3268-41ee-4902-8e70-8ac9d62cfc50","Path":"tba-27.md","Order":1}],"Id":"a6da28ff-69fb-4b35-9791-6f180b6eee8f","Path":null,"Order":18,"CategoryType":0,"Icon":null,"Title":"libpng","Languages":[{"Code":"en","Title":"libpng","Slug":"libpng","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"bb6cf5f4-b7f2-429d-a546-f98dc993b785","Path":"tba-28.md","Order":1}],"Id":"40e3b648-de3e-499a-b31e-e3cae8b40439","Path":null,"Order":19,"CategoryType":0,"Icon":null,"Title":"libqpsd","Languages":[{"Code":"en","Title":"libqpsd","Slug":"libqpsd","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1dac5837-09b8-4526-aedc-79a8dba6c53f","Path":"tba-10.md","Order":1}],"Id":"92227fbf-4ced-49e4-8ce5-926826011886","Path":"adobe-agl-aglfn.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Adobe AGL & AGLFN","Languages":[{"Code":"en","Title":"Adobe AGL & AGLFN","Slug":"adobe-agl-aglfn","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1e0515c9-bbe0-48ec-9ba0-6e4d710644d8","Path":"tba-12.md","Order":1}],"Id":"15568cc7-9572-424f-afe2-6dc0e715edb4","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Discount","Languages":[{"Code":"en","Title":"Discount","Slug":"discount","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"777f128b-50dc-471e-9570-c03a572dfd77","Path":"tba-13.md","Order":1}],"Id":"2957c24e-2743-4de1-8482-de3191cd53ea","Path":"eot-utilities.md","Order":4,"CategoryType":1,"Icon":null,"Title":"EOT Utilities","Languages":[{"Code":"en","Title":"EOT Utilities","Slug":"eot-utilities","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6467aa9c-ccf0-4add-afd2-818045b08b0a","Path":"tba-20.md","Order":1}],"Id":"3534233f-4762-4b87-aee5-d0ed7e7141fc","Path":"glyph-nanny.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Glyph Nanny","Languages":[{"Code":"en","Title":"Glyph Nanny","Slug":"glyph-nanny","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d4f0fa55-73f6-46c7-87c3-af98c471b735","Path":"tba-11.md","Order":1}],"Id":"9742ada5-f221-43d3-805c-7c1e963b471f","Path":"adobe-fdk-for-opentype.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Adobe FDK for OpenType","Languages":[{"Code":"en","Title":"Adobe FDK for OpenType","Slug":"adobe-fdk-for-opentype","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2ebdf1c6-2271-4ae6-bf3a-94c515a241a1","Path":"tba-26.md","Order":1}],"Id":"ebe392a9-c91e-4aa7-b49f-803f9978490a","Path":null,"Order":17,"CategoryType":0,"Icon":null,"Title":"Leptonica","Languages":[{"Code":"en","Title":"Leptonica","Slug":"leptonica","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"d9162b4f-2621-4f3b-9ae1-a4f840ae2d0e","Path":"tba-19.md","Order":1}],"Id":"93ad5bf7-dfc7-42f7-affe-be10c4288815","Path":"freetype-ttfautohint.md","Order":10,"CategoryType":1,"Icon":null,"Title":"FreeType, ttfautohint","Languages":[{"Code":"en","Title":"FreeType, ttfautohint","Slug":"freetype-ttfautohint","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"effe4904-89e0-47ef-88fd-dc52ec38e325","Path":"tba-16.md","Order":1}],"Id":"cdbe4039-ab87-434b-89ec-cd53c08c68ff","Path":null,"Order":7,"CategoryType":0,"Icon":null,"Title":"cmark-gfm","Languages":[{"Code":"en","Title":"cmark-gfm","Slug":"cmark-gfm","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a8025dd0-fbb9-4a01-8547-90092e0e59cd","Path":"tba-21.md","Order":1}],"Id":"b6131493-78c5-44cd-9861-f9e2ab11cfb5","Path":null,"Order":12,"CategoryType":0,"Icon":null,"Title":"glyphNameFormatter","Languages":[{"Code":"en","Title":"glyphNameFormatter","Slug":"glyphnameformatter","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"15f6d88b-c464-4ac0-8ba8-5ee52c8d4ea4","Path":"tba-29.md","Order":1}],"Id":"538723e6-fefa-4f25-8efa-01c144e5857f","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"libuuid","Languages":[{"Code":"en","Title":"libuuid","Slug":"libuuid","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"1d04d8a0-6b14-4ad4-8f0d-c7cf3e41cd2b","Path":"tba-53.md","Order":1}],"Id":"4e322917-677b-444c-a87a-18a54cbd93c6","Path":"work-sans.md","Order":44,"CategoryType":1,"Icon":null,"Title":"Work Sans","Languages":[{"Code":"en","Title":"Work Sans","Slug":"work-sans","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"9d4a73c3-f2f8-4131-9180-c634789ac54d","Path":"tba-54.md","Order":1}],"Id":"e7be6b38-605a-49fa-baa0-e7bf6d4b462d","Path":"xetex-portions.md","Order":45,"CategoryType":1,"Icon":null,"Title":"XeTeX portions","Languages":[{"Code":"en","Title":"XeTeX portions","Slug":"xetex-portions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c49a5369-4e2d-4ab2-a6e1-21a415f2a33c","Path":"tba-39.md","Order":1}],"Id":"736c5555-f83e-4366-9dd7-6bbdc737bf0f","Path":null,"Order":30,"CategoryType":0,"Icon":null,"Title":"PoDoFo","Languages":[{"Code":"en","Title":"PoDoFo","Slug":"podofo","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f8f48132-e76f-44f6-9c22-f8a36c05d59e","Path":"tba-33.md","Order":1}],"Id":"983512f3-96e0-4782-915f-230506f05948","Path":null,"Order":24,"CategoryType":0,"Icon":null,"Title":"MutatorMath","Languages":[{"Code":"en","Title":"MutatorMath","Slug":"mutatormath","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"227244b8-0c30-4b36-85d7-836a569d6b13","Path":"tba-38.md","Order":1}],"Id":"8f0879d0-417f-4f6b-9bbe-0130bb8a955f","Path":"plist-parser-for-qt.md","Order":29,"CategoryType":1,"Icon":null,"Title":"PList parser for Qt","Languages":[{"Code":"en","Title":"PList parser for Qt","Slug":"plist-parser-for-qt","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"33db4600-1578-4fb4-9508-c285fa98a888","Path":"tba-40.md","Order":1}],"Id":"fbb556dd-d1fb-4162-8bd9-6c8f90b0236c","Path":null,"Order":31,"CategoryType":0,"Icon":null,"Title":"PyClipper","Languages":[{"Code":"en","Title":"PyClipper","Slug":"pyclipper","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a1d4aa50-fe82-4c0e-8965-502e51c5a422","Path":"tba-35.md","Order":1}],"Id":"c8af4928-f4cb-421c-9328-3636afbe8103","Path":null,"Order":26,"CategoryType":0,"Icon":null,"Title":"OpenSSL","Languages":[{"Code":"en","Title":"OpenSSL","Slug":"openssl","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"320597c0-535e-48ae-9a2e-945c292daecb","Path":"tba-41.md","Order":1}],"Id":"adc84a1b-8623-400a-98cb-abcfb858e33a","Path":null,"Order":32,"CategoryType":0,"Icon":null,"Title":"PythonQt","Languages":[{"Code":"en","Title":"PythonQt","Slug":"pythonqt","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5a787b4f-b1b9-4e86-b44e-f5ff60e55dbd","Path":"tba-36.md","Order":1}],"Id":"9f27ba8e-871d-4112-9cbb-3610bbbe9e69","Path":null,"Order":27,"CategoryType":0,"Icon":null,"Title":"OptiPNG","Languages":[{"Code":"en","Title":"OptiPNG","Slug":"optipng","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6edf0689-eb24-43ac-8711-4b3423f83c3d","Path":"tba-49.md","Order":1}],"Id":"7b279a64-be26-433e-8771-5e6d5f371c69","Path":null,"Order":40,"CategoryType":0,"Icon":null,"Title":"Sparkle","Languages":[{"Code":"en","Title":"Sparkle","Slug":"sparkle","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"b9a12103-ab70-4cc7-b0fe-250cb6084c1c","Path":"tba-44.md","Order":1}],"Id":"0ad81034-b2c7-4f17-8b44-86de1b5fba7c","Path":null,"Order":35,"CategoryType":0,"Icon":null,"Title":"QtnProperty","Languages":[{"Code":"en","Title":"QtnProperty","Slug":"qtnproperty","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"4f75044a-4020-4968-ba9a-edd7991c6592","Path":"tba-47.md","Order":1}],"Id":"15b7980c-5ef9-4ca1-9c31-34d84a7aa959","Path":null,"Order":38,"CategoryType":0,"Icon":null,"Title":"Roboto","Languages":[{"Code":"en","Title":"Roboto","Slug":"roboto","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"2c1b2562-38b9-435c-aee9-bb70c4b10ee9","Path":"tba-46.md","Order":1}],"Id":"c456b576-e85d-4a15-9a0b-39724d3dc6b7","Path":null,"Order":37,"CategoryType":0,"Icon":null,"Title":"RoboFab","Languages":[{"Code":"en","Title":"RoboFab","Slug":"robofab","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f4a7b93b-674e-4f87-bf82-17c8f83e10fd","Path":"tba-51.md","Order":1}],"Id":"4d63faf5-62ff-4999-9d4e-2a04f25da86b","Path":null,"Order":42,"CategoryType":0,"Icon":null,"Title":"Tesseract","Languages":[{"Code":"en","Title":"Tesseract","Slug":"tesseract","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"05f3a42d-30a4-460e-bfad-47d2272c932f","Path":"tba-34.md","Order":1}],"Id":"469eb85d-b54f-42d8-bbee-cd302c2be90d","Path":null,"Order":25,"CategoryType":0,"Icon":null,"Title":"Noto","Languages":[{"Code":"en","Title":"Noto","Slug":"noto","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"94b2e22c-a665-45ee-985c-54bb46cf100e","Path":"tba-37.md","Order":1}],"Id":"4e3125c7-0fde-4cac-af7e-4cc61319b406","Path":"other-software-portions.md","Order":28,"CategoryType":1,"Icon":null,"Title":"Other software portions","Languages":[{"Code":"en","Title":"Other software portions","Slug":"other-software-portions","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"907ce444-73ef-4a09-8cb2-d41f44ba6a9c","Path":"tba-32.md","Order":1}],"Id":"4b6de2be-2070-45d6-b935-408055353bd4","Path":null,"Order":23,"CategoryType":0,"Icon":null,"Title":"muParser","Languages":[{"Code":"en","Title":"muParser","Slug":"muparser","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"74eed466-512c-4434-ae4e-1d83746abb6b","Path":"tba-48.md","Order":1}],"Id":"9ac3476d-37a0-4943-8434-89a442772cb9","Path":null,"Order":39,"CategoryType":0,"Icon":null,"Title":"sfntly","Languages":[{"Code":"en","Title":"sfntly","Slug":"sfntly","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"df90625c-71fb-4b93-b42f-8d48614c5262","Path":"tba-55.md","Order":1}],"Id":"8eb83457-3a9b-4f71-9a90-1629b1dd60db","Path":null,"Order":46,"CategoryType":0,"Icon":null,"Title":"Zlib","Languages":[{"Code":"en","Title":"Zlib","Slug":"zlib","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"6470deb8-3831-47a8-9839-05f359fda4fc","Path":"tba-52.md","Order":1}],"Id":"7dcfe7af-1806-444b-b15f-144e01300b0d","Path":null,"Order":43,"CategoryType":0,"Icon":null,"Title":"WOFF2","Languages":[{"Code":"en","Title":"WOFF2","Slug":"woff2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"5d5c68f0-17ea-40ac-9650-cd901487794a","Path":"tba-43.md","Order":1}],"Id":"d361e690-85d7-41fc-923a-f94ae330f811","Path":null,"Order":34,"CategoryType":0,"Icon":null,"Title":"Qt","Languages":[{"Code":"en","Title":"Qt","Slug":"qt","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"0f63f64d-a744-437c-a877-e6554c649b49","Path":"tba-45.md","Order":1}],"Id":"580a5077-8779-4619-977a-1ac581040b82","Path":null,"Order":36,"CategoryType":0,"Icon":null,"Title":"RapidXml","Languages":[{"Code":"en","Title":"RapidXml","Slug":"rapidxml","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"8f85156c-8e1a-492b-b065-74173ae40f08","Path":"tba-42.md","Order":1}],"Id":"47c0bcf1-08e9-4222-9a30-aea824607188","Path":"qscintilla-scintilla.md","Order":33,"CategoryType":1,"Icon":null,"Title":"QScintilla, Scintilla","Languages":[{"Code":"en","Title":"QScintilla, Scintilla","Slug":"qscintilla-scintilla","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f62ac182-c023-4ac5-98de-87b8b6fed5ab","Path":"tba-50.md","Order":1}],"Id":"21da440a-8d03-4edb-95ff-8c530a4c077d","Path":null,"Order":41,"CategoryType":0,"Icon":null,"Title":"SVGMin","Languages":[{"Code":"en","Title":"SVGMin","Slug":"svgmin","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"8d3df757-c20c-42c2-be03-5afdf0a62fad","Path":"license.md","Order":6},{"Id":"2f323c25-663a-4291-aea7-1da9b86a9178","Path":"complete-agreement.md","Order":3},{"Id":"6423c9d8-71f2-42bf-8c3b-af756689a916","Path":"export-law-assurances.md","Order":5},{"Id":"0f50cac6-913f-4155-908e-bbea7717d03a","Path":"copyright.md","Order":4},{"Id":"9f62de60-288f-4b1d-8f50-36919d370eb6","Path":"warranty.md","Order":9},{"Id":"860bdc0d-6645-4719-a6fb-62831f95e32e","Path":"applicable-laws.md","Order":1},{"Id":"77382a70-a221-425b-a0c6-16348c898d7d","Path":"sample-code.md","Order":7},{"Id":"33ca8462-4ed2-462d-8c37-c83d36212744","Path":"audit.md","Order":2},{"Id":"90337b5e-7edc-41d0-824e-ebb19d5a945d","Path":"termination-of-this-license.md","Order":8}],"Id":"37f50662-95d7-4e81-a294-964c5ac804ae","Path":"fontlab-eula.md","Order":1,"CategoryType":1,"Icon":null,"Title":"FontLab EULA","Languages":[{"Code":"en","Title":"FontLab EULA","Slug":"fontlab-eula","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"cfb1882e-89f5-49c0-a379-553aa513920c","Path":"fontlab-ugla.md","Order":2}],"Id":"c84922c6-d2d6-475e-b77f-d0286065632e","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"FontLab","Languages":[{"Code":"en","Title":"FontLab","Slug":"fontlab-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"b12e7ff3-0e94-4f8d-8314-c5a5f1451ccd","Path":"tba-57.md","Order":1}],"Id":"1e6f0de0-214c-4de1-9272-942796df53be","Path":"gnu-lesser-general-public-license-version-2.md","Order":2,"CategoryType":1,"Icon":null,"Title":"GNU Lesser General Public License, Version 2","Languages":[{"Code":"en","Title":"GNU Lesser General Public License, Version 2","Slug":"gnu-lesser-general-public-license-version-2","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"20f8799d-63f8-4f38-a384-f101c887986d","Path":"tba-58.md","Order":1}],"Id":"5afae421-f12b-4562-b72a-d2ac2dfb16e1","Path":"sil-open-font-license-version-1.md","Order":3,"CategoryType":1,"Icon":null,"Title":"SIL Open Font License, Version 1","Languages":[{"Code":"en","Title":"SIL Open Font License, Version 1","Slug":"sil-open-font-license-version-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a849a36b-93a6-4b82-b794-0490d6bbfe21","Path":"tba-56.md","Order":1}],"Id":"0284fe68-8126-4c15-95c8-d9300bed4a7a","Path":"apache-license-version-2.md","Order":1,"CategoryType":1,"Icon":null,"Title":"Apache License, Version 2","Languages":[{"Code":"en","Title":"Apache License, Version 2","Slug":"apache-license-version-2","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"c6f36fe5-c00c-410b-82a8-eec7074a9f30","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"Standard License Texts","Languages":[{"Code":"en","Title":"Standard License Texts","Slug":"standard-license-texts","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"84f16904-fece-4841-8b34-1ec01b972b51","Path":"special-thanks.md","Order":4},{"Id":"40150bc1-aac2-4299-bf4b-4fa6e99cdbe4","Path":"fontographer-and-fontlab-codeveloped-by.md","Order":3},{"Id":"8913ccb4-8ee3-4d3d-a3b4-cf91f7760f5f","Path":"creators-and-developers.md","Order":2},{"Id":"c5e25b16-4fa9-44de-99c2-f6710bb258ec","Path":"additional-acknowledgments.md","Order":1}],"Id":"b9e175d9-3b4c-4709-a39c-6d332faa05c0","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"Credits","Languages":[{"Code":"en","Title":"Credits","Slug":"credits-1","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[],"Articles":[{"Id":"7bd44d4d-6108-414a-8b51-a5b47d267c1d","Path":"this-product-uses-or-is-based-on-portions-of-licensed-software-including.md","Order":1},{"Id":"1e9e6ec0-d0dd-44ec-b477-1a951b9ba7c3","Path":"trademarks.md","Order":2}],"Id":"771a4172-0ceb-4aff-a8cb-626f271e86fa","Path":"legal-notices.md","Order":2,"CategoryType":1,"Icon":null,"Title":"Legal Notices","Languages":[{"Code":"en","Title":"Legal Notices","Slug":"legal-notices","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"ac90ccf7-4c5d-4966-b72a-91c38c89e173","Path":null,"Order":1,"CategoryType":0,"Icon":null,"Title":"FontLab Credits","Languages":[{"Code":"en","Title":"FontLab Credits","Slug":"fontlab-credits","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"28c0f094-9018-47eb-add1-9fc10c3af4c1","Path":"reviews.md","Order":2}],"Id":"fd747368-532a-46a7-b265-c1fd61ac9758","Path":"credits.md","Order":19,"CategoryType":1,"Icon":null,"Title":"Credits","Languages":[{"Code":"en","Title":"Credits","Slug":"credits","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"f87147ac-e179-478b-b143-1e9456d912a0","Path":"r-15.md","Order":1},{"Id":"766c2760-6227-40cc-ad48-18a879429f29","Path":"r-16.md","Order":2}],"Id":"8dc4ea63-ddf9-4081-ae19-c9de7bc3d8b3","Path":"r.md","Order":15,"CategoryType":1,"Icon":null,"Title":"<$R>","Languages":[{"Code":"en","Title":"<$R>","Slug":"r","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[{"Id":"ab41b525-a194-4703-b047-5ba7d93b1029","Path":"r-10.md","Order":10},{"Id":"a3e13d57-630b-4360-bdea-cddd6a376004","Path":"r-3.md","Order":3},{"Id":"3c4d892f-c102-4b6d-80d8-e734db9d1334","Path":"r-14.md","Order":14},{"Id":"ffb18756-ff0f-456a-b32d-f13d4f746c66","Path":"r-2.md","Order":2},{"Id":"e5ef12e7-687b-40e8-8e75-65568b1a093d","Path":"r-1.md","Order":1},{"Id":"fd6b05b1-8c5a-4b30-8d53-1cc1b5192d0f","Path":"r-4.md","Order":4},{"Id":"e1908025-5521-4af5-b0a3-fbe11a6eef48","Path":"r-9.md","Order":9},{"Id":"29ff4c63-6bd8-44d0-a833-979d8155ffcd","Path":"r-8.md","Order":8},{"Id":"235596c7-9ee7-46f2-a8b9-2fe9fe2e630c","Path":"r-11.md","Order":11},{"Id":"fc08e65d-3f6d-464d-b6cf-67b345658263","Path":"r-7.md","Order":7},{"Id":"fe161aff-dbae-46b1-9e49-ce0d50c2d243","Path":"r-5.md","Order":5},{"Id":"d0faa405-3142-4ea3-bf8f-f7cabb077d88","Path":"r-6.md","Order":6},{"Id":"1279f931-3f87-4271-8e6b-928db2e14b53","Path":"r-12.md","Order":12},{"Id":"dc7efa72-c509-46d7-8ee2-6558e64d457a","Path":"r-13.md","Order":13}],"Id":"8e0a8853-0e68-4262-aa57-78da93fcd784","Path":null,"Order":20,"CategoryType":0,"Icon":null,"Title":"Tutorials","Languages":[{"Code":"en","Title":"Tutorials","Slug":"tutorials","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"77f70af2-0063-47cb-9b51-adb7e989fd74","Path":null,"Order":16,"CategoryType":0,"Icon":null,"Title":"SCRIVENER","Languages":[{"Code":"en","Title":"SCRIVENER","Slug":"scrivener","ContentType":0,"SeoTitle":null,"Description":null}]}],"Articles":[],"Id":"23b6d274-6c1a-4342-88d4-a7efd740a415","Path":null,"Order":3,"CategoryType":0,"Icon":null,"Title":"FontLab","Languages":[{"Code":"en","Title":"FontLab","Slug":"fontlab","ContentType":0,"SeoTitle":null,"Description":null}]},{"SubCategories":[{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"402d624c-e7c2-4617-8dfc-b3c3202e857c","Path":"creating-a-group-with-an-image.md","Order":5},{"Id":"5c62c592-8985-44f0-8d18-0e00677d813d","Path":"adding-source-image.md","Order":2},{"Id":"c1b9cfe7-ae73-42ef-a7c1-dea6899a3252","Path":"source-image-overview.md","Order":3},{"Id":"22871093-42fc-40e9-9b56-a6bc7c7a8d54","Path":"update-the-source-image.md","Order":4}],"Id":"58dfd7e2-e23d-4296-8694-169a4a8ee71f","Path":"source-image.md","Order":4,"CategoryType":1,"Icon":null,"Title":"Source Image","Languages":[{"Code":"en","Title":"Source Image","Slug":"source-image","ContentType":0,"SeoTitle":"Source Image","Description":null}]}],"Articles":[{"Id":"19bf58db-92d2-4902-a661-877d9e6e6281","Path":"create-group.md","Order":1},{"Id":"fdc18149-7aa2-47e3-aea9-035630456da0","Path":"ungrouping-objects.md","Order":2},{"Id":"aac85fcb-1f75-43a5-ab16-72ec2a9674d1","Path":"moving-objects-between-groups.md","Order":3},{"Id":"69a9645f-80e5-4a7e-af1e-f0733f01da50","Path":"group-overlay.md","Order":6},{"Id":"ea61a82d-a013-410b-8738-b2f9fd120d44","Path":"importing-the-document-as-group.md","Order":5}],"Id":"76f4294a-0265-484a-b662-72916501c96a","Path":"groups.md","Order":12,"CategoryType":1,"Icon":null,"Title":"Groups","Languages":[{"Code":"en","Title":"Groups and Sources","Slug":"groups","ContentType":0,"SeoTitle":"Groups and Sources","Description":null}]},{"SubCategories":[{"SubCategories":[],"Articles":[{"Id":"0860c1d5-33d7-460c-b50e-fbd657f10607","Path":"propagated-fills.md","Order":5},{"Id":"14d2dfc6-75f5-4f17-9226-5e5092024fef","Path":"mask-fill.md","Order":6},{"Id":"38637f3e-4c96-4bb1-805f-3c213a96d962","Path":"adding-the-handmade-fill.md","Order":1},{"Id":"c0ef19ff-04d6-4d1a-a3d2-9154fbc80b2f","Path":"balanced-fill.md","Order":4},{"Id":"f4b6e162-26d2-4cba-9cb9-985e2527d384","Path":"solid-fill.md","Order":7},{"Id":"a77280f4-b572-47fe-942b-fdf18d926f49","Path":"blend-fill.md","Order":3},{"Id":"b7055786-5757-4600-bc58-402b359dc19e","Path":"manual-fill.md","Order":2}],"Id":"99076ccc-4f2a-45e5-b240-7fdb331d2f99","Path":"handmade-fills-1.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Handmade","Languages":[{"Code":"en","Title":"Handmade","Slug":"handmade-fills-1","ContentType":0,"SeoTitle":"Handmade","Description":null}]}],"Articles":[{"Id":"87dee2f7-5cf1-419c-a316-35f46a15c773","Path":"trace-fill.md","Order":8},{"Id":"549aa48a-5b1c-4dfb-9746-4c37c5157d87","Path":"scribble-fill.md","Order":10},{"Id":"f2460d15-aa4e-46b8-9838-8df67f8e7e3c","Path":"radial-fill.md","Order":4},{"Id":"c74e0468-f727-4333-81f2-c354544cab5f","Path":"text-fill.md","Order":11},{"Id":"6bab0a6b-c138-42f1-a352-3e2dd833d67f","Path":"circular-fill.md","Order":5},{"Id":"87f064bb-a995-4c96-ba3c-66a0866044de","Path":"wireframe-fill.md","Order":9},{"Id":"8d8607b9-0364-40a5-83ce-5f8ed5f518e3","Path":"fractals-fill.md","Order":12},{"Id":"c5c6d8d7-ba70-426f-873e-d02713f98284","Path":"wave-fill.md","Order":3},{"Id":"cb4cce72-7b5e-4a4b-a24a-8252f9a84948","Path":"linear-fill.md","Order":2},{"Id":"6f70fa79-b8dc-4d27-94cb-3c5b94469415","Path":"fill-clone.md","Order":14},{"Id":"bb41c442-3d1e-4eb3-aeb0-bf784aba1bb9","Path":"adding-a-fill-1.md","Order":1},{"Id":"0a4213b5-15de-4676-bc9e-440c66feb38c","Path":"spiral-fill.md","Order":6},{"Id":"b7c00a2c-afae-4b87-9860-24157d2df7c5","Path":"halftone-fills.md","Order":7}],"Id":"b7b6cd2b-0569-4442-968d-cea577615430","Path":"fills-3.md","Order":6,"CategoryType":1,"Icon":null,"Title":"Fills","Languages":[{"Code":"en","Title":"Fills","Slug":"fills-3","ContentType":0,"SeoTitle":"Fills","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f939cbc4-426f-4990-979f-31984b375e4d","Path":"create-new-document-1.md","Order":1},{"Id":"4857ce0e-7cd0-44b0-83d0-8f0acf246bc5","Path":"mask-properties.md","Order":8},{"Id":"38e9c189-3cf9-4244-bd09-77f1b01e6994","Path":"opening-an-existing-document-1.md","Order":2},{"Id":"62cb731b-8a80-48ee-821d-9782762ed4b9","Path":"fill-properties-1.md","Order":4},{"Id":"c34895e9-037e-40d3-953c-26c67969077a","Path":"exporting-the-artwork.md","Order":14},{"Id":"ecc29ec3-2a6b-4695-a72f-cec637e50c14","Path":"adding-a-layer.md","Order":10},{"Id":"32c09b5f-3353-4018-820b-d6159962b3ba","Path":"saving-your-work-1.md","Order":13},{"Id":"b02a0784-a6d7-4235-90ce-8f3266abccf4","Path":"document-view-options.md","Order":12},{"Id":"2c1ebac1-10dc-4292-a5db-e4888a1937f1","Path":"units-of-measurement.md","Order":9},{"Id":"cf8ad8ec-0199-4760-844d-42394b54d13e","Path":"adding-a-mask.md","Order":5},{"Id":"65aeb303-cf8b-46f2-aca0-953bb407c39e","Path":"adding-a-fill.md","Order":3},{"Id":"29443121-be9b-4d3c-ae18-8ad1e3924218","Path":"mask-editing.md","Order":7},{"Id":"4c29879d-5281-4cb8-95eb-81504d2301e2","Path":"sources-and-groups.md","Order":11}],"Id":"366d0353-5e21-46b7-89a5-8a7dd04527b4","Path":"working-with-documents-1.md","Order":5,"CategoryType":1,"Icon":null,"Title":"Your First Artwork","Languages":[{"Code":"en","Title":"Your First Artwork","Slug":"working-with-documents-1","ContentType":0,"SeoTitle":"Your First Artwork","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"72d14e46-15e0-4f57-9886-8460b131b9ed","Path":"editor-tool.md","Order":2},{"Id":"9b780b24-1d9c-47b6-a735-4c3ff3e056de","Path":"transform-4.md","Order":6},{"Id":"ddb80496-81b3-4456-94c1-d3b902a26154","Path":"freeform-1.md","Order":10},{"Id":"d7ecaeab-03bf-42f4-bcab-b91a2edba7fd","Path":"brush-1.md","Order":7},{"Id":"de19d479-21cb-4ec7-bc6f-911aaaabc0ee","Path":"meter-tool.md","Order":3},{"Id":"712b3868-5009-4030-9327-204504c9b402","Path":"rectangle-1.md","Order":8},{"Id":"c90f7b49-f6b4-4a87-b5e9-24b2fec9fed3","Path":"ellipse-1.md","Order":9},{"Id":"fffbd56a-a6c3-4873-9eea-16118c56a44e","Path":"knife-2.md","Order":5},{"Id":"e054bbc3-b617-4b54-ab79-f6847e7df7df","Path":"pencil-2.md","Order":4},{"Id":"68f77e98-dbbe-4ec6-80f8-0a98018cdd42","Path":"toolbar-5.md","Order":1}],"Id":"c58b31f0-d5f5-498b-b9f9-31cb487fd93c","Path":"tools-4.md","Order":8,"CategoryType":1,"Icon":"","Title":"Tools","Languages":[{"Code":"en","Title":"Tools","Slug":"tools-4","ContentType":0,"SeoTitle":"Tools","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"a7f99dac-1276-42d9-9daa-2136e7d75028","Path":"mask-overlay.md","Order":4},{"Id":"e5686d9d-cc4c-43fc-a3c8-677e56f9c527","Path":"importing-mask.md","Order":2},{"Id":"41a2b88f-5ba4-4e8b-862d-8f5ac5af121a","Path":"adding-mask.md","Order":1},{"Id":"76c95666-5a9c-442d-b34e-6151445f8668","Path":"mask-and-mesh.md","Order":6},{"Id":"f756a542-fe2a-46b3-b1a0-830ead607190","Path":"mask-editing-1.md","Order":3},{"Id":"09735a0f-e1ad-41dd-ac1d-5764be00d6a4","Path":"mask-properties-1.md","Order":5}],"Id":"c64462e7-eaab-4395-81d0-0db2d59eeb20","Path":"mask-category.md","Order":10,"CategoryType":1,"Icon":null,"Title":"Mask","Languages":[{"Code":"en","Title":"Mask","Slug":"mask-category","ContentType":0,"SeoTitle":"Mask","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"eb63522e-3237-4574-b432-2f13f5460b63","Path":"adding-mesh.md","Order":1},{"Id":"7262df0f-efd7-43b3-8826-3c516ee3a297","Path":"mesh-properties.md","Order":5},{"Id":"25fb4c70-9943-4cf7-ac5f-9019178ca3c3","Path":"mesh-editing.md","Order":3},{"Id":"644317fb-9a19-4c76-9386-4b442188fd89","Path":"mesh-and-mask.md","Order":6}],"Id":"b530ce48-f2f3-4cc1-94e2-40ea36731a0b","Path":"mesh-5.md","Order":11,"CategoryType":1,"Icon":null,"Title":"Mesh","Languages":[{"Code":"en","Title":"Mesh","Slug":"mesh-5","ContentType":0,"SeoTitle":"Mesh","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"c70208be-4294-48e6-938e-5346c9590b0e","Path":"layers-panel.md","Order":2},{"Id":"9cd28191-6440-4f7b-a974-003b1d1c5b24","Path":"removing-the-layer.md","Order":4},{"Id":"6028138a-1e8c-42b3-abc8-d030db10ef7a","Path":"mask-3.md","Order":5},{"Id":"98c41f83-c090-41fd-a92c-e816845b37f5","Path":"groups-1.md","Order":6},{"Id":"003d1859-94ec-4221-b2d9-4793379cbbe5","Path":"mesh-6.md","Order":7},{"Id":"ec74b01e-875b-4f36-9c06-d9a7a3d33217","Path":"adding-a-layer-1.md","Order":3}],"Id":"233c5045-7caa-4f96-8389-14c3a861935d","Path":"layers-4.md","Order":9,"CategoryType":1,"Icon":"","Title":"Layers","Languages":[{"Code":"en","Title":"Layers","Slug":"layers-4","ContentType":0,"SeoTitle":"Layers","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"f110d8c4-7e40-49b7-ac35-f10225afa235","Path":"transform-3.md","Order":8},{"Id":"9705f3f3-5179-4a8f-b366-a86d6420e70b","Path":"align-and-arrange-1.md","Order":7},{"Id":"90cd419d-067a-41b5-8c9c-579d6e02a60e","Path":"stroke-caps-1.md","Order":5},{"Id":"79dd9dfb-368b-4f79-9b83-95b392e63a81","Path":"view-2.md","Order":10},{"Id":"cf3b10bf-f96e-497f-b7d3-5b24fca80956","Path":"emboss-1.md","Order":6},{"Id":"f7af74c0-65c7-4175-8186-10dea44ccf75","Path":"stroke-thickness-2.md","Order":3},{"Id":"78cdf821-74ce-4c33-8f7b-8c812358c22a","Path":"image-threshold-2.md","Order":2},{"Id":"34292c91-754c-467d-ab45-9fdd6f0f22a0","Path":"dashed-line-1.md","Order":4},{"Id":"462d80ab-de54-4a02-95ba-cc4ef5cf30e0","Path":"document-properties-1.md","Order":11},{"Id":"867df7f5-71e6-44c2-a615-25db2fb433be","Path":"overlap.md","Order":9},{"Id":"7fec2c0e-2982-4d01-a0b8-4354506f00a1","Path":"color-5.md","Order":1}],"Id":"6e10c31b-7226-44ef-aa40-d2efe6d8f622","Path":"properties-2.md","Order":7,"CategoryType":1,"Icon":null,"Title":"Properties","Languages":[{"Code":"en","Title":"Properties","Slug":"properties-2","ContentType":0,"SeoTitle":"Properties","Description":null}]},{"SubCategories":[],"Articles":[{"Id":"ac2979d7-a934-437e-aca6-93edf1b7e0ea","Path":"export-4.md","Order":1},{"Id":"ec430bb4-daba-4a0f-9d40-83f33d3264f5","Path":"ranges.md","Order":3},{"Id":"e982a341-61b5-471c-bb00-5e4e1e397eba","Path":"rendering.md","Order":5},{"Id":"00c24c51-22e6-45c3-b129-6c7f58420525","Path":"save-2.md","Order":8},{"Id":"641d7fde-a58a-4f4f-ae98-dafd48216094","Path":"backup.md","Order":7},{"Id":"d3abd366-7807-4782-a539-b9baf9d77757","Path":"preview-shortcut.md","Order":6},{"Id":"e6499f01-796b-4645-a8b3-1f46e3248730","Path":"update.md","Order":9},{"Id":"1c16b88d-5656-4087-9238-f500976ac4c1","Path":"source-opacity.md","Order":2},{"Id":"fdd33f48-a402-4b59-8589-be37f4c42a9e","Path":"colors.md","Order":4}],"Id":"76c58306-7804-4739-be01-63c7af34a933","Path":"preferences-8.md","Order":13,"CategoryType":1,"Icon":null,"Title":"Preferences","Languages":[{"Code":"en","Title":"Preferences","Slug":"preferences-8","ContentType":0,"SeoTitle":"Preferences","Description":null}]}],"Articles":[{"Id":"b08fc8b7-7363-4be4-b75a-90ee33953484","Path":"document-structure-overview.md","Order":4},{"Id":"6a67e362-d604-46a3-93b0-0332fb98b84f","Path":"introduction-5.md","Order":1},{"Id":"270a92c7-0ca8-4f23-b25c-859e93175a73","Path":"interface-overview.md","Order":3},{"Id":"19fa1811-088e-41dc-8d52-59f391376a97","Path":"getting-started-4.md","Order":2}],"Id":"91ea5865-80b3-41d7-865e-0bca18e4bdf6","Path":null,"Order":2,"CategoryType":0,"Icon":null,"Title":"Vexy Lines","Languages":[{"Code":"en","Title":"Vexy Lines","Slug":"vexy-lines-ai","ContentType":0,"SeoTitle":"Vexy Lines AI","Description":null}]}]}
</document_content>
</document>

<document index="52">
<source>tests/fixtures/README.md</source>
<document_content>
# Test Fixtures

This directory contains high-value test data migrated from legacy Document360 implementations during Phase 9 consolidation (2025-08-08).

## Directory Structure

### `vexy-lines-archive/`
Complete real-world Document360 archive from Vexy Lines documentation:
- **`Vexy-Lines-2025-Mar-12-04-42-07.zip`**: Complete production archive with 1000+ files
- Use for integration testing, archive parsing validation, and performance benchmarking

### `markdown_samples/`
Representative markdown articles extracted from the Vexy Lines archive:
- **`about-this-guide.md`**: Introduction/guide type article
- **`adding-a-fill.md`**: How-to tutorial article  
- **`actions-6.md`**: Feature documentation article
- Use for markdown parsing, content conversion testing, and validation

## Data Directory

### `../data/`
- **`v1_categories_articles.json`**: 532KB structured JSON metadata from complete Vexy Lines export
- Contains categories hierarchy, articles metadata, and complete Document360 structure
- Use for performance testing, data model validation, and parser benchmarking

## Schemas Directory

### `../schemas/`
- **`d361.schema.json`**: JSON schema validation patterns for d361 configuration
- Use for configuration validation and schema testing

## Templates Directory

### `../templates/`
Configuration templates extracted from legacy implementations:
- **`d361.toml.example`**: Complete project configuration template
- **`d361api.toml.example`**: API client configuration examples
- Use for setup documentation and configuration validation

## Usage Notes

This test data represents:
- **Real-world production content** from FontLab's Vexy Lines documentation
- **Complete Document360 export structure** with all metadata
- **Diverse content types**: guides, tutorials, API docs, feature documentation
- **Large-scale data** for performance and scalability testing

## Migration Source

Migrated from:
- `external/int_folders/d362c/example/` (production archive and samples)
- `external/int_folders/d362c/` (configuration templates)

All migrated during Phase 9 consolidation to preserve valuable test data before cleanup.
</document_content>
</document>

<document index="53">
<source>tests/fixtures/markdown_samples/about-this-guide.md</source>
<document_content>
## Metadata_Start 
## code: en
## title: About this Guide 
## slug: about-this-guide 
## seoTitle: About this Guide 
## description:  
## contentType: Markdown 
## Metadata_End

This user guide is updated continuously. Everybody should read the interface overview article, particularly to learn about how to manipulate FontLab’s panels and dialogs, and how we differentiate between tapping versus holding keys for tools keyboard shortcuts.

The first chapters show how to use FontLab 7. They are sorted in the best learning order, but you can use the links to consult the manual in any order. The last chapters are references that describe all tools and commnads, interface controls, and also typographic terms and technologies.

At the end of this manual, you will find a collection of tutorials. While the core manual explains how to use FontLab 7, the tutorials show how to get given results. They explain solutions and show ideas you may be not aware of. We plan to add more tutorials.

Check the list of all Keyboard Shortcuts and also instructions about Customizing Shortcuts.
</document_content>
</document>

<document index="54">
<source>tests/fixtures/markdown_samples/actions-6.md</source>
<document_content>
## Metadata_Start 
## code: en
## title: Actions 
## slug: actions-6 
## seoTitle: Actions 
## description:  
## contentType: Markdown 
## Metadata_End


</document_content>
</document>

<document index="55">
<source>tests/fixtures/markdown_samples/adding-a-fill.md</source>
<document_content>
## Metadata_Start 
## code: en
## title: Add a First Fill 
## slug: adding-a-fill 
## seoTitle: Add a First Fill 
## description:  
## contentType: Markdown 
## Metadata_End
In Vexy Lines, a "fill" is the magic that transforms your reference image into vector art. Think of fills as different patterns of lines that follow the contours and details of your image. Each fill type creates a unique artistic style, giving you endless creative possibilities!

## Ways to Add Your First Fill

There are three simple ways to add your first fill:

### Using the Menu

![image.png](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/image-43JGZFBH.png){height="" width="316"}

1. Click on **Fills > New** in the top menu
2. You'll see a dropdown with different fill types to choose from
3. Select any fill type that catches your eye (we'll explain each one below)
4. Your new fill will appear in the Layers panel, ready for customization

### Using the Layers Panel
![image.png](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/image-5XG87IRT.png){height="" width="218"}

1. Look for the Layers panel (usually on the left side of your screen)
2. At the bottom of the panel, click the **"Add new fill"** button (it has a + symbol)
3. Choose your desired fill type from the popup menu
4. Watch as your new fill is added to your document!

### In the New Project
![image.png](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/image-BM9NYOV7.png){height="" width="218"}

If you're working with a completely empty document:
1. Look for the friendly **"Click to add your first fill"** message in the center of the Layers panel
2. Click on this message to open the fill type selector
3. Choose any fill type to begin your creative journey

## Understanding Fill Types

Let's explore the different fill types you can choose from, in plain language:

### Basic Fills
![Linear fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-linear.svg)  **Linear**: Creates straight, parallel lines - perfect for beginners and creating clean, minimal looks
![Wave fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-wave.svg)   **Wave**: Creates flowing, wavy lines that add movement and a dynamic feel to your artwork
![Radial fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-radial.svg) **Radial**: Lines spread outward from a central point - great for creating focus or highlighting certain areas
![Circular fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-circle.svg) **Circular**: Creates circular patterns - perfect for round objects or creating interesting textures

### Artistic Fills
![Spiral fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-spiral.svg) **Spiral**: Creates spiral patterns that draw the eye inward - excellent for creating depth
![Halftone fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-halftone.svg) **Halftone**: Mimics the dotted pattern you might see in old printed photos or comics
![Trace fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-trace.svg) **Trace**: Automatically traces the edges in your reference image - great for outline-style artwork
![Wireframe fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-wireframe.svg) **Wireframe**: Creates a network of connected lines - perfect for a modern, tech-inspired look

### Expressive Fills
![Scribble fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-scribble%282%29.svg) **Scribble**: Generates a hand-drawn, sketchy appearance - adds a personal, artistic touch
![Fractals fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-fractals.svg) **Fractals**: Creates complex, repeating patterns - for when you want something truly unique
![Text fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-text.svg) **Text**: Uses text characters to form your image - a creative way to incorporate words into your art
![Handmade fill](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/fill-handmade%281%29.svg) **Handmade**: Lets you draw custom line patterns by hand - for ultimate creative control

> **Beginner Tip**: Start with the Linear or Wave fill types - they're the easiest to work with and understand when you're just getting started!

## Customizing Your Fill

After adding a fill, the real fun begins! Let's customize it to create exactly the look you want:

1. Select your fill by clicking on it in the Layers panel
2. Look at the Properties panel (usually on the right side of your screen)
![image.png](https://cdn.document360.io/f64a08c7-43f3-48cf-ac56-a1facdb8f0ec/Images/Documentation/image-79ZFZMEK.png){height="" width="285"}

3. You'll see various settings you can adjust - these change depending on which fill type you chose
4. Try moving the sliders to see how each setting affects your artwork:
   - **Interval**: Controls how close together the lines are placed
   - **Angle**: Changes the direction of the lines
   - **Thickness**: Makes the lines thinner or thicker
   - **Other settings**: Will vary based on your fill type

Watch in real-time as your adjustments transform your artwork! The preview updates instantly, so you can easily see what works.

## Tips for Success

- **Start simple**: Use just one fill type until you're comfortable with how it works
- **Experiment with settings**: Small changes to intervals and thickness can create dramatically different looks
- **Layer fills**: Once you're comfortable, try adding multiple fill types to create complex artwork
- **Use the "Reset" button**: If you make adjustments you don't like, look for the reset button next to each setting
- **Save versions**: If you find a setting combination you love, save your document before making more changes

## Common Questions

**"Why doesn't my fill look right?"**  
Your reference image might be too complex. Try a simpler image first, or adjust the interval and thickness settings.

**"How do I make my artwork look more detailed?"**  
Try reducing the interval setting to create more lines, or experiment with the Trace fill type for detailed edges.

**"Can I combine different fill types?"**  
Absolutely! Many artists use multiple fill types layered together to create rich, complex artwork.

Ready to take your artwork to the next level? In the next section, we'll explore how to work with multiple fills and create truly stunning vector designs!
</document_content>
</document>

# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/mkdocs_test_fixtures.py
# Language: python

import pytest
from pathlib import Path
from typing import Dict, Any, List
import tempfile
import json
import yaml
from unittest.mock import Mock, AsyncMock
from d361.core.models import Article, Category, ProjectVersion
from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.providers.mock_provider import MockProvider
import zipfile
import json

class MkDocsTestHelpers:
    """Helper utilities for MkDocs testing."""

def sample_mkdocs_articles(()) -> List[Article]:
    """Create sample articles optimized for MkDocs testing."""

def sample_mkdocs_categories(()) -> List[Category]:
    """Create sample categories optimized for MkDocs testing."""

def sample_mkdocs_config_context(()) -> Dict[str, Any]:
    """Create sample context for MkDocs config generation."""

def mock_mkdocs_provider((
    sample_mkdocs_articles: List[Article],
    sample_mkdocs_categories: List[Category]
)) -> MockProvider:
    """Create mock provider with MkDocs-optimized test data."""

def mkdocs_config_templates_context(()) -> Dict[str, Dict[str, Any]]:
    """Context for testing all MkDocs config templates."""

def expected_mkdocs_config_structure(()) -> Dict[str, Any]:
    """Expected structure for generated MkDocs configurations."""

def mkdocs_test_exporter((
    test_data_dir: Path,
    mock_mkdocs_provider: MockProvider
)) -> MkDocsExporter:
    """Create MkDocsExporter configured for testing."""

def validate_mkdocs_config((config_yaml: str)) -> Dict[str, Any]:
    """Validate MkDocs configuration YAML."""

def create_test_mkdocs_structure((base_dir: Path)) -> Path:
    """Create a test MkDocs directory structure."""

def count_markdown_files((docs_dir: Path)) -> int:
    """Count markdown files in docs directory."""

def extract_navigation_items((config: Dict[str, Any])) -> List[str]:
    """Extract navigation item names from config."""

def extract_items((items)):

def mkdocs_test_helpers(()) -> MkDocsTestHelpers:
    """Provide MkDocs test helper utilities."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/offline/test_content.py
# Language: python

import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from pathlib import Path
from d361.offline.content import extract_page_content
from d361.offline.config import Config

def mock_config((tmp_path: Path)) -> Config:
    """Create a mock config for testing."""

def mock_page(()) -> MagicMock:
    """Create a mock Playwright page."""

def sample_page_content(()) -> dict[str, str]:
    """Sample page content for testing."""

def test_extract_page_content_success((
    mock_config: Config, 
    mock_page: MagicMock, 
    sample_page_content: dict[str, str]
)) -> None:
    """Test successful page content extraction."""

def test_extract_page_content_no_title((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test page content extraction when no title is found."""

def test_extract_page_content_no_content((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test page content extraction when no content is found."""

def test_extract_page_content_with_retries((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test that retries work when extraction fails initially."""

def test_extract_page_content_navigation_error((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test handling of navigation errors."""

def test_extract_page_content_cookie_dismissal((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test cookie banner dismissal functionality."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/offline/test_integration.py
# Language: python

import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from pathlib import Path
import json
from d361.offline.config import Config
from d361.offline.d361_offline import D361Offline

def mock_config((tmp_path: Path)) -> Config:
    """Create a mock config for testing."""

def sample_sitemap_urls(()) -> list[str]:
    """Sample sitemap URLs for testing."""

def sample_navigation(()) -> list[dict]:
    """Sample navigation data for testing."""

def sample_content(()) -> dict[str, dict]:
    """Sample content data for testing."""

def test_full_workflow_prep_fetch_build((
    mock_config: Config,
    sample_sitemap_urls: list[str],
    sample_navigation: list[dict],
    sample_content: dict[str, dict]
)) -> None:
    """Test the complete workflow: prep -> fetch -> build."""

def test_prep_phase_only((
    mock_config: Config,
    sample_sitemap_urls: list[str],
    sample_navigation: list[dict]
)) -> None:
    """Test the prep phase in isolation."""

def test_fetch_phase_only((
    mock_config: Config,
    sample_sitemap_urls: list[str],
    sample_navigation: list[dict],
    sample_content: dict[str, dict]
)) -> None:
    """Test the fetch phase in isolation."""

def test_build_phase_only((
    mock_config: Config,
    sample_navigation: list[dict],
    sample_content: dict[str, dict]
)) -> None:
    """Test the build phase in isolation."""

def test_error_handling_in_fetch((
    mock_config: Config,
    sample_sitemap_urls: list[str],
    sample_navigation: list[dict]
)) -> None:
    """Test error handling during fetch phase."""

def test_concurrent_processing((
    mock_config: Config,
    sample_sitemap_urls: list[str],
    sample_navigation: list[dict],
    sample_content: dict[str, dict]
)) -> None:
    """Test concurrent processing of multiple URLs."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/offline/test_navigation.py
# Language: python

import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from pathlib import Path
from d361.offline.navigation import extract_navigation, extract_tree_structure
from d361.offline.config import Config

def mock_config((tmp_path: Path)) -> Config:
    """Create a mock config for testing."""

def mock_page(()) -> MagicMock:
    """Create a mock Playwright page."""

def sample_navigation_data(()) -> list[dict]:
    """Sample navigation data for testing."""

def test_extract_navigation_success((
    mock_config: Config, 
    mock_page: MagicMock, 
    sample_navigation_data: list[dict]
)) -> None:
    """Test successful navigation extraction."""

def test_extract_navigation_no_tree_found((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test navigation extraction when no tree container is found."""

def test_extract_navigation_with_cookie_dismissal((
    mock_config: Config, 
    mock_page: MagicMock
)) -> None:
    """Test navigation extraction with cookie banner dismissal."""

def test_extract_tree_structure_simple(()) -> None:
    """Test tree structure extraction with simple navigation."""

def test_extract_tree_structure_nested(()) -> None:
    """Test tree structure extraction with nested navigation."""

def test_extract_tree_structure_empty(()) -> None:
    """Test tree structure extraction with empty navigation."""

def test_extract_tree_structure_malformed(()) -> None:
    """Test tree structure extraction with malformed elements."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/offline/test_offline_core.py
# Language: python

import pytest
from pathlib import Path
from d361.offline.config import Config
from d361.offline.d361_offline import D361Offline
from typing import Any
import pytest
from pydantic import BaseModel, AnyHttpUrl, computed_field

class MinimalConfig(B, a, s, e, M, o, d, e, l):

def default_config_dict(()) -> dict[str, str]:

def default_config((default_config_dict: dict[str, str], tmp_path: Path)) -> Config:

def d361_offline_instance((default_config: Config)) -> D361Offline:

def test_config_creation((default_config_dict: dict[str, str], tmp_path: Path)) -> None:
    """Test basic Config creation and default values."""

def test_d361_offline_initialization((d361_offline_instance: D361Offline, default_config: Config)) -> None:
    """Test D361Offline initialization."""

def test_config_root_domain_extraction_and_paths((tmp_path: Path)) -> None:
    """Test root_domain extraction and related path properties in Config."""

def test_config_output_dir_explicit_settings((tmp_path: Path)) -> None:
    """Test Config.output_dir behavior with explicit settings."""

def test_minimal_config_root_domain(()) -> None:

def domain((self)) -> str:


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/offline/test_parser.py
# Language: python

import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from pathlib import Path
from d361.offline.parser import parse_sitemap
from d361.offline.config import Config

def mock_config((tmp_path: Path)) -> Config:
    """Create a mock config for testing."""

def sample_sitemap_xml(()) -> str:
    """Sample sitemap XML content for testing."""

def test_parse_sitemap_success((mock_config: Config, sample_sitemap_xml: str)) -> None:
    """Test successful sitemap parsing."""

def test_parse_sitemap_fallback_methods((mock_config: Config, sample_sitemap_xml: str)) -> None:
    """Test that fallback methods are tried when primary method fails."""

def test_parse_sitemap_empty_result((mock_config: Config)) -> None:
    """Test handling of empty sitemap."""

def test_parse_sitemap_duplicate_urls((mock_config: Config)) -> None:
    """Test that duplicate URLs are handled correctly."""

def test_parse_sitemap_all_methods_fail((mock_config: Config)) -> None:
    """Test behavior when all parsing methods fail."""

def test_parse_sitemap_malformed_xml((mock_config: Config)) -> None:
    """Test handling of malformed XML."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_integration_api.py
# Language: python

import asyncio
import json
import pytest
from unittest.mock import patch, AsyncMock, Mock
from typing import Dict, List, Any
from datetime import datetime, timedelta
import httpx
from d361.api import (
    Document360ApiClient,
    TokenManager,
    TokenStats,
    RateLimiter,
    BulkOperationManager,
    SmartBulkProcessor,
    ChunkedDownloader,
    CircuitBreaker,
    DataSyncManager,
    ApiMetrics
)
from d361.api.errors import (
    Document360Error,
    AuthenticationError,
    RateLimitError,
    NotFoundError
)
from d361.core.models import Article, Category
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.api.circuit_breaker import CircuitBreakerConfig
from d361.config import ApiConfig
from d361.api.circuit_breaker import CircuitBreakerConfig
from d361.api.data_sync import SyncConfig
from d361.api.data_sync import SyncConfig
from d361.api.metrics import MetricsConfig
from d361.config import ApiConfig
from d361.api.metrics import MetricsConfig
from d361.config import ApiConfig
from d361.config import ApiConfig
from d361.config import ApiConfig

class MockHttpServer:
    """Mock HTTP server for API testing."""
    def __init__((self)):
    def add_response((self, method: str, path: str, response: Dict[str, Any], status_code: int = 200)):
        """Add mock response for specific endpoint."""
    def get_response((self, method: str, path: str)) -> tuple:
        """Get mock response for request."""

class TestDocument360ApiClientIntegration:
    """Integration tests for Document360ApiClient."""

class TestTokenManagerIntegration:
    """Integration tests for TokenManager."""

class TestCircuitBreakerIntegration:
    """Integration tests for CircuitBreaker."""

class TestDataSyncManagerIntegration:
    """Integration tests for DataSyncManager."""

class TestApiMetricsIntegration:
    """Integration tests for ApiMetrics."""

class TestIntegrationEndToEnd:
    """End-to-end integration tests."""

def __init__((self)):

def add_response((self, method: str, path: str, response: Dict[str, Any], status_code: int = 200)):
    """Add mock response for specific endpoint."""

def get_response((self, method: str, path: str)) -> tuple:
    """Get mock response for request."""

def mock_server(()):
    """Create mock HTTP server for testing."""

def test_api_client_initialization((self)):
    """Test API client initialization with real configuration."""

def test_api_client_with_mock_server((self, mock_server)):
    """Test API client with mock HTTP server."""

def test_api_client_error_handling((self, mock_server)):
    """Test API client error handling integration."""

def test_api_client_authentication_flow((self)):
    """Test authentication flow with token rotation."""

def test_api_client_rate_limiting((self)):
    """Test rate limiting integration."""

def test_api_client_bulk_operations((self, mock_server)):
    """Test bulk operations integration."""

def test_token_manager_with_multiple_tokens((self)):
    """Test token manager with multiple tokens."""

def test_token_manager_load_balancing((self)):
    """Test token manager load balancing."""

def test_token_manager_health_monitoring((self)):
    """Test token health monitoring."""

def test_token_manager_stats_tracking((self)):
    """Test token statistics tracking."""

def test_circuit_breaker_state_transitions((self)):
    """Test circuit breaker state transitions."""

def test_circuit_breaker_with_api_client((self, mock_server)):
    """Test circuit breaker integration with API client."""

def test_data_sync_manager_deduplication((self)):
    """Test data sync manager deduplication."""

def test_data_sync_manager_incremental_sync((self)):
    """Test incremental synchronization."""

def test_api_metrics_collection((self)):
    """Test API metrics collection integration."""

def test_api_metrics_with_client((self, mock_server)):
    """Test metrics collection with API client."""

def test_complete_api_workflow((self, mock_server)):
    """Test complete API workflow integration."""

def test_high_load_integration((self)):
    """Test API client under high load conditions."""

def test_error_recovery_integration((self)):
    """Test error recovery and resilience."""

def mock_request((*args, **kwargs)):


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_mkdocs_integration.py
# Language: python

import asyncio
import tempfile
from pathlib import Path
from typing import Dict, Any, List
from unittest.mock import Mock, patch, AsyncMock
import yaml
import pytest
from d361.core.models import Article, Category
from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.mkdocs.exporters.navigation_builder import NavigationBuilder
from d361.mkdocs.processors.content_enhancer import ContentEnhancer
from d361.mkdocs.processors.asset_manager import AssetManager
from d361.mkdocs.processors.cross_reference_resolver import CrossReferenceResolver
from d361.providers.mock_provider import MockProvider
from d361.api.errors import Document360Error

class TestConfigGenerator:
    """Test MkDocs configuration generation."""
    def test_validate_final_config((self, config_generator: ConfigGenerator)):
        """Test final configuration validation."""
    def test_validate_invalid_config((self, config_generator: ConfigGenerator)):
        """Test validation of invalid configuration."""

class TestContentEnhancer:
    """Test content enhancement functionality."""

class TestAssetManager:
    """Test asset management functionality."""

class TestCrossReferenceResolver:
    """Test cross-reference resolution."""
    def test_initialization((self, cross_reference_resolver: CrossReferenceResolver, sample_articles: List[Article])):
        """Test resolver initialization."""

class TestNavigationBuilder:
    """Test navigation structure building."""

class TestMkDocsExporter:
    """Test complete MkDocs export functionality."""

class TestIntegrationWorkflow:
    """Test complete integration workflows."""

def mkdocs_output_dir((test_data_dir: Path)) -> Path:
    """Create output directory for MkDocs export."""

def config_generator(()) -> ConfigGenerator:
    """Create ConfigGenerator for testing."""

def navigation_builder(()) -> NavigationBuilder:
    """Create NavigationBuilder for testing."""

def content_enhancer(()) -> ContentEnhancer:
    """Create ContentEnhancer for testing."""

def asset_manager((mkdocs_output_dir: Path)) -> AssetManager:
    """Create AssetManager for testing."""

def cross_reference_resolver((sample_articles: List[Article])) -> CrossReferenceResolver:
    """Create CrossReferenceResolver for testing."""

def mkdocs_exporter((mkdocs_output_dir: Path, mock_archive_file: Path)) -> MkDocsExporter:
    """Create MkDocsExporter for testing."""

def test_generate_basic_config((self, config_generator: ConfigGenerator)):
    """Test basic configuration generation."""

def test_generate_config_from_template((self, config_generator: ConfigGenerator)):
    """Test configuration generation from Jinja2 template."""

def test_validate_final_config((self, config_generator: ConfigGenerator)):
    """Test final configuration validation."""

def test_validate_invalid_config((self, config_generator: ConfigGenerator)):
    """Test validation of invalid configuration."""

def test_template_validation_missing_template((self, config_generator: ConfigGenerator)):
    """Test validation of missing template."""

def test_template_validation_missing_context((self, config_generator: ConfigGenerator)):
    """Test validation of missing context variables."""

def test_enhance_article_basic((self, content_enhancer: ContentEnhancer, sample_article: Article)):
    """Test basic article enhancement."""

def test_content_processing_headings((self, content_enhancer: ContentEnhancer)):
    """Test heading normalization."""

def test_link_processing((self, content_enhancer: ContentEnhancer)):
    """Test link processing and enhancement."""

def test_quality_assessment((self, content_enhancer: ContentEnhancer)):
    """Test content quality assessment."""

def test_process_assets_basic((self, asset_manager: AssetManager)):
    """Test basic asset processing."""

def test_copy_assets((self, asset_manager: AssetManager, test_data_dir: Path)):
    """Test asset copying to output directory."""

def test_initialization((self, cross_reference_resolver: CrossReferenceResolver, sample_articles: List[Article])):
    """Test resolver initialization."""

def test_resolve_internal_links((self, cross_reference_resolver: CrossReferenceResolver)):
    """Test internal link resolution."""

def test_build_navigation_basic((
        self, 
        navigation_builder: NavigationBuilder, 
        sample_articles: List[Article], 
        sample_category: Category
    )):
    """Test basic navigation building."""

def test_build_hierarchical_navigation((self, navigation_builder: NavigationBuilder)):
    """Test hierarchical navigation building."""

def test_initialization((self, mkdocs_exporter: MkDocsExporter)):
    """Test exporter initialization."""

def test_export_basic_flow((self, mkdocs_exporter: MkDocsExporter)):
    """Test basic export flow."""

def test_export_validation((self, mkdocs_exporter: MkDocsExporter, mkdocs_output_dir: Path)):
    """Test export validation."""

def test_export_error_handling((self, mkdocs_output_dir: Path)):
    """Test error handling during export."""

def test_parallel_processing_disabled((self, mkdocs_exporter: MkDocsExporter)):
    """Test export with parallel processing disabled."""

def test_complete_export_workflow((
        self,
        mock_archive_file: Path,
        mkdocs_output_dir: Path
    )):
    """Test complete export workflow from archive to MkDocs."""

def test_template_integration((self, mkdocs_output_dir: Path)):
    """Test template system integration."""

def test_error_propagation((self, mkdocs_output_dir: Path)):
    """Test error propagation through the system."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_mkdocs_units.py
# Language: python

import pytest
from unittest.mock import Mock, patch, MagicMock
from pathlib import Path
from typing import Dict, Any, List
import yaml
from d361.core.models import Article, Category
from d361.mkdocs.exporters.config_generator import ConfigGenerator
from d361.mkdocs.exporters.navigation_builder import NavigationBuilder
from d361.mkdocs.exporters.theme_optimizer import ThemeOptimizer
from d361.mkdocs.processors.content_enhancer import ContentEnhancer
from d361.mkdocs.processors.markdown_processor import MarkdownProcessor
from d361.mkdocs.processors.asset_manager import AssetManager
from d361.mkdocs.processors.cross_reference_resolver import (
    CrossReferenceResolver, 
    LinkReference, 
    AnchorReference
)
from d361.api.errors import Document360Error
from datetime import datetime
from datetime import datetime
from datetime import datetime
import tempfile
from datetime import datetime
from datetime import datetime

class TestConfigGeneratorUnit:
    """Unit tests for ConfigGenerator."""
    def test_init_default_theme((self)):
        """Test initialization with default theme."""
    def test_init_custom_theme((self)):
        """Test initialization with custom theme."""
    def test_yaml_filter((self)):
        """Test YAML filter functionality."""
    def test_build_base_config_minimal((self)):
        """Test base config building with minimal parameters."""
    def test_build_base_config_complete((self)):
        """Test base config building with all parameters."""
    def test_build_material_theme_config((self)):
        """Test Material theme configuration building."""
    def test_build_readthedocs_theme_config((self)):
        """Test Read the Docs theme configuration building."""
    def test_build_plugins_config_disabled((self)):
        """Test plugins configuration when disabled."""
    def test_build_plugins_config_enabled((self)):
        """Test plugins configuration when enabled."""
    def test_build_markdown_extensions((self)):
        """Test Markdown extensions configuration."""
    def test_merge_configs((self)):
        """Test configuration merging."""

class TestNavigationBuilderUnit:
    """Unit tests for NavigationBuilder."""
    def test_init((self)):
        """Test initialization."""

class TestContentEnhancerUnit:
    """Unit tests for ContentEnhancer."""
    def test_init_default((self)):
        """Test initialization with defaults."""
    def test_init_custom((self)):
        """Test initialization with custom settings."""
    def test_extract_description_basic((self)):
        """Test description extraction."""
    def test_extract_description_long((self)):
        """Test description extraction with truncation."""
    def test_extract_description_with_markdown((self)):
        """Test description extraction removing markdown."""
    def test_normalize_headings((self)):
        """Test heading normalization."""
    def test_process_links_internal((self)):
        """Test internal link processing."""
    def test_process_links_external((self)):
        """Test external link processing."""
    def test_process_images((self)):
        """Test image processing."""
    def test_enhance_code_blocks((self)):
        """Test code block enhancement."""
    def test_assess_quality_high((self)):
        """Test quality assessment for high-quality content."""
    def test_assess_quality_low((self)):
        """Test quality assessment for low-quality content."""
    def test_generate_file_path((self)):
        """Test file path generation."""

class TestAssetManagerUnit:
    """Unit tests for AssetManager."""
    def test_init_default((self)):
        """Test initialization with defaults."""
    def test_init_custom((self)):
        """Test initialization with custom settings."""
    def test_extract_assets_from_content((self)):
        """Test asset extraction from content."""

class TestCrossReferenceResolverUnit:
    """Unit tests for CrossReferenceResolver."""
    def test_init_basic((self)):
        """Test basic initialization."""
    def test_init_with_options((self)):
        """Test initialization with options."""
    def test_link_reference_creation((self)):
        """Test LinkReference dataclass."""
    def test_anchor_reference_creation((self)):
        """Test AnchorReference dataclass."""

class TestThemeOptimizerUnit:
    """Unit tests for ThemeOptimizer."""
    def test_init_default((self)):
        """Test initialization with default theme."""
    def test_init_material_theme((self)):
        """Test initialization with Material theme."""

class TestMarkdownProcessorUnit:
    """Unit tests for MarkdownProcessor."""
    def test_init((self)):
        """Test initialization."""

def test_init_default_theme((self)):
    """Test initialization with default theme."""

def test_init_custom_theme((self)):
    """Test initialization with custom theme."""

def test_yaml_filter((self)):
    """Test YAML filter functionality."""

def test_build_base_config_minimal((self)):
    """Test base config building with minimal parameters."""

def test_build_base_config_complete((self)):
    """Test base config building with all parameters."""

def test_build_material_theme_config((self)):
    """Test Material theme configuration building."""

def test_build_readthedocs_theme_config((self)):
    """Test Read the Docs theme configuration building."""

def test_build_plugins_config_disabled((self)):
    """Test plugins configuration when disabled."""

def test_build_plugins_config_enabled((self)):
    """Test plugins configuration when enabled."""

def test_build_markdown_extensions((self)):
    """Test Markdown extensions configuration."""

def test_merge_configs((self)):
    """Test configuration merging."""

def test_init((self)):
    """Test initialization."""

def test_build_navigation_empty((self)):
    """Test navigation building with empty inputs."""

def test_build_navigation_articles_only((self)):
    """Test navigation building with articles only."""

def test_build_navigation_with_categories((self)):
    """Test navigation building with categories and articles."""

def test_init_default((self)):
    """Test initialization with defaults."""

def test_init_custom((self)):
    """Test initialization with custom settings."""

def test_extract_description_basic((self)):
    """Test description extraction."""

def test_extract_description_long((self)):
    """Test description extraction with truncation."""

def test_extract_description_with_markdown((self)):
    """Test description extraction removing markdown."""

def test_normalize_headings((self)):
    """Test heading normalization."""

def test_process_links_internal((self)):
    """Test internal link processing."""

def test_process_links_external((self)):
    """Test external link processing."""

def test_process_images((self)):
    """Test image processing."""

def test_enhance_code_blocks((self)):
    """Test code block enhancement."""

def test_assess_quality_high((self)):
    """Test quality assessment for high-quality content."""

def test_assess_quality_low((self)):
    """Test quality assessment for low-quality content."""

def test_generate_file_path((self)):
    """Test file path generation."""

def test_init_default((self)):
    """Test initialization with defaults."""

def test_init_custom((self)):
    """Test initialization with custom settings."""

def test_extract_assets_from_content((self)):
    """Test asset extraction from content."""

def test_process_assets_empty_content((self)):
    """Test asset processing with empty content."""

def test_process_assets_no_images((self)):
    """Test asset processing with no images."""

def test_init_basic((self)):
    """Test basic initialization."""

def test_init_with_options((self)):
    """Test initialization with options."""

def test_link_reference_creation((self)):
    """Test LinkReference dataclass."""

def test_anchor_reference_creation((self)):
    """Test AnchorReference dataclass."""

def test_init_default((self)):
    """Test initialization with default theme."""

def test_init_material_theme((self)):
    """Test initialization with Material theme."""

def test_optimize_empty_content((self)):
    """Test optimization with empty content."""

def test_init((self)):
    """Test initialization."""

def test_convert_empty((self)):
    """Test conversion of empty content."""

def test_convert_basic_markdown((self)):
    """Test conversion of basic markdown."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_package.py
# Language: python

import d361

def test_version(()) -> None:
    """Verify package exposes version."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_performance.py
# Language: python

import asyncio
import gc
import time
import psutil
import pytest
from pathlib import Path
from typing import List, Dict, Any, Callable
from unittest.mock import AsyncMock, Mock
from datetime import datetime
from statistics import mean, median
from d361.core.models import Article, Category, ProjectVersion
from d361.providers import MockProvider
from d361.archive import SqliteCache, ArchiveParser
from d361.api import Document360ApiClient, TokenManager, BulkOperationManager
from d361.config import AppConfig, Environment
from d361.utils import PerformanceOptimizer
from datetime import datetime
from d361.archive.cache import CacheConfig
from d361.archive.schema import create_archive_schema
import aiosqlite
from d361.archive.cache import CacheConfig
from d361.api.token_manager import RateLimiter
from d361.archive.cache import CacheConfig
from d361.config import ApiConfig
from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from unittest.mock import AsyncMock, patch
from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.mkdocs.exporters.mkdocs_exporter import MkDocsExporter
from d361.core.models import Article
from unittest.mock import patch
from datetime import datetime
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml
from d361.mkdocs.exporters.config_generator import ConfigGenerator
import yaml

class PerformanceBenchmark:
    """Performance benchmarking utilities for d361 components."""
    def __init__((self)):
    def measure_time((self, func_name: str)):
        """Decorator to measure function execution time."""
    def get_stats((self, func_name: str)) -> Dict[str, Any]:
        """Get performance statistics for a function."""
    def reset((self)):
        """Reset benchmark results."""

class TestDatabasePerformance:
    """Test database indexing and query performance."""

class TestApiPerformance:
    """Test API client performance and rate limiting."""

class TestMemoryPerformance:
    """Test memory usage and profiling for large datasets."""

class TestPerformanceOptimization:
    """Test performance optimization utilities."""

class TestLoadTesting:
    """Load testing for API rate limiting and bulk operations."""

class TestMkDocsExportPerformance:
    """Test MkDocs export performance for large Document360 projects."""

class TestMkDocsTemplateSystem:
    """Comprehensive testing for MkDocs Jinja2 template system."""

def __init__((self)):

def measure_time((self, func_name: str)):
    """Decorator to measure function execution time."""

def decorator((func)):

def async_wrapper((*args, **kwargs)):

def get_stats((self, func_name: str)) -> Dict[str, Any]:
    """Get performance statistics for a function."""

def reset((self)):
    """Reset benchmark results."""

def performance_benchmark(()):
    """Create performance benchmark instance."""

def large_dataset(()):
    """Create large dataset for performance testing."""

def test_sqlite_cache_insert_performance((self, test_database, performance_benchmark, large_dataset)):
    """Test SQLite cache bulk insert performance."""

def bulk_insert(()):

def query_test(()):

def test_full_text_search_performance((self, test_database, performance_benchmark, large_dataset)):
    """Test full-text search performance with large dataset."""

def search_test(()):

def test_concurrent_database_access((self, test_database, performance_benchmark)):
    """Test concurrent database access performance."""

def concurrent_operations(()):

def write_task((index)):

def read_task((index)):

def test_token_manager_performance((self, performance_benchmark)):
    """Test token manager performance with multiple tokens."""

def token_operations(()):

def test_rate_limiting_performance((self, performance_benchmark)):
    """Test rate limiter performance under load."""

def rate_limit_test(()):

def make_request((request_id)):

def test_bulk_operations_performance((self, performance_benchmark, large_dataset)):
    """Test bulk operations performance with large datasets."""

def bulk_test(()):

def test_model_memory_usage((self, performance_benchmark, large_dataset)):
    """Test memory usage of Pydantic models with large datasets."""

def create_models(()):

def serialize_models(()):

def test_cache_memory_efficiency((self, performance_benchmark, test_database)):
    """Test memory efficiency of caching operations."""

def cache_operations(()):

def test_provider_memory_scaling((self, performance_benchmark)):
    """Test provider memory usage with large datasets."""

def provider_operations(()):

def test_performance_optimizer_efficiency((self, performance_benchmark, test_data_dir)):
    """Test PerformanceOptimizer efficiency with real workloads."""

def expensive_operation((data_id: str)):

def test_caching_efficiency(()):

def test_concurrent_api_load((self, performance_benchmark)):
    """Test API client under concurrent load."""

def simulate_load(()):

def api_call((call_id)):

def performance_report((request)):
    """Generate performance report at end of test session."""

def generate_report(()):

def test_mkdocs_export_large_project_timing((self, performance_benchmark, large_dataset, tmp_path)):
    """Test MkDocs export performance for 1000+ page project within 5-minute target."""

def export_large_project(()):

def test_mkdocs_export_memory_efficiency((self, performance_benchmark, tmp_path)):
    """Test memory efficiency for MkDocs export operations."""

def create_and_configure_exporter(()):

def test_mkdocs_export_scalability_benchmark((self, performance_benchmark, tmp_path)):
    """Test MkDocs export scalability with varying dataset sizes."""

def export_dataset(()):

def test_mkdocs_base_template_rendering((self)):
    """Test mkdocs_base.yml.j2 template rendering with various contexts."""

def test_mkdocs_base_template_full_context((self)):
    """Test mkdocs_base.yml.j2 with comprehensive context data."""

def test_material_theme_template_rendering((self)):
    """Test material_theme.yml.j2 template rendering."""

def test_plugin_configs_template_rendering((self)):
    """Test plugin_configs.yml.j2 template rendering."""

def test_template_edge_cases_and_validation((self)):
    """Test template edge cases, missing variables, and error handling."""

def test_template_filter_applications((self)):
    """Test Jinja2 filter applications in templates."""

def test_template_conditional_rendering((self)):
    """Test conditional blocks and feature toggling in templates."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_plugin_manager_enhanced.py
# Language: python

import pytest
from typing import Dict, Any, List
from unittest.mock import Mock, patch, AsyncMock
from d361.mkdocs.processors.plugin_manager import (
    PluginManager,
    MarkdownExtensionManager,
    PluginConfig,
    PluginSet
)
from d361.api.errors import Document360Error

class TestPluginConfig:
    """Test PluginConfig dataclass functionality."""
    def test_plugin_config_creation((self)):
        """Test PluginConfig creation with various parameters."""
    def test_plugin_config_to_dict_with_config((self)):
        """Test conversion to MkDocs format with configuration."""
    def test_plugin_config_to_dict_without_config((self)):
        """Test conversion to MkDocs format without configuration."""
    def test_plugin_config_defaults((self)):
        """Test PluginConfig default values."""

class TestPluginSet:
    """Test PluginSet dataclass functionality."""
    def test_plugin_set_creation((self)):
        """Test PluginSet creation."""
    def test_plugin_set_defaults((self)):
        """Test PluginSet default values."""

class TestPluginManagerInitialization:
    """Test PluginManager initialization and setup."""
    def test_init_default_settings((self)):
        """Test initialization with default settings."""
    def test_init_material_theme((self)):
        """Test initialization with Material theme."""
    def test_init_readthedocs_theme((self)):
        """Test initialization with Read the Docs theme."""
    def test_init_custom_theme((self)):
        """Test initialization with custom theme."""

class TestCorePluginSets:
    """Test core plugin set initialization and configuration."""
    def test_core_plugins_initialization((self)):
        """Test core plugins set initialization."""
    def test_seo_plugins_initialization_material((self)):
        """Test SEO plugins for Material theme."""
    def test_seo_plugins_initialization_readthedocs((self)):
        """Test SEO plugins for Read the Docs theme."""
    def test_performance_plugins_initialization((self)):
        """Test performance plugins initialization."""
    def test_performance_plugins_with_offline((self)):
        """Test performance plugins with offline enabled."""
    def test_accessibility_plugins_initialization((self)):
        """Test accessibility plugins initialization."""
    def test_advanced_plugins_initialization((self)):
        """Test advanced plugins initialization."""
    def test_advanced_plugins_with_github_url((self)):
        """Test advanced plugins with GitHub URL."""

class TestOptimalPluginSelection:
    """Test optimal plugin selection functionality."""

class TestPluginDependencies:
    """Test plugin dependency management."""
    def test_get_installation_guide((self)):
        """Test getting installation guide."""

class TestPluginValidation:
    """Test plugin configuration validation."""
    def test_validate_plugin_configuration_valid((self)):
        """Test validation of valid plugin configuration."""
    def test_validate_plugin_configuration_missing_search((self)):
        """Test validation with missing search plugin."""
    def test_validate_plugin_configuration_suggestions((self)):
        """Test validation suggestions for optimization."""
    def test_validate_plugin_configuration_theme_specific((self)):
        """Test theme-specific validation suggestions."""

class TestMarkdownExtensionManager:
    """Test MarkdownExtensionManager functionality."""
    def test_markdown_extension_manager_init((self)):
        """Test MarkdownExtensionManager initialization."""
    def test_get_core_extensions((self)):
        """Test getting core Markdown extensions."""
    def test_get_enhanced_extensions((self)):
        """Test getting enhanced Markdown extensions."""
    def test_get_advanced_extensions((self)):
        """Test getting advanced Markdown extensions."""
    def test_get_advanced_extensions_material_theme((self)):
        """Test advanced extensions for Material theme."""
    def test_get_optimal_extensions_default((self)):
        """Test getting optimal extensions with default settings."""
    def test_get_optimal_extensions_minimal((self)):
        """Test getting minimal extensions configuration."""
    def test_extension_configuration_details((self)):
        """Test detailed extension configurations."""

class TestIntegrationScenarios:
    """Test integration scenarios and edge cases."""
    def test_extension_manager_workflow((self)):
        """Test complete extension manager workflow."""

def test_plugin_config_creation((self)):
    """Test PluginConfig creation with various parameters."""

def test_plugin_config_to_dict_with_config((self)):
    """Test conversion to MkDocs format with configuration."""

def test_plugin_config_to_dict_without_config((self)):
    """Test conversion to MkDocs format without configuration."""

def test_plugin_config_defaults((self)):
    """Test PluginConfig default values."""

def test_plugin_set_creation((self)):
    """Test PluginSet creation."""

def test_plugin_set_defaults((self)):
    """Test PluginSet default values."""

def test_init_default_settings((self)):
    """Test initialization with default settings."""

def test_init_material_theme((self)):
    """Test initialization with Material theme."""

def test_init_readthedocs_theme((self)):
    """Test initialization with Read the Docs theme."""

def test_init_custom_theme((self)):
    """Test initialization with custom theme."""

def test_core_plugins_initialization((self)):
    """Test core plugins set initialization."""

def test_seo_plugins_initialization_material((self)):
    """Test SEO plugins for Material theme."""

def test_seo_plugins_initialization_readthedocs((self)):
    """Test SEO plugins for Read the Docs theme."""

def test_performance_plugins_initialization((self)):
    """Test performance plugins initialization."""

def test_performance_plugins_with_offline((self)):
    """Test performance plugins with offline enabled."""

def test_accessibility_plugins_initialization((self)):
    """Test accessibility plugins initialization."""

def test_advanced_plugins_initialization((self)):
    """Test advanced plugins initialization."""

def test_advanced_plugins_with_github_url((self)):
    """Test advanced plugins with GitHub URL."""

def test_get_optimal_plugins_default((self)):
    """Test getting optimal plugins with default settings."""

def test_get_optimal_plugins_minimal((self)):
    """Test getting minimal plugin configuration."""

def test_get_optimal_plugins_full_features((self)):
    """Test getting full-featured plugin configuration."""

def test_get_optimal_plugins_with_custom((self)):
    """Test getting plugins with custom additions."""

def test_theme_compatibility_filtering((self)):
    """Test theme compatibility filtering."""

def test_get_plugin_dependencies_basic((self)):
    """Test getting plugin dependencies."""

def test_get_plugin_dependencies_minimal((self)):
    """Test getting minimal plugin dependencies."""

def test_get_installation_guide((self)):
    """Test getting installation guide."""

def test_validate_plugin_configuration_valid((self)):
    """Test validation of valid plugin configuration."""

def test_validate_plugin_configuration_missing_search((self)):
    """Test validation with missing search plugin."""

def test_validate_plugin_configuration_suggestions((self)):
    """Test validation suggestions for optimization."""

def test_validate_plugin_configuration_theme_specific((self)):
    """Test theme-specific validation suggestions."""

def test_markdown_extension_manager_init((self)):
    """Test MarkdownExtensionManager initialization."""

def test_get_core_extensions((self)):
    """Test getting core Markdown extensions."""

def test_get_enhanced_extensions((self)):
    """Test getting enhanced Markdown extensions."""

def test_get_advanced_extensions((self)):
    """Test getting advanced Markdown extensions."""

def test_get_advanced_extensions_material_theme((self)):
    """Test advanced extensions for Material theme."""

def test_get_optimal_extensions_default((self)):
    """Test getting optimal extensions with default settings."""

def test_get_optimal_extensions_minimal((self)):
    """Test getting minimal extensions configuration."""

def test_extension_configuration_details((self)):
    """Test detailed extension configurations."""

def test_complete_plugin_workflow((self)):
    """Test complete plugin management workflow."""

def test_extension_manager_workflow((self)):
    """Test complete extension manager workflow."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_seo_optimizer_enhanced.py
# Language: python

import pytest
import json
from datetime import datetime, timezone
from typing import Dict, Any, List
from unittest.mock import Mock, patch, AsyncMock
from d361.mkdocs.processors.seo_optimizer import (
    SEOOptimizer,
    SEOMetadata,
    StructuredData
)
from d361.api.errors import Document360Error

class TestSEOMetadata:
    """Test SEOMetadata dataclass functionality."""
    def test_seo_metadata_creation((self)):
        """Test SEOMetadata creation with various parameters."""
    def test_seo_metadata_to_frontmatter((self)):
        """Test conversion to MkDocs frontmatter format."""
    def test_seo_metadata_defaults((self)):
        """Test SEOMetadata with minimal parameters."""

class TestStructuredData:
    """Test StructuredData functionality."""
    def test_structured_data_creation((self)):
        """Test StructuredData creation."""
    def test_structured_data_to_json_ld((self)):
        """Test JSON-LD generation."""
    def test_structured_data_minimal((self)):
        """Test structured data with minimal information."""

class TestSEOOptimizerInitialization:
    """Test SEOOptimizer initialization and configuration."""
    def test_init_minimal((self)):
        """Test initialization with minimal parameters."""
    def test_init_complete((self, sample_seo_optimizer)):
        """Test initialization with all parameters."""
    def test_url_parsing((self)):
        """Test URL parsing functionality."""

class TestMetadataGeneration:
    """Test SEO metadata generation."""
    def test_generate_description_from_content((self, sample_seo_optimizer, sample_content)):
        """Test description generation from content."""
    def test_generate_description_truncation((self, sample_seo_optimizer)):
        """Test description truncation for long content."""
    def test_generate_description_markdown_cleaning((self, sample_seo_optimizer)):
        """Test markdown and HTML cleaning in description generation."""

class TestStructuredDataGeneration:
    """Test structured data generation."""

class TestConfigurationGeneration:
    """Test configuration generation methods."""
    def test_generate_social_media_config((self, sample_seo_optimizer)):
        """Test social media configuration generation."""
    def test_generate_analytics_config_basic((self, sample_seo_optimizer)):
        """Test basic analytics configuration generation."""
    def test_generate_analytics_config_with_google((self, sample_seo_optimizer)):
        """Test analytics configuration with Google Analytics."""
    def test_generate_analytics_config_no_feedback((self, sample_seo_optimizer)):
        """Test analytics configuration without feedback."""
    def test_generate_performance_config((self, sample_seo_optimizer)):
        """Test performance configuration generation."""
    def test_generate_accessibility_config((self, sample_seo_optimizer)):
        """Test accessibility configuration generation."""

class TestSEOValidation:
    """Test SEO configuration validation."""
    def test_validate_seo_config_valid((self, sample_seo_optimizer)):
        """Test validation of valid SEO configuration."""
    def test_validate_seo_config_missing_required((self, sample_seo_optimizer)):
        """Test validation with missing required fields."""
    def test_validate_seo_config_warnings((self, sample_seo_optimizer)):
        """Test validation warnings for optional but recommended fields."""
    def test_validate_seo_config_suggestions((self, sample_seo_optimizer)):
        """Test validation suggestions for optimization."""

class TestSitemapGeneration:
    """Test sitemap generation functionality."""

class TestIntegrationScenarios:
    """Test integration scenarios and edge cases."""
    def test_edge_case_empty_inputs((self, sample_seo_optimizer)):
        """Test handling of edge cases with empty inputs."""
    def test_url_handling_edge_cases((self)):
        """Test URL handling with various edge cases."""

def sample_seo_optimizer(()):
    """Create sample SEOOptimizer for testing."""

def sample_content(()):
    """Create sample content for testing."""

def test_seo_metadata_creation((self)):
    """Test SEOMetadata creation with various parameters."""

def test_seo_metadata_to_frontmatter((self)):
    """Test conversion to MkDocs frontmatter format."""

def test_seo_metadata_defaults((self)):
    """Test SEOMetadata with minimal parameters."""

def test_structured_data_creation((self)):
    """Test StructuredData creation."""

def test_structured_data_to_json_ld((self)):
    """Test JSON-LD generation."""

def test_structured_data_minimal((self)):
    """Test structured data with minimal information."""

def test_init_minimal((self)):
    """Test initialization with minimal parameters."""

def test_init_complete((self, sample_seo_optimizer)):
    """Test initialization with all parameters."""

def test_url_parsing((self)):
    """Test URL parsing functionality."""

def test_generate_page_metadata_basic((self, sample_seo_optimizer, sample_content)):
    """Test basic page metadata generation."""

def test_generate_page_metadata_with_overrides((self, sample_seo_optimizer, sample_content)):
    """Test metadata generation with parameter overrides."""

def test_generate_page_metadata_empty_content((self, sample_seo_optimizer)):
    """Test metadata generation with empty content."""

def test_generate_description_from_content((self, sample_seo_optimizer, sample_content)):
    """Test description generation from content."""

def test_generate_description_truncation((self, sample_seo_optimizer)):
    """Test description truncation for long content."""

def test_generate_description_markdown_cleaning((self, sample_seo_optimizer)):
    """Test markdown and HTML cleaning in description generation."""

def test_generate_structured_data_complete((self, sample_seo_optimizer, sample_content)):
    """Test complete structured data generation."""

def test_generate_structured_data_minimal((self, sample_seo_optimizer)):
    """Test structured data generation with minimal metadata."""

def test_generate_structured_data_with_dates((self, sample_seo_optimizer)):
    """Test structured data generation with publication dates."""

def test_structured_data_json_ld_output((self, sample_seo_optimizer)):
    """Test JSON-LD output from structured data."""

def test_generate_social_media_config((self, sample_seo_optimizer)):
    """Test social media configuration generation."""

def test_generate_analytics_config_basic((self, sample_seo_optimizer)):
    """Test basic analytics configuration generation."""

def test_generate_analytics_config_with_google((self, sample_seo_optimizer)):
    """Test analytics configuration with Google Analytics."""

def test_generate_analytics_config_no_feedback((self, sample_seo_optimizer)):
    """Test analytics configuration without feedback."""

def test_generate_performance_config((self, sample_seo_optimizer)):
    """Test performance configuration generation."""

def test_generate_accessibility_config((self, sample_seo_optimizer)):
    """Test accessibility configuration generation."""

def test_validate_seo_config_valid((self, sample_seo_optimizer)):
    """Test validation of valid SEO configuration."""

def test_validate_seo_config_missing_required((self, sample_seo_optimizer)):
    """Test validation with missing required fields."""

def test_validate_seo_config_warnings((self, sample_seo_optimizer)):
    """Test validation warnings for optional but recommended fields."""

def test_validate_seo_config_suggestions((self, sample_seo_optimizer)):
    """Test validation suggestions for optimization."""

def test_generate_sitemap_urls_basic((self, sample_seo_optimizer)):
    """Test basic sitemap URL generation."""

def test_generate_sitemap_urls_with_custom_maps((self, sample_seo_optimizer)):
    """Test sitemap generation with custom priority and frequency maps."""

def test_generate_sitemap_urls_date_handling((self, sample_seo_optimizer)):
    """Test different date formats in sitemap generation."""

def test_complete_seo_workflow((self, sample_seo_optimizer, sample_content)):
    """Test complete SEO optimization workflow."""

def test_multilingual_support((self)):
    """Test SEO optimization for different languages."""

def test_edge_case_empty_inputs((self, sample_seo_optimizer)):
    """Test handling of edge cases with empty inputs."""

def test_url_handling_edge_cases((self)):
    """Test URL handling with various edge cases."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_theme_optimizer_enhanced.py
# Language: python

import pytest
import tempfile
import yaml
from pathlib import Path
from typing import Dict, Any, List
from unittest.mock import Mock, patch, AsyncMock
from d361.core.models import Article, Category
from d361.mkdocs.exporters.theme_optimizer import ThemeOptimizer
from d361.api.errors import Document360Error
from datetime import datetime
from datetime import datetime
from datetime import datetime

class TestThemeOptimizerInitialization:
    """Test ThemeOptimizer initialization and configuration."""
    def test_init_default_settings((self)):
        """Test initialization with default settings."""
    def test_init_material_theme((self)):
        """Test initialization with Material theme."""
    def test_init_readthedocs_theme((self)):
        """Test initialization with Read the Docs theme."""
    def test_init_custom_theme((self)):
        """Test initialization with custom theme."""
    def test_init_with_custom_assets((self)):
        """Test initialization with custom CSS and JS."""

class TestMaterialThemeOptimization:
    """Test Material theme specific optimizations."""
    def test_material_config_updates((self)):
        """Test Material theme configuration updates."""

class TestReadTheDocsThemeOptimization:
    """Test Read the Docs theme specific optimizations."""
    def test_readthedocs_config_updates((self)):
        """Test Read the Docs theme configuration updates."""

class TestGenericThemeOptimization:
    """Test generic theme optimizations."""
    def test_generic_config_updates((self)):
        """Test generic theme configuration updates."""

class TestCustomAssetsHandling:
    """Test custom CSS and JavaScript handling."""

class TestOptimizationControl:
    """Test optimization control and configuration."""
    def test_theme_settings_retrieval((self)):
        """Test theme settings for different themes."""

class TestIntegrationScenarios:
    """Test integration scenarios and edge cases."""
    def test_config_updates_merging((self)):
        """Test configuration updates with multiple custom files."""

def sample_articles(()) -> List[Article]:
    """Create sample articles for theme optimization testing."""

def sample_categories(()) -> List[Category]:
    """Create sample categories for theme optimization testing."""

def temp_output_dir(()):
    """Create temporary output directory for testing."""

def test_init_default_settings((self)):
    """Test initialization with default settings."""

def test_init_material_theme((self)):
    """Test initialization with Material theme."""

def test_init_readthedocs_theme((self)):
    """Test initialization with Read the Docs theme."""

def test_init_custom_theme((self)):
    """Test initialization with custom theme."""

def test_init_with_custom_assets((self)):
    """Test initialization with custom CSS and JS."""

def test_material_theme_optimization((
        self, 
        sample_articles: List[Article],
        sample_categories: List[Category],
        temp_output_dir: Path
    )):
    """Test complete Material theme optimization."""

def test_material_css_generation((self, temp_output_dir: Path)):
    """Test Material theme CSS generation."""

def test_material_js_generation((self, temp_output_dir: Path)):
    """Test Material theme JavaScript generation."""

def test_material_social_cards_setup((self, temp_output_dir: Path)):
    """Test Material theme social cards setup."""

def test_material_config_updates((self)):
    """Test Material theme configuration updates."""

def test_readthedocs_theme_optimization((
        self,
        sample_articles: List[Article],
        sample_categories: List[Category], 
        temp_output_dir: Path
    )):
    """Test Read the Docs theme optimization."""

def test_readthedocs_config_updates((self)):
    """Test Read the Docs theme configuration updates."""

def test_generic_theme_optimization((
        self,
        sample_articles: List[Article],
        sample_categories: List[Category],
        temp_output_dir: Path
    )):
    """Test generic theme optimization."""

def test_generic_config_updates((self)):
    """Test generic theme configuration updates."""

def test_custom_css_handling((self, temp_output_dir: Path)):
    """Test custom CSS file handling."""

def test_custom_js_handling((self, temp_output_dir: Path)):
    """Test custom JavaScript file handling."""

def test_missing_custom_files_warning((self, temp_output_dir: Path)):
    """Test handling of missing custom asset files."""

def test_optimizations_disabled((
        self,
        sample_articles: List[Article],
        sample_categories: List[Category],
        temp_output_dir: Path
    )):
    """Test optimization when customizations are disabled."""

def test_theme_settings_retrieval((self)):
    """Test theme settings for different themes."""

def test_empty_content_optimization((self, temp_output_dir: Path)):
    """Test optimization with empty content."""

def test_large_content_optimization((self, temp_output_dir: Path)):
    """Test optimization with large content sets."""

def test_directory_creation_edge_cases((self, temp_output_dir: Path)):
    """Test directory creation in various scenarios."""

def test_config_updates_merging((self)):
    """Test configuration updates with multiple custom files."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_unit_config.py
# Language: python

import os
import json
import tempfile
from pathlib import Path
from typing import Dict, Any
from unittest.mock import Mock, patch, AsyncMock
import pytest
from pydantic import ValidationError
from d361.config import (
    AppConfig,
    Environment,
    SecretProvider,
    SecretType,
    EnvironmentLoader,
    SecretsManager,
    ConfigLoader,
    ConfigValidator,
    SecretMetadata,
    SecretValue,
    EnvironmentSecretsProvider,
    LocalFileSecretsProvider
)
from d361.api.errors import Document360Error
from d361.config import SecurityConfig
from d361.config import SecurityConfig
from d361.config import SecurityConfig
from d361.config import SecurityConfig
from d361.config import SecurityConfig

class TestAppConfig:
    """Test cases for AppConfig model."""
    def test_app_config_creation_defaults((self)):
        """Test AppConfig creation with default values."""
    def test_app_config_environment_override((self)):
        """Test environment-specific configuration."""
    def test_app_config_nested_models((self)):
        """Test nested configuration models."""
    def test_app_config_validation((self)):
        """Test AppConfig validation rules."""
    def test_app_config_production_validation((self)):
        """Test production-specific validation."""
    def test_app_config_feature_flags((self)):
        """Test feature flag functionality."""
    def test_app_config_serialization((self)):
        """Test configuration serialization."""
    def test_app_config_from_dict((self)):
        """Test configuration creation from dictionary."""
    def test_app_config_environment_variables((self)):
        """Test configuration from environment variables."""

class TestEnvironmentLoader:
    """Test cases for EnvironmentLoader."""
    def test_environment_detection((self, test_data_dir)):
        """Test environment detection logic."""
    def test_environment_detection_with_override((self, test_data_dir)):
        """Test environment detection with override."""
    def test_environment_detection_from_env_var((self, test_data_dir)):
        """Test environment detection from environment variable."""
    def test_dotenv_file_loading((self, test_data_dir, test_helpers)):
        """Test .env file loading."""
    def test_config_file_paths((self, test_data_dir, test_helpers)):
        """Test configuration file path detection."""
    def test_env_file_paths((self, test_data_dir, test_helpers)):
        """Test .env file path detection."""
    def test_hot_reload_setup((self, test_data_dir)):
        """Test hot-reload functionality setup."""
    def test_config_summary((self, test_data_dir)):
        """Test configuration summary generation."""

class TestSecretsProviders:
    """Test cases for secrets providers."""

class TestSecretsManager:
    """Test cases for SecretsManager."""

class TestConfigLoader:
    """Test cases for ConfigLoader."""
    def test_config_loader_summary((self, test_data_dir)):
        """Test configuration summary from loader."""

class TestConfigValidator:
    """Test cases for ConfigValidator."""
    def test_config_validator_creation((self)):
        """Test config validator creation."""
    def test_config_validator_production_rules((self)):
        """Test production-specific validation rules."""
    def test_config_validator_development_rules((self)):
        """Test development-specific validation."""
    def test_config_validator_custom_rule((self)):
        """Test adding custom validation rules."""
    def test_config_validator_resource_limits((self)):
        """Test resource limit validation."""
    def test_config_validator_network_settings((self)):
        """Test network settings validation."""

class TestConfigurationEdgeCases:
    """Test edge cases and error conditions."""
    def test_invalid_environment_values((self)):
        """Test handling of invalid environment values."""
    def test_missing_required_fields((self)):
        """Test handling of missing required configuration fields."""
    def test_config_with_invalid_nested_values((self)):
        """Test configuration with invalid nested values."""
    def test_config_serialization_edge_cases((self)):
        """Test configuration serialization edge cases."""

def test_app_config_creation_defaults((self)):
    """Test AppConfig creation with default values."""

def test_app_config_environment_override((self)):
    """Test environment-specific configuration."""

def test_app_config_nested_models((self)):
    """Test nested configuration models."""

def test_app_config_validation((self)):
    """Test AppConfig validation rules."""

def test_app_config_production_validation((self)):
    """Test production-specific validation."""

def test_app_config_feature_flags((self)):
    """Test feature flag functionality."""

def test_app_config_serialization((self)):
    """Test configuration serialization."""

def test_app_config_from_dict((self)):
    """Test configuration creation from dictionary."""

def test_app_config_environment_variables((self)):
    """Test configuration from environment variables."""

def test_environment_detection((self, test_data_dir)):
    """Test environment detection logic."""

def test_environment_detection_with_override((self, test_data_dir)):
    """Test environment detection with override."""

def test_environment_detection_from_env_var((self, test_data_dir)):
    """Test environment detection from environment variable."""

def test_dotenv_file_loading((self, test_data_dir, test_helpers)):
    """Test .env file loading."""

def test_config_file_paths((self, test_data_dir, test_helpers)):
    """Test configuration file path detection."""

def test_env_file_paths((self, test_data_dir, test_helpers)):
    """Test .env file path detection."""

def test_configuration_loading((self, test_data_dir, test_helpers)):
    """Test complete configuration loading."""

def test_hot_reload_setup((self, test_data_dir)):
    """Test hot-reload functionality setup."""

def test_config_summary((self, test_data_dir)):
    """Test configuration summary generation."""

def test_environment_secrets_provider((self)):
    """Test environment variables secrets provider."""

def test_environment_secrets_provider_missing_secret((self)):
    """Test environment provider with missing secret."""

def test_local_file_secrets_provider((self, test_data_dir)):
    """Test local file secrets provider."""

def test_local_file_secrets_provider_list((self, test_data_dir)):
    """Test listing secrets from local file provider."""

def test_secrets_provider_health_check((self, test_data_dir)):
    """Test secrets provider health checks."""

def test_secrets_manager_initialization((self, test_data_dir)):
    """Test secrets manager initialization."""

def test_secrets_manager_auto_detection((self)):
    """Test automatic provider detection."""

def test_secrets_manager_fallback((self, test_data_dir)):
    """Test fallback provider functionality."""

def test_secrets_manager_secret_operations((self, test_data_dir)):
    """Test secret CRUD operations through manager."""

def test_secrets_manager_health_check((self, test_data_dir)):
    """Test secrets manager health monitoring."""

def test_secrets_manager_provider_info((self, test_data_dir)):
    """Test provider information retrieval."""

def test_config_loader_initialization((self, test_data_dir)):
    """Test config loader initialization."""

def test_config_loader_load_configuration((self, test_data_dir, test_helpers)):
    """Test configuration loading through ConfigLoader."""

def test_config_loader_validation((self, test_data_dir)):
    """Test configuration validation through loader."""

def test_config_loader_with_secrets((self, test_data_dir)):
    """Test configuration loading with secrets integration."""

def test_config_loader_summary((self, test_data_dir)):
    """Test configuration summary from loader."""

def test_config_validator_creation((self)):
    """Test config validator creation."""

def test_config_validator_production_rules((self)):
    """Test production-specific validation rules."""

def test_config_validator_development_rules((self)):
    """Test development-specific validation."""

def test_config_validator_custom_rule((self)):
    """Test adding custom validation rules."""

def custom_rule((config: AppConfig)) -> list[str]:

def test_config_validator_resource_limits((self)):
    """Test resource limit validation."""

def test_config_validator_network_settings((self)):
    """Test network settings validation."""

def test_invalid_environment_values((self)):
    """Test handling of invalid environment values."""

def test_missing_required_fields((self)):
    """Test handling of missing required configuration fields."""

def test_config_with_invalid_nested_values((self)):
    """Test configuration with invalid nested values."""

def test_config_loading_with_corrupted_files((self, test_data_dir, test_helpers)):
    """Test configuration loading with corrupted files."""

def test_secrets_with_provider_failures((self)):
    """Test secrets handling when provider fails."""

def test_config_serialization_edge_cases((self)):
    """Test configuration serialization edge cases."""

def sample_config_data(()) -> Dict[str, Any]:
    """Sample configuration data for testing."""

def production_config_data(()) -> Dict[str, Any]:
    """Production configuration data for testing."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_unit_models.py
# Language: python

import pytest
from datetime import datetime, timezone
from typing import Any, Dict, List
from pydantic import ValidationError
from d361.core.models import (
    Article, 
    Category, 
    ProjectVersion, 
    PublishStatus, 
    ContentType
)
import time
import time

class TestArticleModel:
    """Test cases for Article model validation and behavior."""
    def test_article_creation_valid((self)):
        """Test creating article with valid data."""
    def test_article_slug_auto_generation((self)):
        """Test automatic slug generation from title."""
    def test_article_title_validation((self)):
        """Test article title validation rules."""
    def test_article_content_validation((self)):
        """Test article content validation."""
    def test_article_status_validation((self)):
        """Test article status enum validation."""
    def test_article_dates_validation((self)):
        """Test date field validation and parsing."""
    def test_article_tags_validation((self)):
        """Test tags field validation."""
    def test_article_serialization((self)):
        """Test article model serialization."""
    def test_article_deserialization((self)):
        """Test creating article from dict/JSON."""
    def test_article_equality((self)):
        """Test article equality comparison."""
    def test_article_hash((self)):
        """Test article hash functionality."""
    def test_article_word_count((self)):
        """Test word count calculation."""

class TestCategoryModel:
    """Test cases for Category model validation and behavior."""
    def test_category_creation_valid((self)):
        """Test creating category with valid data."""
    def test_category_slug_generation((self)):
        """Test automatic slug generation."""
    def test_category_hierarchical_structure((self)):
        """Test category parent-child relationships."""
    def test_category_ordering((self)):
        """Test category ordering."""
    def test_category_validation_errors((self)):
        """Test category validation error cases."""
    def test_category_serialization((self)):
        """Test category serialization."""

class TestProjectVersionModel:
    """Test cases for ProjectVersion model validation and behavior."""
    def test_project_version_creation((self)):
        """Test creating project version with valid data."""
    def test_project_version_semantic_versioning((self)):
        """Test semantic version validation."""
    def test_project_version_comparison((self)):
        """Test version comparison logic."""
    def test_project_version_default_flag((self)):
        """Test default version flag."""
    def test_project_version_dates((self)):
        """Test version date handling."""
    def test_project_version_serialization((self)):
        """Test version serialization."""

class TestEnumModels:
    """Test cases for enum models."""
    def test_publish_status_enum((self)):
        """Test PublishStatus enum values."""
    def test_content_type_enum((self)):
        """Test ContentType enum values."""
    def test_enum_validation_errors((self)):
        """Test enum validation with invalid values."""

class TestModelEdgeCases:
    """Test edge cases and error conditions."""
    def test_model_with_none_values((self)):
        """Test models with None values where allowed."""
    def test_model_with_extra_fields((self)):
        """Test models with extra fields."""
    def test_model_field_aliases((self)):
        """Test field aliases if any are defined."""
    def test_model_validation_order((self)):
        """Test that model validation occurs in correct order."""
    def test_model_immutability((self)):
        """Test if models are immutable where expected."""
    def test_model_copy_and_update((self)):
        """Test model copy with updates."""
    def test_model_json_schema((self)):
        """Test JSON schema generation."""

class TestModelPerformance:
    """Performance tests for model operations."""

def test_article_creation_valid((self)):
    """Test creating article with valid data."""

def test_article_slug_auto_generation((self)):
    """Test automatic slug generation from title."""

def test_article_title_validation((self)):
    """Test article title validation rules."""

def test_article_content_validation((self)):
    """Test article content validation."""

def test_article_status_validation((self)):
    """Test article status enum validation."""

def test_article_dates_validation((self)):
    """Test date field validation and parsing."""

def test_article_tags_validation((self)):
    """Test tags field validation."""

def test_article_serialization((self)):
    """Test article model serialization."""

def test_article_deserialization((self)):
    """Test creating article from dict/JSON."""

def test_article_equality((self)):
    """Test article equality comparison."""

def test_article_hash((self)):
    """Test article hash functionality."""

def test_article_word_count((self)):
    """Test word count calculation."""

def test_category_creation_valid((self)):
    """Test creating category with valid data."""

def test_category_slug_generation((self)):
    """Test automatic slug generation."""

def test_category_hierarchical_structure((self)):
    """Test category parent-child relationships."""

def test_category_ordering((self)):
    """Test category ordering."""

def test_category_validation_errors((self)):
    """Test category validation error cases."""

def test_category_serialization((self)):
    """Test category serialization."""

def test_project_version_creation((self)):
    """Test creating project version with valid data."""

def test_project_version_semantic_versioning((self)):
    """Test semantic version validation."""

def test_project_version_comparison((self)):
    """Test version comparison logic."""

def test_project_version_default_flag((self)):
    """Test default version flag."""

def test_project_version_dates((self)):
    """Test version date handling."""

def test_project_version_serialization((self)):
    """Test version serialization."""

def test_publish_status_enum((self)):
    """Test PublishStatus enum values."""

def test_content_type_enum((self)):
    """Test ContentType enum values."""

def test_enum_validation_errors((self)):
    """Test enum validation with invalid values."""

def test_model_with_none_values((self)):
    """Test models with None values where allowed."""

def test_model_with_extra_fields((self)):
    """Test models with extra fields."""

def test_model_field_aliases((self)):
    """Test field aliases if any are defined."""

def test_model_validation_order((self)):
    """Test that model validation occurs in correct order."""

def test_model_immutability((self)):
    """Test if models are immutable where expected."""

def test_invalid_id_values((self, invalid_id)):
    """Test various invalid ID values."""

def test_all_publish_statuses((self, valid_status)):
    """Test all valid publish status values."""

def test_model_copy_and_update((self)):
    """Test model copy with updates."""

def test_model_json_schema((self)):
    """Test JSON schema generation."""

def test_article_creation_performance((self)):
    """Test article creation performance."""

def test_model_serialization_performance((self)):
    """Test model serialization performance."""


# File: /Users/adam/Developer/vcs/github.twardoch/pub/d361-pkgs/d361/tests/test_unit_providers.py
# Language: python

import pytest
from unittest.mock import Mock, AsyncMock, patch, MagicMock
from typing import List, Dict, Any, Optional
from datetime import datetime
from d361.core.models import Article, Category, ProjectVersion
from d361.core.interfaces import DataProvider
from d361.providers import (
    MockProvider, 
    ApiProvider, 
    ArchiveProvider, 
    HybridProvider
)
from d361.api.errors import Document360Error
import time
from datetime import datetime, timedelta
import time

class TestMockProvider:
    """Test cases for MockProvider."""
    def test_mock_provider_creation((self)):
        """Test MockProvider creation with default parameters."""
    def test_mock_provider_custom_parameters((self)):
        """Test MockProvider with custom parameters."""
    def test_mock_provider_consistency((self)):
        """Test that MockProvider generates consistent data."""

class TestApiProvider:
    """Test cases for ApiProvider."""
    def test_api_provider_creation((self)):
        """Test ApiProvider creation."""

class TestArchiveProvider:
    """Test cases for ArchiveProvider."""

class TestHybridProvider:
    """Test cases for HybridProvider."""

class TestProviderIntegration:
    """Integration tests for provider interactions."""

def test_mock_provider_creation((self)):
    """Test MockProvider creation with default parameters."""

def test_mock_provider_custom_parameters((self)):
    """Test MockProvider with custom parameters."""

def test_mock_provider_list_articles((self)):
    """Test listing articles from MockProvider."""

def test_mock_provider_get_article((self)):
    """Test getting single article from MockProvider."""

def test_mock_provider_get_nonexistent_article((self)):
    """Test getting non-existent article."""

def test_mock_provider_list_categories((self)):
    """Test listing categories from MockProvider."""

def test_mock_provider_get_category((self)):
    """Test getting single category from MockProvider."""

def test_mock_provider_list_project_versions((self)):
    """Test listing project versions from MockProvider."""

def test_mock_provider_content_generation((self)):
    """Test content generation options."""

def test_mock_provider_pagination((self)):
    """Test pagination support in MockProvider."""

def test_mock_provider_search((self)):
    """Test search functionality in MockProvider."""

def test_mock_provider_consistency((self)):
    """Test that MockProvider generates consistent data."""

def test_api_provider_creation((self)):
    """Test ApiProvider creation."""

def test_api_provider_list_articles((self)):
    """Test listing articles through API provider."""

def test_api_provider_get_article((self)):
    """Test getting single article through API provider."""

def test_api_provider_error_handling((self)):
    """Test error handling in API provider."""

def test_api_provider_data_transformation((self)):
    """Test data transformation in API provider."""

def test_api_provider_caching((self)):
    """Test caching behavior in API provider."""

def test_archive_provider_creation((self, test_database)):
    """Test ArchiveProvider creation."""

def test_archive_provider_initialization((self, test_database)):
    """Test archive provider initialization."""

def test_archive_provider_load_archive((self, mock_archive_file)):
    """Test loading archive into provider."""

def test_archive_provider_list_articles((self, test_database)):
    """Test listing articles from archive."""

def test_archive_provider_search((self, test_database)):
    """Test full-text search in archive provider."""

def test_archive_provider_incremental_updates((self, test_database)):
    """Test incremental archive updates."""

def test_archive_provider_performance((self, test_database)):
    """Test archive provider performance with large datasets."""

def test_hybrid_provider_creation((self)):
    """Test HybridProvider creation."""

def test_hybrid_provider_source_selection((self)):
    """Test intelligent source selection in hybrid provider."""

def test_hybrid_provider_fallback((self)):
    """Test fallback behavior in hybrid provider."""

def test_hybrid_provider_data_freshness((self)):
    """Test data freshness requirements."""

def test_hybrid_provider_caching_strategy((self)):
    """Test caching strategy across providers."""

def test_hybrid_provider_conflict_resolution((self)):
    """Test conflict resolution when data differs between sources."""

def test_hybrid_provider_performance_metrics((self)):
    """Test performance metrics collection."""

def test_provider_interface_compliance((self)):
    """Test that all providers implement DataProvider interface."""

def test_provider_error_consistency((self)):
    """Test consistent error handling across providers."""

def test_provider_data_consistency((self)):
    """Test data consistency across provider operations."""

def test_provider_performance_characteristics((self)):
    """Test performance characteristics of providers."""

def mock_api_client(()):
    """Create mock API client for testing."""

def configured_providers((test_database, mock_api_client)):
    """Create configured providers for testing."""


</documents>