diff --git a/advanced/subpath/cloudflare.mdx b/advanced/subpath/cloudflare.mdx index 763b44e..724f715 100644 --- a/advanced/subpath/cloudflare.mdx +++ b/advanced/subpath/cloudflare.mdx @@ -7,46 +7,20 @@ import SubpathGatingSnippet from "/snippets/custom-subpath-gating.mdx"; -## Create Cloudflare Worker +## Setup Steps -Navigate to the `Workers & Pages > Create application > Create worker`. You -should be able to presented with the following screen where you can create a new -Cloudlfare worker. +1. Create a Cloudflare Worker by going to `Workers & Pages > Create application > Create worker` - - Create a Cloudflare worker - +2. Add your custom domain: + - Go to `Configure worker > Settings > Triggers` + - Click `Add Custom Domain` + - Add your domain (both with and without `www.`) -### Add custom domain - -Once the worker is created, click `Configure worker`. Navigate to the worker -`Settings > Triggers`. Click on `Add Custom Domain` to add your desired domain -into the list - we recommend you add both the version with and without `www.` -prepended to the domain. - - - Cloudflare worker custom domain - - -If you have trouble setting up a custom subdirectory, -[contact our support team](mailto:sales@mintlify.com) and we'll walk you through -upgrading your hosting with us. - -### Edit Worker Script - -Click on `Edit Code` and add the following script into the worker's code. - - - Cloudflare edit code - - - - Edit `DOCS_URL` by replacing `[SUBDOMAIN]` with your unique subdomain and - `CUSTOM_URL` with your website's base URL. - +3. Add the Worker Script: + - Click `Edit Code` + - Copy the script below + - Replace `[SUBDOMAIN]` with your Mintlify subdomain + - Replace `[YOUR_DOMAIN]` with your website's domain ```javascript addEventListener("fetch", (event) => { @@ -56,9 +30,7 @@ addEventListener("fetch", (event) => { async function handleRequest(request) { try { const urlObject = new URL(request.url); - // If the request is to the docs subdirectory if (/^\/docs/.test(urlObject.pathname)) { - // Then Proxy to Mintlify const DOCS_URL = "[SUBDOMAIN].mintlify.dev"; const CUSTOM_URL = "[YOUR_DOMAIN]"; @@ -74,11 +46,11 @@ async function handleRequest(request) { return await fetch(proxyRequest); } } catch (error) { - // if no action found, play the regular request return await fetch(request); } } ``` -Click on `Deploy` and wait for the changes to propagate (it can take up to a few -hours). +4. Click `Deploy` and wait for changes to propagate (may take a few hours) + +Need help? [Contact our support team](mailto:sales@mintlify.com) for assistance with custom subdirectory setup. \ No newline at end of file diff --git a/advanced/subpath/vercel.mdx b/advanced/subpath/vercel.mdx index 925561f..7c63da5 100644 --- a/advanced/subpath/vercel.mdx +++ b/advanced/subpath/vercel.mdx @@ -7,10 +7,9 @@ import SubpathGatingSnippet from "/snippets/custom-subpath-gating.mdx"; -## vercel.json Configuration +## Configuration -To host your documentation at a custom subpath using Vercel, you need to add the -following configuration to your `vercel.json` file. +Add the following to your `vercel.json` file to host your documentation at a /docs subpath: ```json { @@ -27,8 +26,4 @@ following configuration to your `vercel.json` file. } ``` - - For more information, you can also refer to Vercel's offical guide on - rewrites: [Project Configuration: - Rewrites](https://vercel.com/docs/projects/project-configuration#rewrites) - +For additional configuration options, see [Vercel's Rewrites documentation](https://vercel.com/docs/projects/project-configuration#rewrites). \ No newline at end of file diff --git a/advanced/user-auth/oauth.mdx b/advanced/user-auth/oauth.mdx index 98251eb..35977e5 100644 --- a/advanced/user-auth/oauth.mdx +++ b/advanced/user-auth/oauth.mdx @@ -1,41 +1,43 @@ --- title: 'OAuth 2.0' -description: 'Integrate with your OAuth server to enable user login via the PKCE flow' +description: 'Enable user login with OAuth 2.0' --- -If you have an existing OAuth server that supports the PKCE flow, you can integrate with Mintlify for a seamless login experience. +Mintlify supports OAuth 2.0 authentication using the PKCE flow, allowing you to integrate with your existing OAuth server for user authentication. -## Implementation +## Setup Guide - - Create an API endpoint that can be accessed with an OAuth access token, and responds with a JSON payload following the [UserInfo](./sending-data) format. Take note of the scope or scopes required to access this endpoint. + + Create an API endpoint that: + - Accepts an OAuth access token + - Returns user information in the [UserInfo](./sending-data) format - - Go to your [Mintlify dashboard settings](https://dashboard.mintlify.com/mintlify/mintlify/settings/deployment/user-authentication), select the OAuth option, and fill out the required fields: - - - **Authorization URL**: The base URL for the authorization request, to which we will add the appropriate query parameters. - - **Client ID**: An ID for the OAuth 2.0 client to be used. - - **Scopes**: An array of scopes that will be requested. - - **Token URL**: The base URL for the token exchange request. - - **Info API URL**: The endpoint that will be hit to retrieve user info. + + Navigate to your [Mintlify dashboard](https://dashboard.mintlify.com/mintlify/mintlify/settings/deployment/user-authentication) and configure: + - Authorization URL + - Client ID + - Required scopes + - Token URL + - Info API URL - - Copy the Redirect URL listed in the [Mintlify dashboard settings](https://dashboard.mintlify.com/mintlify/mintlify/settings/deployment/user-authentication) and add it as an authorized redirect URL for your OAuth server. + + Copy the Redirect URL from your Mintlify dashboard and add it to your OAuth server's allowed redirect URLs. -## Example - -I have an existing OAuth server that supports the PKCE flow. I want to set up authentication for my docs hosted at `foo.com/docs`. +## Example Configuration -To set up authentication with Mintlify, I create an endpoint `api.foo.com/docs/user-info` which requires an OAuth access token with the `docs-user-info` scope, and responds with the user's custom data according to Mintlify’s specification. +Here's a simple example for docs hosted at `foo.com/docs`: -I then go to the Mintlify dashboard settings, navigate to the User Auth settings, select OAuth, and enter the relevant values for the OAuth flow and Info API endpoint: -- **Authorization URL**: `https://auth.foo.com/authorization` -- **Client ID**: `ydybo4SD8PR73vzWWd6S0ObH` -- **Scopes**: `['docs-user-info']` -- **Token URL**: `https://auth.foo.com/exchange` -- **Info API URL**: `https://api.foo.com/docs/user-info` +```json +{ + "authorizationUrl": "https://auth.foo.com/authorization", + "clientId": "ydybo4SD8PR73vzWWd6S0ObH", + "scopes": ["docs-user-info"], + "tokenUrl": "https://auth.foo.com/exchange", + "infoApiUrl": "https://api.foo.com/docs/user-info" +} +``` -Finally, I copy the Redirect URL displayed in the dashboard settings and add it as an authorized redirect URL in my OAuth client configuration settings. +The user info endpoint (`api.foo.com/docs/user-info`) requires an access token with the `docs-user-info` scope and returns user data according to Mintlify's specifications. \ No newline at end of file diff --git a/advanced/user-auth/overview.mdx b/advanced/user-auth/overview.mdx index c4d4da7..fd8be0e 100644 --- a/advanced/user-auth/overview.mdx +++ b/advanced/user-auth/overview.mdx @@ -3,86 +3,51 @@ title: 'Introduction' description: 'Give your users a personalized docs experience' --- -User Auth allows you to identify and authenticate your users so that you can personalize docs content for them. Your users. +User Auth lets you identify and authenticate users to create personalized documentation experiences. -Example use cases: +## Key Features -1. **Customize MDX content** with a user's information, such as their name, plan, or title. - -2. **Prefill API keys** in the API Playground for streamlined use. - -3. **Selectively show pages** in the navigation based on a user's groups. +1. **Customize Content** - Display user-specific information like names or account details +2. **Prefill API Keys** - Automatically populate API playground inputs +3. **Control Access** - Show/hide pages based on user groups ## What *isn't* User Auth -At this time, User Auth is not meant for the following use cases: - -1. **Private docs content.** While you can hide pages from unauthenticated users, those pages are still accessible by anyone who can guess the URL. If your documentation contains sensitive information, User Auth is not enough to hide it. +User Auth is not designed for: -2. **A Mintlify-backed user database.** Mintlify does not store *any* information about your users. Rather, it relies on your existing infrastructure to serve as the source-of-truth for user data. +1. **Private docs content** - Pages remain accessible via URL even if hidden from navigation +2. **User database storage** - Mintlify doesn't store user data; it uses your existing infrastructure -If you are interested in private docs content, [contact our team](mailto:sales@mintlify.com) to explore solutions. +For private documentation needs, [contact our team](mailto:sales@mintlify.com). ## How to Use -### Customizing MDX Content +### Customizing Content -When writing content, you can use the `userContext` variable to access the information you have sent to your docs. Here's a simple example: - -Hello, {userContext.name ?? 'reader'}! +Use the `userContext` variable to access user information: ```jsx Hello, {userContext.name ?? 'reader'}! ``` -This feature becomes even more powerful when paired with custom data about the user. Here's a real world example that allows us to give specific instructions on how to access the User Auth feature based on the customer's existing plan: - -User Auth is an enterprise feature. { -userContext.org === undefined -? <>To access this feature, first create an account at the Mintlify dashboard. -: userContext.org.plan !== 'enterprise' - ? <>You are currently on the ${userContext.org.plan ?? 'free'} plan. To speak to our team about upgrading, contact our sales team. - : <>To request this feature for your enterprise org, contact our team. -} - -```jsx -User Auth is an enterprise feature. { - userContext.org === undefined - ? <>To access this feature, first create an account at the Mintlify dashboard. - : userContext.org.plan !== 'enterprise' - ? <>You are currently on the ${userContext.org.plan ?? 'free'} plan. To speak to our team about upgrading, contact our sales team. - : <>To request this feature for your enterprise org, contact our team. -} -``` - - The information in `userContext` is only available after a user has logged in. For logged out users, the value of `userContext` will be `{}`. To prevent the page from crashing for logged-out users, always use optional chaining on your `userContext` fields, e.g. `{userContext.org?.plan}` + Always use optional chaining (e.g., `userContext.org?.plan`) since `userContext` is empty (`{}`) for logged-out users. ### Prefilling API Keys -If you return API Playground inputs in the user info, they will automatically be prefilled in the API Playground. Make sure the name of the field in the user info is an exact match of the name in the API Playground. +API Playground inputs are automatically prefilled when matching field names are found in the user info. -### Showing/Hiding Pages +### Managing Page Visibility -By default, every page is visible to every user. If you want to restrict which pages are visible to your users, you can add a `groups` field in your page metadata. -When determining which pages to show to the user, Mintlify will check which groups the user belongs to. -If the user is not in any of the groups listed in the page metadata, the page will not be shown. +Control page visibility using the `groups` field in your page metadata: ```md --- -title: 'Managing Your Users' -description: 'Adding and removing users from your organization' +title: 'Example Page' +description: 'Description' groups: ['admin'] --- ``` -Here's a table that displays whether a page is shown for different combinations of `groups` in UserInfo and page metadata: - -| | `groups` not in UserInfo | `groups: []` in UserInfo | `groups: ['admin']` in UserInfo | -| :------------------------------ | :----------------------: | :----------------------: | :-----------------------------: | -| `groups` not in metadata | ✅ | ✅ | ✅ | -| `groups: []` in metadata | ❌ | ❌ | ❌ | -| `groups: ['admin']` in metadata | ❌ | ❌ | ✅ | - -Note that an empty array in the page metadata is interpreted as "No groups should see this page." \ No newline at end of file +This page will only be visible to users in the 'admin' group. \ No newline at end of file diff --git a/advanced/user-auth/shared-session.mdx b/advanced/user-auth/shared-session.mdx index d2925a2..9efc34e 100644 --- a/advanced/user-auth/shared-session.mdx +++ b/advanced/user-auth/shared-session.mdx @@ -1,50 +1,37 @@ --- title: 'Shared Session Auth' -description: 'Seamlessly share user sessions between your dashboard and your docs' +description: 'Share user sessions between your dashboard and docs' --- -This method utilizes the session authentication info already stored in your user’s browser to create a seamless documentation experience. +Share your existing user authentication with your documentation by utilizing session information stored in the user's browser. -## Implementation +## Setup - - Create an API endpoint that uses session authentication to identify users, and responds with a JSON payload following the [UserInfo](./sending-data) format. - - If the API domain does not *exactly match* the docs domain: - - Add the docs domain to your API's `Access-Control-Allow-Origin` header (must not be `*`) - - Ensure your API’s `Access-Control-Allow-Credentials` header is `true` - - These CORS options only need to be enabled on the *single endpoint* responsible for returning user information. We do not recommend enabling these options on all dashboard endpoints. - + + Create an API endpoint that: + - Uses your existing session authentication + - Returns user data in the [UserInfo](./sending-data) format + - Includes proper CORS headers if your API and docs domains differ: + ``` + Access-Control-Allow-Origin: your-docs-domain.com + Access-Control-Allow-Credentials: true + ``` + + + Only enable these CORS settings on your user info endpoint, not across all routes. + - - Go to your [Mintlify dashboard settings](https://dashboard.mintlify.com/mintlify/mintlify/settings/deployment/user-authentication) and add the API URL and your Login URL to your User Auth settings. + + Add your API URL and Login URL in your [Mintlify dashboard settings](https://dashboard.mintlify.com/mintlify/mintlify/settings/deployment/user-authentication). -## Examples - -### Dashboard at subdomain, docs at subdomain - -I have a dashboard at `dash.foo.com`, which uses cookie-based session authentication. My dashboard API routes are hosted at `dash.foo.com/api`. I want to set up authentication for my docs hosted at `docs.foo.com`. - -To set up authentication with Mintlify, I create another dashboard endpoint `dash.foo.com/api/docs/user-info` which identifies the user using session auth, and responds with their custom data according to Mintlify’s specification. I then add `https://docs.foo.com` to the `Access-Control-Allow-Origin` allow-list **for this route only**, and ensure my `Access-Control-Allow-Credentials` configuration is set to `true` **for this route only**. - -I then go to the Mintlify dashboard settings and enter `https://dash.foo.com/api/docs/user-info` for the API URL field. - -### Dashboard at subdomain, docs at root - -I have a dashboard at `dash.foo.com`, which uses cookie-based session authentication. My dashboard API routes are hosted at `dash.foo.com/api`. I want to set up authentication for my docs hosted at `foo.com/docs`. - -To set up authentication with Mintlify, I create another dashboard endpoint `dash.foo.com/api/docs/user-info` which identifies the user using session auth, and responds with their custom data according to Mintlify’s specification. I then add `https://foo.com` to the `Access-Control-Allow-Origin` allow-list **for this route only**, and ensure my `Access-Control-Allow-Credentials` configuration is set to `true` **for this route only**. - -I then go to the Mintlify dashboard settings and enter `https://dash.foo.com/api/docs/user-info` for the API URL field. - -### Dashboard at root, docs at root - -I have a dashboard at `foo.com/dashboard`, which uses cookie-based session authentication. My dashboard API routes are hosted at `foo.com/api`. I want to set up authentication for my docs hosted at `foo.com/docs`. +## Example Setup -To set up authentication with Mintlify, I create another dashboard endpoint `foo.com/api/docs/user-info` which identifies the user using session auth, and responds with their custom data according to Mintlify’s specification. +Your dashboard is at `dashboard.example.com` and docs at `docs.example.com`: -I then go to the Mintlify dashboard settings and enter `https://foo.com/api/docs/user-info` for the API URL field. \ No newline at end of file +1. Create endpoint: `dashboard.example.com/api/docs/user-info` +2. Add CORS headers for `docs.example.com` +3. Configure the API URL in Mintlify dashboard settings + \ No newline at end of file diff --git a/advanced/widget/chat.mdx b/advanced/widget/chat.mdx index 216179a..adc5a08 100644 --- a/advanced/widget/chat.mdx +++ b/advanced/widget/chat.mdx @@ -2,19 +2,18 @@ title: "Chat Widget" --- -Integrate the Mintlify widget into your products to offer users quick access to AI-powered chat with your docs content as the knowledge base. +Add an AI-powered chat widget to your site that uses your docs as a knowledge base. ![widget](https://mintlify-assets.b-cdn.net/widget/hero.webp) -## Getting started +## Setup -First, generate an API key in [the Mintlify dashboard](https://dashboard.mintlify.com/chat/widget-auth). +1. Get your API key from the [Mintlify dashboard](https://dashboard.mintlify.com/chat/widget-auth) +2. Add the widget to your site: -![widget](https://mintlify-assets.b-cdn.net/widget/key.webp) +### HTML Sites -## Installation - -Add the widget by adding these script tags into your site's `...` tag. +Add to your site's `` tag: ```html ``` -To use the widget in React and Next.js apps, use the React component from the `@mintlify/widget-react` [package](https://www.npmjs.com/package/@mintlify/widget-react). Here is a basic example of how to use the component in your React application: +### React/Next.js Apps + +Install and use the React component: ```jsx ``` -## Usage - -In the first script tag or the React component props, you can customize the appearance and other settings of the widget. `mintlifyWidgetSettings` accepts the following props: - -| Prop | Type | Description | -| ------------ | ------------------------------------------------------------------- | ---------------------------------------------------------- | -| `connection` | [MintlifyWidgetConnectionProps](#mintlifywidgetconnectionProps) | Information needed to connect to our API. Required. | -| `display?` | [MintlifyWidgetDisplayProps](#mintlifywidgetdisplayProps) | Configurations for the widget appearance and interactions. | -| `tracking?` | [MintlifyWidgetTrackingFunctions](#mintlifywidgettrackingfunctions) | Callback functions for tracking analytics. | - -### MintlifyWidgetConnectionProps - -| Prop | Type | Description | -| -------- | -------- | ----------------------------------------------------------- | -| `apiKey` | `string` | Widget API key generated from Mintlify dashboard. Required. | -| `url?` | `string` | Used for internal testing only | - -### MintlifyWidgetDisplayProps - -| Prop | Type | Description | -| ------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------- | -| `trigger?` | [MintlifyWidgetDisplayTriggerProps](#mintlifywidgetdisplaytriggerprops) | Appearance of the trigger. | -| `colors?` | [MintlifyWidgetDisplayColorsProps](#mintlifywidgetdisplaycolorsprops) | Colors used across the widget. | -| `chat?` | [MintlifyWidgetDisplayChatProps](#mintlifywidgetdisplaychatprops) | Configs specific to AI chat. | -| `isDarkMode?` | `boolean` | Controlled dark mode appearance. Defaults to OS preference. | - -#### MintlifyWidgetDisplayTriggerProps - -| Prop | Type | Description | -| ------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | -| `type?` | `'button'`\|`'input'` | Type of the trigger to display. Defaults to `button`. | -| `label?` | `string` | Label displayed in the trigger. Defaults to `Get help` for the button trigger and `Ask anything...` for the input trigger. | -| `buttonIcon?` | `'chat'`\|`'sparkles'`\|`'mintlify'` | Icon used in the trigger. Only available for the `button` trigger. Defaults to `chat`. | -| `iconOnly?` | `boolean` | Only show icon in the trigger or not. Defaults to `false`. | - -Here is an overview of what the trigger looks like with different configurations. - -| `type='input'` | | -| -------------- | ------------------------------------------------------------ | -| | | - -| `type='button'` | `'chat'` | `'sparkles'` | `'mintlify'` | -| ---------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `iconOnly=false` | | | | -| `iconOnly=true` | | | | - -#### MintlifyWidgetDisplayColorsProps - -| Prop | Type | Description | -| --------------- | -------- | -------------------------------------------------------- | -| `primary?` | `string` | Primary color used in the widget. Defaults to `#0D9373`. | -| `primaryLight?` | `string` | Primary color in dark mode. Defaults to `#55D799`. | - -#### MintlifyWidgetDisplayChatProps +## Customization -| Prop | Type | Description | -| ------------------------ | ---------- | ------------------------------------------------------------------ | -| `openCitationInSameTab?` | `boolean` | Open the citation url in the same tab or not. Defaults to `false`. | -| `exampleQueries?` | `string[]` | Example queries to prompt the user to ask. Defaults to `[]`. | +The widget can be customized with these main options: -### MintlifyWidgetTrackingFunctions +| Option | Description | +| ------ | ----------- | +| `connection.apiKey` | Your API key (required) | +| `display.trigger` | Customize the widget button/input | +| `display.colors` | Change the widget colors | +| `display.chat` | Configure chat behavior | +| `tracking` | Add analytics callbacks | -| Prop | Type | Description | -| --------------------- | ------------------------------------------ | -------------------------------------------------- | -| `trackChatEnter` | `()=> void` | Triggered when the user opens the chat widget. | -| `trackCitationClick` | `(title: string, url: string)=> void` | Triggered when the user clicks on a citation. | -| `trackChatThumbsUp` | `(query: string, response: string)=> void` | Triggered when the user thumbs up on a response. | -| `trackChatThumbsDown` | `(query: string, response: string)=> void` | Triggered when the user thumbs down on a response. | -| `trackChatFollowup` | `(query: string)=> void` | Triggered when the user asks a question. | -| `trackChatClose` | `(queriesCount: number)=> void` | Triggered when the user exits the chat widget. | +[View detailed configuration options →](/advanced/widget/configuration) + \ No newline at end of file diff --git a/api-playground/mdx/configuration.mdx b/api-playground/mdx/configuration.mdx index 55682df..54e8d20 100644 --- a/api-playground/mdx/configuration.mdx +++ b/api-playground/mdx/configuration.mdx @@ -3,25 +3,24 @@ title: 'MDX Setup' description: 'Generate docs pages for your API endpoints using MDX' --- -Mintlify allows you to define your API endpoints using a combination of `mint.json` configuration, MDX metadata fields, and the `` component. From the defined endpoints, we generate an API playground, request examples, and response examples. +Learn how to set up API endpoints documentation using MDX and the API playground feature. - In your `mint.json` file, define your base URL and auth method: + Add API configuration to your `mint.json`: ```json { "api": { - "baseUrl": "https://mintlify.com/api", // string array for multiple base URLs + "baseUrl": "https://mintlify.com/api", "auth": { - "method": "bearer" // options: bearer, basic, key. + "method": "bearer" } } } ``` - If you would not like to show an API playground, you don't need to include auth types. Hide the playground with the following field: - + To hide the API playground, use: ```json { "api": { @@ -31,13 +30,10 @@ Mintlify allows you to define your API endpoints using a combination of `mint.js } } ``` - - Find a full list of API configurations [here](/settings/global#api-configurations). - - - Each API endpoint page should have a corresponding MDX file. At the top of each file, define: + + Create MDX files for each endpoint with the following metadata: ```md --- @@ -46,20 +42,13 @@ Mintlify allows you to define your API endpoints using a combination of `mint.js --- ``` - You can specify path parameters by adding the parameter name to the path, wrapped with `{}`: - + For paths with parameters, use `{parameterName}`: ```bash - https://api.example.com/v1/endpoint/{userId} + /v1/endpoint/{userId} ``` - - - - If you have `baseUrl` configured in [mint.json](/settings/global), you can use relative paths like `/v1/endpoint`. - - - - Add your endpoint pages to the sidebar by adding the paths to the `navigation` field in your `mint.json`. Learn more about structuring your docs [here](/settings/navigation). + + Add your endpoint pages to the `navigation` field in `mint.json` to display them in your sidebar. - + \ No newline at end of file diff --git a/api-playground/openapi/setup.mdx b/api-playground/openapi/setup.mdx index 7d45da4..81d31a6 100644 --- a/api-playground/openapi/setup.mdx +++ b/api-playground/openapi/setup.mdx @@ -3,20 +3,15 @@ title: "OpenAPI Setup" description: "Reference OpenAPI endpoints in your docs pages" --- -## Add an OpenAPI specification file +## Add Your OpenAPI Specification -To describe your endpoints with OpenAPI, make sure you have a valid OpenAPI -document in either JSON or YAML format that follows the -[OpenAPI specification](https://swagger.io/specification/). Your document must -follow OpenAPI specification 3.0+. +Start with a valid OpenAPI document (version 3.0+) in JSON or YAML format that follows the [OpenAPI specification](https://swagger.io/specification/). -## Auto-populate API pages +## Auto-populate API Pages -The fastest way to get started with OpenAPI is to add an `openapi` field to a tab or anchor in the `mint.json`. This field can contain either the path to an OpenAPI document in your docs repo, or the URL of a hosted OpenAPI document. Mintlify will automatically generate a page for each OpenAPI operation and place them in the tab/anchor. +Add an `openapi` field to a tab or anchor in your `mint.json`. This can be either a path to a local OpenAPI document or a URL to a hosted one. -**Example with Anchors:** - -```json {5} +```json { "anchors": [ { @@ -29,121 +24,31 @@ The fastest way to get started with OpenAPI is to add an `openapi` field to a ta } ``` -![](/images/anchors-autogeneration-anchors.png) - -**Example with Tabs:** - -```json {6} -{ - "tabs": [ - { - "name": "API Reference", - "url": "api-reference", - "openapi": "https://petstore3.swagger.io/api/v3/openapi.json" - } - ] -} -``` - -![](/images/autogeneration-with-tabs.png) - -When using this option, the metadata for the generated pages will have the following default values: - -* `title`: The `summary` field from the OpenAPI operation, if present. Otherwise a title generated from the HTTP method and endpoint. - -* `description`: The `description` field from the OpenAPI operation, if present. - -* `version`: The `version` value from the anchor or tab, if present. - -There are some scenarios in which the default behavior isn't sufficient. If you need more customizability, you can create an MDX page for your OpenAPI operation, and modify it just like any other MDX page. - -## Create MDX files for API pages - -If you want to customize the page metadata, add additional content, omit certain OpenAPI operations, or reorder OpenAPI pages in your navigation, you'll need an MDX page for each operation. Here is [an example MDX OpenAPI page](https://github.com/elevenlabs/elevenlabs-docs/blob/e5e267c97b8d1e4c21db1dcdb8b005eb1dfed7da/api-reference/speech-to-speech.mdx?plain=1#L2) from [Elevenlabs](https://elevenlabs.io/docs/api-reference/speech-to-speech). - -![](/images/elevenlabs-mdx-autogeneration-example.png) - -### Autogenerate files +Mintlify will automatically generate pages for each OpenAPI operation with default metadata from your specification. -For large OpenAPI documents, creating one MDX page for each OpenAPI operation can be a lot of work. To make it easier, we created a local OpenAPI page scraper. +## Custom API Pages -Our Mintlify [scraper](https://www.npmjs.com/package/@mintlify/scraping) -autogenerates MDX files for your OpenAPI endpoints. Use the relative path to the -OpenAPI document in your codebase. - -```bash -npx @mintlify/scraping@latest openapi-file -``` - -Add the `-o` flag to specify a folder to populate the files into. If a folder is -not specified, the files will populate in the working directory. +For more control over your API documentation, you can create individual MDX pages for each operation: +1. **Auto-generate MDX files** using our scraper: ```bash npx @mintlify/scraping@latest openapi-file -o api-reference ``` -Learn more about our scraping package [here](https://www.npmjs.com/package/@mintlify/scraping). - -The scraper will output an array of -[Navigation entries](/settings/global#structure) containing your OpenAPI MDX -files. You can either append these entries to your existing Navigation, or -reorder and add the files to your navigation manually. - - - If your OpenAPI document is invalid, the files will not autogenerate. - - -### Manually specify files - -You can always create an MDX page manually, and reference the OpenAPI operation in the page's metadata using the `openapi` field. - - - -By using the OpenAPI reference, the name, description, parameters, responses, -and the API playground will be automatically generated from the OpenAPI document. - -If you have multiple OpenAPI files, include the path to the OpenAPI file to ensure Mintlify finds the correct OpenAPI document. This is not required if you have -only one OpenAPI file - it will automatically detect your OpenAPI file. - - - ```md Example - --- - title: "Get users" - openapi: "/path/to/openapi-1.json GET /users" - --- - ``` - - ```md Format - --- - title: "title of the page" - openapi: openapi-file-path method path - --- - ``` - - -
- - - The method and path must match the method and path specified in the OpenAPI - document exactly. If the endpoint doesn't exist in the OpenAPI file, - the page will be empty. - - -## Create MDX files for OpenAPI schemas +2. **Manually create MDX files** with OpenAPI references: +```md +--- +title: "Get users" +openapi: "/path/to/openapi.json GET /users" +--- +``` -Mintlify also allows you to create individual pages for any OpenAPI schema -defined in an OpenAPI document's `components.schemas` field: +## OpenAPI Schemas - - ```md Example - --- - openapi-schema: OrderItem - --- - ``` +Create pages for individual schemas defined in your OpenAPI document: - ```md Format - --- - openapi-schema: "schema-key" - --- - ``` - \ No newline at end of file +```md +--- +openapi-schema: SchemaName +--- +``` \ No newline at end of file diff --git a/api-playground/openapi/writing-openapi.mdx b/api-playground/openapi/writing-openapi.mdx index 57cd936..5ae359c 100644 --- a/api-playground/openapi/writing-openapi.mdx +++ b/api-playground/openapi/writing-openapi.mdx @@ -3,30 +3,25 @@ title: "Writing OpenAPI" description: "Use OpenAPI features to enhance your Mintlify docs" --- -## Describing your API +## Getting Started with OpenAPI -There are many great tools online for learning about and constructing OpenAPI documents. Here are our favorites: -- [Swagger's OpenAPI Guide](https://swagger.io/docs/specification/about/) for familiarizing yourself with the OpenAPI syntax -- [OpenAPI v3.1.0 Specification](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md) for all the details about the newest OpenAPI specification -- [Swagger & OpenAPI Validator](https://apitools.dev/swagger-parser/online/) for debugging your OpenAPI document -- [Swagger's Editor](https://editor.swagger.io/) for seeing examples in action +To get started with OpenAPI, we recommend using [Swagger's OpenAPI Guide](https://swagger.io/docs/specification/about/) to learn the basics and [Swagger's Editor](https://editor.swagger.io/) to write your specifications. - Swagger's OpenAPI Guide is for OpenAPI v3.0, but nearly all of the information is applicable to v3.1. For more information on the differences between v3.0 and v3.1, check out [OpenAPI's blog post](https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0). + We support OpenAPI v3.1. For differences between v3.0 and v3.1, see [OpenAPI's migration guide](https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0). -## Specifying the URL for your API +## Essential Components -In an OpenAPI document, different API endpoints are specified by their paths, like `/users/{id}`, or maybe simply `/`. To specify the base URL to which these paths should be appended, OpenAPI provides the `servers` field. This field is necessary to use some Mintlify features like the API Playground. Read how to configure the `servers` field in the [Swagger documentation](https://swagger.io/docs/specification/api-host-and-base-path/). +### Base URL Configuration +- Use the `servers` field to specify your API's base URL +- Multiple servers can be defined for different environments +- Required for using Mintlify's API Playground features -The API Playground will use these server URLs to determine where to send requests. If multiple servers are specified, a dropdown will appear to allow toggling between servers. If no server is supplied, the API Playground will use simple mode, as there is no way to send a request. +### Authentication Setup +- Define authentication methods using `securitySchemes` +- Common types include Basic, Bearer, and API Keys +- Apply authentication using the `security` field +- Can be configured globally or per-endpoint -If different endpoints within your API exist at different URLs, you can [override the server field](https://swagger.io/docs/specification/api-host-and-base-path/#:~:text=%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%2D%20southeastasia-,Overriding%20Servers,-The%20global%20servers) for a given path or operation. - -## Specifying authentication - -Nearly all APIs require some method of authentication. OpenAPI provides the `securitySchemes` field for defining the methods of authentication used throughout your API, with simple configuration for the most common authentication types - [Basic](https://swagger.io/docs/specification/authentication/basic-authentication/), [Bearer](https://swagger.io/docs/specification/authentication/bearer-authentication/), and [API Keys](https://swagger.io/docs/specification/authentication/api-keys/). To apply these authentication methods to your endpoints, OpenAPI uses the `security` field. The syntax for defining and applying authentication is a bit unintuitive, so definitely check out [Swagger's documentation and examples](https://swagger.io/docs/specification/authentication/) on the topic. - -The API descriptions and API Playground will add authentication fields based on the security configurations in your OpenAPI document. - -If different endpoints within your API require different methods of authentication, you can [override the security field](https://swagger.io/docs/specification/authentication/#:~:text=you%20can%20apply%20them%20to%20the%20whole%20API%20or%20individual%20operations%20by%20adding%20the%20security%20section%20on%20the%20root%20level%20or%20operation%20level%2C%20respectively.) for a given operation. +For detailed OpenAPI syntax and examples, refer to the [OpenAPI v3.1.0 Specification](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). \ No newline at end of file diff --git a/content/components/mermaid-diagrams.mdx b/content/components/mermaid-diagrams.mdx index 1334bde..2108c44 100644 --- a/content/components/mermaid-diagrams.mdx +++ b/content/components/mermaid-diagrams.mdx @@ -4,33 +4,10 @@ description: 'Display diagrams using Mermaid' icon: 'diagram-project' --- - - -````md Mermaid Flowchart Example -```mermaid - flowchart LR - subgraph subgraph1 - direction TB - top1[top] --> bottom1[bottom] - end - subgraph subgraph2 - direction TB - top2[top] --> bottom2[bottom] - end - %% ^ These subgraphs are identical, except for the links to them: - - %% Link *to* subgraph1: subgraph1 direction is maintained - outside --> subgraph1 - %% Link *within* subgraph2: - %% subgraph2 inherits the direction of the top-level graph (LR) - outside ---> top2 -``` -```` - - - [Mermaid](https://mermaid.js.org/) lets you create visual diagrams using text and code. +Here's an example of a Mermaid flowchart: + ```mermaid flowchart LR subgraph subgraph1 @@ -41,33 +18,29 @@ icon: 'diagram-project' direction TB top2[top] --> bottom2[bottom] end - %% ^ These subgraphs are identical, except for the links to them: - - %% Link *to* subgraph1: subgraph1 direction is maintained outside --> subgraph1 - %% Link *within* subgraph2: - %% subgraph2 inherits the direction of the top-level graph (LR) outside ---> top2 ``` -You can create the following using Mermaid diagrams: +## Types of Diagrams -- Flowchart -- Sequence diagram -- Class diagram -- State diagram -- Entity relationship diagram -- User journey -- and more +You can create various types of diagrams including: +- Flowcharts +- Sequence diagrams +- Class diagrams +- State diagrams +- Entity relationship diagrams +- User journey diagrams +- And more -For a complete list of diagrams supported by Mermaid, check out their [website](https://mermaid.js.org/). +Visit the [Mermaid website](https://mermaid.js.org/) for a complete list of supported diagrams. -## Syntax for Mermaid diagrams +## Usage -To create a flowchart, you can write the Mermaid flowchart inside a Mermaid code block. +To create a Mermaid diagram, simply wrap your Mermaid code in a code block with the 'mermaid' language specifier: ````md ```mermaid -// Your mermaid code block here +// Your mermaid code here ``` -```` +```` \ No newline at end of file diff --git a/development.mdx b/development.mdx index 1558101..e6c47b2 100644 --- a/development.mdx +++ b/development.mdx @@ -4,99 +4,47 @@ description: 'Preview changes locally to update your docs' --- - -**Prerequisite**: Please install Node.js (version 19 or higher) before proceeding. - +**Prerequisite**: Node.js (version 19 or higher) -**Step 1**: Install Mintlify: - - - - ```bash npm - npm i -g mintlify - ``` +## Quick Start -```bash yarn -yarn global add mintlify +1. Install Mintlify: +```bash +npm i -g mintlify ``` - - -**Step 2**: Navigate to the docs directory (where the `mint.json` file is located) and execute the following command: - +2. Go to your docs directory and run: ```bash mintlify dev ``` -A local preview of your documentation will be available at `http://localhost:3000`. +Your docs will be available at `http://localhost:3000`. -### Custom Ports - -By default, Mintlify uses port 3000. You can customize the port Mintlify runs on by using the `--port` flag. To run Mintlify on port 3333, for instance, use this command: +## Common Tasks +### Update Mintlify +Keep your CLI up to date with: ```bash -mintlify dev --port 3333 -``` - -If you attempt to run Mintlify on a port that's already in use, it will use the next available port: - -```md -Port 3000 is already in use. Trying 3001 instead. -``` - -## Mintlify Versions - -Please note that each CLI release is associated with a specific version of Mintlify. If your local website doesn't align with the production version, please update the CLI: - - - - ```bash npm - npm i -g mintlify@latest - ``` - -```bash yarn -yarn global upgrade mintlify +npm i -g mintlify@latest ``` - - -## Validating Links - -The CLI can assist with validating reference links made in your documentation. To identify any broken links, use the following command: - +### Custom Port +Run on a different port: ```bash -mintlify broken-links +mintlify dev --port 3333 ``` -## Deployment - -If the deployment is successful, you should see the following: - - - - - -## Code Formatting - -We suggest using extensions on your IDE to recognize and format MDX. If you're a VSCode user, consider the [MDX VSCode extension](https://marketplace.visualstudio.com/items?itemName=unifiedjs.vscode-mdx) for syntax highlighting, and [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) for code formatting. - ## Troubleshooting - - - This may be due to an outdated version of node. Try the following: - 1. Remove the currently-installed version of mintlify: `npm remove -g mintlify` - 2. Upgrade to Node v19 or higher. - 3. Reinstall mintlify: `npm install -g mintlify` + + 1. Remove mintlify: `npm remove -g mintlify` + 2. Upgrade to Node v19+ + 3. Reinstall: `npm install -g mintlify` - - - Solution: Go to the root of your device and delete the \~/.mintlify folder. Afterwards, run `mintlify dev` again. + + Delete ~/.mintlify folder and run `mintlify dev` again. - + \ No newline at end of file diff --git a/integrations/analytics/google-analytics.mdx b/integrations/analytics/google-analytics.mdx index 7ebfe16..3c68f8c 100644 --- a/integrations/analytics/google-analytics.mdx +++ b/integrations/analytics/google-analytics.mdx @@ -2,27 +2,20 @@ title: "Google Analytics 4" --- -You will need to generate a new GA4 property to use with Mintlify. The data collected will go into the same project as your other Google Analytics data. +Connect your documentation to GA4 to track visitor analytics. -If you are using the old version of Google Analytics, Universal Analytics, you will still be able to generate a GA4 property. GA4 data is slightly different from UA data but still gets collected in the same project. +## Setup Steps -## How to Connect GA4 to Mintlify - -### Create a Web Stream - -You will need to create a web stream to get the Measurement ID to put into Mintlify. - -Click the cog at the bottom left of the Google Analytics screen. Then click on Data Streams. +1. Create a GA4 property if you don't have one already +2. Create a Web Stream in GA4: + - Go to Settings (cog icon) → Data Streams + - Click "Add Stream" → "Web" + - Enter your Mintlify docs URL ![](/images/ga4-web-streams.png) -Create a Web Stream and put the URL of your Mintlify docs site as the stream URL. - -Your Measurement ID looks like `G-XXXXXXX` and will show up under Stream Details immediately after you create the Web Stream. - -### Put Measurement ID in mint.json - -Add your Measurement ID to your `mint.json` file like so: +3. Copy your Measurement ID (`G-XXXXXXX`) from Stream Details +4. Add it to your `mint.json`: ```json mint.json "analytics": { @@ -32,14 +25,10 @@ Add your Measurement ID to your `mint.json` file like so: } ``` -### Wait - -Google Analytics takes two to three days to show your data. - -You can use the [Google Analytics Debugger](https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna?hl=en) to check analytics are enabled correctly. The extension will log to your browser's console every time GA4 makes a request. - - -Preview links have analytics turned off. - +- Data takes 2-3 days to appear in Google Analytics +- Use [Google Analytics Debugger](https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna?hl=en) to verify setup +- Analytics are disabled on preview links + + \ No newline at end of file diff --git a/integrations/analytics/overview.mdx b/integrations/analytics/overview.mdx index dff95d3..36dd54e 100644 --- a/integrations/analytics/overview.mdx +++ b/integrations/analytics/overview.mdx @@ -12,512 +12,73 @@ description: "Integrate with an analytics platform to track viewer events" }> - + - - - - - - } -> - - - - - - - - - } -> - - - - - - - - - - - } -> - - - - - - - - - - - } -> - - - - - - } -> - - - - - -} - -> - - - - - - - } -> - - - - - - - - - - - - - - - - - - - - - - - - - - - } -> - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - } -> - - - - - - - -}> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } -> - - - - - - } -> + + }> + - - - - - - - - } -/> + + + + + + }> + + + + + + }> + -## Enabling Analytics - -Set your analytics keys in `mint.json`. You can add an unlimited number of analytics integrations for free. +## Quick Start -The syntax for `mint.json` is below. You only need to include entries for the platforms you want to connect. +To enable analytics, add your integration keys to `mint.json`. You can add multiple analytics platforms simultaneously. - - -```json Analytics options in mint.json -"analytics": { - "amplitude": { - "apiKey": "required" - }, - "clearbit": { - "publicApiKey": "required" - }, - "fathom": { - "siteId": "required" - }, +```json mint.json +{ + "analytics": { "ga4": { - "measurementId": "required" + "measurementId": "G-XXXXXXX" // Google Analytics 4 }, - "gtm": { - "tagId": "required" - }, - "hotjar": { - "hjid": "required", - "hjsv": "required" - }, - "koala": { - "publicApiKey": "required" + "posthog": { + "apiKey": "phc_xxxxxxxxxxxxxxxx", + "apiHost": "https://app.posthog.com" // Optional }, - "logrocket": { - "appId": "required" + "amplitude": { + "apiKey": "xxxxxxxxxxxxxxxx" }, "mixpanel": { - "projectToken": "required" - }, - "pirsch": { - "id": "required" - }, - "plausible": { - "domain": "required" - }, - "posthog": { - "apiKey": "required", - "apiHost": "optional" - }, -} -``` - -```json Google Analytics 4 Example -"analytics": { - "ga4": { - "measurementId": "G-XXXXXXX" + "projectToken": "xxxxxxxxxxxxxxxx" } + } } ``` - \ No newline at end of file +For detailed setup instructions, click on any of the integrations above. \ No newline at end of file diff --git a/integrations/analytics/plausible.mdx b/integrations/analytics/plausible.mdx index 4d47884..43d9a93 100644 --- a/integrations/analytics/plausible.mdx +++ b/integrations/analytics/plausible.mdx @@ -2,24 +2,11 @@ title: "Plausible" --- -Add your site's domain to `mint.json` to send analytics to Plausible. - - - - Do not include `http://` or `https://` with your domain. - +To enable Plausible analytics, add your site's domain to `mint.json`: -```json Analytics options in mint.json -"analytics": { - "plausible": { - "domain": "required" - } -} -``` - -```json Example +```json mint.json "analytics": { "plausible": { "domain": "docs.domain.com" @@ -28,3 +15,8 @@ Add your site's domain to `mint.json` to send analytics to Plausible. ``` + + + Do not include `http://` or `https://` in your domain. + + \ No newline at end of file diff --git a/integrations/analytics/posthog.mdx b/integrations/analytics/posthog.mdx index b78cabb..2c4151d 100644 --- a/integrations/analytics/posthog.mdx +++ b/integrations/analytics/posthog.mdx @@ -2,37 +2,25 @@ title: "PostHog" --- -Add the following to your `mint.json` file to send analytics to PostHog. - -You only need to include `apiHost` if you are self-hosting PostHog. We send events to `https://app.posthog.com` by default. +Configure PostHog analytics by adding the following to your `mint.json`: -```json Analytics options in mint.json +```json mint.json "analytics": { "posthog": { "apiKey": "required", - "apiHost": "optional" - } -} -``` - -```json Example -"analytics": { - "posthog": { - "apiKey": "phc_TXdpocbYTeZVm5VJmMzHTMrCofBQu3e0kN7HGMNGTVW" + "apiHost": "optional" // Only needed for self-hosted PostHog } } ``` -
- Enabling PostHog analytics will disable the analytics on the Mintlify dashboard. ## Session Recordings -You need to add the URL for your docs website to Posthog's "Authorized domains for recordings" before you can receive session recordings. The option to add your URL is in Posthog's project settings. +To enable session recordings, add your docs website URL to PostHog's "Authorized domains for recordings" in your project settings. \ No newline at end of file diff --git a/integrations/privacy/osano.mdx b/integrations/privacy/osano.mdx index ded3d2d..d12297c 100644 --- a/integrations/privacy/osano.mdx +++ b/integrations/privacy/osano.mdx @@ -2,26 +2,16 @@ title: "Osano" --- -Add the following to your `mint.json` file to add the [Osano](https://www.osano.com/) cookie consent manager. +To add the [Osano](https://www.osano.com/) cookie consent manager, add your Osano source URL to your `mint.json` file: -```json Integration options in mint.json +```json mint.json "integrations": { - "osano": "SOURCE" -} -``` - -```json Example -"integrations": { - "osano": "https://cmp.osano.com/2sUB2dqwqdkks/8dqwd-dwd86£-4a9b/osano.js" + "osano": "https://cmp.osano.com/YOUR_SOURCE_URL/osano.js" } ``` -The `SOURCE` can be found as the `src` value in the code snippet generated by Osano. It always starts with `https://cmp.osano.com/`. - -```html Code snippet from Osano -