# Mintlify
> Mintlify is a platform for building and hosting documentation websites. It provides a set of tools and services for maintaining documentation and making it accessible to AI agents.
> ## Agent Instructions
> When working in a Mintlify project, run `mint instructions` for current step-by-step instructions for common tasks. If the command is unknown, run `npx mint@latest instructions`.
> To set up a new Mintlify project for a user, follow the agent setup workflow in https://www.mintlify.com/docs/quickstart.md.
> For plans and pricing, see https://www.mintlify.com/pricing.md.
# AI-native documentation
Source: https://www.mintlify.com/docs/ai-native
Learn how Mintlify's AI-native features, including the assistant, agent, llms.txt, and MCP server, improve reading, writing, and discovering your docs.
When you host your documentation on Mintlify, built-in AI features help your users find answers and your team maintain content more efficiently. Your content provides the context for these AI-native features to improve the experiences of reading, writing, and discovering your documentation.
## What makes your documentation AI-native
### Reading
In addition to reading individual pages, users can chat with the [assistant](/docs/assistant) in your documentation for immediate answers to their questions and links to relevant content. The assistant helps guide users through your product with accurate information from your documentation. Embed the assistant into custom apps with the [API](/docs/api/assistant/create-assistant-message-v2) to extend where users can access your documentation.
### Writing
The [agent](/docs/agent) helps you write and maintain documentation. It creates pull requests with proposed changes based on your prompts, pull requests, and Slack threads. Add the agent to your Slack workspace so that anyone on your team can help maintain your documentation by chatting with the agent. Or trigger the agent from your own tools with [webhook automations](/docs/api/automations/webhook).
Create [automations](/docs/automations/index) to run the agent on a schedule or on a push to a repository. Each automation defines a prompt for the agent and a trigger for when to run it.
Configure popular tools like [Cursor](/docs/guides/cursor), [Claude Code](/docs/guides/claude-code), and [Devin Desktop](/docs/guides/devin-desktop) to reference the Mintlify schema, your style guide, and best practices.
### Discovering
Mintlify automatically optimizes your site for AI tools and search engines to help users discover your documentation. All pages send their content as Markdown to AI agents instead of HTML, which helps these tools process your content faster and use fewer tokens. Every page is also available to view as Markdown by appending `.md` to the URL. Use the [visibility](/docs/components/visibility) component to tailor content for each audience.
Mintlify hosts `llms.txt` and `skill.md` files for your documentation. These industry-standard files help large language models (LLMs) respond efficiently with relevant information to user queries and provide a list of capabilities for agents to use. As a result, users are more successful with your product.
> [!TIP]
>
> Teach your users how to install your `skill.md` file so they get better results when using your product with AI tools. Embed an installation prompt directly in your docs with the [`Prompt` component](/docs/components/prompt):
>
> ```mdx theme={null}
>
> npx skills add https://your-docs-domain.com
>
> ```
Your documentation site also hosts a Model Context Protocol (MCP) server. It lets users connect your documentation directly to their AI tools and get up-to-date information about your product where they want it. On Pro and Enterprise plans, your site also registers these tools directly in WebMCP-capable browsers. Agents can then search and read your content without a separate connection step.
Full-text search and semantic understanding help users and AI tools find relevant information quickly. Search understands user intent rather than just matching keywords. If a user encounters a 404 error, your site suggests related pages to help them find what they're looking for. You do not need to configure this.
## Enable AI features
Select any of the following cards for more information.
> [card] [Assistant](/docs/assistant/configure)
>
> Configure the assistant to search external sites or direct people to your support team if it can't answer their questions.
> [card] [Automations](/docs/automations/index)
>
> Get documentation updates automatically on a schedule or when a push event occurs.
> [card] [Contextual menu](/docs/ai/contextual-menu)
>
> Add a menu to pages that lets users query AI tools, connect to your MCP server, and copy pages as context with one click.
# Bring your own model
Source: https://www.mintlify.com/docs/ai/bring-your-own-model
Use your own LLM provider API key and choose the model that powers the Mintlify assistant, agent, and automations on Enterprise plans.
> [!NOTE]
>
> Bring your own model requires an [Enterprise plan](https://mintlify.com/pricing?ref=bring-your-own-model). [Contact sales](https://www.mintlify.com/contact/sales) to inquire about adding it to your contract. The **AI model** section appears in your dashboard only when your contract includes it.
By default, Mintlify selects the models that power the assistant and agent. To use a specific model with your own provider account, supply an API key and choose the model. Mintlify then runs inference against your provider.
One configuration covers every AI product on a project: the [assistant](/docs/assistant), [agent](/docs/agent), and [automations](/docs/automations/index).
Bring your own model applies to a single project, not to your whole organization. If your organization has more than one project, configure each one separately. Projects you don't configure use Mintlify's default models.
## Supported providers
* OpenRouter
* Anthropic
* OpenAI
* Amazon Bedrock
With any supported provider, the assistant, agent, and automations all use your key and your model.
Supporting AI tasks also run on your key instead of Mintlify's. These include page-specific [starter questions](/docs/assistant/configure#add-sample-questions) and the commit messages and pull request details Mintlify writes when you publish from the [editor](/docs/editor/index). For these tasks, Mintlify uses a model from your provider that suits the task instead of the model you selected. If your key can't access that model, Mintlify retries with your selected model.
Each provider supports a fixed set of models. The model menus list only the models available for the provider you select. For Amazon Bedrock, the available models depend on the region you select.
## Configure your model
[Editors and admins](/docs/dashboard/roles) can configure the model.
1. Select the project you want to configure.
2. Navigate to the [API keys](https://app.mintlify.com/settings/organization/api-keys) page in your dashboard.
3. In the **AI model** section, enable **Bring your own model**.
4. Select a provider. For Amazon Bedrock, also select a **Region**.
5. Select an **Assistant model**.
6. Optional: Select an **Agent model** to run the agent and automations on a different model. If you leave it empty, they use the assistant model.
7. Enter your provider API key. For Amazon Bedrock, use an Amazon Bedrock API key. Mintlify doesn't support AWS access keys or IAM role credentials.
8. Click **Save**.
Mintlify stores your key encrypted and never displays it again after you save it.
## How credits work
AI usage on a project with bring your own model enabled does not consume Mintlify [credits](/docs/credits). Your provider bills you directly for inference, and those charges do not appear in your Mintlify usage. Set any spending limits with your provider.
Credits pool at the organization level. Other projects in the same organization still draw from that shared balance at the standard rate for their AI usage.
## End-user identifiers
Mintlify sends a hashed identifier for the end user with each request to OpenAI, Anthropic, and OpenRouter. If your provider's safety systems flag abusive traffic, the provider can block that one user instead of your whole API key.
The identifier is an HMAC hash of your project and the user's IP address, conversation, or Mintlify account. It does not contain the raw IP address, email, or other personal details. The same user gets the same identifier across requests, so you can match flagged activity in your provider's dashboard.
| Provider | Request field |
| - | - |
| OpenAI | `safety_identifier` (Responses API) or `user` (Chat Completions API) |
| Anthropic | `metadata.user_id` |
| OpenRouter | `user` |
## Rotate or remove your key
Mintlify reuses your saved key across models for the same provider on that project. Enter a key again only when you rotate it, switch providers, or configure another project.
To rotate your key, enter the new key in the **API key** field, then click **Save**.
To stop using your own model, disable **Bring your own model**. Mintlify deletes the stored configuration and key for that project, and its AI products return to Mintlify's default models. AI usage on the project then consumes credits at the standard rate. Other projects keep their own configurations.
# Contextual menu
Source: https://www.mintlify.com/docs/ai/contextual-menu
Add a contextual menu to your docs with one-click AI integrations for ChatGPT, Claude, Perplexity, Google AI Studio, Devin, Devin Desktop, and MCP tools.
The contextual menu provides quick access to AI-optimized content and direct integrations with popular AI tools. When users click the contextual menu on any page, they can copy content as context for AI tools or open it in an AI conversation. Supported tools include ChatGPT, Claude, Perplexity, Google AI Studio, Grok, Devin, Devin Desktop, and any custom tool you configure.
> [!TIP]
>
> Pair the contextual menu with your hosted [`skill.md`](/docs/ai/skillmd) file and [MCP server](/docs/ai/model-context-protocol). This lets users install your product's full capabilities into their AI tools, not just the page they are reading.
## Menu options
The contextual menu includes several pre-built options that you can enable by adding their identifier to your configuration.
| Option | Identifier | Description |
| :- | :- | :- |
| **Copy page** | `copy` | Copies the current page as Markdown for pasting as context into AI tools |
| **View as Markdown** | `view` | Opens the current page as Markdown |
| **Ask assistant** | `assistant` | Opens the [assistant](/docs/assistant/index) with the current page as context |
| **Download PDF** | `download-pdf` | Downloads the current page as a PDF. Available on [Enterprise plans](https://mintlify.com/pricing). |
| **Open in ChatGPT** | `chatgpt` | Creates a ChatGPT conversation with the current page as context |
| **Open in Claude** | `claude` | Creates a Claude conversation with the current page as context |
| **Open in Perplexity** | `perplexity` | Creates a Perplexity conversation with the current page as context |
| **Open in Grok** | `grok` | Creates a Grok conversation with the current page as context |
| **Open in Google AI Studio** | `aistudio` | Creates a Google AI Studio conversation with the current page as context |
| **Open in Devin** | `devin` | Creates a Devin session with the current page as context |
| **Open in Devin Desktop** | `windsurf` | Opens Devin Desktop with the current page as context. Requires installing Devin Desktop. |
| **Copy MCP server URL** | `mcp` | Copies your MCP server URL to the clipboard |
| **Copy MCP install command** | `add-mcp` | Copies the `npx add-mcp` command to install the MCP server |
| **Connect to Cursor** | `cursor` | Installs your hosted MCP server in Cursor |
| **Connect to VS Code** | `vscode` | Installs your hosted MCP server in VS Code |
| **Connect to Devin** | `devin-mcp` | Installs your hosted MCP server in Devin |
| **Download API spec** | `download-spec` | Downloads your project's OpenAPI spec. If there are multiple specs, downloads them as a zip archive. Only appears on API reference pages. |
| **Custom options** | Object | Add custom options to the contextual menu |
## Enable the contextual menu
Add the `contextual` field to your `docs.json` file and specify which options you want to include. Options appear in the menu in the order you list them.
```json theme={null}
{
"contextual": {
"options": [
"copy",
"view",
"assistant",
"chatgpt",
"claude",
"perplexity",
"grok",
"aistudio",
"devin",
"windsurf",
"mcp",
"cursor",
"vscode",
"devin-mcp",
"download-spec",
"download-pdf"
]
}
}
```
## Display location
By default, the contextual menu appears in the page header. You can configure it to display in the table of contents sidebar instead using the `display` option.
```json theme={null}
{
"contextual": {
"options": ["copy", "view", "chatgpt", "claude"],
"display": "toc"
}
}
```
| Value | Description |
| :- | :- |
| `header` | Displays options in the top-of-page context menu (default) |
| `toc` | Displays options in the table of contents sidebar |
## Add custom options
Create custom options in the contextual menu by adding an object to the `options` array. Each custom option requires these properties:
**title** `string` *required*
The title of the option.
**description** `string` *required*
The description of the option. Displayed beneath the title when the contextual menu expands.
> [!NOTE]
>
> You must include one of `icon` or `src`.
**icon** `string`
The icon to display.
Options:
* [Font Awesome icon](https://fontawesome.com/icons) name, if you have the `icons.library` [property](/docs/organize/settings-appearance#icons) set to `fontawesome` in your `docs.json`
* [Lucide icon](https://lucide.dev/icons) name, if you have the `icons.library` [property](/docs/organize/settings-appearance#icons) set to `lucide` in your `docs.json`
* [Tabler icon](https://tabler.io/icons) name, if you have the `icons.library` [property](/docs/organize/settings-appearance#icons) set to `tabler` in your `docs.json`
* A single emoji (for example, `💡` or `🚀`)
**src** `string`
Path or URL to an image to use as the icon. Use `src` instead of `icon` when you want to use a custom image rather than an icon from a library.
Options:
* Path to an image file in your project (for example, `/images/my-icon.svg`)
* URL to an externally hosted image (for example, `https://example.com/icon.png`)
**iconType** `string`
The [Font Awesome](https://fontawesome.com/icons) icon style. Only used with Font Awesome icons.
Options: `regular`, `solid`, `light`, `thin`, `sharp-solid`, `duotone`, `brands`.
**href** `string | object` *required*
The href of the option. Use a string for simple links or an object for dynamic links with query parameters.
**href object**
**base** `string` *required*
The base URL for the option.
**query** `object[]`
An array of query parameter objects to append to the base URL.
**query object**
**key** `string` *required*
The query parameter key.
**value** `string` *required*
The query parameter value. Mintlify replaces the following placeholders with the corresponding values:
* Use `$page` to insert the current page content in Markdown.
* Use `$path` to insert the current page path.
* Use `$mcp` to insert the hosted MCP server URL.
Example custom option:
```json {9-14} wrap theme={null}
{
"contextual": {
"options": [
"copy",
"view",
"chatgpt",
"claude",
"perplexity",
{
"title": "Request a feature",
"description": "Join the discussion on GitHub to request a new feature",
"icon": "plus",
"href": "https://github.com/orgs/mintlify/discussions/categories/feature-requests"
}
]
}
}
```
## Override on individual pages
To override the global contextual menu on a specific page, add the `contextual` field to the page's frontmatter. Override the global contextual menu to surface page-specific actions like `download-pdf` on a terms of service page, or to hide the menu entirely on a landing page.
The page-level `contextual` object replaces the global one for that page. Omit the field to inherit `docs.json`, or set `options: []` to disable the contextual menu on that page.
```mdx theme={null}
---
title: "Terms of Service"
contextual:
options:
- copy
- download-pdf
display: header
---
```
The same fields and validation rules apply as in `docs.json`, including [custom options](#add-custom-options) and the `display` setting. If a page override is invalid, Mintlify falls back to the global `contextual` configuration.
### Custom option examples
> [accordion] Simple link
>
> ```json theme={null}
> {
> "title": "Request a feature",
> "description": "Join the discussion on GitHub",
> "icon": "plus",
> "href": "https://github.com/orgs/mintlify/discussions/categories/feature-requests"
> }
> ```
> [accordion] Dynamic link with page content
>
> ```json theme={null}
> {
> "title": "Share on X",
> "description": "Share this page on X",
> "icon": "x",
> "href": {
> "base": "https://x.com/intent/tweet",
> "query": [
> {
> "key": "text",
> "value": "Check out this documentation: $page"
> }
> ]
> }
> }
> ```
# Analyze assistant conversations
Source: https://www.mintlify.com/docs/analytics/assistant
Review assistant analytics in the Mintlify dashboard to explore conversation categories, topics, satisfaction, chat history, and content gaps.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The **Assistant** view of the [analytics](https://app.mintlify.com/analytics) page displays assistant usage over time and chat history.
* **Conversation categories** groups conversations into categories, which are high-level themes related to your product, and topics, which are specific tasks within a category. The view lists every topic in a table with its category, response count, satisfaction, and feedback. Filter the table by category or feedback, then select a topic to open a drawer with satisfaction metrics and every conversation in that topic.
* **Satisfaction** shows the thumbs-up and thumbs-down ratings users give assistant responses. Assistant ratings are separate from [page feedback](/docs/optimize/feedback) and do not count toward the Feedback totals.
* **All conversations** lists every assistant conversation for the selected time range with a feedback badge on each row. Select a conversation to open the full transcript.
Mintlify replaces email addresses and phone numbers in assistant conversations with `[REDACTED_EMAIL]` and `[REDACTED_PHONE]` before showing them in the dashboard. The same redaction applies to [CSV exports](/docs/analytics/export) and the [analytics API](/docs/api/analytics/assistant-conversations).
Review assistant analytics to:
* **Monitor assistant usage**: Observe changes in assistant usage to understand how users engage with your content.
* **Identify frequent topics**: Filter topics by category to understand what users ask about most. Use these patterns to identify gaps and prioritize content updates.
* **Find where users struggle**: Filter by negative feedback to find conversations users rated poorly and improve the underlying content.
* **Review chat history**: Get detailed high-intent data about how users think about your product. See which terms they use, what they need help with, and which tasks they try to accomplish.

# Export analytics to CSV
Source: https://www.mintlify.com/docs/analytics/export
Export traffic, referrals, assistant, search, and feedback analytics to CSV from your Mintlify dashboard and interpret each export field.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
Export analytics categories to CSV for deeper analysis, reporting, or archival. Exports use the time range selected on the [analytics](https://app.mintlify.com/analytics) page.
1. Select **Export to CSV**.
2. Select a category to export: traffic, referrals, assistant conversations, searches, or feedback.
3. Wait for Mintlify to email you a download link.
## Interpret traffic exports
Traffic exports break down page views by visitor category so you can compare traffic from humans, agents, search crawlers, and other bots.
| Column | Description |
| - | - |
| `humanViews` | HTML page views from non-bot traffic. |
| `aiViews` | Views from AI agents such as ChatGPT, Claude, and Cursor, plus Markdown page fetches from clients that are not recognized crawlers. |
| `searchIndexViews` | Views from search and indexing crawlers, such as Googlebot, Bingbot, and OAI-SearchBot. |
| `trainingViews` | Views from crawlers that collect content for AI model training, such as GPTBot, ClaudeBot, and CCBot. |
| `otherAiViews` | Views from other AI-related bots that do not fit the preceding categories. |
| `totalViews` | The sum of `humanViews` and `aiViews`. |
Mintlify classifies each view using known user-agent patterns for search crawlers, training crawlers, and AI assistants. Categories are mutually exclusive, so each view counts toward exactly one column.
> [!NOTE]
>
> `searchIndexViews`, `trainingViews`, and `otherAiViews` do not count toward `totalViews`.
## Interpret assistant exports
Assistant exports include the queries, responses, and sources for each question, plus the following columns.
| Column | Description |
| - | - |
| `resolutionStatus` | Whether the assistant answered the question: `answered` or `unanswered`. Use it to identify documentation gaps surfaced by questions the assistant could not resolve. |
| `feedback` | The user's thumbs rating on the response: `positive` or `negative`. Empty if the user did not rate the response. |
Email addresses and phone numbers in queries, responses, and sources appear as `[REDACTED_EMAIL]` and `[REDACTED_PHONE]`.
> [!TIP]
>
> Sample analysis prompts for assistant exports:
>
> * List any queries that had no sources cited.
> * Find patterns in unsuccessful interactions.
> * Group unanswered queries by topic to prioritize content updates.
> * Summarize the sources cited in responses with `negative` feedback.
# Analytics overview
Source: https://www.mintlify.com/docs/analytics/index
Explore the Mintlify analytics dashboard to measure documentation traffic, assistant conversations, search queries, engagement, and reader feedback.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The [analytics](https://app.mintlify.com/analytics) page in your dashboard shows how visitors and agents find and use your documentation. Use these signals to identify valuable pages, discover content gaps, and track changes over time.
> [!TIP]
>
> Ask the [agent](/docs/editor/agent#ask-about-your-analytics) questions about your analytics data directly in the chat panel. The agent can answer questions about the data and provide insights on how to improve your documentation.
Analytics data typically appears within a few minutes of an interaction. Very recent events might not appear immediately.
## Select an analytics view
> [card] [Traffic](/docs/analytics/traffic)
>
> Track visitors, page views, referrals, and human and agent traffic.
> [card] [Assistant](/docs/analytics/assistant)
>
> Review assistant usage, conversation topics, satisfaction, and transcripts.
> [card] [Search](/docs/analytics/search)
>
> Analyze search volume, frequent queries, and click-through rates.
> [card] [User engagements](/docs/analytics/user-engagements)
>
> Understand content actions, navigation paths, and search and assistant funnels.
> [card] [Savings](/docs/analytics/savings)
>
> Estimate hours saved by the agent and automations, and support costs saved by the assistant.
> [card] [Feedback](/docs/optimize/feedback)
>
> View feedback over time, review specific ratings and written feedback, and track follow-up work.
> [card] [Export analytics](/docs/analytics/export)
>
> Export dashboard data to CSV for analysis, reporting, or archival.
> [card] [Stream analytics events](/docs/analytics/streaming)
>
> Send analytics events to Amazon S3 for downstream processing.
## Filter by time period
Use the range selector in an analytics view to adjust the time period for the displayed data. Select a preset, like **Last 7 days** or **All time**, or a custom range on the calendar. Exports also use the selected time range.
## Filter by page or path
Use the **Filter** menu to scope the dashboard to a single page or path. When you select a path, the analytics page displays data for every page under that path. For example, if you filter to `docs/authentication`, the analytics page displays data for every page in the `docs/authentication/*` path. The Assistant and Search views always show site-wide data.
In the Traffic view, filtering by page changes the popular pages ranking to start at the selected page and continue down the ranking, rather than showing only that page.
# Measure time and money saved with Mintlify
Source: https://www.mintlify.com/docs/analytics/savings
Use the Savings view in analytics to estimate hours saved by the agent and automations, and support costs saved by assistant answers.
> [!NOTE]
>
> Savings analytics require an [Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The **Savings** view of the [analytics](https://app.mintlify.com/analytics) page estimates how much work Mintlify saves your team. It shows hours saved by the agent and automations, and support costs avoided when the assistant answers users' questions.
Use the Savings view to:
* **Report on return on investment**: Share estimated hours and dollars saved with stakeholders.
* **Compare automation value**: See which types of automated work contribute the most time savings.
## Time saved
The **Time saved (hours)** chart breaks down estimated hours saved into four categories.
* **Slack agent**: Pull requests the [agent opens from Slack](/docs/agent/slack).
* **Self-updating automations**: Pull requests from [self-updating content automations](/docs/automations/reference#self-updating-content-automations), such as Update from code changes and Draft changelog.
* **Maintenance automations**: Pull requests from [maintenance automations](/docs/automations/reference#maintenance-automations), such as Translate content and Fix broken links.
* **Custom automations**: Pull requests from [custom automations](/docs/automations/create).
Mintlify counts only merged pull requests that were first opened during the selected time range. Each pull request adds hours based on the number of changed lines.
| Changed lines | Hours saved |
| :- | :- |
| Fewer than 20 | 0.5 |
| 20 to 99 | 2 |
| 100 or more | 5 |
When the line count for a pull request is unavailable, Mintlify estimates hours based on the type of work.
| Source | Hours saved |
| :- | :- |
| Draft changelog, Fix broken links, Fix SEO issues, and Fix grammar & typos | 0.5 |
| Slack agent, Update from code changes, Fill gaps from assistant conversations, Improve docs from user feedback, Update from support feedback, Translate content, and Enforce your style guide | 2 |
| Custom automations | 5 |
## Money saved
The **Money saved** card shows two metrics.
* **Money saved**: Estimated support cost avoided, calculated as \$12 for each question the assistant answers based on the average cost of support tickets across industries.
* **Questions answered by assistant**: A count of conversations with the [assistant](/docs/analytics/assistant) in the selected time range that the assistant answered without routing the user to sales or support.
# Analyze documentation searches
Source: https://www.mintlify.com/docs/analytics/search
Review documentation search analytics to track query volume, spot searches returning no results, and improve result click-through rates.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The **Search** view of the [analytics](https://app.mintlify.com/analytics) page displays search volume, queries with no results, and click-through rates.
Review search analytics to:
* **Monitor search trends**: Observe changes in search queries to understand how users find your content and which topics they want information about.
* **Identify frequent queries**: Use frequent queries to understand which topics are most important to users. Identify gaps in coverage and prioritize content updates.
* **Identify low click-through rates**: Click-through rates (CTR) show how many users click a search result after typing a query. A low CTR can indicate that the search results are not relevant to users' queries. For frequent search terms with a low CTR, improve the relevance of search results by adding keywords or updating your content.
CTR counts a search as clicked only when a user selects a specific result, either with the pointer or by activating a highlighted result with the keyboard. If a user asks the AI assistant instead of clicking a result, that search is not counted as a click.

# Stream analytics events to Amazon S3
Source: https://www.mintlify.com/docs/analytics/streaming
Configure Enterprise analytics streaming to send selected event categories from your Mintlify projects to Amazon S3 in near real time.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
> Analytics streaming is available only on [Enterprise plans](https://mintlify.com/pricing?ref=analytics-streaming).
Stream analytics events to Amazon S3 in near real time to send events to your data warehouse or downstream analytics pipelines without waiting for CSV exports.
Organization admins can add multiple destinations, select which event categories to send, and select which projects to stream from. Analytics streaming uses an inclusion model: no events stream until you select at least one category and one project. The same category and project selections apply to every destination.
## Add a destination
1. Navigate to the [Streaming](https://app.mintlify.com/settings/organization/streaming) page of your dashboard.
2. In the **Stream configuration** section, click **Configure**.
3. Select **Add destination**.
4. Enter an optional label, then provide the Amazon S3 bucket, AWS region, access key ID, and secret access key. Optionally, enter a prefix that Mintlify adds to the beginning of every object key.
5. Select **Add destination**.
> [accordion] Prepare Amazon S3 credentials
>
> Create an AWS Identity and Access Management (IAM) user with an access key whose policy allows writing to the target bucket. Mintlify does not support role assumption or temporary credentials that require a session token. At minimum, grant `s3:PutObject` on the bucket and key prefix that you plan to use. For example:
>
> ```json theme={null}
> {
> "Version": "2012-10-17",
> "Statement": [
> {
> "Effect": "Allow",
> "Action": ["s3:PutObject"],
> "Resource": "arn:aws:s3:::your-bucket-name/analytics/*"
> }
> ]
> }
> ```
>
> Use the access key ID and secret access key from that IAM user when adding the destination. The key prefix is optional. Mintlify adds it to the beginning of every object key.
To stop streaming to a destination, open the streaming configuration, click the remove icon next to the destination, then click **Remove** to confirm.
## Select streamed categories
1. Navigate to the [Streaming](https://app.mintlify.com/settings/organization/streaming) page of your dashboard.
2. In the **Stream configuration** section, click **Configure**.
3. In the categories table, select the categories that you want to send.
| Category | Examples |
| - | - |
| Page views | Page and Markdown view events. |
| Navigation | Navigation item clicks, navigation call-to-action clicks, and version changes. |
| Search | Search queries, result clicks, search closes, and search comparisons. |
| Page components | Expandable, accordion, code block, and API playground interactions. |
| Feedback | Thumbs up, thumbs down, and detailed feedback submissions. |
| AI Assistant | Assistant conversations, sources, suggestions, feedback, and errors. |
| Context menu & MCP | Context menu actions, MCP link copies, MCP server installs, and MCP tool calls. |
The examples summarize each category. Use the streamed `eventType` value to identify the exact event.
4. Click **Save**.
## Select streamed projects
Select which of your organization's projects send events. The dashboard lists each project by subdomain. If you create a project, return to the streaming configuration and select it. New projects do not automatically start streaming events.
1. Navigate to the [Streaming](https://app.mintlify.com/settings/organization/streaming) page of your dashboard.
2. In the **Stream configuration** section, click **Configure**.
3. In the **Projects** table, select the projects that you want to send events from.
4. Click **Save**.
No events stream until you select at least one category and one project.
## Understand streamed data
Mintlify writes newline-delimited JSON (`.jsonl`) objects to your bucket. Mintlify generates object names from UTC timestamps. If you configure a key prefix, Mintlify writes the objects under that prefix.
Each line contains an event envelope with an `eventType` and `payload`. The `eventType` is the event name, such as `docs.content.view`. The `payload` contains the analytics event as a JSON object or a JSON-encoded string. If `payload` is a string, parse it as JSON before loading it into your warehouse.
> [accordion] Example streamed event
>
> ```json theme={null}
> {
> "eventType": "docs.content.view",
> "payload": {
> "event_id": "4b91fdbc-4677-4e03-b51b-5f2da41c8654",
> "subdomain": "docs",
> "user_id": "",
> "anon_id": "anon_01JZ8W6QKEJ6ECG1T7QK2S5PZ2",
> "session_id": "session_01JZ8W8CS5JC8T18HXH8ES7Z5M",
> "created_at": "2026-07-22T23:21:41.063Z",
> "event": "docs.content.view",
> "path": "/quickstart",
> "referrer": "https://www.example.com/",
> "user_agent": "Mozilla/5.0",
> "ip": "203.0.113.10",
> "properties": {}
> }
> }
> ```
The event payload contains the following fields:
| Field | Description |
| - | - |
| `event_id` | UUID that identifies the event. Use it as a deduplication key when loading data. |
| `subdomain` | Subdomain of the project that generated the event. |
| `user_id` | ID of the authenticated user, when available. On authenticated MCP events, this is the [`sub` field](/docs/deploy/authentication-setup#user-data-format) of the user data. |
| `anon_id` | Anonymous visitor ID, when available. |
| `session_id` | Visitor or assistant session ID, when available. |
| `created_at` | ISO 8601 timestamp for when the event occurred. |
| `event` | Event name. This matches `eventType` in the envelope. |
| `path` | Documentation path where the event occurred. |
| `referrer` | Referring URL, when available. |
| `user_agent` | Browser or client user-agent string. |
| `ip` | Visitor IP address. |
| `properties` | Event-specific data as a JSON object or JSON-encoded string. |
Configuration changes can take up to one minute to apply.
> [!WARNING]
>
> Streamed events can contain personal data, including IP addresses, user and session identifiers, assistant queries and responses, and feedback comments or contact information. Apply access controls, retention policies, and other data-handling requirements appropriate for your organization.
# Analyze documentation traffic
Source: https://www.mintlify.com/docs/analytics/traffic
Review traffic analytics to track visitors, page views, referrals, popular pages, and traffic from both human readers and AI agents.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The **Traffic** view of the [analytics](https://app.mintlify.com/analytics) page shows visitors, page views, assistant conversations, searches, and feedback. Use it to monitor trends, identify popular pages, and track referral sources.

## How Mintlify counts traffic
Mintlify classifies every request by user agent and counts only human and agent traffic toward visitor and page view totals. Search indexing crawlers, AI training crawlers, and other bots are excluded. See [Interpret traffic exports](/docs/analytics/export#interpret-traffic-exports) for the full breakdown.
> [!NOTE]
>
> In September 2026, visitor counts adopted the same crawler filtering as page views, lowering visitor totals across all date ranges.
>
> Agent traffic measurement expanded in June 2026. Before then, the analytics dashboard only captured a subset of agent traffic. Starting June 8, 2026, Mintlify recognizes a broader set of agent user agents, counts agent HTML page views alongside Markdown requests, and serves Markdown to more agents. As a result, agent views increased across most sites around that date. This reflects improved measurement and agent access, not a sudden change in traffic. When comparing agent views over time, account for this shift.
>
> The size of the increase varies by site, since it depends on how much agent traffic each site receives. Sites that AI tools reference frequently show a larger increase than sites with less agent traffic.
## Interpret agent views
Mintlify identifies agent visitors by IP address and user agent, approximating distinct sources of AI traffic rather than individual sessions. Use agent views to see which AI platforms access your docs and how usage changes over time.
The agent breakdown groups traffic by provider (ChatGPT, Claude, Cursor, and others), with three catch-all buckets:
* **HTTP clients**: Tools and libraries such as cURL, `wget`, and Python HTTP clients.
* **Browser**: Markdown requests made from a web browser.
* **Other**: Agent traffic that does not match a known provider or client.
Mintlify's own internal traffic (link checking, page revalidation) is excluded.
# Analyze user engagements
Source: https://www.mintlify.com/docs/analytics/user-engagements
Use engagement analytics to measure content actions, CTA click-through rates, user flows through your docs, and search and assistant funnels.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
The **User engagements** view of the [analytics](https://app.mintlify.com/analytics) page shows how visitors interact with your content and calls to action. It includes interaction trends by page, common paths through your documentation, and search and assistant funnels. All cards use the time range selected for this view.
Use engagement analytics to:
* **Identify high-intent pages**: Pages with a high CTA click-through rate often indicate visitors who are ready to take the next step, such as signing up for your product or talking to your sales team.
* **Understand which content matters**: Review high-intent pages to learn what motivates users to engage more deeply. Keep these pages up to date and consider adding related content.
## Overview
The overview displays:
* **Total interactions**: CTA clicks and page-level actions combined.
* **Average interactions per session**: Total interactions divided by sessions with CTA, action, or page-view activity.
* **CTA click rate**: CTA clicks divided by human page views, capped at 100%.
Each metric includes a delta badge comparing the selected period with the preceding period of the same length.
## Actions taken over time
The actions taken over time chart tracks two separate series:
* **CTA clicks**: Clicks on the [primary navbar button](/docs/organize/settings-structure#navbar). Configure a `navbar.primary` button in `docs.json` to populate this series.
* **Actions**: Context-menu actions, code-block copies, API playground requests, and thumbs-up or thumbs-down feedback.
The table ranks pages by combined clicks and actions. It includes page views, clicks, CTA rate, actions, and action rate. CTA rate is CTA clicks divided by human page views. Action rate is actions divided by human page views.
## User flow
The user flow shows the paths visitors take after entering your documentation from a selected page. The entry-point selector lists up to ten pages with the most starting sessions. The chart follows sessions through the entry page and up to three subsequent page interactions.
To interpret a user flow:
1. Select an entry point.
2. Hover over a node to view the number of sessions entering it (**In**), the number continuing to another page (**Out**), and the drop-off rate when applicable.
Each interaction column shows up to six named pages ranked by arriving sessions. An **Other (N pages)** node at the bottom of the column groups the remaining pages. Grouping these pages preserves onward sessions so drop-off reflects visitors who do not continue. The final interaction column does not show drop-off because the chart does not display another page after it.
Use user flows to identify common navigation paths, find pages where visitors stop, and compare navigation patterns across entry points or time ranges. You do not need to configure your site. Data appears after your documentation receives visitor traffic.
## User funnel
The user funnel counts sessions at each stage and displays how many reached the stage or dropped off before it. Use the selector to switch between **Search-to-answer**, the default view, and **Assistant conversation**.
### Search-to-answer
| Stage | Description |
| - | - |
| **Opened search** | The session opened the search interface. This stage appears only for ranges beginning July 31, 2026 or later that contain search-open events. |
| **Entered a query** | The session submitted a search query. |
| **Clicked a result** | The session clicked a search result. |
| **Landed on a page** | The session viewed the page opened from a search result. |
| **Taken an action** | After landing, the session clicked a CTA or used a context-menu action, copied a code block, sent an API playground request, or submitted thumbs feedback. |
Use the drop-off between stages to identify whether visitors struggle to search, choose a result, reach its page, or continue interacting after they land.
### Assistant conversation
The assistant conversation funnel excludes sessions flagged as spam.
| Stage | Description |
| - | - |
| **Started a conversation** | The session contained assistant activity. |
| **Got an answer** | The assistant completed at least one answer in the session. |
| **Asked a follow-up** | The assistant completed at least two answers in the session. |
| **Engaged with the answer** | The same session contained at least one completed answer and a source click, response copy, web-search-result click, or thumbs feedback. |
The engaged stage counts these events regardless of whether the interaction occurs before or after the completed answer. It does not require a follow-up.
# About bases
Source: https://www.mintlify.com/docs/base/index
Learn what a base is, how it differs from a docs project, where its pages are stored, how your team and its agents use bases, and what each plan includes.
> [!NOTE]
>
> Base is in beta and subject to change.
Bases are a type of project in Mintlify. They're commonly used for knowledge bases for your team and the agents they work with. Keep specs, runbooks, onboarding guides, and other internal team knowledge in a base. Connect your base to Claude, ChatGPT, Cursor, and other AI tools through MCP so agents work from the same information your team does.
A base uses the same [editor](/docs/editor/index) and [agent](/docs/editor/agent) as your docs projects. The same workflows apply to both project types.
## How a base differs from docs
A base is one of two [project types](/docs/organize/projects#project-types). Because a base has no site, settings that only apply to a site, such as custom domains, the assistant, exports, and analytics, aren't available for a base. Some AI features are not available for a base, including Autopilot and automations.
You organize a base with only pages and groups. You cannot use tabs, anchors, versions, languages, or other navigation elements.
## Where your pages are stored
The editor sidebar in a base contains three types of pages.
* **Teamspace**: Pages your entire organization shares. Mintlify stores Teamspace pages as MDX files in a Git repository and commits your edits automatically.
* **Personal**: [Private pages](/docs/editor/pages#private-pages) for your drafts or content that's just for yourself. Private pages aren't stored in Git. They stay private to you unless you share them with teammates. If you want to share a private page, open its options menu, select **Move**, and choose **Teamspace** or a group inside it.
* **Shared with me**: Pages that teammates [shared with you](/docs/editor/pages#share-a-private-page) directly.
New bases use a Git repository that Mintlify hosts for you. To work on your base locally with your own tools, connect a GitHub, GitLab, Bitbucket, or Azure Repos repository in your [Git settings](https://app.mintlify.com/settings/project/git-settings). Commits you push to the connected repository update your base.
## How people and agents contribute
Your team can update a base wherever they work:
* **Editor**: Write and organize pages in your browser or the [desktop app](/docs/desktop), with help from the [agent](/docs/editor/agent).
* **MCP**: Connect Claude, ChatGPT, Cursor, or another AI tool to the [admin MCP](/docs/ai/mintlify-mcp) to read, search, and edit your base from a conversation.
* **Slack**: Ask the [Mintlify agent in Slack](/docs/agent/slack) questions that it answers from your base, or ask it to update pages.
* **Git**: Clone your base's repository and edit the MDX files with any editor or coding agent.
## Share a page to the web
On Pro and Enterprise plans, you can share a base page with people outside your organization through a public link. Anyone with the link can view the page without signing in. They can't edit it.
### Allow public links
Public links are off by default. An admin must turn them on before anyone can share a page.
1. Go to your [Security](https://app.mintlify.com/settings/organization/access) settings.
2. In the **Sharing** section, turn on **Allow public links**.
If an admin turns off **Allow public links**, every public link stops working until an admin turns the setting back on.
### Share a page
You can share a Teamspace page if you have the editor or admin role. You can share a private page if you have **Full Access** to it.
1. Open the page in the editor.
2. Open the page options menu.
3. Turn on **Share to web**.
4. Click **Copy public link**.

While a page is shared, a globe button appears in the top bar. Click the icon to copy the link again. The public page shows the page's current content.
Each public page also has a Markdown version for AI tools. Add `.md` to the end of the public link to view it or request the link with an `Accept: text/markdown` header.
### Stop sharing a page
1. Open the page options menu.
2. Turn off **Share to web**.
3. Click **Stop sharing** to confirm.
The link stops working right away. If you share the page again, Mintlify generates a new link.
## Features and plans
Bases have their own Starter, Pro, and Enterprise plans, separate from the plans for your docs projects. To view your base's plan, open your base and go to your [Billing](https://app.mintlify.com/settings/organization/billing) settings. To upgrade to Pro or Enterprise, an admin can click **Contact us** on the plan or [contact sales](https://www.mintlify.com/contact/sales/base).
| | Starter | Pro | Enterprise |
| - | - | - | - |
| Seats | 5 | 15 included, additional seats available | Custom |
| Pages | Under 1,000 | Up to 10,000 | More than 10,000 |
| File uploads | Up to 5 MB | Up to 25 MB | Large files |
| Admin MCP requests | 100 per week | 1,000 per user per week | Custom |
Every plan includes the editor, Git sync, and the [admin MCP](/docs/ai/mintlify-mcp).
Pro also includes the [agent](/docs/editor/agent) and [public links](#share-a-page-to-the-web).
Enterprise includes the Pro features, plus [SSO](/docs/dashboard/sso), [SCIM](/docs/dashboard/scim), [role-based access control](/docs/dashboard/roles), and additional features. See the [pricing](https://www.mintlify.com/pricing) page for more information.
## Get started
> [card] [Set up a base](/docs/base/setup)
>
> Create a base, invite your team, and connect your AI tools.
# Set up a base
Source: https://www.mintlify.com/docs/base/setup
Create a base for your team's internal knowledge, add your first pages, invite teammates, and connect your AI tools to it.
> [!NOTE]
>
> Base is in beta and subject to change.
## Create your base
> [tab] New to Mintlify
>
> **1. Sign up for Mintlify**
>
> Go to [app.mintlify.com/signup?product=base](https://app.mintlify.com/signup?product=base) and create your account. Then click **Get started**.
>
> **2. Choose how you'll make updates**
>
> Select how you plan to make updates: **Web editor**, **Local development**, or **MCP**. This selection is only for the initial setup. You can use every method in your base later.
>
> **3. Create the project**
>
> Click **Create project**. Your base opens in the editor with a starter page.
> [tab] Existing organization
>
> **1. Create a base from the project switcher in your dashboard**
>
> 1. In your [dashboard](https://app.mintlify.com/), click the project switcher at the top of the left sidebar.
> 2. Click **New project**.
> 3. Select **Base**, then click **Continue**.
>
> Your base is part of the same organization as your other projects.
>
> **2. Choose how you'll make updates**
>
> Select how you plan to make updates: **Web editor**, **Local development**, or **MCP**. This selection is only for the initial setup. You can use every method in your base later.
>
> **3. Create the project**
>
> Click **Create project**. Your base opens in the editor with a starter page.
> [!TIP]
>
> Your base appears under **Base** in the project switcher in your dashboard. The editor sidebar shows a setup checklist with your next steps.
## Add pages
Create pages for your team in the **Teamspace** section of the sidebar.
Click the plus button beside the **Teamspace** header and select **New page**. To bring in existing Markdown files, drag them from your computer onto the sidebar.
When you make changes to pages in your Teamspace, Mintlify commits them to your base's repository automatically. To draft privately first, create a page in the **Personal** section and move it to your **Teamspace** when you want it to be available to your team.
For more information on editing pages, see [Create and edit pages](/docs/editor/pages).
## Invite your team
Members of your organization can access your base. To add teammates, invite them from your [Members](https://app.mintlify.com/settings/organization/members) settings.
## Connect your AI tools
Connect Claude, ChatGPT, Cursor, or another AI tool to your base so it can search, read, and update your pages.
1. In your dashboard, open your base and go to the [MCP](https://app.mintlify.com/products/mcp) settings.
2. Under **Connect**, select your AI tool and follow the prompts to sign in.
When an AI tool edits your base, it commits changes the same way the editor does. For the tools available and example prompts, see [Admin MCP](/docs/ai/mintlify-mcp).
## (Optional) Connect your own repository
Your base starts with a repository that Mintlify hosts. To edit your base locally, connect a repository from your [Git settings](https://app.mintlify.com/settings/project/git-settings). Commits pushed to the connected repository update your base.
# Agent signup
Source: https://www.mintlify.com/docs/cli/agent-signup
Let an AI agent create a Mintlify site without an account, then claim the site from your own account.
An AI agent can create and deploy a Mintlify site without first signing up for an account. You can then claim the site an agent creates for you from your own Mintlify account.
Use this site creation and signup flow when you want an agent to work on a site autonomously or when you want to demo a live site before creating an account. If you already have an account or are ready to sign up by email, use the [agent setup workflow](/docs/quickstart) instead.
## Deploy a site
Run `mint deploy` from the documentation directory. The directory must contain a `docs.json` file.
```bash theme={null}
npm i -g mint
mint deploy --subdomain
```
The command provisions a site at `https://.mintlify.site` and prints a hosted Git repository URL and a short-lived write token. It does not upload files. The agent then:
1. Clones the hosted repository into a separate directory, passing the write token as an `Authorization: Bearer` header for that Git process only.
2. Copies `docs.json`, pages, and assets into the repository root.
3. Commits and pushes to `main`. The push starts a build.
The output includes ready-to-run Git commands. Run `mint deploy` again from the same directory to get a fresh write token, or pass `--new --subdomain ` to create another site.
> [!WARNING]
>
> The write token grants push access to the site. Don't paste it into public logs, commit it, or save it in a Git remote URL.
## Deploy on every push from GitHub
If your documentation lives in a GitHub repository, `mint deploy --github` sets up a workflow that deploys the site on every push to the repository's default branch. The workflow authenticates with GitHub's OIDC identity token, so the repository doesn't store any secrets.
`--github` requires a GitHub `origin` remote and the [GitHub CLI](https://cli.github.com) signed in with access to the repository.
```bash theme={null}
mint deploy --github --subdomain
```
The command:
1. Provisions the site, or reuses the site from an earlier `mint deploy` in the same directory.
2. Trusts the repository and its default branch to deploy the site.
3. Writes `.github/workflows/mintlify.yml` at the repository root.
Commit and push the workflow file to the default branch. Each later push to that branch runs `mint deploy` in GitHub Actions, which pushes the checked-out commit to the site.
If your docs live in a subdirectory, run the command from the repository root and pass the subdirectory with `--directory`. The subdirectory becomes the site root, and the workflow only runs when files in that subdirectory or the workflow itself change.
```bash theme={null}
mint deploy --github --subdomain --directory docs
```
If `.github/workflows/mintlify.yml` already exists with different contents, the command stops. Pass `--force` to overwrite it.
> [!NOTE]
>
> `--github` only works for unclaimed sites. To deploy a claimed site from GitHub, connect the repository from the [dashboard](https://app.mintlify.com).
## Claim the site
A site created with `mint deploy` expires unless a person claims it. When you claim a site, you become an admin of the site's organization, so you can manage it from the [dashboard](https://app.mintlify.com).
1. The agent asks which email address should own the site, then runs:
```bash theme={null}
mint claim --email
```
To get the link in the same step, run `mint deploy --email ` instead.
2. Open the claim link.
3. Sign in to Mintlify or create an account.
4. Copy and paste the displayed code back to the agent.
5. The agent finishes the claim with that code:
```bash theme={null}
mint claim --code
```
Run both `mint claim` commands from the same directory as `mint deploy`, or pass `--directory`. The CLI stores the agent's credentials and reads them during the claim, so agents shouldn't read or print them.
After you claim a site, the claim page links to the dashboard and the live site.
## Use auth.md without the CLI
Agents that can't install the CLI can follow [`https://mintlify.com/auth.md`](https://mintlify.com/auth.md). It describes the same flow as raw HTTP requests: register an anonymous agent identity, provision a site, and hand the account to a person through the claim page.
# Mintlify CLI command reference
Source: https://www.mintlify.com/docs/cli/commands
Complete reference for Mintlify CLI commands and flags, including mint dev, mint validate, mint broken-links, and more.
To install the CLI, see [Install the CLI](/docs/cli/install).
## Global flags
These flags are available on all commands.
| Flag | Description |
| - | - |
| `--telemetry`, `-t` | Enable or disable usage telemetry. |
| `--help`, `-h` | Display help for the command. |
| `--version`, `-v` | Display the CLI version. Alias for `mint version`. |
## `mint dev`
Start a local preview of your documentation.
```bash theme={null}
mint dev [flags]
```
| Flag | Description |
| - | - |
| `--port` | Port to run the local preview on. Defaults to `3000`. |
| `--host` | Expose the local preview on your network. Without this flag, the preview is only available at `localhost`. |
| `--no-open` | Do not open the browser automatically. |
| `--groups` | Space-separated list of user groups to mock for preview. For example, `--groups admin user`. |
| `--signed-in` | Preview as a signed-in reader with no groups. Use `--groups` to preview as specific groups. Without either flag, the preview shows the signed-out view. |
| `--disable-openapi` | Skip OpenAPI file processing to improve performance. |
| `--disable-prefetch` | Disable navigation prefetching in the local preview. Useful for very large sites where background prefetching slows down page loads. |
| `--local-schema` | Allow locally hosted OpenAPI files served over HTTP. |
| `--classic` | Preview with the classic Mintlify client instead of the default client. |
***
## `mint signup`
Create a new Mintlify account from an interactive terminal.
```bash theme={null}
mint signup [flags]
```
| Flag | Description |
| - | - |
| `--firstName` | Your first name. |
| `--lastName` | Your last name. |
| `--company` | Your company name. |
| `--email` | Email address for the account. |
Run the command without flags to enter your details interactively. The CLI prompts for any value you do not pass as a flag.
After you submit your details, Mintlify sends a verification link to your email. The command waits until you click the link, then creates your account, signs you in, and stores your credentials. When it finishes, open the [dashboard](https://app.mintlify.com) to connect your repository and start building.
> [!NOTE]
>
> `mint signup` does not return until you click the verification link, which can take several minutes.
>
> When an AI agent runs `mint signup`, or the command runs without an interactive terminal, it prints the [agent signup guide](https://mintlify.com/auth.md) instead of creating an account. Agents create sites without an account through [Agent signup](/docs/cli/agent-signup).
### Examples
```bash theme={null}
# Sign up interactively
mint signup
# Sign up with all details provided
mint signup \
--firstName Jane \
--lastName Doe \
--company Acme \
--email jane@acme.com
```
***
## `mint deploy`
Create a site without an account and get Git push access to it. For the full flow, see [Agent signup](/docs/cli/agent-signup).
```bash theme={null}
mint deploy [flags]
```
| Flag | Description |
| - | - |
| `--subdomain` | Site name. Required for the first deployment, with `--new`, and in GitHub Actions. |
| `--org-name` | Organization display name. |
| `--directory` | Documentation directory for the site. Defaults to the current directory. |
| `--new` | Create another site instead of reusing the site for this directory. |
| `--email` | Email address to create a claim link for. Can't be combined with `--github`. |
| `--github` | Trust the current GitHub repository to deploy the site and write `.github/workflows/mintlify.yml`. |
| `--force` | With `--github`, overwrite an existing workflow file that has different contents. |
Run the command again from the same directory to get a fresh write token for the same site. In GitHub Actions, `mint deploy` pushes the checked-out commit to a site that trusts the repository. The workflow needs the `id-token: write` permission.
### Examples
```bash theme={null}
# Create a site
mint deploy --subdomain my-docs
# Get a claim link for the current site
mint deploy --email you@example.com
# Deploy from GitHub Actions on every push to the default branch
mint deploy --github --subdomain my-docs
```
***
## `mint claim`
Claim a site created with `mint deploy`.
```bash theme={null}
mint claim [flags]
```
| Flag | Description |
| - | - |
| `--email` | Email address to create a claim link for. |
| `--code` | Code from the claim page that finishes the claim. |
| `--directory` | Documentation directory used for `mint deploy`. Defaults to the current directory. |
Run `mint claim --email` to get a claim link. After the site owner opens the link and signs in, run `mint claim --code` with the code from the claim page. `--email` and `--code` can't be combined.
### Examples
```bash theme={null}
# Get a claim link
mint claim --email you@example.com
# Finish the claim
mint claim --code ABCDEFGH
```
***
## `mint login`
Authenticate with your Mintlify account.
```bash theme={null}
mint login
```
Opens a browser window to complete authentication. If the browser does not open, the CLI displays a URL to open manually and a prompt to paste the authorization code. Credentials save in `~/.config/mintlify/config.json`.
If you have more than one project, the CLI prompts you to select a default after you sign in. You can change the default project later with `mint config set subdomain `.
***
## `mint logout`
Remove stored credentials.
```bash theme={null}
mint logout
```
***
## `mint status`
Display your current session details including CLI version, account email, organization, and configured subdomain.
```bash theme={null}
mint status
```
***
## `mint add-domain`
Add a [custom domain](/docs/customize/custom-domain) to your project from the terminal. Requires authentication with `mint login`.
```bash theme={null}
mint add-domain [--basePath ]
```
| Argument | Description |
| - | - |
| `domain` | The custom domain to add, like `docs.example.com`. Must be a bare hostname. |
| Flag | Description |
| - | - |
| `--basePath` | Serve your documentation at a [subpath](/docs/customize/custom-domain#choose-where-to-host-your-documentation) on the domain, like `/docs`. Must start with `/` and follow the [base path requirements](/docs/customize/custom-domain#base-path-requirements). |
The command uses your configured subdomain from `mint config`. If you do not have a configured subdomain, it uses the first subdomain on your account.
After registering the domain, the CLI waits up to 10 seconds for DNS records to generate, then prints the `TXT` and `CNAME` records to add at your domain provider:
```text theme={null}
TXT _acme-challenge →
TXT _cf-custom-hostname →
CNAME @ → cname.mintlify.builders
```
Add the `TXT` records first, then add the `CNAME` once the verification records validate. See [Custom domain](/docs/customize/custom-domain) for full DNS setup instructions, apex domain requirements, and TLS provisioning details.
If the command fails with `Domain is already in use by another deployment in your organization` or `Domain is already claimed by another organization`, the domain is bound to another Mintlify project. See [Add domain fails with "Domain is already claimed by another organization"](/docs/help-center/domain-already-claimed-by-another-organization) to release it and re-add it.
> [!NOTE]
>
> If some `TXT` records are still generating when the command exits, check the [Custom domain setup](https://app.mintlify.com/settings/project/custom-domain) page in your dashboard for the remaining values.
When you pass `--basePath`, the CLI saves the base path after registering the domain. The new path takes effect on your next deploy, and your site continues serving from the current path until then. The `CNAME` sends all traffic on the domain to Mintlify, so only add it if the domain hosts nothing else. Otherwise, keep your existing DNS and set up a reverse proxy to Mintlify for the base path. See [Host docs at a subpath](/docs/deploy/docs-subpath) for provider-specific guides.
### Examples
Add a custom domain at the root:
```bash theme={null}
mint add-domain docs.example.com
```
Add a custom domain and serve your documentation at `/docs`:
```bash theme={null}
mint add-domain example.com --basePath /docs
```
***
## `mint analytics`
Query documentation analytics from the terminal. Requires authentication with `mint login`.
> [!NOTE]
>
> Analytics require a [Pro or Enterprise plan](https://mintlify.com/pricing?ref=analytics).
```bash theme={null}
mint analytics [flags]
```
All subcommands accept these shared flags:
| Flag | Description |
| - | - |
| `--subdomain` | Documentation subdomain. Defaults to the value set with `mint config set subdomain`, or the first project on your account. |
| `--from` | Start date in `YYYY-MM-DD` format. Defaults to seven days ago, or the value set with `mint config set dateFrom`. |
| `--to` | End date in `YYYY-MM-DD` format. Defaults to today, or the value set with `mint config set dateTo`. |
| `--format` | Output format: `table` (pretty), `plain` (tab-separated, pipeable), `json` (raw), or `graph` (bar chart). Defaults to `plain`, or `json` when the CLI detects an AI or CI environment. |
### `mint analytics stats`
Display top-line KPIs for a date range: views, visitors, searches, feedback, and assistant usage. The output reports human and agent traffic separately.
```bash theme={null}
mint analytics stats [flags]
```
| Flag | Description |
| - | - |
| `--page` | Filter to a specific page path. |
### `mint analytics search`
Display search queries with hit counts, click-through rates, top clicked page, and last searched date.
```bash theme={null}
mint analytics search [flags]
```
| Flag | Description |
| - | - |
| `--query` | Filter results by search query substring. |
| `--page` | Filter results to queries where the given page was the top clicked result. |
### `mint analytics feedback`
Display user feedback. By default, returns individual feedback entries. Pass `--type page` to see feedback aggregated by page path, or `--type code` to only include feedback on code snippets.
```bash theme={null}
mint analytics feedback [flags]
```
| Flag | Description |
| - | - |
| `--type` | `code` for code snippet feedback, or `page` for page-level aggregation. Omit for all feedback entries. |
| `--page` | Filter to a specific page path. |
### `mint analytics conversation`
View assistant conversation analytics.
#### `mint analytics conversation list`
List recent assistant conversations with timestamp, first user query, and category.
```bash theme={null}
mint analytics conversation list [flags]
```
| Flag | Description |
| - | - |
| `--page` | Filter to conversations whose sources reference the given page path. |
#### `mint analytics conversation view`
View the full message thread for a single conversation.
```bash theme={null}
mint analytics conversation view [flags]
```
| Argument | Description |
| - | - |
| `id` | Conversation ID from `mint analytics conversation list`. |
#### `mint analytics conversation buckets list`
List clusters of conversations grouped by topic, with the number of conversations and the most recent question date for each cluster.
```bash theme={null}
mint analytics conversation buckets list [flags]
```
#### `mint analytics conversation buckets view`
List the individual threads in a conversation bucket.
```bash theme={null}
mint analytics conversation buckets view [flags]
```
| Argument | Description |
| - | - |
| `id` | Bucket ID from `mint analytics conversation buckets list`. |
| Flag | Description |
| - | - |
| `--limit` | Maximum threads to return. Between 1 and 100. |
| `--cursor` | Pagination cursor from a previous response. |
#### Examples
```bash theme={null}
# KPIs for the last 30 days
mint analytics stats --from 2026-07-25 --to 2026-08-24
# Top search queries as a bar chart
mint analytics search --format graph
# Page-level feedback aggregated as JSON for piping into other tools
mint analytics feedback --type page --format json
# View a single conversation thread
mint analytics conversation view conv_123
```
***
## `mint agent setup`
Set up AI coding agents to work on your Mintlify project. The command installs Mintlify skills and configures the [admin MCP](/docs/ai/mintlify-mcp) for Claude Code, Codex, or Cursor.
```bash theme={null}
mint agent setup [flags]
```
| Flag | Description |
| - | - |
| `--agent`, `-a` | Space-separated list of agents to configure: `claude-code`, `codex`, or `cursor`. Without this flag, the CLI prompts you to choose agents and preselects the ones it detects on your machine. |
| `--global`, `-g` | Set up agents for your user account instead of the current project. Defaults to `false`. |
> [!NOTE]
>
> `mint agent setup` requires Node.js 22.20 or later and npm.
Without an interactive terminal, the command configures the agents it detects. If it detects none, pass `--agent`.
The command adds an MCP server named `mintlify-admin` with the URL `https://mcp.mintlify.com` to each agent's configuration file.
| Agent | Project file | User account file (`--global`) |
| - | - | - |
| Claude Code | `.mcp.json` | `~/.claude.json` |
| Codex | `.codex/config.toml` | `~/.codex/config.toml`, or `config.toml` in `CODEX_HOME` when set |
| Cursor | `.cursor/mcp.json` | `~/.cursor/mcp.json` |
If your Codex configuration defines `mcp_servers` as an inline table, setup can't add an entry to it and stops with an error. Add a `mintlify-admin` entry with `url = "https://mcp.mintlify.com"` to the inline table yourself.
If `CLAUDE_CONFIG_DIR` is set, `--global` setup for Claude Code stops with an error. Add the server with the Claude Code CLI instead:
```bash theme={null}
claude mcp add --scope user --transport http mintlify-admin https://mcp.mintlify.com
```
Setup keeps your existing configuration and skips an agent that already has a matching `mintlify-admin` entry. If a `mintlify-admin` entry has a different configuration, or a configuration file can't be parsed, setup stops before it installs skills. Rename or remove the conflicting entry, then run the command again.
Rerunning the command refreshes the installed skills and replaces any local edits you made to them.
The command does not sign you in to the admin MCP or reuse your `mint login` credentials. After setup, complete the OAuth sign-in in each agent. The command prints the steps for each agent you configured.
### Examples
```bash theme={null}
# Choose agents and set up the current project
mint agent setup
# Set up specific agents for the current project
mint agent setup --agent claude-code codex cursor
# Set up Codex for your user account
mint agent setup --agent codex --global
```
***
## `mint instructions`
Print step-by-step guidance for a task in Mintlify, written for AI coding agents. Each topic covers a common job, such as publishing a new site or adding a custom domain. It lists the steps, the rules agents commonly get wrong, and how to verify the result. Your agent can run the command before it starts a task instead of relying on its training data.
The CLI fetches each topic from the live Mintlify documentation, so the guidance stays current without a CLI update.
```bash theme={null}
mint instructions [topic] [subtopic]
```
Without a topic, the command lists the available topics and when to use each one. With a topic, it prints that topic's instructions as Markdown. Start with `overview`.
| Topic | Subtopics |
| - | - |
| `overview` | |
| `new-site` | |
| `write` | `components` |
| `configure` | `navigation`, `settings`, `customization` |
| `api-docs` | `sdk` |
| `publish` | `domain`, `repo`, `analytics`, `assistant` |
| `access` | `team` |
| `automate` | |
| `migrate` | |
| `troubleshoot` | |
The command needs an internet connection. If a topic doesn't exist, the command exits with an error. Run `mint instructions` to see valid topics.
If your installed CLI doesn't recognize the command, run `mint update` or use `npx mint@latest instructions`.
### Examples
```bash theme={null}
# List topics
mint instructions
# Read the overview
mint instructions overview
# Custom domain instructions
mint instructions publish domain
```
***
## `mint config`
Manage persistent default values for CLI commands. The configuration saves in `~/.config/mintlify/config.json`.
```bash theme={null}
mint config [value]
```
| Subcommand | Description |
| - | - |
| `set ` | Set a configuration value. |
| `get ` | Display a configuration value. |
| `clear ` | Remove a configuration value. |
### Configuration keys
| Key | Description | Used by |
| - | - | - |
| `subdomain` | Default documentation subdomain. | `mint dev`, `mint analytics`, `mint add-domain`, `mint score` |
| `dateFrom` | Default start date for analytics queries. | `mint analytics` |
| `dateTo` | Default end date for analytics queries. | `mint analytics` |
***
## `mint broken-links`
Check for broken internal links in your documentation.
```bash theme={null}
mint broken-links [flags]
```
The command scans `.mdx` and `.md` files for links and excludes files matching [.mintignore](/docs/organize/mintignore) patterns. Links inside OpenAPI specification files (`.yaml`, `.yml`, `.json`) are not checked. Links that point to ignored files report as broken.
Relative links (`./`, `../`) and anchor links (`#`) inside a snippet are checked against each page that renders the snippet. The command reports one of these links only if it is broken on at least one of those pages. With `--check-anchors`, headings inside a snippet count as anchors on the pages that render it.
| Flag | Description |
| - | - |
| `--files` | One or more file paths or globs to check. Defaults to the whole site. |
| `--check-anchors` | Also validate anchor links (for example, `/page#section`) against heading slugs. |
| `--check-external` | Also check external URLs for broken links. |
| `--check-redirects` | Also check that redirect destinations in `docs.json` resolve to valid paths. |
| `--check-snippets` | Also check that snippet import paths resolve to existing files. |
Pass `--files` to limit the check to specific pages. This is useful for validating a single page you just edited or scoping checks to a directory in CI. When `--files` is set with `--check-external`, only external URLs on the selected pages are fetched.
```bash theme={null}
# Check a specific page
mint broken-links --files introduction.mdx
# Check pages matching a glob
mint broken-links --files "guides/**/*.mdx"
# Pass multiple paths
mint broken-links --files introduction.mdx "guides/**/*.mdx"
```
***
## `mint a11y`
Check for accessibility issues in your documentation.
```bash theme={null}
mint a11y [flags]
```
Checks color contrast ratios and missing alt text on images and videos.
| Flag | Description |
| - | - |
| `--skip-contrast` | Skip color contrast checks. |
| `--skip-alt-text` | Skip missing alt text checks. |
***
## `mint validate`
Check your documentation for errors, then validate the build in strict mode. Includes automatic validation of OpenAPI specifications referenced in your `docs.json`.
```bash theme={null}
mint validate [flags]
```
`mint validate` runs a set of rules against your pages, snippets, navigation, and OpenAPI specifications, then runs a strict build. Findings print grouped by file, with the line, column, and rule name for each one when available.
The `duplicate-h1`, `unknown-component`, `katex`, and `foreign-syntax` rules report warnings, so their findings don't fail the run. The other rules report errors.
The strict build runs only when no rule reports an error and at least one selected rule needs the build. If a rule reports an error, the command skips the build and tells you to fix the errors first. Warnings that the build can't attribute to a rule fail the run as `build-failed` errors.
| Rule | Group | Description |
| - | - | - |
| `parse-error` | `content` | Reports files that MDX can't parse. Other rules skip these files. This check always runs and you can't disable it. |
| `void-tags` | `content` | Reports HTML void elements, such as ` `, ``, ``, and ``, that aren't self-closed. MDX can't parse them unless you write them self-closed, for example ` ` or ``. `--fix` can self-close them for you. |
| `duplicate-h1` | `content` | Reports a page whose first heading is an H1 that repeats the frontmatter `title`. Skips pages with `mode` set to `custom` or `frame`. `--fix` removes the heading, unless it has a custom `{#id}` or links in your site point to its anchor. In that case, remove it by hand and update the links. |
| `unknown-component` | `content` | Reports JSX components on a page that aren't built in, imported, or exported on that page. `--fix` adds an import when a matching file such as `snippets/.jsx` or `snippets/.tsx` exists. |
| `katex` | `content` | Reports inline or block math that KaTeX can't render. Ignores currency amounts such as `$5`. |
| `foreign-syntax` | `content` | Reports syntax from other documentation frameworks that Mintlify doesn't render, such as `:::` admonitions, Liquid tags, Hugo shortcodes, and `[[wiki links]]`. Each finding names the Mintlify replacement. Runs on files MDX can't parse and skips code. |
| `missing-file` | `content` | Reports imported files that don't exist. Needs the build. |
| `import-error` | `content` | Reports imports in pages and snippets that don't resolve. Needs the build. |
| `missing-nav-page` | `nav` | Reports pages in your navigation that have no file. Needs the build. |
| `package-import` | `config` | Reports npm package imports that are undeclared or conflict. Needs the build. |
| `build-failed` | `config` | Reports a strict build failure that no other rule explains. Needs the build. |
| `openapi-spec` | `openapi` | Reports OpenAPI specifications in `docs.json` or `mint.json` that don't parse or validate, with overlays applied. |
| `openapi-build` | `openapi` | Reports OpenAPI pages the build could not generate. Needs the build. |
| Flag | Description |
| - | - |
| `--files` | One or more file paths or globs to limit page checks to. Site-wide checks and the build still cover the whole site. |
| `--disable` | Turn off rules or groups. Pass a comma-separated list, or `all` to turn off every rule. Parse errors are still reported. Use `--disable openapi` to skip OpenAPI checks. |
| `--enable` | Turn on rules or groups. Pass a comma-separated list. Use it with `--disable all` to run only specific rules. |
| `--fix` | Write the available automatic fixes to your files, then check again. Only rules that offer a fix (`void-tags`, `duplicate-h1`, and `unknown-component`) change files. |
| `--format` | Output format: `text` (default) or `json`. With `json`, the command prints one JSON report on stdout and nothing else. |
| `--no-build` | Skip the strict build, so the command doesn't download the Mintlify client. Remote OpenAPI specifications are still fetched unless you disable the `openapi` rules. |
| `--groups` | Space-separated list of user groups to mock for validation. For example, `--groups admin user`. |
| `--local-schema` | Allow validation of locally hosted OpenAPI files served over HTTP. Only supports HTTPS in production. |
With `--fix`, `mint validate` runs up to five fix passes, because one fix can unlock another. For example, self-closing a ` ` can let a page parse. After the last pass, every rule runs once more and the report shows what remains. The output lists each applied fix as `fixed :: "before" → "after"`.
`--fix` skips a fix that overlaps another fix in the same file. It also leaves a Markdown or MDX file unchanged if the fixed content would parse worse than before. Without `--fix`, the output ends with a count of the issues that `--fix` would fix.
> [!TIP]
>
> Commit or stash your changes before you run `--fix`, so you can review its edits.
With `--format json`, progress output is hidden and other console output goes to stderr, so you can parse stdout directly. The report has these fields:
* `passed`: `true` when no rule reported an error.
* `summary`: `errors` and `warnings` counts, plus `byRule` with a count for each rule ID.
* `diagnostics`: each finding, with `rule`, `group`, `severity` (`error` or `warning`), `file`, optional `line` and `column`, `message`, and an optional `fix`.
* `build`: `{ "ran": true, "passed": }` if the strict build ran, otherwise `{ "ran": false, "reason": }` with a reason of `disabled`, `errors found`, or `no build rules`.
* `fixed`: only with `--fix`. Each applied change, with `rule`, `file`, optional `line` and `column`, `before`, and `after`.
If `mint validate` can't run, it prints nothing on stdout and writes `Error: ` to stderr.
The command exits with one of these codes:
* `0`: No rule reported an error. Warnings don't fail the run.
* `1`: At least one rule reported an error.
* `2`: `mint validate` could not run, for example because of an unknown rule name, a `--files` value that matches no pages or snippets, or a crash.
```bash theme={null}
# Check pages matching a glob, then build the whole site
mint validate --files "guides/**/*.mdx"
# Check pages matching a glob and apply automatic fixes
mint validate --files "guides/**/*.mdx" --fix
# Skip OpenAPI checks
mint validate --disable openapi
# Run the rule checks without the strict build
mint validate --no-build
# Fast offline check for scripts and agents, listing each finding's file and message
mint validate --no-build --format json | jq '.diagnostics[] | {file, message}'
# Run only the content rules (missing-file and import-error still run the build)
mint validate --disable all --enable content
```
> [!NOTE]
>
> Use `mint validate` instead of the deprecated standalone `mint openapi-check` command.
***
## `mint og`
Render the social preview (OG) image for a page to a PNG file. The command uses your `docs.json` [`thumbnails`](/docs/organize/settings-appearance#thumbnails) settings, page and section `thumbnail` overrides, and the same rendering code as your live site.
```bash theme={null}
mint og [page] [flags]
```
| Argument | Description |
| - | - |
| `page` | Optional. Page path, such as `guides/webhooks`. Defaults to `index`. |
| Flag | Description |
| - | - |
| `--preset` | Try a preset (`classic`, `headline`, or `minimal`) without editing `docs.json`. |
| `--surface` | Try a surface (`brand` or `neutral`) without editing `docs.json`. |
| `--appearance` | Try an appearance (`light` or `dark`) without editing `docs.json`. |
| `--output` | Where to write the PNG. Defaults to a temporary file. |
| `--no-open` | Don't open the image after rendering. The command also skips opening it when the `CI` environment variable is set. |
The command prints warnings when the title is too long to fit on two lines, when no logo is configured or the logo fails to load, when the font fails to load, and when text has low contrast on a `brand` surface. Warnings don't change the exit code. The command exits with code `1` if `docs.json` is invalid or the page doesn't exist.
```bash theme={null}
# Render one page and open it
mint og guides/webhooks
# Try settings on the home page
mint og --preset headline --surface brand
# Render to a file in CI
mint og --output og.png --no-open
```
***
## `mint export`
Export your documentation as a self-contained zip archive for offline viewing and distribution.
```bash theme={null}
mint export [flags]
```
| Flag | Description |
| - | - |
| `--output` | Output filename. Defaults to `export.zip`. |
| `--groups` | Space-separated list of user groups to include restricted pages for. For example, `--groups admin user`. |
| `--disable-openapi` | Skip OpenAPI processing. |
| `--base-path` | Path prefix to serve the export under. For example, `--base-path /docs`. |
| `--client-version` | Mintlify client release to build the export with, downloaded from `releases.mintlify.com`. Defaults to the latest release compatible with your CLI version. |
| `--classic` | Export with the classic Mintlify client instead of the default client. The archive layout and hosting rules differ. See [Offline export](/docs/deploy/export#host-the-export-on-your-own-server). |
See [Offline export](/docs/deploy/export) for details.
***
## `mint score`
Run agent readiness checks against a public documentation site. Requires authentication with `mint login`.
```bash theme={null}
mint score [url] [flags]
```
| Argument | Description |
| - | - |
| `url` | Optional. URL of the docs site to check. If omitted, the command scores your configured subdomain (from `mint config` or the subdomain associated with your logged-in account). |
| Flag | Description |
| - | - |
| `--format` | Output format: `table` (default, colored), `plain` (pipeable TSV), or `json`. |
The command displays an overall readiness score and a breakdown of individual checks with pass/fail indicators.
### Examples
```bash theme={null}
# Score your default subdomain
mint score
# Score a specific site
mint score docs.example.com
```
### Checks
The score evaluates the following areas:
| Check | What it verifies |
| - | - |
| `llmsTxtExists` | Agents can reach an [llms.txt](/docs/ai/llmstxt) file at the site root. |
| `llmsTxtValid` | The `llms.txt` file follows the expected format with headings, blockquote summary, and Markdown links. |
| `llmsTxtSize` | The `llms.txt` file is within the size threshold so agents can consume it without truncation. |
| `llmsTxtLinksResolve` | Links inside `llms.txt` resolve to live pages. |
| `llmsTxtLinksMarkdown` | Links inside `llms.txt` use Markdown syntax. |
| `llmsTxtDirective` | The `llms.txt` file contains usage directives. |
| `llmsTxtFullExists` | An [llms-full.txt](/docs/ai/llmstxt/#llms-full-txt) file is available for agents that need the complete content. Runs independently of `llmsTxtExists`. |
| `llmsTxtFullSize` | The `llms-full.txt` file is within a reasonable size for agents to process. |
| `llmsTxtFullValid` | The `llms-full.txt` file contains valid content with headings. |
| `llmsTxtFullLinksResolve` | Links inside `llms-full.txt` resolve to live pages. |
| `skillMd` | Agents can reach a [skill.md](https://www.mintlify.com/docs/ai/skillmd) file for agent tool use. |
| `contentNegotiationMarkdown` | The site returns Markdown when agents request it through content negotiation. |
| `contentNegotiationPlaintext` | The site returns plain text when agents request it through content negotiation. |
| `mcpServerDiscoverable` | Agents can discover an [MCP server](/docs/ai/model-context-protocol) for tool-based agents. |
| `mcpToolCount` | The MCP server exposes at least one tool. |
| `openApiSpec` | There is an available OpenAPI or Swagger specification at a standard path. |
| `robotsTxtAllowsAI` | The `robots.txt` file does not block AI crawlers. |
| `sitemapExists` | There is a sitemap available for page discovery. |
| `structuredData` | The homepage contains [JSON-LD](https://json-ld.org/) structured data (`