diff --git a/docs/docs/api.mdx b/docs/docs/api.mdx
new file mode 100644
index 0000000..eb0d322
--- /dev/null
+++ b/docs/docs/api.mdx
@@ -0,0 +1,89 @@
+---
+id: api
+title: API
+sidebar_label: API
+keywords: [configuration, api, rest]
+description: hyperglass API configuration
+---
+
+import Link from "@docusaurus/Link";
+import Admonition from "react-admonitions";
+import MiniNote from "../src/components/MiniNote";
+import Code from "../src/components/JSXCode";
+import PageLink from "../src/components/PageLink";
+
+The hyperglass API is based on the powerful [FastAPI](https://fastapi.tiangolo.com/) framework, which includes automatic API documentation using the [OpenAPI](https://www.openapis.org/) specification. If you plan to provide your users with API access to your hyperglass instance, it is highly recommended to leave this enabled.
+
+FastAPI provides built in support for both [Swagger UI](https://swagger.io/tools/swagger-ui/) and [Redoc](https://redocly.github.io/redoc/), which are open source projects that create a pretty web UI from an OpenAPI specification.
+
+## Settings
+
+| Parameter | Type | Default | Description |
+| :------------ | :-----: | :--------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `enable` | Boolean | `true` | Enable or disable the API documentation. |
+| `title` | String | `'{site_title} API Documentation'` | API documentation title. `{site_title}` will be replaced with the site_title parameter. |
+| `description` | String | | API documentation description appearing below the title. |
+| `base_url` | String | `'https://lg.example.net'` | The base URL for your hyperglass site. Used by OpenAPI for dynamically creating hyperlinks. |
+| `mode` | String | `'redoc'` | OpenAPI UI library to use for the hyperglass API docs. redoc or swagger
debug mode and review the logs to pinpoint the source of the error. |
+| `invalid_field` | String | `'{input} is an invalid {field}.'` | Displayed when a query field contains an invalid or unsupported value. `{input}` and `{field}` will be replaced with the invalid input value and corresponding field name. |
+| `invalid_input` | String | `'{target} is not a valid {query_type} target.'` | Displayed when a query target's value is invalid in relation to the corresponding query type. `{target}` and `{query_type}` will be replaced with the invalid target and corresponding query type. |
+| `no_input` | String | `'{field} must be specified.'` | Displayed when no a required field is not specified. `{field}` will be replaced with the `display_name` of the field that was omitted. |
+| `no_output` | String | `'No output.'` | Displayed when hyperglass can connect to a device and execute a query, but the response is empty. |
+| `no_response` | String | `'No response.'` | Displayed when hyperglass can connect to a device, but no output is able to be read. Seeing this error may indicate a bug in hyperglass or one of its dependencies. If you see this in the wild, try enabling debug mode and review the logs to pinpoint the source of the error. |
+| `request_timeout` | String | `'Request timed out.'` | Displayed when the request_timeout time expires. |
+| `vrf_not_associated` | String | `'VRF {vrf_name} is not associated with {device_name}.'` | Displayed when a query request's VRF field value contains a VRF that is not configured or associated with the corresponding location/device. The UI automatically filters out VRFs that are not configured on a selected device, so this error is most likely to appear when using the hyperglass API. `{vrf_name}` and `{device_name}` will be replaced with the VRF in question and corresponding device. |
+| `vrf_not_found` | String | `'RF {vrf_name} is not defined.'` | Displayed when a query VRF is not configured on any devices. The UI only shows configured VRFs, so this error is most likely to appear when using the hyperglass API. `{vrf_name}` will be replaced with the VRF in question. |
+
+## Example
+
+```yaml
+messages:
+ acl_denied: "{target} is a member of {denied_network}, which is not allowed."
+ acl_not_allowed: "{target} is not allowed."
+ authentication_error: Authentication error occurred.
+ connection_error: "Error connecting to {device_name}: {error}"
+ feature_not_enabled: "{feature} is not enabled for {device_name}."
+ general: Something went wrong.
+ invalid_field: "{input} is an invalid {field}."
+ invalid_input: "{target} is not a valid {query_type} target."
+ no_input: "{field} must be specified."
+ no_output: No output.
+ no_response: No response.
+ request_timeout: Request timed out.
+ vrf_not_associated: VRF {vrf_name} is not associated with {device_name}.
+ vrf_not_found: VRF {vrf_name} is not defined.
+```
diff --git a/docs/docs/queries.mdx b/docs/docs/queries.mdx
new file mode 100644
index 0000000..6f69bfd
--- /dev/null
+++ b/docs/docs/queries.mdx
@@ -0,0 +1,49 @@
+---
+id: queries
+title: Queries
+sidebar_label: Queries
+keywords: [hyperglass, queries]
+description: hyperglass query types
+---
+
+import Link from "@docusaurus/Link";
+import Code from "../src/components/JSXCode";
+
+Each query type may be disabled, enabled, or customized.
+
+## `bgp_route`
+
+| Parameter | Type | Default | Description |
+| :------------- | :-----: | :------------ | :----------------------------------------------------- |
+| `enable` | Boolean | `true` | Enable or disable the BGP Route query type. |
+| `display_name` | String | `'BGP Route'` | Text displayed for the BGP Route query type in the UI. |
+
+## `bgp_community`
+
+| Parameter | Type | Default | Description |
+| :------------- | :-----: | :---------------- | :--------------------------------------------------------- |
+| `enable` | Boolean | `true` | Enable or disable the BGP Community query type. |
+| `display_name` | String | `'BGP Community'` | Text displayed for the BGP Community query type in the UI. |
+| `pattern` | | | |
+
+## `bgp_aspath`
+
+| Parameter | Type | Default | Description |
+| :------------- | :-----: | :-------------- | :------------------------------------------------------- |
+| `enable` | Boolean | `true` | Enable or disable the BGP AS Path query type. |
+| `display_name` | String | `'BGP AS Path'` | Text displayed for the BGP AS Path query type in the UI. |
+| `pattern` | | | |
+
+## `ping`
+
+| Parameter | Type | Default | Description |
+| :------------- | :-----: | :------- | :------------------------------------------------ |
+| `enable` | Boolean | `true` | Enable or disable the Ping query type. |
+| `display_name` | String | `'Ping'` | Text displayed for the Ping query type in the UI. |
+
+## `traceroute`
+
+| Parameter | Type | Default | Description |
+| :------------- | :-----: | :------------- | :------------------------------------------------------ |
+| `enable` | Boolean | `true` | Enable or disable the Traceroute query type. |
+| `display_name` | String | `'Traceroute'` | Text displayed for the Traceroute query type in the UI. |
diff --git a/docs/docs/ui.mdx b/docs/docs/ui.mdx
index 9952be0..df2470a 100644
--- a/docs/docs/ui.mdx
+++ b/docs/docs/ui.mdx
@@ -13,12 +13,9 @@ import MiniNote from "../src/components/MiniNote";
import Code from "../src/components/JSXCode";
import Color from "../src/components/Color";
import Font from "../src/components/Font";
+import PageLink from "../src/components/PageLink";
-export const PageLink = ({ children, to }) => (
-
- {children}
-
-);
+The `web` subsection contains multiple subsections of its own, should you wish to customize various aspects of the UI:
| Section | Description | All Options |
| :-------------- | :----------------------------- | :-----------------------------------------: |
@@ -30,6 +27,72 @@ export const PageLink = ({ children, to }) => (
| `terms` | Terms & Conditions | request_timeout setting. |
+| `fqdn_tooltip` | String | `'Use {protocol}'` | Text displayed when a user hovers over the IPv4 or IPv6 button on an FQDN target resolved by DNS. `{protocol}` is replaced with the relevant IP protocol. |
+| `query_location` | String | `'Location'` | Query Location (router) form label. |
+| `query_target` | String | `'Target'` | Query Target (IP/hostname/community/AS Path) form label. |
+| `query_type` | String | `'Query Type'` | Query Type (BGP Route, Ping, Traceroute, etc.) form label. |
+| `query_vrf` | String | `'Routing Table'` | Query VRF form label. |
+| `subtitle` | String | `'AS{primary_asn}'` | Subtitle text. `{primary_asn}` will be replaced with the primary_asntext_only, logo_only, logo_title, or alltitle_mode parameter behaves in the following manner:
+ | Mode | +Behavior | +
|---|---|
+ text_only
+ |
+
+ Shows the title and subtitle only.
+ |
+
+ logo_only
+ |
+
+ Shows the logo only.
+ |
+
+ logo_title
+ |
+
+ Shows the logo and title only.
+ |
+
+ all
+ |
+
+ Shows the logo, title, and subtitle.
+ |
+