diff --git a/generator/tsconfig.json b/generator/tsconfig.json
index 8615cb56..dd5505d8 100644
--- a/generator/tsconfig.json
+++ b/generator/tsconfig.json
@@ -3,6 +3,9 @@
"compilerOptions": {
"incremental": true,
"noImplicitAny": false,
+ "strict": false,
+ "strictNullChecks": false,
+ "types": ["node"],
"baseUrl": ".",
"paths": {
"~/*": ["./*"]
diff --git a/src/components/NavigationAPI.jsx b/src/components/NavigationAPI.jsx
index 9bd200a5..fd5585a3 100644
--- a/src/components/NavigationAPI.jsx
+++ b/src/components/NavigationAPI.jsx
@@ -45,13 +45,18 @@ export const apiNavigation = [
title: 'Cloud Resources',
links: [
{ title: 'Ingress Ports', href: '/api/resources/ingress-ports' },
- { title: 'IDP (SCIM)', href: '/api/resources/idp' },
+ { title: 'IDP (Azure API)', href: '/api/resources/idp-azure-integrations' },
+ { title: 'IDP (Google API)', href: '/api/resources/idp-google-integrations' },
+ { title: 'IDP (Okta SCIM)', href: '/api/resources/idp-okta-scim-integrations' },
+ { title: 'IDP (SCIM Generic)', href: '/api/resources/idp-scim-integrations' },
{ title: 'Event Streaming', href: '/api/resources/event-streaming-integrations' },
{ title: 'EDR Peers', href: '/api/resources/edr-peers' },
{ title: 'EDR Falcon', href: '/api/resources/edr-falcon-integrations' },
+ { title: 'EDR FleetDM', href: '/api/resources/edr-fleetdm-integrations' },
{ title: 'EDR Huntress', href: '/api/resources/edr-huntress-integrations' },
{ title: 'EDR Intune', href: '/api/resources/edr-intune-integrations' },
{ title: 'EDR SentinelOne', href: '/api/resources/edr-sentinelone-integrations' },
+ { title: 'Notifications', href: '/api/resources/notifications' },
{ title: 'MSP', href: '/api/resources/msp' },
{ title: 'Invoice', href: '/api/resources/invoice' },
{ title: 'Usage', href: '/api/resources/usage' },
diff --git a/src/pages/ipa/resources/edr-fleetdm-integrations.mdx b/src/pages/ipa/resources/edr-fleetdm-integrations.mdx
new file mode 100644
index 00000000..5a7bccd7
--- /dev/null
+++ b/src/pages/ipa/resources/edr-fleetdm-integrations.mdx
@@ -0,0 +1,1732 @@
+export const title = 'EDR FleetDM Integrations'
+
+
+
+## Create EDR FleetDM Integration {{ tag: 'POST' , label: '/api/integrations/edr/fleetdm' }}
+
+
+
+ Creates a new EDR FleetDM integration
+
+ ### Request-Body Parameters
+
+
+
+ FleetDM server URL
+
+
+
+
+ FleetDM API token
+
+
+
+
+ The Groups this integrations applies to
+
+
+
+
+ The devices last sync requirement interval in hours. Minimum value is 24 hours
+
+
+
+
+ Indicates whether the integration is enabled
+
+
+
+
+
+ Attribute conditions to match when approving FleetDM hosts. Most attributes work with FleetDM's free/open-source version. Premium-only attributes are marked accordingly
+
+
+
+
+ Whether disk encryption (FileVault/BitLocker) must be enabled on the host
+
+
+
+
+ Maximum number of allowed failing policies. Use 0 to require all policies to pass
+
+
+
+
+ Maximum number of allowed vulnerable software on the host
+
+
+
+
+ Whether the host must be online (recently seen by Fleet)
+
+
+
+
+ List of FleetDM policy IDs that must be passing on the host. If any of these policies is failing, the host is non-compliant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/edr/fleetdm \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+});
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/edr/fleetdm',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/edr/fleetdm"
+payload = json.dumps({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/edr/fleetdm"
+ method := "POST"
+
+ payload := strings.NewReader(`{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/edr/fleetdm")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/edr/fleetdm")
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/edr/fleetdm',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_POSTFIELDS => '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": 123,
+ "account_id": "ch8i4ug6lnn4g9hqv7l0",
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "last_synced_at": "2023-05-15T10:30:00Z",
+ "created_by": {
+ "type": "string",
+ "description": "The user id that created the integration"
+ },
+ "created_at": "2023-05-15T10:30:00Z",
+ "updated_at": "2023-05-16T11:45:00Z",
+ "groups": [
+ {
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "name": "devs",
+ "peers_count": 2,
+ "resources_count": 5,
+ "issued": "api",
+ "peers": [
+ {
+ "id": "chacbco6lnnbn6cg5s90",
+ "name": "stage-host-1"
+ }
+ ],
+ "resources": [
+ {
+ "id": "chacdk86lnnboviihd7g",
+ "type": "host"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours."
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "integer",
+ "account_id": "string",
+ "api_url": "string",
+ "last_synced_at": "string",
+ "created_by": "string",
+ "created_at": "string",
+ "updated_at": "string",
+ "groups": [
+ {
+ "id": "string",
+ "name": "string",
+ "peers_count": "integer",
+ "resources_count": "integer",
+ "issued": "string",
+ "peers": [
+ {
+ "id": "string",
+ "name": "string"
+ }
+ ],
+ "resources": [
+ {
+ "id": "string",
+ "type": "string"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": "integer",
+ "enabled": "boolean",
+ "match_attributes": {
+ "disk_encryption_enabled": "boolean",
+ "failing_policies_count_max": "integer",
+ "vulnerable_software_count_max": "integer",
+ "status_online": "boolean",
+ "required_policies": [
+ "integer"
+ ]
+ }
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get EDR FleetDM Integration {{ tag: 'GET' , label: '/api/integrations/edr/fleetdm' }}
+
+
+
+ Retrieves a specific EDR FleetDM integration by its ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/edr/fleetdm \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/edr/fleetdm',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/edr/fleetdm"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/edr/fleetdm"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/edr/fleetdm")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/edr/fleetdm")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/edr/fleetdm',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": 123,
+ "account_id": "ch8i4ug6lnn4g9hqv7l0",
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "last_synced_at": "2023-05-15T10:30:00Z",
+ "created_by": {
+ "type": "string",
+ "description": "The user id that created the integration"
+ },
+ "created_at": "2023-05-15T10:30:00Z",
+ "updated_at": "2023-05-16T11:45:00Z",
+ "groups": [
+ {
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "name": "devs",
+ "peers_count": 2,
+ "resources_count": 5,
+ "issued": "api",
+ "peers": [
+ {
+ "id": "chacbco6lnnbn6cg5s90",
+ "name": "stage-host-1"
+ }
+ ],
+ "resources": [
+ {
+ "id": "chacdk86lnnboviihd7g",
+ "type": "host"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours."
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "integer",
+ "account_id": "string",
+ "api_url": "string",
+ "last_synced_at": "string",
+ "created_by": "string",
+ "created_at": "string",
+ "updated_at": "string",
+ "groups": [
+ {
+ "id": "string",
+ "name": "string",
+ "peers_count": "integer",
+ "resources_count": "integer",
+ "issued": "string",
+ "peers": [
+ {
+ "id": "string",
+ "name": "string"
+ }
+ ],
+ "resources": [
+ {
+ "id": "string",
+ "type": "string"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": "integer",
+ "enabled": "boolean",
+ "match_attributes": {
+ "disk_encryption_enabled": "boolean",
+ "failing_policies_count_max": "integer",
+ "vulnerable_software_count_max": "integer",
+ "status_online": "boolean",
+ "required_policies": [
+ "integer"
+ ]
+ }
+}
+```
+
+
+
+
+
+
+---
+
+
+## Update EDR FleetDM Integration {{ tag: 'PUT' , label: '/api/integrations/edr/fleetdm' }}
+
+
+
+ Updates an existing EDR FleetDM Integration.
+
+ ### Request-Body Parameters
+
+
+
+ FleetDM server URL
+
+
+
+
+ FleetDM API token
+
+
+
+
+ The Groups this integrations applies to
+
+
+
+
+ The devices last sync requirement interval in hours. Minimum value is 24 hours
+
+
+
+
+ Indicates whether the integration is enabled
+
+
+
+
+
+ Attribute conditions to match when approving FleetDM hosts. Most attributes work with FleetDM's free/open-source version. Premium-only attributes are marked accordingly
+
+
+
+
+ Whether disk encryption (FileVault/BitLocker) must be enabled on the host
+
+
+
+
+ Maximum number of allowed failing policies. Use 0 to require all policies to pass
+
+
+
+
+ Maximum number of allowed vulnerable software on the host
+
+
+
+
+ Whether the host must be online (recently seen by Fleet)
+
+
+
+
+ List of FleetDM policy IDs that must be passing on the host. If any of these policies is failing, the host is non-compliant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X PUT https://api.netbird.io/api/integrations/edr/fleetdm \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+});
+let config = {
+ method: 'put',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/edr/fleetdm',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/edr/fleetdm"
+payload = json.dumps({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("PUT", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/edr/fleetdm"
+ method := "PUT"
+
+ payload := strings.NewReader(`{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/edr/fleetdm")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Put.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/edr/fleetdm")
+ .method("PUT", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/edr/fleetdm',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'PUT',
+ CURLOPT_POSTFIELDS => '{
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "api_token": {
+ "type": "string",
+ "description": "FleetDM API token"
+ },
+ "groups": [
+ {
+ "type": "string"
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours. Minimum value is 24 hours",
+ "minimum": 24
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": 123,
+ "account_id": "ch8i4ug6lnn4g9hqv7l0",
+ "api_url": {
+ "type": "string",
+ "description": "FleetDM server URL"
+ },
+ "last_synced_at": "2023-05-15T10:30:00Z",
+ "created_by": {
+ "type": "string",
+ "description": "The user id that created the integration"
+ },
+ "created_at": "2023-05-15T10:30:00Z",
+ "updated_at": "2023-05-16T11:45:00Z",
+ "groups": [
+ {
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "name": "devs",
+ "peers_count": 2,
+ "resources_count": 5,
+ "issued": "api",
+ "peers": [
+ {
+ "id": "chacbco6lnnbn6cg5s90",
+ "name": "stage-host-1"
+ }
+ ],
+ "resources": [
+ {
+ "id": "chacdk86lnnboviihd7g",
+ "type": "host"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": {
+ "type": "integer",
+ "description": "The devices last sync requirement interval in hours."
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Indicates whether the integration is enabled",
+ "default": true
+ },
+ "match_attributes": {
+ "disk_encryption_enabled": {
+ "type": "boolean",
+ "description": "Whether disk encryption (FileVault/BitLocker) must be enabled on the host"
+ },
+ "failing_policies_count_max": 0,
+ "vulnerable_software_count_max": 0,
+ "status_online": {
+ "type": "boolean",
+ "description": "Whether the host must be online (recently seen by Fleet)"
+ },
+ "required_policies": [
+ 1,
+ 5,
+ 12
+ ]
+ }
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "integer",
+ "account_id": "string",
+ "api_url": "string",
+ "last_synced_at": "string",
+ "created_by": "string",
+ "created_at": "string",
+ "updated_at": "string",
+ "groups": [
+ {
+ "id": "string",
+ "name": "string",
+ "peers_count": "integer",
+ "resources_count": "integer",
+ "issued": "string",
+ "peers": [
+ {
+ "id": "string",
+ "name": "string"
+ }
+ ],
+ "resources": [
+ {
+ "id": "string",
+ "type": "string"
+ }
+ ]
+ }
+ ],
+ "last_synced_interval": "integer",
+ "enabled": "boolean",
+ "match_attributes": {
+ "disk_encryption_enabled": "boolean",
+ "failing_policies_count_max": "integer",
+ "vulnerable_software_count_max": "integer",
+ "status_online": "boolean",
+ "required_policies": [
+ "integer"
+ ]
+ }
+}
+```
+
+
+
+
+
+
+---
+
+
+## Delete EDR FleetDM Integration {{ tag: 'DELETE' , label: '/api/integrations/edr/fleetdm' }}
+
+
+
+ Deletes an EDR FleetDM Integration by its ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X DELETE https://api.netbird.io/api/integrations/edr/fleetdm \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'delete',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/edr/fleetdm',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/edr/fleetdm"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("DELETE", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/edr/fleetdm"
+ method := "DELETE"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/edr/fleetdm")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Delete.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/edr/fleetdm")
+ .method("DELETE")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/edr/fleetdm',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'DELETE',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "example": {}
+}
+```
+
+
+
+
+
+
+---
diff --git a/src/pages/ipa/resources/idp-azure-integrations.mdx b/src/pages/ipa/resources/idp-azure-integrations.mdx
new file mode 100644
index 00000000..03dc2e23
--- /dev/null
+++ b/src/pages/ipa/resources/idp-azure-integrations.mdx
@@ -0,0 +1,1728 @@
+export const title = 'IDP Azure Integrations'
+
+
+
+## Create Azure IDP Integration {{ tag: 'POST' , label: '/api/integrations/azure-idp' }}
+
+
+
+ Creates a new Azure AD IDP integration
+
+ ### Request-Body Parameters
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+ Base64-encoded Azure AD client secret
+
+
+
+
+ Azure AD application (client) ID
+
+
+
+
+ Azure AD tenant ID
+
+
+
+
+ Sync interval in seconds (minimum 300). Defaults to 300 if not specified.
+
+
+
+
+ Azure host domain for the Graph API
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/azure-idp \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+});
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp"
+payload = json.dumps({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp"
+ method := "POST"
+
+ payload := strings.NewReader(`{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp")
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_POSTFIELDS => '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": "c2VjcmV0...",
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com"
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "client_id": "string",
+ "tenant_id": "string",
+ "sync_interval": "integer",
+ "host": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get All Azure IDP Integrations {{ tag: 'GET' , label: '/api/integrations/azure-idp' }}
+
+
+
+ Retrieves all Azure AD IDP integrations for the authenticated account
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/azure-idp \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "client_id": "string",
+ "tenant_id": "string",
+ "sync_interval": "integer",
+ "host": "string",
+ "last_synced_at": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
+
+
+## Get Azure IDP Integration {{ tag: 'GET' , label: '/api/integrations/azure-idp/{id}' }}
+
+
+
+ Retrieves an Azure IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/azure-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp/{id}"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp/{id}")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "client_id": "string",
+ "tenant_id": "string",
+ "sync_interval": "integer",
+ "host": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Update Azure IDP Integration {{ tag: 'PUT' , label: '/api/integrations/azure-idp/{id}' }}
+
+
+
+ Updates an existing Azure AD IDP integration.
+
+ ### Request-Body Parameters
+
+
+
+ Whether the integration is enabled
+
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+ Base64-encoded Azure AD client secret
+
+
+
+
+ Azure AD application (client) ID
+
+
+
+
+ Azure AD tenant ID
+
+
+
+
+ Sync interval in seconds (minimum 300)
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X PUT https://api.netbird.io/api/integrations/azure-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+});
+let config = {
+ method: 'put',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp/{id}"
+payload = json.dumps({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("PUT", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp/{id}"
+ method := "PUT"
+
+ payload := strings.NewReader(`{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Put.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp/{id}")
+ .method("PUT", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'PUT',
+ CURLOPT_POSTFIELDS => '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "client_secret": {
+ "type": "string",
+ "description": "Base64-encoded Azure AD client secret"
+ },
+ "client_id": {
+ "type": "string",
+ "description": "Azure AD application (client) ID"
+ },
+ "tenant_id": {
+ "type": "string",
+ "description": "Azure AD tenant ID"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "client_id": "12345678-1234-1234-1234-123456789012",
+ "tenant_id": "87654321-4321-4321-4321-210987654321",
+ "sync_interval": 300,
+ "host": "microsoft.com",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "client_id": "string",
+ "tenant_id": "string",
+ "sync_interval": "integer",
+ "host": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Delete Azure IDP Integration {{ tag: 'DELETE' , label: '/api/integrations/azure-idp/{id}' }}
+
+
+
+ Deletes an Azure IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X DELETE https://api.netbird.io/api/integrations/azure-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'delete',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("DELETE", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp/{id}"
+ method := "DELETE"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Delete.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp/{id}")
+ .method("DELETE")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'DELETE',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "example": {}
+}
+```
+
+
+
+
+
+
+---
+
+
+## Sync Azure IDP Integration {{ tag: 'POST' , label: '/api/integrations/azure-idp/{id}/sync' }}
+
+
+
+ Triggers a manual synchronization for an Azure IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/azure-idp/{id}/sync \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp/{id}/sync',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp/{id}/sync"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp/{id}/sync"
+ method := "POST"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp/{id}/sync")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp/{id}/sync")
+ .method("POST")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp/{id}/sync',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "result": "ok"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "result": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get Azure Integration Sync Logs {{ tag: 'GET' , label: '/api/integrations/azure-idp/{id}/logs' }}
+
+
+
+ Retrieves synchronization logs for an Azure IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/azure-idp/{id}/logs \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/azure-idp/{id}/logs',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/azure-idp/{id}/logs"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/azure-idp/{id}/logs"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/azure-idp/{id}/logs")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/azure-idp/{id}/logs")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/azure-idp/{id}/logs',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "id": 123,
+ "level": "info",
+ "timestamp": "2023-05-15T10:30:00Z",
+ "message": "Successfully synchronized users and groups"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "id": "integer",
+ "level": "string",
+ "timestamp": "string",
+ "message": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
diff --git a/src/pages/ipa/resources/idp-google-integrations.mdx b/src/pages/ipa/resources/idp-google-integrations.mdx
new file mode 100644
index 00000000..d0c7c8ac
--- /dev/null
+++ b/src/pages/ipa/resources/idp-google-integrations.mdx
@@ -0,0 +1,1655 @@
+export const title = 'IDP Google Integrations'
+
+
+
+## Create Google IDP Integration {{ tag: 'POST' , label: '/api/integrations/google-idp' }}
+
+
+
+ Creates a new Google Workspace IDP integration
+
+ ### Request-Body Parameters
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+ Base64-encoded Google service account key
+
+
+
+
+ Customer ID from Google Workspace Account Settings
+
+
+
+
+ Sync interval in seconds (minimum 300). Defaults to 300 if not specified.
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/google-idp \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+});
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp"
+payload = json.dumps({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp"
+ method := "POST"
+
+ payload := strings.NewReader(`{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp")
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_POSTFIELDS => '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": "eyJ0eXBlIjoic2VydmljZV9hY2NvdW50Ii...",
+ "customer_id": "C01234567",
+ "sync_interval": 300
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "customer_id": "C01234567",
+ "sync_interval": 300,
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "customer_id": "string",
+ "sync_interval": "integer",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get All Google IDP Integrations {{ tag: 'GET' , label: '/api/integrations/google-idp' }}
+
+
+
+ Retrieves all Google Workspace IDP integrations for the authenticated account
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/google-idp \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "customer_id": "C01234567",
+ "sync_interval": 300,
+ "last_synced_at": "2023-05-15T10:30:00Z"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "customer_id": "string",
+ "sync_interval": "integer",
+ "last_synced_at": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
+
+
+## Get Google IDP Integration {{ tag: 'GET' , label: '/api/integrations/google-idp/{id}' }}
+
+
+
+ Retrieves a Google IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/google-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp/{id}"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp/{id}")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "customer_id": "C01234567",
+ "sync_interval": 300,
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "customer_id": "string",
+ "sync_interval": "integer",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Update Google IDP Integration {{ tag: 'PUT' , label: '/api/integrations/google-idp/{id}' }}
+
+
+
+ Updates an existing Google Workspace IDP integration.
+
+ ### Request-Body Parameters
+
+
+
+ Whether the integration is enabled
+
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+ Base64-encoded Google service account key
+
+
+
+
+ Customer ID from Google Workspace Account Settings
+
+
+
+
+ Sync interval in seconds (minimum 300)
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X PUT https://api.netbird.io/api/integrations/google-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+});
+let config = {
+ method: 'put',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp/{id}"
+payload = json.dumps({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("PUT", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp/{id}"
+ method := "PUT"
+
+ payload := strings.NewReader(`{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Put.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp/{id}")
+ .method("PUT", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'PUT',
+ CURLOPT_POSTFIELDS => '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "service_account_key": {
+ "type": "string",
+ "description": "Base64-encoded Google service account key"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "Customer ID from Google Workspace Account Settings"
+ },
+ "sync_interval": {
+ "type": "integer",
+ "description": "Sync interval in seconds (minimum 300)",
+ "minimum": 300
+ }
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "customer_id": "C01234567",
+ "sync_interval": 300,
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "customer_id": "string",
+ "sync_interval": "integer",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Delete Google IDP Integration {{ tag: 'DELETE' , label: '/api/integrations/google-idp/{id}' }}
+
+
+
+ Deletes a Google IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X DELETE https://api.netbird.io/api/integrations/google-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'delete',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("DELETE", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp/{id}"
+ method := "DELETE"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Delete.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp/{id}")
+ .method("DELETE")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'DELETE',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "example": {}
+}
+```
+
+
+
+
+
+
+---
+
+
+## Sync Google IDP Integration {{ tag: 'POST' , label: '/api/integrations/google-idp/{id}/sync' }}
+
+
+
+ Triggers a manual synchronization for a Google IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/google-idp/{id}/sync \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp/{id}/sync',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp/{id}/sync"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp/{id}/sync"
+ method := "POST"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp/{id}/sync")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp/{id}/sync")
+ .method("POST")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp/{id}/sync',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "result": "ok"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "result": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get Google Integration Sync Logs {{ tag: 'GET' , label: '/api/integrations/google-idp/{id}/logs' }}
+
+
+
+ Retrieves synchronization logs for a Google IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/google-idp/{id}/logs \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/google-idp/{id}/logs',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/google-idp/{id}/logs"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/google-idp/{id}/logs"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/google-idp/{id}/logs")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/google-idp/{id}/logs")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/google-idp/{id}/logs',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "id": 123,
+ "level": "info",
+ "timestamp": "2023-05-15T10:30:00Z",
+ "message": "Successfully synchronized users and groups"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "id": "integer",
+ "level": "string",
+ "timestamp": "string",
+ "message": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
diff --git a/src/pages/ipa/resources/idp-okta-scim-integrations.mdx b/src/pages/ipa/resources/idp-okta-scim-integrations.mdx
new file mode 100644
index 00000000..5c5eff63
--- /dev/null
+++ b/src/pages/ipa/resources/idp-okta-scim-integrations.mdx
@@ -0,0 +1,1517 @@
+export const title = 'IDP Okta SCIM Integrations'
+
+
+
+## Create Okta SCIM IDP Integration {{ tag: 'POST' , label: '/api/integrations/okta-scim-idp' }}
+
+
+
+ Creates a new Okta SCIM IDP integration
+
+ ### Request-Body Parameters
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+ The Okta enterprise connection name on Auth0
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/okta-scim-idp \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+});
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp"
+payload = json.dumps({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp"
+ method := "POST"
+
+ payload := strings.NewReader(`{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp")
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_POSTFIELDS => '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "connection_name": "my-okta-connection"
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "auth_token": "nbs_abc***********************************",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "auth_token": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get All Okta SCIM IDP Integrations {{ tag: 'GET' , label: '/api/integrations/okta-scim-idp' }}
+
+
+
+ Retrieves all Okta SCIM IDP integrations for the authenticated account
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/okta-scim-idp \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "auth_token": "nbs_abc***********************************",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "auth_token": "string",
+ "last_synced_at": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
+
+
+## Get Okta SCIM IDP Integration {{ tag: 'GET' , label: '/api/integrations/okta-scim-idp/{id}' }}
+
+
+
+ Retrieves an Okta SCIM IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/okta-scim-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "auth_token": "nbs_abc***********************************",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "auth_token": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Update Okta SCIM IDP Integration {{ tag: 'PUT' , label: '/api/integrations/okta-scim-idp/{id}' }}
+
+
+
+ Updates an existing Okta SCIM IDP integration.
+
+ ### Request-Body Parameters
+
+
+
+ Whether the integration is enabled
+
+
+
+
+ List of start_with string patterns for groups to sync
+
+
+
+
+ List of start_with string patterns for groups which users to sync
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X PUT https://api.netbird.io/api/integrations/okta-scim-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+});
+let config = {
+ method: 'put',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+payload = json.dumps({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("PUT", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+ method := "PUT"
+
+ payload := strings.NewReader(`{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Put.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+ .method("PUT", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'PUT',
+ CURLOPT_POSTFIELDS => '{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ]
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "enabled": true,
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
+ "id": 1,
+ "auth_token": "nbs_abc***********************************",
+ "last_synced_at": "2023-05-15T10:30:00Z"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "enabled": "boolean",
+ "group_prefixes": [
+ "string"
+ ],
+ "user_group_prefixes": [
+ "string"
+ ],
+ "id": "integer",
+ "auth_token": "string",
+ "last_synced_at": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Delete Okta SCIM IDP Integration {{ tag: 'DELETE' , label: '/api/integrations/okta-scim-idp/{id}' }}
+
+
+
+ Deletes an Okta SCIM IDP integration by ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X DELETE https://api.netbird.io/api/integrations/okta-scim-idp/{id} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'delete',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp/{id}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("DELETE", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp/{id}"
+ method := "DELETE"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Delete.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp/{id}")
+ .method("DELETE")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp/{id}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'DELETE',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "example": {}
+}
+```
+
+
+
+
+
+
+---
+
+
+## Regenerate Okta SCIM Token {{ tag: 'POST' , label: '/api/integrations/okta-scim-idp/{id}/token' }}
+
+
+
+ Regenerates the SCIM API token for an Okta SCIM IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp/{id}/token',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token"
+ method := "POST"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token")
+ .method("POST")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp/{id}/token',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "auth_token": "nbs_F3f0d..."
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "auth_token": "string"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get Okta SCIM Integration Sync Logs {{ tag: 'GET' , label: '/api/integrations/okta-scim-idp/{id}/logs' }}
+
+
+
+ Retrieves synchronization logs for an Okta SCIM IDP integration.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/okta-scim-idp/{id}/logs',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/okta-scim-idp/{id}/logs',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "id": 123,
+ "level": "info",
+ "timestamp": "2023-05-15T10:30:00Z",
+ "message": "Successfully synchronized users and groups"
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "id": "integer",
+ "level": "string",
+ "timestamp": "string",
+ "message": "string"
+ }
+]
+```
+
+
+
+
+
+
+---
diff --git a/src/pages/ipa/resources/idp.mdx b/src/pages/ipa/resources/idp-scim-integrations.mdx
similarity index 94%
rename from src/pages/ipa/resources/idp.mdx
rename to src/pages/ipa/resources/idp-scim-integrations.mdx
index e5443e03..ed47fa85 100644
--- a/src/pages/ipa/resources/idp.mdx
+++ b/src/pages/ipa/resources/idp-scim-integrations.mdx
@@ -1,4 +1,4 @@
-export const title = 'IDP'
+export const title = 'IDP SCIM Integrations'
@@ -10,24 +10,24 @@ export const title = 'IDP'
### Request-Body Parameters
-
+
- The connection prefix used for the SCIM provider
+ List of start_with string patterns for groups to sync
-
+
- Name of the SCIM identity provider
+ List of start_with string patterns for groups which users to sync
-
+
- List of start_with string patterns for groups to sync
+ The connection prefix used for the SCIM provider
-
+
- List of start_with string patterns for groups which users to sync
+ Name of the SCIM identity provider
@@ -43,6 +43,13 @@ curl -X POST https://api.netbird.io/api/integrations/scim-idp \
-H 'Content-Type: application/json' \
-H 'Authorization: Token ' \
--data-raw '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -50,20 +57,20 @@ curl -X POST https://api.netbird.io/api/integrations/scim-idp \
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
}'
```
```js
const axios = require('axios');
let data = JSON.stringify({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -71,14 +78,7 @@ let data = JSON.stringify({
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
});
let config = {
method: 'post',
@@ -107,6 +107,13 @@ import json
url = "https://api.netbird.io/api/integrations/scim-idp"
payload = json.dumps({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -114,14 +121,7 @@ payload = json.dumps({
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
})
headers = {
'Content-Type': 'application/json',
@@ -150,6 +150,13 @@ func main() {
method := "POST"
payload := strings.NewReader(`{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -157,14 +164,7 @@ func main() {
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
}`)
client := &http.Client {
}
@@ -211,6 +211,13 @@ request["Accept"] = "application/json"
request["Authorization"] = "Token "
request.body = JSON.dump({
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -218,14 +225,7 @@ request.body = JSON.dump({
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
})
response = https.request(request)
puts response.read_body
@@ -236,6 +236,13 @@ OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -243,14 +250,7 @@ RequestBody body = RequestBody.create(mediaType, '{
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
}');
Request request = new Request.Builder()
.url("https://api.netbird.io/api/integrations/scim-idp")
@@ -277,6 +277,13 @@ curl_setopt_array($curl, array(
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
+ "group_prefixes": [
+ "Engineering",
+ "Sales"
+ ],
+ "user_group_prefixes": [
+ "Users"
+ ],
"prefix": {
"type": "string",
"description": "The connection prefix used for the SCIM provider"
@@ -284,14 +291,7 @@ curl_setopt_array($curl, array(
"provider": {
"type": "string",
"description": "Name of the SCIM identity provider"
- },
- "group_prefixes": [
- "Engineering",
- "Sales"
- ],
- "user_group_prefixes": [
- "Users"
- ]
+ }
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
@@ -312,12 +312,7 @@ echo $response;
```json {{ title: 'Example' }}
{
- "id": 123,
"enabled": true,
- "provider": {
- "type": "string",
- "description": "Name of the SCIM identity provider"
- },
"group_prefixes": [
"Engineering",
"Sales"
@@ -325,21 +320,31 @@ echo $response;
"user_group_prefixes": [
"Users"
],
+ "id": 123,
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ },
+ "provider": {
+ "type": "string",
+ "description": "Name of the SCIM identity provider"
+ },
"auth_token": "nbs_abc***********************************",
"last_synced_at": "2023-05-15T10:30:00Z"
}
```
```json {{ title: 'Schema' }}
{
- "id": "integer",
"enabled": "boolean",
- "provider": "string",
"group_prefixes": [
"string"
],
"user_group_prefixes": [
"string"
],
+ "id": "integer",
+ "prefix": "string",
+ "provider": "string",
"auth_token": "string",
"last_synced_at": "string"
}
@@ -513,12 +518,7 @@ echo $response;
```json {{ title: 'Example' }}
[
{
- "id": 123,
"enabled": true,
- "provider": {
- "type": "string",
- "description": "Name of the SCIM identity provider"
- },
"group_prefixes": [
"Engineering",
"Sales"
@@ -526,6 +526,15 @@ echo $response;
"user_group_prefixes": [
"Users"
],
+ "id": 123,
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ },
+ "provider": {
+ "type": "string",
+ "description": "Name of the SCIM identity provider"
+ },
"auth_token": "nbs_abc***********************************",
"last_synced_at": "2023-05-15T10:30:00Z"
}
@@ -534,15 +543,16 @@ echo $response;
```json {{ title: 'Schema' }}
[
{
- "id": "integer",
"enabled": "boolean",
- "provider": "string",
"group_prefixes": [
"string"
],
"user_group_prefixes": [
"string"
],
+ "id": "integer",
+ "prefix": "string",
+ "provider": "string",
"auth_token": "string",
"last_synced_at": "string"
}
@@ -716,12 +726,7 @@ echo $response;
```json {{ title: 'Example' }}
{
- "id": 123,
"enabled": true,
- "provider": {
- "type": "string",
- "description": "Name of the SCIM identity provider"
- },
"group_prefixes": [
"Engineering",
"Sales"
@@ -729,21 +734,31 @@ echo $response;
"user_group_prefixes": [
"Users"
],
+ "id": 123,
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ },
+ "provider": {
+ "type": "string",
+ "description": "Name of the SCIM identity provider"
+ },
"auth_token": "nbs_abc***********************************",
"last_synced_at": "2023-05-15T10:30:00Z"
}
```
```json {{ title: 'Schema' }}
{
- "id": "integer",
"enabled": "boolean",
- "provider": "string",
"group_prefixes": [
"string"
],
"user_group_prefixes": [
"string"
],
+ "id": "integer",
+ "prefix": "string",
+ "provider": "string",
"auth_token": "string",
"last_synced_at": "string"
}
@@ -767,7 +782,7 @@ echo $response;
- Indicates whether the integration is enabled
+ Whether the integration is enabled
@@ -779,6 +794,11 @@ echo $response;
List of start_with string patterns for groups which users to sync
+
+
+
+ The connection prefix used for the SCIM provider
+
@@ -800,7 +820,11 @@ curl -X PUT https://api.netbird.io/api/integrations/scim-idp/{id} \
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
}'
```
@@ -814,7 +838,11 @@ let data = JSON.stringify({
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
});
let config = {
method: 'put',
@@ -850,7 +878,11 @@ payload = json.dumps({
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
})
headers = {
'Content-Type': 'application/json',
@@ -886,7 +918,11 @@ func main() {
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
}`)
client := &http.Client {
}
@@ -940,7 +976,11 @@ request.body = JSON.dump({
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
})
response = https.request(request)
puts response.read_body
@@ -958,7 +998,11 @@ RequestBody body = RequestBody.create(mediaType, '{
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
}');
Request request = new Request.Builder()
.url("https://api.netbird.io/api/integrations/scim-idp/{id}")
@@ -992,7 +1036,11 @@ curl_setopt_array($curl, array(
],
"user_group_prefixes": [
"Users"
- ]
+ ],
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ }
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
@@ -1013,12 +1061,7 @@ echo $response;
```json {{ title: 'Example' }}
{
- "id": 123,
"enabled": true,
- "provider": {
- "type": "string",
- "description": "Name of the SCIM identity provider"
- },
"group_prefixes": [
"Engineering",
"Sales"
@@ -1026,21 +1069,31 @@ echo $response;
"user_group_prefixes": [
"Users"
],
+ "id": 123,
+ "prefix": {
+ "type": "string",
+ "description": "The connection prefix used for the SCIM provider"
+ },
+ "provider": {
+ "type": "string",
+ "description": "Name of the SCIM identity provider"
+ },
"auth_token": "nbs_abc***********************************",
"last_synced_at": "2023-05-15T10:30:00Z"
}
```
```json {{ title: 'Schema' }}
{
- "id": "integer",
"enabled": "boolean",
- "provider": "string",
"group_prefixes": [
"string"
],
"user_group_prefixes": [
"string"
],
+ "id": "integer",
+ "prefix": "string",
+ "provider": "string",
"auth_token": "string",
"last_synced_at": "string"
}
diff --git a/src/pages/ipa/resources/notifications.mdx b/src/pages/ipa/resources/notifications.mdx
new file mode 100644
index 00000000..4add91b9
--- /dev/null
+++ b/src/pages/ipa/resources/notifications.mdx
@@ -0,0 +1,1727 @@
+export const title = 'Notifications'
+
+
+
+## List Notification Event Types {{ tag: 'GET' , label: '/api/integrations/notifications/types' }}
+
+
+
+ Returns a map of all supported activity event type codes to their
+human-readable descriptions. Use these codes when configuring
+`event_types` on notification channels.
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/notifications/types \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/types',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/types"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/types"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/types")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/types")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/types',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "user.join": "User joined"
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "description": "A map of event type codes to their human-readable descriptions.",
+ "additionalProperties": "string",
+ "example": {
+ "user.join": "User joined"
+ }
+}
+```
+
+
+
+
+
+
+---
+
+
+## List Notification Channels {{ tag: 'GET' , label: '/api/integrations/notifications/channels' }}
+
+
+
+ Retrieves all notification channels configured for the authenticated account.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/notifications/channels \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/channels',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/channels"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/channels"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/channels")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/channels")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/channels',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+[
+ {
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+ }
+]
+```
+```json {{ title: 'Schema' }}
+[
+ {
+ "id": "string",
+ "type": "string",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "string"
+ ]
+ },
+ {
+ "url": "string",
+ "headers": {
+ "type": "object",
+ "additionalProperties": "string",
+ "description": "Custom HTTP headers sent with each webhook request.\nValues are write-only; in GET responses all values are masked.\n",
+ "example": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "string"
+ ],
+ "enabled": "boolean"
+ }
+]
+```
+
+
+
+
+
+
+---
+
+
+## Create Notification Channel {{ tag: 'POST' , label: '/api/integrations/notifications/channels' }}
+
+
+
+ Creates a new notification channel for the authenticated account.
+Supported channel types are `email` and `webhook`.
+
+
+ ### Request-Body Parameters
+
+
+
+ The type of notification channel.
+
+
+
+
+ Channel-specific target configuration. The shape depends on the `type` field:
+\- `email`: requires an `EmailTarget` object
+\- `webhook`: requires a `WebhookTarget` object
+
+
+
+
+
+ List of activity event type codes this channel subscribes to.
+
+
+
+
+ Whether this notification channel is active.
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X POST https://api.netbird.io/api/integrations/notifications/channels \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+});
+let config = {
+ method: 'post',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/channels',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/channels"
+payload = json.dumps({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("POST", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/channels"
+ method := "POST"
+
+ payload := strings.NewReader(`{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/channels")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Post.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/channels")
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/channels',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'POST',
+ CURLOPT_POSTFIELDS => '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "string",
+ "type": "string",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "string"
+ ]
+ },
+ {
+ "url": "string",
+ "headers": {
+ "type": "object",
+ "additionalProperties": "string",
+ "description": "Custom HTTP headers sent with each webhook request.\nValues are write-only; in GET responses all values are masked.\n",
+ "example": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "string"
+ ],
+ "enabled": "boolean"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Get Notification Channel {{ tag: 'GET' , label: '/api/integrations/notifications/channels/{channelId}' }}
+
+
+
+ Retrieves a specific notification channel by its ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X GET https://api.netbird.io/api/integrations/notifications/channels/{channelId} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'get',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/channels/{channelId}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("GET", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+ method := "GET"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/channels/{channelId}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "string",
+ "type": "string",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "string"
+ ]
+ },
+ {
+ "url": "string",
+ "headers": {
+ "type": "object",
+ "additionalProperties": "string",
+ "description": "Custom HTTP headers sent with each webhook request.\nValues are write-only; in GET responses all values are masked.\n",
+ "example": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "string"
+ ],
+ "enabled": "boolean"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Update Notification Channel {{ tag: 'PUT' , label: '/api/integrations/notifications/channels/{channelId}' }}
+
+
+
+ Updates an existing notification channel.
+
+ ### Request-Body Parameters
+
+
+
+ The type of notification channel.
+
+
+
+
+ Channel-specific target configuration. The shape depends on the `type` field:
+\- `email`: requires an `EmailTarget` object
+\- `webhook`: requires a `WebhookTarget` object
+
+
+
+
+
+ List of activity event type codes this channel subscribes to.
+
+
+
+
+ Whether this notification channel is active.
+
+
+
+
+
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X PUT https://api.netbird.io/api/integrations/notifications/channels/{channelId} \
+-H 'Accept: application/json' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Token ' \
+--data-raw '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}'
+```
+
+```js
+const axios = require('axios');
+let data = JSON.stringify({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+});
+let config = {
+ method: 'put',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/channels/{channelId}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Token '
+ },
+ data : data
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+payload = json.dumps({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+})
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("PUT", url, headers=headers, data=payload)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+ method := "PUT"
+
+ payload := strings.NewReader(`{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}`)
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, payload)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Content-Type", "application/json")
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Put.new(url)
+request["Content-Type"] = "application/json"
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+request.body = JSON.dump({
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+})
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+MediaType mediaType = MediaType.parse("application/json");
+RequestBody body = RequestBody.create(mediaType, '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}');
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+ .method("PUT", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/channels/{channelId}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'PUT',
+ CURLOPT_POSTFIELDS => '{
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: requires an `EmailTarget` object\n- `webhook`: requires a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}',
+ CURLOPT_HTTPHEADER => array(
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{
+ "id": "ch8i4ug6lnn4g9hqv7m0",
+ "type": "email",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "admin@example.com",
+ "ops@example.com"
+ ]
+ },
+ {
+ "url": "https://hooks.example.com/netbird",
+ "headers": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "user.join",
+ "peer.user.add",
+ "peer.login.expire"
+ ],
+ "enabled": true
+}
+```
+```json {{ title: 'Schema' }}
+{
+ "id": "string",
+ "type": "string",
+ "target": {
+ "description": "Channel-specific target configuration. The shape depends on the `type` field:\n- `email`: an `EmailTarget` object\n- `webhook`: a `WebhookTarget` object\n",
+ "oneOf": [
+ {
+ "emails": [
+ "string"
+ ]
+ },
+ {
+ "url": "string",
+ "headers": {
+ "type": "object",
+ "additionalProperties": "string",
+ "description": "Custom HTTP headers sent with each webhook request.\nValues are write-only; in GET responses all values are masked.\n",
+ "example": {
+ "Authorization": "Bearer token",
+ "X-Webhook-Secret": "secret"
+ }
+ }
+ }
+ ]
+ },
+ "event_types": [
+ "string"
+ ],
+ "enabled": "boolean"
+}
+```
+
+
+
+
+
+
+---
+
+
+## Delete Notification Channel {{ tag: 'DELETE' , label: '/api/integrations/notifications/channels/{channelId}' }}
+
+
+
+ Deletes a notification channel by its ID.
+
+
+
+
+```bash {{ title: 'cURL' }}
+curl -X DELETE https://api.netbird.io/api/integrations/notifications/channels/{channelId} \
+-H 'Accept: application/json' \
+-H 'Authorization: Token '
+```
+
+```js
+const axios = require('axios');
+
+let config = {
+ method: 'delete',
+ maxBodyLength: Infinity,
+ url: '/api/integrations/notifications/channels/{channelId}',
+ headers: {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+ }
+};
+
+axios(config)
+.then((response) => {
+ console.log(JSON.stringify(response.data));
+})
+.catch((error) => {
+ console.log(error);
+});
+```
+
+```python
+import requests
+import json
+
+url = "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Token '
+}
+
+response = requests.request("DELETE", url, headers=headers)
+
+print(response.text)
+```
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+ "net/http"
+ "io/ioutil"
+)
+
+func main() {
+
+ url := "https://api.netbird.io/api/integrations/notifications/channels/{channelId}"
+ method := "DELETE"
+
+ client := &http.Client {
+ }
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ {
+
+ req.Header.Add("Accept", "application/json")
+ req.Header.Add("Authorization", "Token ")
+
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer res.Body.Close()
+
+ body, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ fmt.Println(string(body))
+}
+```
+
+```ruby
+require "uri"
+require "json"
+require "net/http"
+
+url = URI("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+
+https = Net::HTTP.new(url.host, url.port)
+https.use_ssl = true
+
+request = Net::HTTP::Delete.new(url)
+request["Accept"] = "application/json"
+request["Authorization"] = "Token "
+
+response = https.request(request)
+puts response.read_body
+```
+
+```java
+OkHttpClient client = new OkHttpClient().newBuilder()
+ .build();
+
+Request request = new Request.Builder()
+ .url("https://api.netbird.io/api/integrations/notifications/channels/{channelId}")
+ .method("DELETE")
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization: Token ")
+ .build();
+Response response = client.newCall(request).execute();
+```
+
+```php
+ 'https://api.netbird.io/api/integrations/notifications/channels/{channelId}',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => '',
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => 'DELETE',
+ CURLOPT_HTTPHEADER => array(
+ 'Accept: application/json',
+ 'Authorization: Token '
+ ),
+));
+
+$response = curl_exec($curl);
+
+curl_close($curl);
+echo $response;
+```
+
+
+
+
+
+```json {{ title: 'Example' }}
+{}
+```
+```json {{ title: 'Schema' }}
+{
+ "type": "object",
+ "example": {}
+}
+```
+
+
+
+
+
+
+---
diff --git a/src/pages/ipa/resources/services.mdx b/src/pages/ipa/resources/services.mdx
index 9e255a3d..afee5e81 100644
--- a/src/pages/ipa/resources/services.mdx
+++ b/src/pages/ipa/resources/services.mdx
@@ -373,6 +373,7 @@ echo $response;
}
],
"enabled": true,
+ "terminated": false,
"pass_host_header": false,
"rewrite_redirects": false,
"auth": {
@@ -461,6 +462,7 @@ echo $response;
}
],
"enabled": "boolean",
+ "terminated": "boolean",
"pass_host_header": "boolean",
"rewrite_redirects": "boolean",
"auth": {
@@ -1488,6 +1490,7 @@ echo $response;
}
],
"enabled": true,
+ "terminated": false,
"pass_host_header": false,
"rewrite_redirects": false,
"auth": {
@@ -1574,6 +1577,7 @@ echo $response;
}
],
"enabled": "boolean",
+ "terminated": "boolean",
"pass_host_header": "boolean",
"rewrite_redirects": "boolean",
"auth": {
@@ -1828,6 +1832,7 @@ echo $response;
}
],
"enabled": true,
+ "terminated": false,
"pass_host_header": false,
"rewrite_redirects": false,
"auth": {
@@ -1914,6 +1919,7 @@ echo $response;
}
],
"enabled": "boolean",
+ "terminated": "boolean",
"pass_host_header": "boolean",
"rewrite_redirects": "boolean",
"auth": {
@@ -2948,6 +2954,7 @@ echo $response;
}
],
"enabled": true,
+ "terminated": false,
"pass_host_header": false,
"rewrite_redirects": false,
"auth": {
@@ -3034,6 +3041,7 @@ echo $response;
}
],
"enabled": "boolean",
+ "terminated": "boolean",
"pass_host_header": "boolean",
"rewrite_redirects": "boolean",
"auth": {
@@ -3686,6 +3694,7 @@ echo $response;
}
],
"enabled": true,
+ "terminated": false,
"pass_host_header": false,
"rewrite_redirects": false,
"auth": {
@@ -3772,6 +3781,7 @@ echo $response;
}
],
"enabled": "boolean",
+ "terminated": "boolean",
"pass_host_header": "boolean",
"rewrite_redirects": "boolean",
"auth": {