Skip to main content
SoMark can identify document heading levels and return a nested catalog tree in data.result.catalog of the JSON result. Each catalog node includes its heading text, heading level, page number, and source block index. Use it to build reading navigation, locate the original content, or split content by section—avoiding the loss of section context and poor topic retrieval caused by fixed-length RAG chunking.

Method 1: Use the parsing API

The catalog tree is not a separate endpoint. Enable feature_config.enable_title_level_recognition during parsing and request json output to receive it.
1

Enable title-level recognition

Set enable_title_level_recognition to true in feature_config. Its default value is false.
2

Request JSON output

Include json in output_formats. When parsing is complete, read the tree from data.result.catalog in the response.
3

Use catalog nodes as needed

Render children directly for multi-level navigation. Use page_num and block_idx to link a catalog entry to its source page and content block.
The following example uses the sync parsing endpoint:
Python
For the complete request parameters, see Sync parsing.

Method 2: Use the get-catalog-tree Skill

The get-catalog-tree Skill supports every file format accepted by the SoMark parsing API, including PDF, image, Word, PowerPoint, and Excel files. It can also read SoMark JSON directly. Give the file to a Skill-capable agent to receive a standard nested catalog tree JSON. See Supported file formats for the complete list.
An outline depends on a clear heading hierarchy. Excel files and other documents that mainly contain tabular data can be parsed, but this feature is not recommended when the source has no outline structure. The resulting outline may be empty or lack meaningful levels.
Choose one way to install the Skill before you use it for the first time:
Enter this prompt:
After installation, enter this prompt in the agent:
For a source document, the agent asks for one confirmation before starting SoMark parsing. The Skill creates only one file:
You can also supply SoMark JSON directly:
Each catalog node preserves page_num and block_idx, which link it to the corresponding heading block in the original parsed JSON for section chunking and downstream RAG processing. You can also run the script included with the Skill:

Response structure

The catalog tree is in data.result.catalog as an array of catalog nodes. Top-level nodes normally represent first-level headings; child nodes are recursively organized through children.

Usage tips

  • The catalog nodes are already nested. You do not need to rebuild parent-child relationships from title_level.
  • To split content by section, treat a node and its descendants as one section range, then use page_num and block_idx to retrieve its source JSON content blocks.
  • Heading levels are inferred from document layout and content. Sample-check results before integration for files with no clear heading hierarchy, low-quality scans, or irregular layouts.
  • Keep the feature disabled when you only need document content and do not need section navigation.