├── .cursor └── rules │ └── writing-standards.mdc ├── .github ├── pull_request_template.md └── workflows │ ├── check-links.yml │ └── index-sitemap.yml ├── .gitignore ├── advanced ├── dashboard │ ├── permissions.mdx │ ├── roles.mdx │ └── sso.mdx └── subpath │ ├── cloudflare.mdx │ ├── route53-cloudfront.mdx │ └── vercel.mdx ├── ai-ingestion.mdx ├── api-playground ├── asyncapi │ ├── playground.mdx │ └── setup.mdx ├── customization │ ├── adding-sdk-examples.mdx │ ├── complex-data-types.mdx │ ├── managing-page-visibility.mdx │ └── multiple-responses.mdx ├── mdx │ ├── authentication.mdx │ └── configuration.mdx ├── openapi-setup.mdx ├── overview.mdx └── troubleshooting.mdx ├── api-reference ├── chat │ ├── create-topic.mdx │ └── generate-message.mdx ├── introduction.mdx └── update │ ├── status.mdx │ └── trigger.mdx ├── asyncapi.yaml ├── authentication-personalization ├── authentication-setup.mdx ├── overview.mdx ├── partial-authentication-setup.mdx ├── personalization-setup.mdx └── sending-data.mdx ├── changelog.mdx ├── code.mdx ├── components ├── accordions.mdx ├── callouts.mdx ├── cards.mdx ├── code-groups.mdx ├── columns.mdx ├── examples.mdx ├── expandables.mdx ├── fields.mdx ├── frames.mdx ├── icons.mdx ├── mermaid-diagrams.mdx ├── panel.mdx ├── responses.mdx ├── steps.mdx ├── tabs.mdx ├── tooltips.mdx └── update.mdx ├── contact-support.mdx ├── discovery-openapi.json ├── docs.json ├── editor.mdx ├── favicon.svg ├── fonts.css ├── guides ├── analytics.mdx ├── assistant.mdx ├── auth0.mdx ├── changelogs.mdx ├── cursor.mdx ├── deployments.mdx ├── hidden-page-example.mdx ├── hidden-pages.mdx ├── migration.mdx └── monorepo.mdx ├── image-embeds.mdx ├── images ├── add-custom-domain-dark.png ├── add-custom-domain-light.png ├── anchors-autogeneration-anchors.png ├── assistant │ ├── assistant-button-dark.png │ └── assistant-button-light.png ├── autogeneration-with-tabs.png ├── changelog-filters-dark.png ├── changelog-filters-light.png ├── changelog-rss-button-dark.png ├── changelog-rss-button-light.png ├── changelog-toc-dark.png ├── changelog-toc-light.png ├── changelog │ ├── advanced-footer.gif │ ├── ai-assistant.jpg │ ├── authentication.png │ ├── changelog.jpg │ ├── custom-fonts.jpeg │ ├── docsjson.png │ ├── landing-page.jpeg │ ├── llms.jpg │ ├── mcpgenerator.png │ ├── performance-improvements.png │ ├── seo-improvements.jpeg │ ├── themes.png │ ├── translations.png │ ├── webeditor.jpg │ └── widget.png ├── checks-passed.png ├── claude-mcp.png ├── clone-repository.png ├── cloudflare │ ├── custom-domain.png │ ├── edit-code.png │ └── worker.png ├── cloudfront │ ├── behavior-1.png │ ├── behavior-2.png │ ├── behaviors.png │ ├── caching-policy.png │ ├── create-distribution.png │ ├── create-record-alias.png │ ├── default-behavior-1.png │ ├── default-behavior-2.png │ ├── default-origin.png │ ├── enable-security-protections.png │ ├── origin-name.png │ ├── origins.png │ ├── preview-distribution.png │ └── route53-create-record.png ├── contextual-menu │ └── contextual-menu.png ├── convert-oas-3.png ├── custom-domain.png ├── deployments │ ├── manual-update-dark.png │ └── manual-update-light.png ├── dropdowns-dark.png ├── dropdowns-light.png ├── edit-online.png ├── editor-gate.png ├── editor │ ├── component-menu-dark.png │ ├── component-menu-light.png │ ├── editor-dark.png │ ├── editor-light.png │ ├── files-menu-dark.png │ ├── files-menu-light.png │ ├── markdown-mode-dark.png │ ├── markdown-mode-light.png │ ├── mode-toggle-dark.png │ ├── mode-toggle-light.png │ ├── publish-flow-dark.png │ ├── publish-flow-light.png │ ├── pull-request-dark.png │ ├── pull-request-light.png │ ├── visual-mode-dark.png │ └── visual-mode-light.png ├── elevenlabs-mdx-autogeneration-example.png ├── external-api-key.png ├── ga4-web-streams.png ├── generate-discovery-api-key.png ├── github-bot-verification.png ├── github │ └── select-repos.png ├── gitlab │ ├── gitlab-config.png │ ├── gitlab-project-access-token.png │ ├── gitlab-project-id.png │ ├── gitlab-project-webtoken-test.png │ ├── gitlab-project-webtoken.png │ ├── gitlab-show-webtoken.png │ └── gitlab-webhook.png ├── gsuite-add-custom-saml-app.png ├── gsuite-saml-metadata.png ├── gsuite-sp-details.png ├── guides │ └── auth0 │ │ ├── auth0-create-application.png │ │ ├── auth0clientsettings.png │ │ ├── auth0redirecturl.png │ │ ├── mintlifyoauthclientsettings.png │ │ └── mintlifyredirecturl.png ├── hero │ ├── background-dark.png │ ├── background-light.png │ ├── cli-dark.png │ ├── cli.png │ ├── components-dark.png │ ├── components.png │ ├── editor-dark.png │ ├── editor.png │ ├── rocket-dark.png │ └── rocket.png ├── installation │ ├── local-development-dark.png │ └── local-development-light.png ├── manual-update.png ├── mcp-auth-token.png ├── mcp-dash.png ├── mcp-with-claude.png ├── mcp │ ├── mcp-server-page-dark.png │ ├── mcp-server-page-light.png │ ├── mcp-terminal-completed.png │ └── mcp-terminal.png ├── monorepo-dark.png ├── monorepo-light.png ├── monorepo.png ├── navigation │ ├── anchors-dark.png │ ├── anchors-light.png │ ├── dropdowns-dark.png │ ├── dropdowns-light.png │ ├── groups-dark.png │ ├── groups-light.png │ ├── languages-dark.png │ ├── languages-light.png │ ├── languages │ │ ├── ar.png │ │ ├── cn.png │ │ ├── de.png │ │ ├── en.png │ │ ├── es.png │ │ ├── fr.png │ │ ├── id.png │ │ ├── it.png │ │ ├── jp.png │ │ ├── ko.png │ │ ├── pt-br.png │ │ ├── pt.png │ │ ├── ru.png │ │ └── tr.png │ ├── pages-dark.png │ ├── pages-light.png │ ├── tabs-dark.png │ ├── tabs-light.png │ ├── versions-dark.png │ └── versions-light.png ├── page-context-menu.png ├── playground │ ├── API-playground-dark.png │ └── API-playground-light.png ├── previews │ ├── preview-deployment-dark.png │ ├── preview-deployment-light.png │ ├── redeploy-preview-dark.png │ └── redeploy-preview-light.png ├── quickstart │ ├── custom-domain-dark.png │ ├── custom-domain-light.png │ ├── github-app-installation-dark.png │ ├── github-app-installation-light.png │ ├── mintlify-dev-dark.png │ ├── mintlify-dev-light.png │ ├── mintlify-domain-dark.png │ ├── mintlify-domain-light.png │ ├── web-editor-dark.png │ ├── web-editor-editing-dark.png │ ├── web-editor-editing-light.png │ └── web-editor-light.png ├── repository-url.png ├── speakeasy-1.webp ├── speakeasy-2.webp ├── speakeasy-3.webp ├── stainless-public-OpenAPI-spec.png ├── starter-template.png ├── svg-jsx.png ├── tabs-dark.png ├── tabs-light.png ├── themes │ ├── almond-dark.png │ ├── almond-light.png │ ├── linden-dark.png │ ├── linden-light.png │ ├── maple-dark.png │ ├── maple-light.png │ ├── mint-dark.png │ ├── mint-light.png │ ├── palm-dark.png │ ├── palm-light.png │ ├── willow-dark.png │ └── willow-light.png ├── thumbnail │ └── background.svg ├── topbar-cta-get-started.png ├── topbar-cta-github.png ├── topbar-links.png ├── translations │ ├── translations-dashboard-dark.png │ └── translations-dashboard-light.png ├── video.mp4 └── webeditor3.jpeg ├── index.mdx ├── installation.mdx ├── integrations ├── analytics │ ├── amplitude.mdx │ ├── clearbit.mdx │ ├── fathom.mdx │ ├── google-analytics.mdx │ ├── google-tag-manager.mdx │ ├── heap.mdx │ ├── hotjar.mdx │ ├── koala.mdx │ ├── logrocket.mdx │ ├── mixpanel.mdx │ ├── overview.mdx │ ├── pirsch.mdx │ ├── plausible.mdx │ ├── posthog.mdx │ └── segment.mdx ├── privacy │ ├── osano.mdx │ └── overview.mdx ├── sdks │ ├── speakeasy.mdx │ └── stainless.mdx └── support │ ├── front.mdx │ ├── intercom.mdx │ └── overview.mdx ├── list-table.mdx ├── logo ├── dark.svg └── light.svg ├── mcp.mdx ├── navigation.mdx ├── openapi.json ├── pages.mdx ├── quickstart.mdx ├── react-components.mdx ├── reusable-snippets.mdx ├── settings.mdx ├── settings ├── broken-links.mdx ├── ci.mdx ├── custom-domain.mdx ├── custom-scripts.mdx ├── github.mdx ├── gitlab.mdx ├── preview-deployments.mdx └── seo.mdx ├── snippets ├── color-generator.jsx ├── counter.mdx ├── custom-subpath-gating.mdx └── custom-subpath-propagating.mdx ├── text.mdx ├── themes.mdx └── translations.mdx /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Documentation changes 2 | 3 | Brief description of what's being updated 4 | 5 | Closes 6 | 7 | --- 8 | 9 | ## For Reviewers 10 | 11 | When reviewing documentation PRs, please consider: 12 | 13 | ### ✅ Technical accuracy 14 | - [ ] Code examples work as written 15 | - [ ] Commands and configurations are correct 16 | - [ ] Links resolve to the right destinations 17 | - [ ] Prerequisites and requirements are accurate 18 | 19 | ### ✅ Clarity and completeness 20 | - [ ] Instructions are clear and easy to follow 21 | - [ ] Steps are in logical order 22 | - [ ] Nothing important is missing 23 | - [ ] Examples help illustrate the concepts 24 | 25 | ### ✅ User experience 26 | - [ ] A new user could follow these docs successfully 27 | - [ ] Common gotchas or edge cases are addressed 28 | - [ ] Error messages or troubleshooting guidance is helpful 29 | -------------------------------------------------------------------------------- /.github/workflows/check-links.yml: -------------------------------------------------------------------------------- 1 | name: Check links 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | check-links: 7 | name: Check links 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - name: Set up Node 12 | uses: actions/setup-node@v4 13 | with: 14 | node-version: "latest" 15 | - name: Install Mintlify CLI 16 | run: npm i -g mint 17 | - name: Run broken link checker 18 | run: mint broken-links 19 | -------------------------------------------------------------------------------- /.github/workflows/index-sitemap.yml: -------------------------------------------------------------------------------- 1 | name: Index docs 2 | 3 | on: 4 | schedule: 5 | - cron: "0 */3 * * *" 6 | 7 | jobs: 8 | lint: 9 | name: Lint 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - uses: actions/setup-node@v3 15 | with: 16 | node-version: '18' 17 | 18 | - name: Install CLI 19 | run: npm install -g @team-plain/cli@latest 20 | 21 | - name: Index Docs 22 | run: plain index-sitemap https://mintlify.com/docs/sitemap.xml 23 | env: 24 | PLAIN_API_KEY: ${{ secrets.PLAIN_API_KEY }} 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | package-lock.json 4 | .idea/ 5 | .vscode/ 6 | -------------------------------------------------------------------------------- /advanced/dashboard/permissions.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Editor permissions' 3 | description: 'Allow more members of your team to update your docs' 4 | --- 5 | 6 | An editor has access to your dashboard and web editor. 7 | 8 | Anyone can contribute to your documentation by working locally and pushing changes to your repository, but there are key differences in how changes get deployed: 9 | 10 | * **Editor changes**: When an editor publishes through the web editor or merges a pull request into your docs repository, changes deploy to your live site automatically. 11 | * **Non-editor changes**: When a non-editor merges a pull request into your repository, you must manually trigger a deployment from your dashboard for those changes to appear on your live site. 12 | 13 | ## Add editors 14 | By default, the team member who created your Mintlify organization has editor access. Add additional editors in the [Members](https://dashboard.mintlify.com/settings/organization/members) page of your dashboard. 15 | 16 | Editor seats are billed based on usage, and you can have as many editors as you need. See our [pricing page](https://mintlify.com/pricing) for more details. 17 | -------------------------------------------------------------------------------- /advanced/dashboard/roles.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Roles" 3 | description: "Control access to your dashboard with roles." 4 | --- 5 | 6 | Mintlify provides two dashboard access levels: Editor and Admin. 7 | 8 | The following describes actions that are limited to the Admin role: 9 | 10 | | | Editor | Admin | 11 | | ----------------------- | :----: | :---: | 12 | | Update user roles | ❌ | ✅ | 13 | | Delete users | ❌ | ✅ | 14 | | Invite admin users | ❌ | ✅ | 15 | | Manage & update billing | ❌ | ✅ | 16 | | Update custom domain | ❌ | ✅ | 17 | | Update Git source | ❌ | ✅ | 18 | | Delete org | ❌ | ✅ | 19 | 20 | Other actions on the dashboard are available to both roles. 21 | 22 | You can invite as many admins as you want, but we recommend limiting admin 23 | access to users who need it. 24 | -------------------------------------------------------------------------------- /advanced/subpath/vercel.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Vercel" 3 | description: "Host documentation at a /docs subpath using Vercel" 4 | --- 5 | 6 | ## vercel.json Configuration 7 | 8 | To host your documentation at a custom subpath using Vercel, you need to add the 9 | following configuration to your `vercel.json` file. 10 | 11 | ```json 12 | { 13 | "rewrites": [ 14 | { 15 | "source": "/docs", 16 | "destination": "https://[subdomain].mintlify.dev/docs" 17 | }, 18 | { 19 | "source": "/docs/:match*", 20 | "destination": "https://[subdomain].mintlify.dev/docs/:match*" 21 | } 22 | ] 23 | } 24 | ``` 25 | 26 | 27 | For more information, you can also refer to Vercel's offical guide on 28 | rewrites: [Project Configuration: 29 | Rewrites](https://vercel.com/docs/projects/project-configuration#rewrites) 30 | 31 | -------------------------------------------------------------------------------- /ai-ingestion.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "AI ingestion" 3 | description: "Prepare your documentation for LLMs and AI tools" 4 | icon: "bot-message-square" 5 | --- 6 | 7 | export const PreviewButton = ({ children, href }) => { 8 | return ( 9 | 10 | {children} 11 | 12 | ) 13 | } 14 | 15 | Mintlify generates optimized formats and provides shortcuts that help users get faster, more accurate responses when using your documentation as context for LLMs and AI tools. 16 | 17 | ## Contextual menu 18 | 19 | Provide quick access to AI-optimized content and direct integrations with popular AI tools from a contextual menu on your pages. 20 | 21 | * **Copy page**: Copies the current page as Markdown for pasting as context into AI tools. 22 | * **View as Markdown**: Opens the current page as Markdown. 23 | * **Open in ChatGPT**: Creates a ChatGPT conversation with the current page as context. 24 | * **Open in Claude**: Creates a Claude conversation with the current page as context. 25 | 26 | 27 | The expanded contextual menu showing the Copy page, View as Markdown, Open in ChatGPT, and Open in Claude menu items. 31 | 32 | 33 | ### Enabling the contextual menu 34 | 35 | Add the `contextual` field to your `docs.json` and specify which options you want to include in your menu. 36 | 37 | ```json 38 | { 39 | "contextual": { 40 | "options": [ 41 | "copy", 42 | "view", 43 | "chatgpt", 44 | "claude" 45 | ] 46 | } 47 | } 48 | ``` 49 | 50 | ## /llms.txt 51 | 52 | The [/llms.txt file](https://llmstxt.org) is an industry standard that helps general-purpose LLMs index more efficiently, similar to how a sitemap helps search engines. 53 | 54 | Every documentation site automatically hosts an `/llms.txt` file at the root that lists all available pages in your documentation. AI tools can use this file to understand your documentation structure and find relevant content to user prompts. 55 | 56 | Open llms.txt for this site 57 | 58 | ## /llms-full.txt 59 | 60 | The `/llms-full.txt` file combines your entire documentation site into a single file as context for AI tools. 61 | 62 | Every documentation site automatically hosts an `/llms-full.txt` file at the root. 63 | 64 | Open llms-full.txt for this site 65 | 66 | ## Generating Markdown versions of pages 67 | 68 | Markdown provides structured text that AI tools can process more efficiently than HTML, which results in better response times and lower token usage. 69 | 70 | ### .md extension 71 | 72 | Add a `.md` to a page's URL to display a Markdown version of that page. 73 | 74 | Open quickstart.md 75 | 76 | ### Command \+ C shortcut 77 | 78 | Select Command \+ C (Ctrl \+ C on Windows) to copy any page as Markdown. 79 | -------------------------------------------------------------------------------- /api-playground/asyncapi/playground.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Playground" 3 | description: "Enable users to interact with your websockets" 4 | asyncapi: "/asyncapi.yaml channelOne" 5 | --- 6 | -------------------------------------------------------------------------------- /api-playground/asyncapi/setup.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "AsyncAPI setup" 3 | description: "Create websocket reference pages with AsyncAPI" 4 | --- 5 | 6 | ## Add an AsyncAPI specification file 7 | 8 | To begin to create pages for your websockets, make sure you have a valid AsyncAPI schema document in either JSON or YAML format that follows the [AsyncAPI specification](https://www.asyncapi.com/docs/reference/specification/v3.0.0). Your schema must follow the AsyncAPI specification 3.0+. 9 | 10 | 11 | To make sure your AsyncAPI schema is valid, you can paste it into the 12 | [AsyncAPI Studio](https://studio.asyncapi.com/) 13 | 14 | 15 | ## Auto-populate websockets pages 16 | 17 | You can add an `asyncapi` field to any tab or group in the navigation of your `docs.json`. This field can contain either the path to an AsyncAPI schema document in your docs repo, the URL of a hosted AsyncAPI schema document, or an array of links to AsyncAPI schema documents. Mintlify will automatically generate a page for each AsyncAPI websocket channel. 18 | 19 | **Examples with Tabs:** 20 | 21 | 22 | 23 | ```json Local File {5} 24 | "navigation": { 25 | "tabs": [ 26 | { 27 | "tab": "API Reference", 28 | "asyncapi": "/path/to/asyncapi.json" 29 | } 30 | ] 31 | } 32 | 33 | ``` 34 | 35 | ```json Remote URL {5} 36 | "navigation": { 37 | "tabs": [ 38 | { 39 | "tab": "API Reference", 40 | "asyncapi": "https://github.com/asyncapi/spec/blob/master/examples/simple-asyncapi.yml" 41 | } 42 | ] 43 | } 44 | ``` 45 | 46 | 47 | 48 | **Examples with Groups:** 49 | 50 | ```json {8-11} 51 | "navigation": { 52 | "tabs": [ 53 | { 54 | "tab": "AsyncAPI", 55 | "groups": [ 56 | { 57 | "group": "Websockets", 58 | "asyncapi": { 59 | "source": "/path/to/asyncapi.json", 60 | "directory": "api-reference" 61 | } 62 | } 63 | ] 64 | } 65 | ] 66 | } 67 | ``` 68 | 69 | 70 | The directory field is optional. If not specified, the files will be placed in 71 | the **api-reference** folder of the docs repo. 72 | 73 | 74 | ## Channel page 75 | 76 | If you want more control over how you order your channels or if you want to just reference a single channel, you can create an MDX file with the `asyncapi` field in the frontmatter. 77 | 78 | ```mdx 79 | --- 80 | title: "Websocket Channel" 81 | asyncapi: "/path/to/asyncapi.json channelName" 82 | --- 83 | ``` 84 | -------------------------------------------------------------------------------- /api-playground/customization/adding-sdk-examples.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Adding SDK examples" 3 | description: "Display language-specific code samples alongside your API endpoints to show developers how to use your SDKs" 4 | --- 5 | 6 | If your users interact with your API using an SDK rather than directly through a network request, you can use the `x-codeSamples` extension to add code samples to your OpenAPI document and display them in your OpenAPI pages. 7 | 8 | This property can be added to any request method and has the following schema. 9 | 10 | 11 | The language of the code sample. 12 | 13 | 14 | 15 | The label for the sample. This is useful when providing multiple examples for a single endpoint. 16 | 17 | 18 | 19 | The source code of the sample. 20 | 21 | 22 | Here is an example of code samples for a plant tracking app, which has both a Bash CLI tool and a JavaScript SDK. 23 | 24 | ```yaml 25 | paths: 26 | /plants: 27 | get: 28 | # ... 29 | x-codeSamples: 30 | - lang: bash 31 | label: List all unwatered plants 32 | source: | 33 | planter list -u 34 | - lang: javascript 35 | label: List all unwatered plants 36 | source: | 37 | const planter = require('planter'); 38 | planter.list({ unwatered: true }); 39 | - lang: bash 40 | label: List all potted plants 41 | source: | 42 | planter list -p 43 | - lang: javascript 44 | label: List all potted plants 45 | source: | 46 | const planter = require('planter'); 47 | planter.list({ potted: true }); 48 | ``` 49 | 50 | -------------------------------------------------------------------------------- /api-playground/customization/complex-data-types.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Complex data types" 3 | description: "Describe APIs with flexible schemas, optional properties, and multiple data formats using `oneOf`, `anyOf`, and `allOf` keywords" 4 | --- 5 | 6 | When your API accepts multiple data formats, has conditional fields, or uses inheritance patterns, OpenAPI's schema composition keywords help you document these flexible structures. Using `oneOf`, `anyOf`, and `allOf`, you can describe APIs that handle different input types or combine multiple schemas into comprehensive data models. 7 | 8 | ## `oneOf`, `anyOf`, `allOf` keywords 9 | 10 | For complex data types, OpenAPI provides keywords for combining schemas: 11 | 12 | - `allOf`: Combines multiple schemas (like merging objects or extending a base schema). Functions like an `and` operator. 13 | - `anyOf`: Accepts data matching any of the provided schemas. Functions like an `or` operator. 14 | - `oneOf`: Accepts data matching exactly one of the provided schemas. Functions like an `exclusive-or` operator. 15 | 16 | Mintlify treats `oneOf` and `anyOf` identically since the practical difference rarely affects using the API. 17 | 18 | For detailed specifications of these keywords see the [OpenAPI documentation](https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/). 19 | 20 | The `not` keyword is currently unsupported. 21 | 22 | ### Combining schemas with `allOf` 23 | 24 | When you use `allOf`, Mintlify performs some preprocessing on your OpenAPI document to display complex combinations in a readable way. For example, when you combine two object schemas with `allOf`, Mintlify combines the properties of both into a single object. This becomes especially useful when leveraging OpenAPI's reusable [components](https://swagger.io/docs/specification/components/). 25 | 26 | ```yaml 27 | org_with_users: 28 | allOf: 29 | - $ref: '#/components/schemas/Org' 30 | - type: object 31 | properties: 32 | users: 33 | type: array 34 | description: An array containing all users in the organization 35 | # ... 36 | components: 37 | schemas: 38 | Org: 39 | type: object 40 | properties: 41 | id: 42 | type: string 43 | description: The ID of the organization 44 | ``` 45 | 46 | 47 | 48 | 49 | The ID of the organization 50 | 51 | 52 | An array containing all users in the organization 53 | 54 | 55 | 56 | 57 | ### Providing options with `oneOf` and `anyOf` 58 | 59 | When you use `oneOf` or `anyOf`, the options are displayed in a tabbed container. Specify a `title` field in each subschema to give your options names. For example, here's how you might display two different types of delivery addresses: 60 | 61 | ```yaml 62 | delivery_address: 63 | oneOf: 64 | - title: StreetAddress 65 | type: object 66 | properties: 67 | address_line_1: 68 | type: string 69 | description: The street address of the recipient 70 | # ... 71 | - title: POBox 72 | type: object 73 | properties: 74 | box_number: 75 | type: string 76 | description: The number of the PO Box 77 | # ... 78 | ``` 79 | 80 | 81 |
82 | 83 | 84 | 85 | The street address of the residence 86 | 87 | 88 | 89 | 90 | The number of the PO Box 91 | 92 | 93 | 94 |
95 |
96 | -------------------------------------------------------------------------------- /api-playground/customization/managing-page-visibility.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Managing page visibility" 3 | description: "Control which endpoints from your OpenAPI specification appear in your documentation navigation" 4 | --- 5 | 6 | You can control which OpenAPI operations get published as documentation pages and their visibility in navigation. This is useful for internal-only endpoints, deprecated operations, beta features, or endpoints that should be accessible via direct URL but not discoverable through site navigation. 7 | 8 | If your pages are autogenerated from an OpenAPI document, you can manage page visibility with the `x-hidden` and `x-excluded` extensions. 9 | 10 | ## `x-hidden` 11 | 12 | The `x-hidden` extension creates a page for an endpoint, but hides it from navigation. The page is only accessible by navigating directly to its URL. 13 | 14 | Common use cases for `x-hidden` are: 15 | 16 | - Endpoints you want to document, but not promote. 17 | - Pages that you will link to from other content. 18 | - Endpoints for specific users. 19 | 20 | ## `x-excluded` 21 | 22 | 23 | The `x-excluded` extension completely excludes an endpoint from your documentation. 24 | 25 | Common use cases for `x-excluded` are: 26 | 27 | - Internal-only endpoints. 28 | - Deprecated endpoints that you don't want to document. 29 | - Beta features that are not ready for public documentation. 30 | 31 | ## Implementation 32 | 33 | Add the `x-hidden` or `x-excluded` extension under the HTTP method in your OpenAPI specification. 34 | 35 | Here are examples of how to use each property in an OpenAPI schema document for an endpoint and a webhook path. 36 | 37 | ```json {11, 19} 38 | "paths": { 39 | "/plants": { 40 | "get": { 41 | "description": "Returns all plants from the store", 42 | "parameters": { /*...*/ }, 43 | "responses": { /*...*/ } 44 | } 45 | }, 46 | "/hidden_plants": { 47 | "get": { 48 | "x-hidden": true, 49 | "description": "Returns all somewhat secret plants from the store", 50 | "parameters": { /*...*/ }, 51 | "responses": { /*...*/ } 52 | } 53 | }, 54 | "/secret_plants": { 55 | "get": { 56 | "x-excluded": true, 57 | "description": "Returns all top secret plants from the store (do not publish this endpoint!)", 58 | "parameters": { /*...*/ }, 59 | "responses": { /*...*/ } 60 | } 61 | } 62 | }, 63 | ``` 64 | 65 | ```json {9, 15} 66 | "webhooks": { 67 | "/plants_hook": { 68 | "post": { 69 | "description": "Webhook for information about a new plant added to the store", 70 | } 71 | }, 72 | "/hidden_plants_hook": { 73 | "post": { 74 | "x-hidden": true, 75 | "description": "Webhook for somewhat secret information about a new plant added to the store" 76 | } 77 | }, 78 | "/secret_plants_hook": { 79 | "post": { 80 | "x-excluded": true, 81 | "description": "Webhook for top secret information about a new plant added to the store (do not publish this endpoint!)" 82 | } 83 | } 84 | } 85 | ``` 86 | -------------------------------------------------------------------------------- /api-playground/customization/multiple-responses.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Multiple responses" 3 | description: "Show response variations for the same endpoint" 4 | --- 5 | 6 | If your API returns different responses based on input parameters, user context, or other conditions of the request, you can document multiple response examples with the `examples` property. 7 | 8 | This property can be added to any response and has the following schema. 9 | 10 | ```yaml 11 | responses: 12 | "200": 13 | description: Successful response 14 | content: 15 | application/json: 16 | schema: 17 | $ref: "#/components/schemas/YourResponseSchema" 18 | examples: 19 | us: 20 | summary: Response for United States 21 | value: 22 | countryCode: "US" 23 | currencyCode: "USD" 24 | taxRate: 0.0825 25 | gb: 26 | summary: Response for United Kingdom 27 | value: 28 | countryCode: "GB" 29 | currencyCode: "GBP" 30 | taxRate: 0.20 31 | ``` 32 | -------------------------------------------------------------------------------- /api-playground/mdx/authentication.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Authentication" 3 | description: "You can set authentication parameters to let users use their real API keys." 4 | --- 5 | 6 | ## Enabling authentication 7 | 8 | You can add an authentication method to your `docs.json` to enable it globally on every page or you can set it on a per-page basis. 9 | 10 | A page's authentication method will override a global method if both are set. 11 | 12 | ### Bearer token 13 | 14 | 15 | 16 | ```json docs.json 17 | "api": { 18 | "mdx": { 19 | "auth": { 20 | "method": "bearer" 21 | } 22 | } 23 | } 24 | ``` 25 | 26 | ```mdx Page Metadata 27 | --- 28 | title: "Your page title" 29 | authMethod: "bearer" 30 | --- 31 | ``` 32 | 33 | 34 | 35 | ### Basic authentication 36 | 37 | 38 | 39 | ```json docs.json 40 | "api": { 41 | "mdx": { 42 | "auth": { 43 | "method": "basic" 44 | } 45 | } 46 | } 47 | ``` 48 | 49 | ```mdx Page Metadata 50 | --- 51 | title: "Your page title" 52 | authMethod: "basic" 53 | --- 54 | ``` 55 | 56 | 57 | 58 | ### API key 59 | 60 | 61 | 62 | ```json docs.json 63 | "api": { 64 | "mdx": { 65 | "auth": { 66 | "method": "key", 67 | "name": "x-api-key" 68 | } 69 | } 70 | } 71 | ``` 72 | 73 | ```mdx Page Metadata 74 | --- 75 | title: "Your page title" 76 | authMethod: "key" 77 | --- 78 | ``` 79 | 80 | 81 | 82 | ### None 83 | 84 | The "none" authentication method is useful to disable authentication on a specific endpoint after setting a default in docs.json. 85 | 86 | 87 | ```mdx Page Metadata 88 | --- 89 | title: "Your page title" 90 | authMethod: "none" 91 | --- 92 | ``` 93 | 94 | -------------------------------------------------------------------------------- /api-playground/mdx/configuration.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'MDX setup' 3 | description: 'Generate docs pages for your API endpoints using `MDX`' 4 | --- 5 | 6 | You can manually define API endpoints in individual `MDX` files rather than using an OpenAPI specification. This method provides flexibility for custom content, but we recommend generating API documentation from an OpenAPI specification file for most API documentation projects as it's more maintainable and feature-rich. However, MDX can be useful for documenting small APIs, prototyping, or when you want to feature API endpoints alongside other content. 7 | 8 | To generate pages for API endpoints using `MDX`, configure your API settings in `docs.json`, create individual `MDX` files for each endpoint, and use components like `` to define parameters. From these definitions, Mintlify generates interactive API playgrounds, request examples, and response examples. 9 | 10 | 11 | 12 | In your `docs.json` file, define your base URL and auth method: 13 | 14 | ```json 15 | "api": { 16 | "mdx": { 17 | "server": "https://mintlify.com/api", // string array for multiple base URLs 18 | "auth": { 19 | "method": "key", 20 | "name": "x-api-key" // options: bearer, basic, key. 21 | } 22 | } 23 | } 24 | ``` 25 | 26 | If you want to hide the API playground, use the `display` field. You do not need to include an auth method if you hide the playground. 27 | 28 | ```json 29 | "api": { 30 | "playground": { 31 | "display": "none" 32 | } 33 | } 34 | ``` 35 | 36 | Find a full list of API configurations in [Settings](/settings#api-configurations). 37 | 38 | 39 | 40 | 41 | Each API endpoint page should have a corresponding `MDX` file. At the top of each file, define `title` and `api`: 42 | 43 | ```mdx 44 | --- 45 | title: 'Create new user' 46 | api: 'POST https://api.mintlify.com/user' 47 | --- 48 | ``` 49 | 50 | You can specify path parameters by adding the parameter name to the path, wrapped with `{}`: 51 | 52 | ```bash 53 | https://api.example.com/v1/endpoint/{userId} 54 | ``` 55 | 56 | 57 | 58 | If you have a `server` field configured in `docs.json`, you can use relative paths like `/v1/endpoint`. 59 | 60 | 61 | 62 | You can override the globally-defined display mode for the API playground per page by adding `playground` at the top of the `MDX` file: 63 | 64 | ```mdx 65 | --- 66 | title: 'Create new user' 67 | api: 'POST https://api.mintlify.com/user' 68 | playground: 'none' 69 | --- 70 | ``` 71 | 72 | 73 | 74 | 75 | Add your endpoint pages to the sidebar by adding the paths to the `navigation` field in your `docs.json`. Learn more about structuring your docs in [Navigation](/navigation). 76 | 77 | 78 | 79 | ## Enabling authentication 80 | 81 | You can add an authentication method to your `docs.json` to enable it globally on every page or you can set it on a per-page basis. 82 | 83 | A page's authentication method will override a global method if both are set. 84 | 85 | ### Bearer token 86 | 87 | 88 | 89 | ```json docs.json 90 | "api": { 91 | "mdx": { 92 | "auth": { 93 | "method": "bearer" 94 | } 95 | } 96 | } 97 | ``` 98 | 99 | ```mdx Page Metadata 100 | --- 101 | title: "Your page title" 102 | authMethod: "bearer" 103 | --- 104 | ``` 105 | 106 | 107 | 108 | ### Basic authentication 109 | 110 | 111 | 112 | ```json docs.json 113 | "api": { 114 | "mdx": { 115 | "auth": { 116 | "method": "basic" 117 | } 118 | } 119 | } 120 | ``` 121 | 122 | ```mdx Page Metadata 123 | --- 124 | title: "Your page title" 125 | authMethod: "basic" 126 | --- 127 | ``` 128 | 129 | 130 | 131 | ### API key 132 | 133 | 134 | 135 | ```json docs.json 136 | "api": { 137 | "mdx": { 138 | "auth": { 139 | "method": "key", 140 | "name": "x-api-key" 141 | } 142 | } 143 | } 144 | ``` 145 | 146 | ```mdx Page Metadata 147 | --- 148 | title: "Your page title" 149 | authMethod: "key" 150 | --- 151 | ``` 152 | 153 | 154 | 155 | ### None 156 | 157 | The `none` authentication method is useful to disable authentication on a specific endpoint after setting a default in docs.json. 158 | 159 | 160 | ```mdx Page Metadata 161 | --- 162 | title: "Your page title" 163 | authMethod: "none" 164 | --- 165 | ``` 166 | 167 | -------------------------------------------------------------------------------- /api-playground/troubleshooting.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Troubleshooting" 3 | description: "Common issues with API References" 4 | icon: "message-square-warning" 5 | --- 6 | 7 | If your API pages aren't displaying correctly, check these common configuration issues: 8 | 9 | 10 | 11 | In this scenario, it's likely that either Mintlify cannot find your OpenAPI document, 12 | or your OpenAPI document is invalid. 13 | 14 | Running `mint dev` locally should reveal some of these issues. 15 | 16 | To verify your OpenAPI document will pass validation: 17 | 18 | 1. Visit [this validator](https://editor.swagger.io/) 19 | 2. Switch to the "Validate text" tab 20 | 3. Paste in your OpenAPI document 21 | 4. Click "Validate it\!" 22 | 23 | If the text box that appears below has a green border, your document has passed validation. 24 | This is the exact validation package Mintlify uses to validate OpenAPI documents, so if your document 25 | passes validation here, there's a great chance the problem is elsewhere. 26 | 27 | Additionally, Mintlify does not support OpenAPI 2.0. If your document uses this version of the specification, 28 | you could encounter this issue. You can convert your document at [editor.swagger.io](https://editor.swagger.io/) (under Edit \> Convert to OpenAPI 3): 29 | 30 | 31 | ![](/images/convert-oas-3.png) 32 | 33 | 34 | 35 | This is usually caused by a misspelled `openapi` field in the page metadata. Make sure 36 | the HTTP method and path match the HTTP method and path in the OpenAPI document exactly. 37 | 38 | Here's an example of how things might go wrong: 39 | 40 | ```mdx get-user.mdx 41 | --- 42 | openapi: "GET /users/{id}/" 43 | --- 44 | ``` 45 | 46 | ```yaml openapi.yaml 47 | paths: 48 | "/users/{id}": 49 | get: ... 50 | ``` 51 | 52 | Notice that the path in the `openapi` field has a trailing slash, whereas the path in the OpenAPI 53 | document does not. 54 | 55 | Another common issue is a misspelled filename. If you are specifying a particular OpenAPI document 56 | in the `openapi` field, ensure the filename is correct. For example, if you have two OpenAPI 57 | documents `openapi/v1.json` and `openapi/v2.json`, your metadata might look like this: 58 | 59 | ```mdx api-reference/v1/users/get-user.mdx 60 | --- 61 | openapi: "v1 GET /users/{id}" 62 | --- 63 | ``` 64 | 65 | 66 | If you have a custom domain configured, this could be an issue with your reverse proxy. By 67 | default, requests made via the API Playground start with a `POST` request to the 68 | `/api/request` path on the docs site. If your reverse proxy is configured to only allow `GET` 69 | requests, then all of these requests will fail. To fix this, configure your reverse proxy to 70 | allow `POST` requests to the `/api/request` path. 71 | 72 | Alternatively, if your reverse proxy prevents you from accepting `POST` requests, you can configure Mintlify to send requests directly to your backend with the `api.playground.proxy` setting in the `docs.json`, as described in the [settings documentation](/settings#param-proxy). When using this configuration, you will need to configure CORS on your server since requests will come directly from users' browsers rather than through your proxy. 73 | 74 | 75 | -------------------------------------------------------------------------------- /api-reference/chat/create-topic.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | openapi: POST /chat/topic 3 | --- -------------------------------------------------------------------------------- /api-reference/chat/generate-message.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | openapi: POST /chat/message 3 | --- -------------------------------------------------------------------------------- /api-reference/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | icon: "book-open" 4 | --- 5 | 6 | ## Trigger Updates 7 | 8 | You can leverage the REST API to programmatically trigger an update when desired. 9 | 10 | ## Authentication 11 | 12 | You can generate an API key through 13 | [the dashboard](https://dashboard.mintlify.com/settings/organization/api-keys). The API key is 14 | associated with the entire org and can be used across multiple deployments. 15 | 16 | 17 | 18 | 19 | 20 | ## Admin API key 21 | 22 | The Admin API key is used for the majority of the API. It is used to trigger updates via the [Update endpoint](/api-reference/update/trigger). 23 | 24 | ## Assistant API key 25 | 26 | The Assistant API allows you to embed the AI assistant experience grounded in your docs and continually kept up to date into any application of your choosing. 27 | 28 | Responses include citations so you can point your users to the right places they need to get help. 29 | 30 | 31 | The Assistant API token is a public token that can be referenced in your 32 | frontend code whereas the API key is a server-side token that should be kept 33 | secret. 34 | 35 | 36 | Now that you have an API key, check out our [example](https://github.com/mintlify/discovery-api-example) for how to use 37 | the API for AI assistant. You can also see a deployed version of this example at [chat.mintlify.com](https://chat.mintlify.com). 38 | -------------------------------------------------------------------------------- /api-reference/update/status.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | openapi: "GET /project/update-status/{statusId}" 3 | --- 4 | -------------------------------------------------------------------------------- /api-reference/update/trigger.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | openapi: "POST /project/update/{projectId}" 3 | --- 4 | -------------------------------------------------------------------------------- /asyncapi.yaml: -------------------------------------------------------------------------------- 1 | asyncapi: 3.0.0 2 | info: 3 | title: Test websocket schema 4 | version: 1.0.0 5 | description: This is a test websocket API. 6 | channels: 7 | channelOne: 8 | title: Test channel 9 | description: >- 10 | This is a websocket channel. 11 | 12 | It can have _markdown_ in the description. 13 | 14 | * Use the "echo-websocket.hoppscotch.io" server to receive timestamped messages every second. 15 | 16 | * Use the "echo.websocket.org" server to send test messages to the websocket. This server will echo back any messages you send to it. 17 | 18 | address: / 19 | messages: 20 | TestMessage: 21 | $ref: '#/components/messages/TestMessage' 22 | Timestamp: 23 | $ref: '#/components/messages/Timestamp' 24 | servers: 25 | echo-websocket: 26 | host: echo-websocket.hoppscotch.io 27 | protocol: wss 28 | echo: 29 | host: echo.websocket.org 30 | protocol: wss 31 | operations: 32 | sendTestMessage: 33 | action: receive 34 | channel: 35 | $ref: '#/channels/channelOne' 36 | messages: 37 | - $ref: '#/channels/channelOne/messages/TestMessage' 38 | receiveTestMessage: 39 | action: send 40 | channel: 41 | $ref: '#/channels/channelOne' 42 | messages: 43 | - $ref: '#/channels/channelOne/messages/TestMessage' 44 | receiveTimestamp: 45 | action: send 46 | channel: 47 | $ref: '#/channels/channelOne' 48 | messages: 49 | - $ref: '#/channels/channelOne/messages/Timestamp' 50 | components: 51 | messages: 52 | TestMessage: 53 | title: Test message 54 | description: Test message sent to the echo server 55 | payload: 56 | type: object 57 | properties: 58 | text: 59 | type: string 60 | description: The text of your message 61 | subtext: 62 | type: string 63 | description: Optional second message field 64 | from: 65 | type: string 66 | description: The name of the sender 67 | required: 68 | - text 69 | Timestamp: 70 | title: Timestamp 71 | description: Timestamp message sent from echo hoppscotch server 72 | payload: 73 | schema: 74 | $ref: '#/components/schemas/Timestamp' 75 | schemas: 76 | Timestamp: 77 | type: string 78 | description: Timestamp message sent from echo hoppscotch server 79 | examples: 80 | - '22:02:27 GMT+0000 (Coordinated Universal Time)' -------------------------------------------------------------------------------- /authentication-personalization/partial-authentication-setup.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Partial authentication setup" 3 | description: "Control access to specific pages" 4 | icon: "file-lock-2" 5 | keywords: ["auth"] 6 | --- 7 | 8 | Partial authentication lets you protect private documentation while keeping other pages publicly viewable. Users can browse public content freely and authenticate only when accessing protected pages. 9 | 10 | Partial authentication shares all the same features as authentication, but with the ability to allow unauthenticated users to view certain pages. 11 | 12 | ## Setup 13 | 14 | Follow the [Authentication Setup](/authentication-personalization/authentication-setup) guide and select **Partial Authentication** when configuring your chosen handshake method. 15 | 16 | ## Making pages public 17 | 18 | By default, all pages are protected. Add the `public` property to the page's frontmatter to make it viewable without authentication: 19 | 20 | ```mdx 21 | --- 22 | title: "My Page" 23 | public: true 24 | --- 25 | ``` 26 | -------------------------------------------------------------------------------- /authentication-personalization/sending-data.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Sending data" 3 | description: "User data format for personalizing your documentation" 4 | icon: "send" 5 | --- 6 | 7 | When implementing authentication or personalization, your system returns user data in a specific format that enables content customization. This data can be sent as either a raw JSON object or within a signed JWT, depending on your handshake method. The shape of the data is the same for both. 8 | 9 | ## User data format 10 | 11 | ```tsx 12 | type User = { 13 | expiresAt?: number; 14 | groups?: string[]; 15 | content?: Record; 16 | apiPlaygroundInputs?: { 17 | header?: Record; 18 | query?: Record; 19 | cookie?: Record; 20 | server?: Record; 21 | }; 22 | }; 23 | ``` 24 | 25 | 29 | Session expiration time in **seconds since epoch**. If the user loads a page after this time, their stored data is automatically deleted and they must reauthenticate. 30 | For JWT handshakes: This differs from the JWT's `exp` claim, which determines when a JWT is considered invalid. Set the JWT `exp` claim to a short duration (10 seconds or less) for security. Use `expiresAt` for the actual session length (hours to weeks). 31 | 32 | 36 | A list of groups that the user belongs to. Pages with a matching `groups` field in their metadata will be visible to this user. 37 | 38 | **Example**: User with `groups: ["admin", "engineering"]` can access pages tagged with either the `admin` or `engineering` groups. 39 | 40 | 44 | Custom data accessible in your `MDX` content via the `user` variable. Use this for dynamic personalization throughout your documentation. 45 | 46 | **Example**: 47 | ```json 48 | { "firstName": "Ronan", "company": "Acme Corp", "plan": "Enterprise" } 49 | ``` 50 | 51 | **Usage in `MDX`**: 52 | ```mdx 53 | Welcome back, {user.firstName}! Your {user.plan} plan includes... 54 | ``` 55 | With the example `user` data, this would render as: Welcome back, Ronan! Your Enterprise plan includes... 56 | 57 | 61 | User-specific values that will be prefilled in the API playground if supplied. Save users time when testing your APIs with their own data. 62 | 63 | **Example**: 64 | ```json 65 | { 66 | "header": { "X-API-Key": "user_api_key_123" }, 67 | "server": { "subdomain": "foo" }, 68 | "query": { "org_id": "12345" } 69 | } 70 | ``` 71 | If a user makes requests at a specific subdomain, you can send `{ server: { subdomain: 'foo' } }` as an `apiPlaygroundInputs` field. This value will be prefilled on any API page with the `subdomain` value. 72 | 73 | The `header`, `query`, and `cookie` fields will only prefill if they are part of your [OpenAPI security scheme](https://swagger.io/docs/specification/authentication/). If a field is in either the `Authorization` or `Server` sections, it will prefill. Creating a standard header parameter named `Authorization` will not enable this feature. 74 | 75 | 76 | ## Example user data 77 | 78 | ```json 79 | { 80 | "expiresAt": 1735689600, 81 | "groups": ["admin", "beta-users"], 82 | "content": { 83 | "firstName": "Jane", 84 | "lastName": "Smith", 85 | "company": "TechCorp", 86 | "plan": "Enterprise", 87 | "region": "us-west" 88 | }, 89 | "apiPlaygroundInputs": { 90 | "header": { 91 | "Authorization": "Bearer abc123", 92 | "X-Org-ID": "techcorp" 93 | }, 94 | "server": { 95 | "environment": "production", 96 | "region": "us-west" 97 | } 98 | } 99 | } 100 | ``` 101 | -------------------------------------------------------------------------------- /components/accordions.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Accordions" 3 | description: "A dropdown component to toggle content visibility" 4 | icon: "chevron-down" 5 | --- 6 | 7 | 8 | You can put any content in here, including other components, like code: 9 | ```java HelloWorld.java 10 | class HelloWorld { 11 | public static void main(String[] args) { 12 | System.out.println("Hello, World!"); 13 | } 14 | } 15 | ``` 16 | 17 | 18 | 19 | 20 | ````mdx Accordion Example 21 | 22 | You can put any content in here, including other components, like code: 23 | 24 | ```java HelloWorld.java 25 | class HelloWorld { 26 | public static void main(String[] args) { 27 | System.out.println("Hello, World!"); 28 | } 29 | } 30 | ``` 31 | 32 | ```` 33 | 34 | ````mdx Accordion Group Example 35 | 36 | 37 | You can put other components inside Accordions. 38 | 39 | ```java HelloWorld.java 40 | class HelloWorld { 41 | public static void main(String[] args) { 42 | System.out.println("Hello, World!"); 43 | } 44 | } 45 | ``` 46 | 47 | Check out the [Accordion](/components/accordions) docs for all the supported props. 48 | 49 | 50 | 51 | Check out the [Accordion](/components/accordions) docs for all the supported props. 52 | 53 | 54 | 55 | Check out the [Accordion](/components/accordions) docs for all the supported props. 56 | 57 | 58 | ```` 59 | 60 | 61 | 62 | ### Props 63 | 64 | 65 | Title in the Accordion preview. 66 | 67 | 68 | 69 | Detail below the title in the Accordion preview. 70 | 71 | 72 | 73 | Whether the Accordion is open by default. 74 | 75 | 76 | 77 | A [Font Awesome icon](https://fontawesome.com/icons), [Lucide 78 | icon](https://lucide.dev/icons), or SVG code 79 | 80 | 81 | 82 | One of "regular", "solid", "light", "thin", "sharp-solid", "duotone", or 83 | "brands" 84 | 85 | 86 | ## Accordion Groups 87 | 88 | You can group multiple accordions into a single display. Simply add `` around your existing `` components. 89 | 90 | 91 | 92 | You can put other components inside Accordions. 93 | 94 | ```java HelloWorld.java 95 | class HelloWorld { 96 | public static void main(String[] args) { 97 | System.out.println("Hello, World!"); 98 | } 99 | } 100 | ``` 101 | 102 | Check out the [Accordion](/components/accordions) docs for all the supported props. 103 | 104 | 105 | 106 | 107 | Check out the [Accordion](/components/accordions) docs for all the supported props. 108 | 109 | 110 | 111 | Check out the [Accordion](/components/accordions) docs for all the supported props. 112 | 113 | 114 | -------------------------------------------------------------------------------- /components/callouts.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Callouts' 3 | description: 'Use callouts to add eye-catching context to your content' 4 | icon: 'info' 5 | --- 6 | 7 | Callouts can be styled as a Note, Warning, Info, Tip, or Check: 8 | 9 | This adds a note in the content 10 | 11 | ```mdx 12 | This adds a note in the content 13 | ``` 14 | 15 | This raises a warning to watch out for 16 | 17 | ```mdx 18 | This raises a warning to watch out for 19 | ``` 20 | 21 | This draws attention to important information 22 | 23 | ```mdx 24 | This draws attention to important information 25 | ``` 26 | 27 | This suggests a helpful tip 28 | 29 | ```mdx 30 | This suggests a helpful tip 31 | ``` 32 | 33 | This brings us a checked status 34 | 35 | ```mdx 36 | This brings us a checked status 37 | ``` 38 | 39 | This is a danger callout 40 | 41 | ```jsx 42 | This is a danger callout 43 | ``` 44 | 45 | 46 | 47 | ```mdx Callout Example 48 | This adds a note in the content 49 | ``` 50 | 51 | 52 | -------------------------------------------------------------------------------- /components/cards.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Cards" 3 | description: "Highlight main points or links with customizable icons" 4 | icon: 'square-mouse-pointer' 5 | --- 6 | 7 | 8 | This is how you use a card with an icon and a link. Clicking on this card 9 | brings you to the Columns page. 10 | 11 | 12 | 13 | ```mdx Card Example 14 | 15 | This is how you use a card with an icon and a link. Clicking on this card 16 | brings you to the Columns page. 17 | 18 | ``` 19 | 20 | ```mdx Image Card Example 21 | 22 | Here is an example of a card with an image 23 | 24 | ``` 25 | 26 | 27 | 28 | ## Horizontal card 29 | 30 | Add a `horizontal` property to display cards horizontally. 31 | 32 | 33 | Here is an example of a horizontal card 34 | 35 | 36 | ## Image card 37 | 38 | Add an `img` property to display an image on the top of the card. 39 | 40 | 41 | Here is an example of a card with an image 42 | 43 | 44 | ## Link card 45 | 46 | You can customize the CTA and whether or not to display the arrow on the card. By default, the arrow will only show for external links. 47 | 48 | 55 | This is how you use a card with an icon and a link. Clicking on this card 56 | brings you to the Columns page. 57 | 58 | 59 | 60 | ```mdx Card Example 61 | 68 | This is how you use a card with an icon and a link. Clicking on this card 69 | brings you to the Columns page. 70 | 71 | ``` 72 | 73 | 74 | ## Grouping cards 75 | 76 | You can group cards in [columns](/components/columns). 77 | 78 | 79 | 80 | This is the first card. 81 | 82 | 83 | This is the second card. 84 | 85 | 86 | 87 | ## Props 88 | 89 | 90 | The title of the card 91 | 92 | 93 | 94 | A [Font Awesome icon](https://fontawesome.com/icons), [Lucide 95 | icon](https://lucide.dev/icons), or JSX compatible SVG code in `icon={}`. 96 | 97 | To generate JSX compatible SVG code: 98 | 99 | 1. Use the [SVGR converter](https://react-svgr.com/playground/). 100 | 2. Copy the code inside the `` tag. 101 | 3. Paste the code into your card. Make sure to only copy and paste the code inside the `` tag. 102 | 4. You may need to decrease the height and width to make the image fit. 103 | 104 | 105 | 106 | One of `regular`, `solid`, `light`, `thin`, `sharp-solid`, `duotone`, `brands` 107 | 108 | 109 | 110 | The color of the icon as a hex code 111 | 112 | 113 | 114 | The url that clicking on the card would navigate the user to 115 | 116 | 117 | 118 | Makes the card more compact and horizontal 119 | 120 | 121 | 122 | The url or local path to an image to display on the top of the card 123 | 124 | 125 | 126 | Label for the action button 127 | 128 | 129 | 130 | Enable or disable the link arrow icon 131 | 132 | -------------------------------------------------------------------------------- /components/code-groups.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Code groups" 3 | description: "The CodeGroup component lets you combine code blocks in a display separated by tabs" 4 | icon: "group" 5 | --- 6 | 7 | You will need to make [Code Blocks](/code) then add the `` component around them. Every Code Block must have a filename because we use the names for the tab buttons. 8 | 9 | See below for an example of the end result. 10 | 11 | 12 | 13 | ```javascript helloWorld.js 14 | console.log("Hello World"); 15 | ``` 16 | 17 | ```python hello_world.py 18 | print('Hello World!') 19 | ``` 20 | 21 | ```java HelloWorld.java 22 | class HelloWorld { 23 | public static void main(String[] args) { 24 | System.out.println("Hello, World!"); 25 | } 26 | } 27 | ``` 28 | 29 | 30 | 31 | 32 | 33 | ````mdx Code Group Example 34 | 35 | 36 | ```javascript helloWorld.js 37 | console.log("Hello World"); 38 | ``` 39 | 40 | ```python hello_world.py 41 | print('Hello World!') 42 | ``` 43 | 44 | ```java HelloWorld.java 45 | class HelloWorld { 46 | public static void main(String[] args) { 47 | System.out.println("Hello, World!"); 48 | } 49 | } 50 | ``` 51 | 52 | 53 | ```` 54 | 55 | 56 | -------------------------------------------------------------------------------- /components/columns.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Columns' 3 | description: 'Show cards side by side in a grid format' 4 | icon: 'columns-2' 5 | keywords: ['card groups'] 6 | --- 7 | 8 | The `Columns` component lets you group multiple `Card` components together. It's most often used to put multiple cards in a grid, by specifying the number of grid columns. 9 | 10 | 11 | 12 | Neque porro quisquam est qui dolorem ipsum quia dolor sit amet 13 | 14 | 15 | Lorem ipsum dolor sit amet, consectetur adipiscing elit 16 | 17 | 18 | 19 | 20 | 21 | ```mdx Card Group Example 22 | 23 | 24 | Neque porro quisquam est qui dolorem ipsum quia dolor sit amet 25 | 26 | 27 | Lorem ipsum dolor sit amet, consectetur adipiscing elit 28 | 29 | 30 | ``` 31 | 32 | 33 | 34 | ### Props 35 | 36 | 37 | The number of columns per row 38 | 39 | -------------------------------------------------------------------------------- /components/examples.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Examples" 3 | description: "Display code blocks at the top-right of the page on desktop devices" 4 | icon: 'between-horizontal-start' 5 | --- 6 | 7 | The `` and `` stick code blocks to the top-right of a page even as you scroll. The components work on all pages even if you don't use an API playground. 8 | 9 | `` and `` show up like regular code blocks on mobile. 10 | 11 | ## Request Example 12 | 13 | The `` component works similar to [CodeGroup](/components/code-groups), but displays the request content on the right sidebar. Thus, you can put multiple code blocks inside ``. 14 | 15 | Please set a name on every code block you put inside RequestExample. 16 | 17 | 18 | ````mdx RequestExample Example 19 | 20 | 21 | ```bash Request 22 | curl --request POST \ 23 | --url https://dog-api.kinduff.com/api/facts 24 | ``` 25 | 26 | 27 | ```` 28 | 29 | 30 | ## Response Example 31 | 32 | The `` component is the same as `` but will show up underneath it. 33 | 34 | 35 | ````mdx ResponseExample Example 36 | 37 | 38 | ```json Response 39 | { "status": "success" } 40 | ``` 41 | 42 | 43 | ```` 44 | 45 | -------------------------------------------------------------------------------- /components/expandables.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Expandables" 3 | description: "Toggle to display nested properties." 4 | icon: 'list-tree' 5 | --- 6 | 7 | 8 | 9 | 10 | 11 | The full name of the user 12 | 13 | 14 | 15 | Whether the user is over 21 years old 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | ```mdx Expandable Example 24 | 25 | 26 | 27 | The full name of the user 28 | 29 | 30 | 31 | Whether the user is over 21 years old 32 | 33 | 34 | 35 | ``` 36 | 37 | 38 | 39 | ## Props 40 | 41 | 42 | The name of the object you are showing. Used to generate the "Show NAME" and 43 | "Hide NAME" text. 44 | 45 | 46 | 47 | Set to true to show the component as open when the page loads. 48 | 49 | -------------------------------------------------------------------------------- /components/fields.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Fields" 3 | description: "Set parameters for your API or SDK references" 4 | icon: 'letter-text' 5 | --- 6 | 7 | There are two types of fields: Parameter Fields and Response Fields. 8 | 9 | ## Parameter Field 10 | 11 | A `ParamField` component is used to define the parameters for your APIs or SDKs. Adding a `ParamField` will automatically add an [API Playground](/api-playground/overview). 12 | 13 | 14 | An example of a parameter field 15 | 16 | 17 | 18 | 19 | ```mdx Path Example 20 | 21 | An example of a parameter field 22 | 23 | ``` 24 | 25 | ```mdx Body Example 26 | 27 | The age of the user. Cannot be less than 0 28 | 29 | ``` 30 | 31 | ```mdx Response Example 32 | 33 | A response field example 34 | 35 | ``` 36 | 37 | 38 | 39 | ### Props 40 | 41 | 42 | Whether it is a query, path, body, or header parameter followed by the name 43 | 44 | 45 | 46 | Expected type of the parameter's value 47 | 48 | Supports `number`, `string`, `bool`, `object`. 49 | 50 | Arrays can be defined using the `[]` suffix. For example `string[]`. 51 | 52 | 53 | 54 | Indicate whether the parameter is required 55 | 56 | 57 | 58 | Indicate whether the parameter is deprecated 59 | 60 | 61 | 62 | Default value used by the server if the request does not provide a value 63 | 64 | 65 | 66 | Value that will be used to initialize the playground 67 | 68 | 69 | 70 | Placeholder text for the input in the playground 71 | 72 | 73 | 74 | Description of the parameter (markdown enabled) 75 | 76 | 77 | ## Response Field 78 | 79 | The `` component is designed to define the return values of an API. Many docs also use `` on pages when you need to list the types of something. 80 | 81 | 82 | A response field example 83 | 84 | 85 | ```mdx 86 | 87 | A response field example 88 | 89 | ``` 90 | 91 | ### Props 92 | 93 | 94 | The name of the response value. 95 | 96 | 97 | 98 | Expected type of the response value - this can be any arbitrary string. 99 | 100 | 101 | 102 | The default value. 103 | 104 | 105 | 106 | Show "required" beside the field name. 107 | 108 | 109 | 110 | Whether a field is deprecated or not. 111 | 112 | 113 | 114 | Labels that are shown before the name of the field 115 | 116 | 117 | 118 | Labels that are shown after the name of the field 119 | 120 | -------------------------------------------------------------------------------- /components/frames.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Frames" 3 | description: "Use the Frame component to wrap images or other components in a container." 4 | icon: 'frame' 5 | --- 6 | 7 | Frames are very helpful if you want to center an image. 8 | 9 | 10 | 11 | 12 | 13 | ## Captions 14 | 15 | You can add additional context to an image using the optional `caption` prop. 16 | 17 | 18 | 19 | 20 | 21 | ## Props 22 | 23 | 24 | Optional caption text to show centered under your component. 25 | 26 | 27 | 28 | 29 | ```mdx Frame 30 | 31 | 32 | 33 | ``` 34 | 35 | ```mdx Frame with Captions 36 | 37 | 38 | 39 | ``` 40 | 41 | 42 | -------------------------------------------------------------------------------- /components/icons.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Icons" 3 | description: "Use icons from popular icon libraries" 4 | icon: "flag" 5 | --- 6 | 7 | 8 | 9 | 10 | 11 | ```mdx Icon Example 12 | 13 | ``` 14 | 15 | 16 | 17 | ## Inline Icons 18 | 19 | The icon will be placed inline when used in a paragraph. 20 | 21 | ```markdown Inline Icon Example 22 | The documentation you want, effortlessly. 23 | ``` 24 | 25 | The documentation you want, effortlessly. 26 | 27 | ### Props 28 | 29 | 30 | A [Font Awesome](https://fontawesome.com/icons) icon, [Lucide](https://lucide.dev/icons) icon, URL to an icon, or relative path to an icon. 31 | 32 | 33 | 34 | One of `regular`, `solid`, `light`, `thin`, `sharp-solid`, `duotone`, `brands` (only for [Font Awesome](https://fontawesome.com/icons) icons). 35 | 36 | 37 | 38 | The color of the icon as a hex code (e.g., `#FF5733`) 39 | 40 | 41 | 42 | The size of the icon in pixels 43 | -------------------------------------------------------------------------------- /components/mermaid-diagrams.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Mermaid' 3 | description: 'Display diagrams using Mermaid' 4 | icon: 'waypoints' 5 | --- 6 | 7 | 8 | 9 | ````mdx Mermaid Flowchart Example 10 | ```mermaid 11 | flowchart LR 12 | subgraph subgraph1 13 | direction TB 14 | top1[top] --> bottom1[bottom] 15 | end 16 | subgraph subgraph2 17 | direction TB 18 | top2[top] --> bottom2[bottom] 19 | end 20 | %% ^ These subgraphs are identical, except for the links to them: 21 | 22 | %% Link *to* subgraph1: subgraph1 direction is maintained 23 | outside --> subgraph1 24 | %% Link *within* subgraph2: 25 | %% subgraph2 inherits the direction of the top-level graph (LR) 26 | outside ---> top2 27 | ``` 28 | ```` 29 | 30 | 31 | 32 | [Mermaid](https://mermaid.js.org/) lets you create visual diagrams using text and code. 33 | 34 | ```mermaid 35 | flowchart LR 36 | subgraph subgraph1 37 | direction TB 38 | top1[top] --> bottom1[bottom] 39 | end 40 | subgraph subgraph2 41 | direction TB 42 | top2[top] --> bottom2[bottom] 43 | end 44 | %% ^ These subgraphs are identical, except for the links to them: 45 | 46 | %% Link *to* subgraph1: subgraph1 direction is maintained 47 | outside --> subgraph1 48 | %% Link *within* subgraph2: 49 | %% subgraph2 inherits the direction of the top-level graph (LR) 50 | outside ---> top2 51 | ``` 52 | 53 | For a complete list of diagrams supported by Mermaid, check out their [website](https://mermaid.js.org/). 54 | 55 | ## Syntax for Mermaid diagrams 56 | 57 | To create a flowchart, you can write the Mermaid flowchart inside a Mermaid code block. 58 | 59 | ````mdx 60 | ```mermaid 61 | // Your mermaid code block here 62 | ``` 63 | ```` 64 | -------------------------------------------------------------------------------- /components/panel.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Panel' 3 | description: 'Specify the content of the right side panel' 4 | icon: 'panel-right' 5 | --- 6 | 7 | You can use the `` component to customize the right side panel of a page with any components that you want. 8 | 9 | If a page has a `` component, any [RequestExample](/components/examples#request-example) and [ResponseExample](/components/examples#response-example) components must be inside ``. 10 | 11 | The components in a `` will replace a page's table of contents. 12 | 13 | ````mdx 14 | 15 | Pin info to the side panel. Or add any other component. 16 | 17 | ```` 18 | 19 | 20 | Pin info to the side panel. Or add any other component. 21 | 22 | -------------------------------------------------------------------------------- /components/responses.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Response fields' 3 | description: 'Display API response values' 4 | --- 5 | 6 | The `` component is designed to define the return values of an API. Many docs also use `` on pages when you need to list the types of something. 7 | 8 | 9 | A response field example 10 | 11 | 12 | ```mdx 13 | 14 | A response field example 15 | 16 | ``` 17 | 18 | ## Props 19 | 20 | 21 | The name of the response value. 22 | 23 | 24 | 25 | Expected type of the response value - this can be any arbitrary string. 26 | 27 | 28 | 29 | The default value. 30 | 31 | 32 | 33 | Show "required" beside the field name. 34 | 35 | 36 | 37 | Whether a field is deprecated or not. 38 | 39 | 40 | 41 | Labels that are shown before the name of the field 42 | 43 | 44 | 45 | Labels that are shown after the name of the field 46 | 47 | 48 | 49 | 50 | ```mdx Response Field Example 51 | 52 | A response field example 53 | 54 | ``` 55 | 56 | 57 | -------------------------------------------------------------------------------- /components/steps.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Steps' 3 | description: 'Sequence content using the Steps component' 4 | icon: 'list-todo' 5 | --- 6 | 7 | Steps are the best way to display a series of actions of events to your users. You can add as many steps as desired. 8 | 9 | 10 | 11 | These are instructions or content that only pertain to the first step. 12 | 13 | 14 | These are instructions or content that only pertain to the second step. 15 | 16 | 17 | These are instructions or content that only pertain to the third step. 18 | 19 | 20 | 21 | 22 | 23 | ```mdx Steps Example 24 | 25 | 26 | These are instructions or content that only pertain to the first step. 27 | 28 | 29 | These are instructions or content that only pertain to the second step. 30 | 31 | 32 | These are instructions or content that only pertain to the third step. 33 | 34 | 35 | ``` 36 | 37 | 38 | 39 | ## Steps Props 40 | 41 | 42 | A list of `Step` components. 43 | 44 | 45 | 46 | The size of the step titles. One of `p`, `h2` and `h3`. 47 | 48 | 49 | ## Individual Step Props 50 | 51 | 52 | The content of a step either as plain text, or components. 53 | 54 | 55 | 56 | A [Font Awesome icon](https://fontawesome.com/icons), [Lucide icon](https://lucide.dev/icons), or SVG code in `icon={}` 57 | 58 | 59 | 60 | One of `regular`, `solid`, `light`, `thin`, `sharp-solid`, `duotone`, `brands` 61 | 62 | 63 | 64 | The title is the primary text for the step and shows up next to the indicator. 65 | 66 | 67 | 68 | The number of the step. 69 | 70 | 71 | 72 | The size of the step titles. One of `p`, `h2` and `h3`. 73 | 74 | -------------------------------------------------------------------------------- /components/tabs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tabs" 3 | description: "Toggle content using the Tabs component" 4 | icon: 'panel-top' 5 | --- 6 | 7 | You can add any number of tabs, and other components inside of tabs. 8 | 9 | 10 | 11 | ☝️ Welcome to the content that you can only see inside the first Tab. 12 | You can add any number of components inside of tabs. 13 | ```java HelloWorld.java 14 | class HelloWorld { 15 | public static void main(String[] args) { 16 | System.out.println("Hello, World!"); 17 | } 18 | } 19 | ``` 20 | 21 | 22 | ✌️ Here's content that's only inside the second Tab. 23 | 24 | 25 | 💪 Here's content that's only inside the third Tab. 26 | 27 | 28 | 29 | 30 | 31 | ````mdx Tabs Example 32 | 33 | 34 | ☝️ Welcome to the content that you can only see inside the first Tab. 35 | ```java HelloWorld.java 36 | class HelloWorld { 37 | public static void main(String[] args) { 38 | System.out.println("Hello, World!"); 39 | } 40 | } 41 | ``` 42 | 43 | 44 | ✌️ Here's content that's only inside the second Tab. 45 | 46 | 47 | 💪 Here's content that's only inside the third Tab. 48 | 49 | 50 | ```` 51 | 52 | 53 | 54 | ## Tab Props 55 | 56 | 57 | The title of the tab. Short titles are easier to navigate. 58 | 59 | -------------------------------------------------------------------------------- /components/tooltips.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Tooltips' 3 | description: 'Show a definition when you hover over text' 4 | icon: 'message-square' 5 | --- 6 | 7 | Tooltips are a way to show a definition when you hover over text. 8 | 9 | Hover over me and see a tooltip in action 10 | 11 | 12 | 13 | ```mdx Tooltip Example 14 | Hover over me 15 | ``` 16 | 17 | 18 | -------------------------------------------------------------------------------- /components/update.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Update" 3 | description: "Keep track of changes and updates" 4 | icon: "list-collapse" 5 | --- 6 | 7 | Use the `Update` component to display changelog entries, version updates, and release notes with consistent formatting. 8 | 9 | 10 | ## Example update 11 | 12 | You can add anything here, like a screenshot, a code snippet, or a list of changes. 13 | 14 | 15 | 20 | 21 | 22 | ### Features 23 | - Responsive design 24 | - Anchor for each update 25 | - Generated RSS feed entry for each update 26 | 27 | 28 | ## How to use 29 | 30 | ```mdx Update example 31 | 32 | This is how you use a changelog with a label, description, 33 | and tags. 34 | 35 | ``` 36 | 37 | Use multiple `Update` components to create [changelogs](/guides/changelogs). 38 | 39 | ## Props 40 | 41 | 42 | Label for the update. Appears to the left of the update and creates an anchor link. Labels should be unique. 43 | 44 | 45 | 46 | Tags for the update. Shown as filters in the right side panel. 47 | 48 | 49 | 50 | Description of the update. Appears below the label and tag. 51 | 52 | 53 | 54 | Title and description that will appear in the RSS feed entry for the update. 55 | 56 | ```mdx wrap 57 | 58 | # What's New in v1.0.1 59 | 60 | * Bug fixes 61 | * Improvements 62 | 63 | ``` 64 | 65 | ```xml Example Update item in RSS feed 66 | 67 | <![CDATA[v1.0.1 released]]> 68 | 69 | https://mintlify.com/changelog#v101 70 | https://mintlify.com/changelog#v101 71 | Fri, 20 Jun 2025 21:32:19 GMT 72 | 73 | ``` 74 | 75 | Learn more about [subscribable changelogs](/guides/changelogs#subscribable-changelogs). 76 | 77 | -------------------------------------------------------------------------------- /contact-support.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contact support" 3 | icon: "circle-help" 4 | description: "We're here to help you get the most out of Mintlify" 5 | --- 6 | 7 | ## Ask our docs 8 | 9 | Select Command + I to start a chat with our AI assistant trained on our documentation. 10 | 11 | ## Watch video tutorials 12 | 13 | Visit our [YouTube](https://www.youtube.com/@GetMintlify/videos) channel for tutorials and guides on using Mintlify. 14 | 15 | ## Message support 16 | 17 | Send us a message from your [dashboard](https://dashboard.mintlify.com/) by selecting **Support** in the sidebar. 18 | 19 | 20 | We aim to respond to all requests within 24 hours, but delays may occur during busy times. 21 | 22 | 23 | ## Email support 24 | 25 | If you can't access your dashboard, please email us at support@mintlify.com. 26 | -------------------------------------------------------------------------------- /discovery-openapi.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.0.1", 3 | "info": { 4 | "title": "Mintlify Discovery API", 5 | "description": "An API to integrate Mintlify discovery features into your product.", 6 | "version": "1.0.0" 7 | }, 8 | "servers": [ 9 | { 10 | "url": "https://api-dsc.mintlify.com/v1" 11 | } 12 | ], 13 | "security": [ 14 | { 15 | "bearerAuth": [] 16 | } 17 | ], 18 | "paths": { 19 | "/chat/topic": { 20 | "post": { 21 | "x-mcp": { 22 | "enabled": true 23 | }, 24 | "summary": "Create Assistant Chat Topic", 25 | "description": "Creates a topic to manage message history for a given AI assistant conversation", 26 | "responses": { 27 | "200": { 28 | "description": "Topic created successfully", 29 | "content": { 30 | "application/json": { 31 | "schema": { 32 | "type": "object", 33 | "properties": { 34 | "topicId": { 35 | "type": "string", 36 | "description": "The id of the created topic." 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | }, 46 | "/chat/message": { 47 | "post": { 48 | "x-mcp": { 49 | "enabled": true 50 | }, 51 | "summary": "Create Assistant Chat Message", 52 | "description": "Generate a completion in response to a user query", 53 | "requestBody": { 54 | "required": true, 55 | "content": { 56 | "application/json": { 57 | "schema": { 58 | "type": "object", 59 | "required": ["topicId", "message"], 60 | "properties": { 61 | "topicId": { 62 | "type": "string", 63 | "description": "The topic ID to associate this message with" 64 | }, 65 | "message": { 66 | "type": "string", 67 | "description": "The user message to generate a completion for" 68 | } 69 | } 70 | } 71 | } 72 | } 73 | }, 74 | "responses": { 75 | "200": { 76 | "description": "Topic created successfully", 77 | "headers": { 78 | "X-Mintlify-Base-Url": { 79 | "schema": { 80 | "type": "string" 81 | }, 82 | "description": "The base URL for the Mintlify documentation" 83 | } 84 | }, 85 | "content": { 86 | "text/plain": { 87 | "schema": { 88 | "type": "string", 89 | "description": "A text stream in the form `||[chunks]`. The chunks are parts of your docs that most closely matched the user query. Each has the following format: \n ```\n { \n \tid: string;\n \tlink: string;\n \tchunk_html: string;\n \tmetadata: {\n \t\ttitle?: string\n \t}\n} \n``` \n The links are relative links with your docs URL intended as the host. To get an absolute link to your docs, you can use the `X-Mintlify-Base-Url` header as the host and construct a fully-qualified URL." 90 | } 91 | } 92 | } 93 | } 94 | } 95 | } 96 | } 97 | }, 98 | "components": { 99 | "securitySchemes": { 100 | "bearerAuth": { 101 | "type": "http", 102 | "scheme": "bearer" 103 | } 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /fonts.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Adding Inter Variable from Adobe Fonts 3 | * © 2009-2025 Adobe Systems Incorporated. All Rights Reserved. 4 | */ 5 | 6 | @import url('https://p.typekit.net/p.css?s=1&k=zmy3zmk&ht=tk&f=55314&a=164646275&app=typekit&e=css'); 7 | 8 | @font-face { 9 | font-family: 'inter-variable'; 10 | src: url('https://use.typekit.net/af/250efc/00000000000000007750957d/31/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3') 11 | format('woff2'), 12 | url('https://use.typekit.net/af/250efc/00000000000000007750957d/31/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3') 13 | format('woff'), 14 | url('https://use.typekit.net/af/250efc/00000000000000007750957d/31/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3') 15 | format('opentype'); 16 | font-display: auto; 17 | font-style: normal; 18 | font-weight: 100 900; 19 | font-stretch: normal; 20 | } 21 | 22 | body { 23 | font-family: 'inter-variable', sans-serif; 24 | } -------------------------------------------------------------------------------- /guides/analytics.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Analytics" 3 | description: "See information about your docs' performance in your dashboard" 4 | icon: "chart-line" 5 | --- 6 | 7 | The analytics page provides insights into how your documentation is performing, helping you identify improvement opportunities and track changes over time. 8 | 9 | ## Accessing analytics 10 | 11 | Navigate to the **Analytics** tab in your [dashboard](https://dashboard.mintlify.com/products/analytics). 12 | 13 | Use the range selector to adjust the time period for displayed data. 14 | 15 | ## Analytics tabs 16 | 17 | The analytics dashboard has three main sections: 18 | 19 | ### Overview 20 | View traffic and other high-level insights about your docs. 21 | 22 | - **Visitors**: Unique visitors. 23 | - **Views**: Total page views. 24 | - **Actions**: Combined count of API calls, navbar link clicks, and CTA button clicks. 25 | - **Popular Pages**: Most-visited pages with view counts. 26 | - **Referrers**: Top traffic sources directing users to your docs. 27 | 28 | ### Feedback 29 | Monitor user satisfaction through voting data: 30 | 31 | - **Liked by viewers**: Pages with the most positive feedback (thumbs up votes). 32 | - **Needs improvement**: Pages with the most negative feedback (thumbs down votes). 33 | 34 | ### Search 35 | Understand how users search within your documentation. 36 | 37 | - **Total queries**: Search volume. 38 | - **Top searches**: Most-searched terms. 39 | - **Low-confidence searches**: Queries that may not have found relevant results. 40 | 41 | ## Improving your docs with analytics 42 | 43 | Use your analytics to enhance the user experience of your docs: 44 | 45 | **Review popular content**: Ensure your most-visited pages contain current, accurate information and consider expanding successful topics. 46 | 47 | **Address feedback concerns**: Investigate pages with negative feedback to identify and resolve user pain points. 48 | 49 | **Optimize for search**: Review top search queries so that relevant pages are discoverable and up-to-date. Pay attention to low-confidence searches that might indicate content gaps. 50 | -------------------------------------------------------------------------------- /guides/auth0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Using Auth0 with the OAuth handshake" 3 | description: "If Auth0 is the source of truth for your user data, you can set up Mintlify as an OAuth client app to authenticate your users." 4 | --- 5 | 6 | 7 | **Security Disclaimer**: While we provide this guide to help you integrate Auth0 with Mintlify, please consult with your security team before implementing any authentication solution. Mintlify is not responsible for any security issues that may arise from your specific implementation. 8 | 9 | 10 | ## Overview 11 | 12 | This guide walks you through setting up Auth0 as an authentication provider for your Mintlify documentation. By the end, your users will be able to log in to your documentation using their Auth0 credentials. 13 | 14 | 15 | 16 | Log in to your Auth0 dashboard and navigate to **Applications** > **Applications**. Click the **Create Application** button, give your application a name (e.g., "Mintlify"), and select **Regular Web Applications** as the application type. Then click **Create**. 17 | 18 | ![Creating a new application in Auth0](/images/guides/auth0/auth0-create-application.png) 19 | 20 | 21 | After creating your application, you'll be taken to the application settings page. Here, you'll find the essential credentials needed for the OAuth integration: 22 | 23 | ![Auth0 client settings page](/images/guides/auth0/auth0clientsettings.png) 24 | 25 | Make note of the following information: 26 | - **Domain**: This is your Auth0 tenant domain (e.g., `your-tenant.auth0.com`) 27 | - **Client ID**: The public identifier for your application 28 | - **Client Secret**: The secret key for your application (keep this secure) 29 | 30 | You'll need these values for configuring Mintlify in the next step. 31 | 32 | 33 | Navigate to your Mintlify Dashboard and go to the **Settings** > **Authentication** section. Select **OAuth** as your authentication method and you'll see the OAuth configuration form: 34 | 35 | ![Mintlify OAuth client settings](/images/guides/auth0/mintlifyoauthclientsettings.png) 36 | 37 | Fill in the form with the following values: 38 | 39 | - **Authorization URL**: `https://YOUR_AUTH0_DOMAIN/authorize` (replace `YOUR_AUTH0_DOMAIN` with your actual Auth0 domain from step 2) 40 | - **Client ID**: Enter the Client ID from your Auth0 application 41 | - **Client Secret**: Enter the Client Secret from your Auth0 application 42 | - **Scopes**: Leave blank unless you have custom scopes set in Auth0 43 | - **Token URL**: `https://YOUR_AUTH0_DOMAIN/oauth/token` (replace `YOUR_AUTH0_DOMAIN` with your actual Auth0 domain) 44 | 45 | After filling in these details, click **Save changes** to store your OAuth configuration. 46 | 47 | 48 | Mintlify will generate a unique Redirect URL that Auth0 needs to recognize for the OAuth flow to work properly. 49 | 50 | Copy the Redirect URL from your Mintlify Dashboard's Authentication settings: 51 | ![Mintlify redirect URL](/images/guides/auth0/mintlifyredirecturl.png) 52 | 53 | Return to your Auth0 application settings page, scroll down to the **Application URIs** section, and paste the Redirect URL into the **Allowed Callback URLs** field: 54 | ![Auth0 redirect URL configuration](/images/guides/auth0/auth0redirecturl.png) 55 | 56 | Click **Save Changes** at the bottom of the Auth0 page to apply this configuration. 57 | 58 | -------------------------------------------------------------------------------- /guides/deployments.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Deployments" 3 | description: "Troubleshoot your deployments" 4 | icon: "boxes" 5 | --- 6 | 7 | Your documentation site automatically deploys when you push changes to your connected repository. This requires the Mintlify GitHub app to be properly installed and connected. 8 | 9 | If your latest changes are not appearing on your live site, first check that the GitHub app is installed on the account or organization that owns your docs repository. See [GitHub troubleshooting](/settings/github#troubleshooting) for more information. 10 | 11 | If the GitHub app is connected, but changes are still not deploying, you can manually trigger a rebuild from your dashboard. 12 | 13 | ## Manually triggering a deployment 14 | 15 | 16 | 17 | Check that your latest commit appears in your docs repository and did not encounter any errors. 18 | 19 | 20 | Go to your [dashboard](https://dashboard.mintlify.com) and select the deploy button. 21 | 22 | The manual update button emphasized with an orange rectangle. 23 | The manual update button emphasized with an orange rectangle. 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /guides/hidden-page-example.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hidden page example" 3 | description: "Common use cases for hidden pages" 4 | icon: "eye-off" 5 | --- 6 | 7 | This page is hidden! It is not included in the `docs.json` navigation so you can only access it by its URL. 8 | 9 | See [Hidden pages](/guides/hidden-pages) for more information. 10 | 11 | ## Common use cases for hidden pages 12 | 13 | 14 | By default, hidden pages are publicly accessible, but not discoverable through the navigation. If you want to restrict access to a hidden page, you must configure [authentication](/authentication-personalization/authentication-setup). 15 | 16 | 17 | - **Beta documentation**: Information that can be public, but should not be discoverable through the navigation. 18 | - **Context for AI tools**: If hidden pages are indexed, AI tools can reference them for context. Use hidden pages for context that isn't relevant to users, but can help AI tools give more accurate responses. 19 | - **Legacy pages**: Keep old content accessible via direct links while removing it from navigation menus. 20 | - **Internal tools**: Document internal tools, staging APIs, or development processes. 21 | 22 | ## Examples 23 | 24 | ### AI context 25 | 26 | ```mdx wrap 27 | --- 28 | title: "Context for API version" 29 | description: "This page is context for AI tools responding to questions about API versions" 30 | --- 31 | 32 | When a user asks about API versions, always recommend that they use the latest version of the API. Never generate responses for versions older than 1.0.4. 33 | ``` 34 | 35 | ### Internal API endpoint 36 | 37 | ````mdx wrap 38 | --- 39 | title: "Internal API endpoint" 40 | description: "This page is a hidden page that documents an internal API endpoint" 41 | --- 42 | 43 | ```bash 44 | POST /api/internal/reset-cache 45 | Authorization: Bearer internal-token-xyz 46 | ``` 47 | 48 | This endpoint clears the application cache and is only available in development environments. 49 | 50 | 51 | This is an internal endpoint and should never be used in production. 52 | 53 | ```` -------------------------------------------------------------------------------- /guides/hidden-pages.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hidden pages" 3 | description: "Exclude pages from your navigation" 4 | icon: "eye-closed" 5 | --- 6 | 7 | Hidden pages are removed from your site's navigation but remain publicly accessible to anyone who knows their URL. 8 | 9 | Use hidden pages for content that you want to be accessible on your site or referenced as context for AI tools, but not discoverable through the navigation. 10 | 11 | For content requiring strict access control, you must configure [authentication](/authentication-personalization/authentication-setup). 12 | 13 | If you want to hide pages for specific groups of users, use personalization to control [page visibility](/authentication-personalization/overview#page-visibility). 14 | 15 | ## Hiding a page 16 | 17 | A page is hidden if it is not included in your `docs.json` navigation. To hide a page, remove it from your navigation structure. 18 | 19 | Hidden pages use the same URL structure as regular pages based on their file path. For example, `guides/hidden-page.mdx` would be accessible at `docs.yoursite.com/guides/hidden-page`. 20 | 21 | See an [example of a hidden page](/guides/hidden-page-example). 22 | 23 | 24 | Some navigation elements like sidebars, dropdowns, and tabs may appear empty or shift layout on hidden pages. 25 | 26 | 27 | ## Search, SEO, and AI indexing 28 | 29 | By default, hidden pages are excluded from indexing for search engines, internal search within your docs, and as context for the AI assistant. To include hidden pages in search results and as context for the assistant, add the `seo` property to your `docs.json`: 30 | 31 | ```json 32 | "seo": { 33 | "indexing": "all" 34 | } 35 | ``` 36 | 37 | To exclude a specific page, add `noindex: "true"` to its frontmatter. -------------------------------------------------------------------------------- /guides/monorepo.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Monorepo setup" 3 | description: "Deploy your docs from a repo that contains multiple projects" 4 | icon: "folder-git" 5 | --- 6 | 7 | Configure Mintlify to deploy documentation from a specific directory within a monorepo. This setup allows you to maintain documentation alongside your code in repositories that contain multiple projects or services. 8 | 9 | ## Prerequisites 10 | 11 | * Admin access to your Mintlify project. 12 | * Documentation files organized in a dedicated directory within your monorepo. 13 | * A valid `docs.json` in your documentation directory. 14 | 15 | ## Configure monorepo deployment 16 | 17 | 18 | 19 | Navigate to [Git Settings](https://dashboard.mintlify.com/settings/deployment/git-settings) in your dashboard. 20 | 21 | 22 | The project settings panel in the Git Settings menu. The Set up as monorepo toggle button is enabled and a path to the /docs directory is specified. 27 | The project settings panel in the Git Settings menu. The Set up as monorepo toggle button is enabled and a path to the /docs directory is specified. 32 | 33 | 34 | 35 | 36 | 1. Select the **Set up as monorepo** toggle button. 37 | 2. Enter the relative path to your docs directory. For example, if your docs are in the `docs` directory, enter `/docs`. 38 | 39 | Do not include a trailing slash in the path. 40 | 41 | 3. Select **Save changes**. 42 | 43 | 44 | -------------------------------------------------------------------------------- /image-embeds.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Images and embeds" 3 | description: "Add images, videos, and iframes" 4 | icon: "image" 5 | --- 6 | 7 | 8 | Photograph of a scenic landscape with purple flowers in the foreground, mountains in the background, and a blue sky with scattered clouds. 13 | 14 | 15 | ## Images 16 | 17 | Add images to provide visual context, examples, or decoration to your documentation. 18 | 19 | ### Basic image syntax 20 | 21 | Use [Markdown syntax](https://www.markdownguide.org/basic-syntax/#images) to add images to your documentation: 22 | 23 | ```mdx 24 | ![Alt text describing the image](/path/to/image.png) 25 | ``` 26 | 27 | 28 | Always include descriptive alt text to improve accessibility and SEO. The alt text should clearly describe what the image shows. 29 | 30 | 31 | Image files must be less than 20MB. For larger files, host them on a CDN service like [Amazon S3](https://aws.amazon.com/s3) or [Cloudinary](https://cloudinary.com). 32 | 33 | ### HTML image embeds 34 | 35 | For more control over image display, use HTML `` tags: 36 | 37 | ```html 38 | Main dashboard interface 44 | ``` 45 | 46 | #### Disable zoom functionality 47 | 48 | To disable the default zoom on click for images, add the `noZoom` property: 49 | 50 | ```html highlight="4" 51 | Descriptive alt text 57 | ``` 58 | 59 | #### Link images 60 | 61 | To make an image a clickable link, wrap the image in an anchor tag and add the `noZoom` property: 62 | 63 | ```html 64 | 65 | Mintlify logo 71 | 72 | ``` 73 | 74 | 75 | Images within anchor tags automatically display a pointer cursor to indicate they are clickable. 76 | 77 | 78 | #### Light and dark mode images 79 | 80 | To display different images for light and dark themes, use Tailwind CSS classes: 81 | 82 | ```html 83 | 84 | Light mode interface 89 | 90 | 91 | Dark mode interface 96 | ``` 97 | 98 | ## Videos 99 | 100 | Mintlify supports [HTML tags in Markdown](https://www.markdownguide.org/basic-syntax/#html), giving you flexibility to create rich content. 101 | 102 | 103 | Always include fallback text content within video elements for browsers that don't support video playback. 104 | 105 | 106 | ### YouTube embeds 107 | 108 | Embed YouTube videos using iframe elements: 109 | 110 | ```html 111 | 119 | ``` 120 | 121 | 122 | 130 | 131 | 132 | ### Self-hosted videos 133 | 134 | Use the HTML `