Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ docs/*/*/kb/**
# Ignore all generated files but keep _category_.json which is hand-authored
docs/changetracker/8.1/integration/api/reference/*
!docs/changetracker/8.1/integration/api/reference/_category_.json
!docs/changetracker/8.1/integration/api/reference/index.md

# KB copy script lockfile
.kb-copy.lock
Expand Down
6 changes: 3 additions & 3 deletions docs/changetracker/8.1/integration/api/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ sidebar_position: 20

# API

Netwrix Change Tracker provides a comprehensive REST API that allows customers to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports containing data from all instances.
Netwrix Change Tracker provides a comprehensive REST API that customers can use to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports containing data from all instances.

## Authentication

All API endpoints require authentication. See [Authentication](/docs/changetracker/8.1/integration/api/authentication.md) for an example script.

## API Reference

For a complete interactive reference of all Netwrix Change Tracker Hub API endpoints, see the [Netwrix Change Tracker Hub API Reference](/docs/changetracker/8_1/integration/api/reference/changetracker-hub). The Netwrix Change Tracker Hub (the central management server) generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas.
For an interactive reference of all Netwrix Change Tracker Hub API endpoints, see the [Netwrix Change Tracker Hub API Reference](/docs/changetracker/8_1/integration/api/reference/). The Netwrix Change Tracker Hub (the central management server) generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas.

The raw OpenAPI 3.0 spec (YAML) is also [available for download](/openapi/changetracker-hub-8.1.yaml).

Expand All @@ -38,7 +38,7 @@ When working with the Change Tracker API, consider the following best practices:

3. **Authentication**: Store API credentials securely and never expose them in client-side code.

4. **Data Filtering**: When retrieving large datasets, use the available filtering parameters to limit the amount of data returned.
4. **Data Filtering**: When retrieving large datasets, use the available filtering parameters to limit how much data the endpoint returns.

5. **Pagination**: For endpoints that return large collections, implement pagination to improve performance.

Expand Down
43 changes: 43 additions & 0 deletions docs/changetracker/8.1/integration/api/reference/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: "API Reference"
description: "Introduction to the Change Tracker Hub API Reference"
sidebar_position: 1
---

The Change Tracker Hub API Reference documents every REST API endpoint that the Change Tracker Hub (the central management server) exposes. The Hub generates this reference directly from its OpenAPI 3.0 specification, which reflects the API for version 8.1.

Use this reference to:

- Explore available endpoints and their parameters
- Review request and response schemas
- Try endpoints interactively from your browser
- Download the OpenAPI spec for use in external tools

## How this reference is organized

The reference groups endpoints by tag (functional area). Each endpoint page includes the HTTP method and path, parameters (required and optional), request body schema, response schemas, and a list of possible status codes.

## Authentication

All endpoints require authentication. Before you can send requests — whether from the interactive explorer or your own code — you need a valid session.

See [Authentication](/docs/changetracker/8.1/integration/api/authentication.md) for a PowerShell example that authenticates to the Hub and stores the session for subsequent calls.

## Use the interactive explorer

Each endpoint page includes a built-in API explorer. To use it:

1. Obtain a session token by calling `POST /auth/credentials`. See [Authentication](/docs/changetracker/8.1/integration/api/authentication.md).
2. Click **Authorize** at the top of any endpoint page.
3. Enter your token in the **Bearer** field and click **Authorize**.
4. Open an endpoint, fill in the required parameters, and click **Send API Request**.

:::tip
Before sending a request, you can edit the server URL directly in the explorer to point to your Change Tracker Hub instance.
:::

## Download the OpenAPI specification

You can download the raw OpenAPI 3.0 spec (YAML) and import it into API clients, code generators, or testing tools.

[Download the OpenAPI spec](/openapi/changetracker-hub-8.1.yaml)
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,16 @@ keywords:
- database recovery mode
- Netwrix
products:
- access-analyzer
sidebar_label: Access Analyzer Upgrade FAQ
- accessanalyzer
sidebar_label: Upgrade and Migration FAQ
tags:
- kb
- installation-and-upgrades
title: "Access Analyzer Upgrade FAQ"
title: "Upgrade and Migration FAQ"
knowledge_article_id: kA0Qk0000001hHRKAY
---

# Access Analyzer Upgrade FAQ
# Upgrade and Migration FAQ

## Questions

Expand All @@ -32,10 +33,10 @@ knowledge_article_id: kA0Qk0000001hHRKAY

## Answers

1. We do not recommend performing an in-place upgrade for the Netwrix Application server's Operation System. It has been known to cause issues. We suggest spinning up a new server with the new OS and migrating Netwrix to the new server.
2. We recommend migrating Access Analyzer to the new server first. Then, after confirming everything is working as expected on the new server, upgrade to the latest version.
3. You should keep all of Netwrix's databases on simple recovery mode. For mor information, please see the following article: SQL Server Requirements.
1. Netwrix does not recommend in-place Operating System upgrades for the Access Analyzer host server. In-place upgrades have caused issues. Instead, deploy a new server with the target OS and migrate Access Analyzer to it.
2. Netwrix recommends migrating Access Analyzer to the new server first. After confirming everything is working as expected on the new server, upgrade to the latest version.
3. Keep all Netwrix databases in Simple Recovery Mode. For more information, see [SQL Server Requirements](pathname:///docs/accessanalyzer/12_0/requirements/overview#sql-server-requirements).

## Related Articles

- SQL Server Requirements
- [SQL Server Requirements](pathname:///docs/accessanalyzer/12_0/requirements/overview#sql-server-requirements)
41 changes: 21 additions & 20 deletions kb_style_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,30 +319,31 @@ Format external links with a middot and arrow after the company name:

Use the following names in KB articles. Do not use abbreviations such as "NA" for Netwrix Auditor.

Product IDs in the `products` field are used for Algolia search metadata. If a product ID below seems outdated, verify against `src/config/products.js` before using it — that file is the authoritative source for product IDs in this repo.

| Full Product Name | Short Product Name | Product ID (for `products` field) |
|---|---|---|
| Netwrix Activity Monitor | Activity Monitor | `activity_monitor` |
| Netwrix 1Secure | 1Secure | `onesecure` |
| Netwrix 1Secure | 1Secure | `1secure` |
| Netwrix Access Analyzer | Access Analyzer | `accessanalyzer` |
| Netwrix Access Information Center | Access Information Center | `accessinformationcenter` |
| Netwrix Activity Monitor | Activity Monitor | `activitymonitor` |
| Netwrix Auditor | Auditor | `auditor` |
| Netwrix Change Tracker | Change Tracker | `change_tracker` |
| Netwrix Data Classification | Data Classification | `data_classification` |
| Netwrix Directory Manager | Directory Manager | `groupid` |
| Netwrix Endpoint Protector | Endpoint Protector | `endpoint_protector` |
| Netwrix Log Tracker | Log Tracker | `log_tracker` |
| Netwrix Password Policy Enforcer | Password Policy Enforcer | `password_policy_enforcer` |
| Netwrix Password Reset | Password Reset | `password_reset_manager` |
| Netwrix Password Secure | Password Secure | `password_secure` |
| Netwrix Change Tracker | Change Tracker | `changetracker` |
| Netwrix Data Classification | Data Classification | `dataclassification` |
| Netwrix Directory Manager | Directory Manager | `directorymanager` |
| Netwrix Endpoint Policy Manager | Endpoint Policy Manager | `policypak` |
| Netwrix Endpoint Privilege Manager | Endpoint Privilege Manager | `privilege_secure_endpoints` |
| Netwrix Privilege Secure for Access Management | Privilege Secure for Access Management | `privilege_secure` |
| Netwrix Privilege Secure for Discovery | Privilege Secure for Discovery | `privilege_secure_discovery` |
| Netwrix Recovery for Active Directory | Recovery for Active Directory | `recovery_ad` |
| Netwrix Access Analyzer | Access Analyzer | `enterprise_auditor` |
| Netwrix Threat Manager | Threat Manager | `threat_manager` |
| Netwrix Threat Prevention | Threat Prevention | `threat_prevention` |
| Netwrix Platform Governance for NetSuite | Platform Governance for NetSuite | `strongpoint_netsuite` |
| Netwrix Platform Governance for Salesforce | Platform Governance for Salesforce | `strongpoint_salesforce` |
| Netwrix Identity Manager | Identity Manager | `usercube` |
| Netwrix Endpoint Protector | Endpoint Protector | `endpointprotector` |
| Netwrix Identity Manager | Identity Manager | `identitymanager` |
| Netwrix Password Policy Enforcer | Password Policy Enforcer | `passwordpolicyenforcer` |
| Netwrix Password Reset | Password Reset | `passwordreset` |
| Netwrix Password Secure | Password Secure | `passwordsecure` |
| Netwrix Platform Governance for NetSuite | Platform Governance for NetSuite | `platgovnetsuite` |
| Netwrix Platform Governance for Salesforce | Platform Governance for Salesforce | `platgovsalesforce` |
| Netwrix Privilege Secure for Access Management | Privilege Secure for Access Management | `privilegesecure` |
| Netwrix Privilege Secure for Discovery | Privilege Secure for Discovery | `privilegesecurediscovery` |
| Netwrix Recovery for Active Directory | Recovery for Active Directory | `recoveryforactivedirectory` |
| Netwrix Threat Manager | Threat Manager | `threatmanager` |
| Netwrix Threat Prevention | Threat Prevention | `threatprevention` |
| Netwrix Vulnerability Tracker by Greenbone | Vulnerability Tracker | `vulnerability_tracker_gb` |

### When to use long vs. short product names
Expand Down
180 changes: 180 additions & 0 deletions src/theme/ApiExplorer/Server/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
import React, { useState } from "react";

import { translate } from "@docusaurus/Translate";
import FloatingButton from "@theme/ApiExplorer/FloatingButton";
import FormItem from "@theme/ApiExplorer/FormItem";
import FormSelect from "@theme/ApiExplorer/FormSelect";
import FormTextInput from "@theme/ApiExplorer/FormTextInput";
import { useTypedDispatch, useTypedSelector } from "@theme/ApiItem/hooks";
import { OPENAPI_SERVER } from "@theme/translationIds";

import { setServer, setServerVariable } from "@theme/ApiExplorer/Server/slice";

interface ServerProps {
labelId?: string;
}

function toLabel(key: string) {
return key.replace(/([A-Z])/g, " $1").replace(/^[a-z]/, (c) => c.toUpperCase());
}

function Server({ labelId }: ServerProps) {
const [isEditing, setIsEditing] = useState(false);
const value = useTypedSelector((state: any) => state.server.value);
const options = useTypedSelector((state: any) => state.server.options);
const dispatch = useTypedDispatch();

if (options.length <= 0) {
return null;
}

if (!value) {
dispatch(setServer(JSON.stringify(options[0])));
}

if (value) {
const urlExists = options.find((s: any) => s.url === value.url);
if (!urlExists) {
dispatch(setServer(JSON.stringify(options[0])));
}
}

if (!isEditing) {
let url = "";
if (value) {
url = value.url.replace(/\/$/, "");
if (value.variables) {
Object.keys(value.variables).forEach((variable) => {
url = url.replace(
`{${variable}}`,
value.variables?.[variable].default ?? ""
);
});
}
}
return (
<FloatingButton
onClick={() => setIsEditing(true)}
label={translate({ id: OPENAPI_SERVER.EDIT_BUTTON, message: "Edit" })}
>
<FormItem>
<span className="openapi-explorer__server-url" title={url}>
{url}
</span>
</FormItem>
</FloatingButton>
);
}

return (
<div className="openapi-explorer__server-container">
<div style={{ padding: "0.5rem" }}>
{options.length > 1 && (
<FormItem>
<FormSelect
ariaLabelledBy={labelId}
options={options.map((s: any) => s.url)}
onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {
dispatch(
setServer(
JSON.stringify(
options.filter((s: any) => s.url === e.target.value)[0]
)
)
);
}}
value={value?.url}
/>
</FormItem>
)}
{value?.variables &&
Object.keys(value.variables).map((key) => {
if (value.variables?.[key].enum !== undefined) {
return (
<FormItem key={key}>
<FormSelect
label={toLabel(key)}
options={value.variables[key].enum}
onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {
dispatch(
setServerVariable(
JSON.stringify({ key, value: e.target.value })
)
);
}}
value={value?.variables[key].default}
/>
</FormItem>
);
}
return (
<FormItem key={key}>
<FormTextInput
label={toLabel(key)}
placeholder={value.variables?.[key].default}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
dispatch(
setServerVariable(
JSON.stringify({ key, value: e.target.value })
)
);
}}
value={value?.variables?.[key].default}
/>
</FormItem>
);
})}
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
padding: "0.25rem 0.5rem 0.25rem",
}}
>
{value?.variables ? (
<button
style={{
background: "none",
border: "none",
padding: 0,
color: "var(--ifm-color-primary)",
cursor: "pointer",
fontSize: "var(--openapi-explorer-font-size-input)",
textDecoration: "underline",
}}
onClick={() => {
const original = options.find(
(s: any) => s.url === value.url
);
if (original) {
dispatch(setServer(JSON.stringify(original)));
}
}}
>
Reset to default
</button>
) : (
<span />
)}
<button
style={{
background: "var(--ifm-color-emphasis-900)",
border: "none",
borderRadius: "var(--ifm-global-radius)",
color: "var(--ifm-color-emphasis-100)",
cursor: "pointer",
padding: "0.2rem 0.5rem",
fontSize: "var(--openapi-explorer-font-size-input)",
}}
onClick={() => setIsEditing(false)}
>
Done
</button>
</div>
</div>
</div>
);
}

export default Server;
7 changes: 6 additions & 1 deletion static/openapi/changetracker-hub-8.1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ info:
title: ChangeTracker Hub
version: '8.1'
servers:
- url: https://localhost:5001/api
- url: '{serverUrl}'
description: Your Change Tracker server URL
variables:
serverUrl:
default: https://localhost:5001/api
description: 'Full base URL including /api (e.g., https://your-server/api)'
paths:
'/command/tasks/poll/{AgentId}':
get:
Expand Down
Loading