From 1ca13291d07397fc78a24860d1e70411c0149585 Mon Sep 17 00:00:00 2001 From: bcmmbaga Date: Thu, 2 Apr 2026 11:48:15 +0300 Subject: [PATCH 1/5] Fix missing @types/node package Signed-off-by: bcmmbaga --- generator/tsconfig.json | 1 + src/pages/ipa/resources/services.mdx | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/generator/tsconfig.json b/generator/tsconfig.json index 8615cb563..1a7aede2d 100644 --- a/generator/tsconfig.json +++ b/generator/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "incremental": true, "noImplicitAny": false, + "types": ["node"], "baseUrl": ".", "paths": { "~/*": ["./*"] diff --git a/src/pages/ipa/resources/services.mdx b/src/pages/ipa/resources/services.mdx index 9e255a3dd..afee5e817 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": { From 3c74405b618a8baa5953bdbacee2929eb1994425 Mon Sep 17 00:00:00 2001 From: bcmmbaga Date: Thu, 2 Apr 2026 11:57:54 +0300 Subject: [PATCH 2/5] Add missing API integration links Signed-off-by: bcmmbaga --- src/components/NavigationAPI.jsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/NavigationAPI.jsx b/src/components/NavigationAPI.jsx index 9bd200a5c..fd5585a3b 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' }, From a62f8d8b284482a5079fc7fd43e9473a475da2ae Mon Sep 17 00:00:00 2001 From: bcmmbaga Date: Thu, 2 Apr 2026 12:12:10 +0300 Subject: [PATCH 3/5] Revert generated services.mdx Signed-off-by: bcmmbaga --- src/pages/ipa/resources/services.mdx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/pages/ipa/resources/services.mdx b/src/pages/ipa/resources/services.mdx index afee5e817..9e255a3dd 100644 --- a/src/pages/ipa/resources/services.mdx +++ b/src/pages/ipa/resources/services.mdx @@ -373,7 +373,6 @@ echo $response; } ], "enabled": true, - "terminated": false, "pass_host_header": false, "rewrite_redirects": false, "auth": { @@ -462,7 +461,6 @@ echo $response; } ], "enabled": "boolean", - "terminated": "boolean", "pass_host_header": "boolean", "rewrite_redirects": "boolean", "auth": { @@ -1490,7 +1488,6 @@ echo $response; } ], "enabled": true, - "terminated": false, "pass_host_header": false, "rewrite_redirects": false, "auth": { @@ -1577,7 +1574,6 @@ echo $response; } ], "enabled": "boolean", - "terminated": "boolean", "pass_host_header": "boolean", "rewrite_redirects": "boolean", "auth": { @@ -1832,7 +1828,6 @@ echo $response; } ], "enabled": true, - "terminated": false, "pass_host_header": false, "rewrite_redirects": false, "auth": { @@ -1919,7 +1914,6 @@ echo $response; } ], "enabled": "boolean", - "terminated": "boolean", "pass_host_header": "boolean", "rewrite_redirects": "boolean", "auth": { @@ -2954,7 +2948,6 @@ echo $response; } ], "enabled": true, - "terminated": false, "pass_host_header": false, "rewrite_redirects": false, "auth": { @@ -3041,7 +3034,6 @@ echo $response; } ], "enabled": "boolean", - "terminated": "boolean", "pass_host_header": "boolean", "rewrite_redirects": "boolean", "auth": { @@ -3694,7 +3686,6 @@ echo $response; } ], "enabled": true, - "terminated": false, "pass_host_header": false, "rewrite_redirects": false, "auth": { @@ -3781,7 +3772,6 @@ echo $response; } ], "enabled": "boolean", - "terminated": "boolean", "pass_host_header": "boolean", "rewrite_redirects": "boolean", "auth": { From 1d96d343f6ab62e99b5c5455f1c4dbb7ce05fc40 Mon Sep 17 00:00:00 2001 From: bcmmbaga Date: Thu, 2 Apr 2026 15:22:49 +0300 Subject: [PATCH 4/5] Fix ts strict null check errors in API generator Signed-off-by: bcmmbaga --- generator/tsconfig.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/generator/tsconfig.json b/generator/tsconfig.json index 1a7aede2d..dd5505d89 100644 --- a/generator/tsconfig.json +++ b/generator/tsconfig.json @@ -3,6 +3,8 @@ "compilerOptions": { "incremental": true, "noImplicitAny": false, + "strict": false, + "strictNullChecks": false, "types": ["node"], "baseUrl": ".", "paths": { From 56ea96412352445c1f818eb029100af3fbd551d9 Mon Sep 17 00:00:00 2001 From: netbirddev Date: Thu, 2 Apr 2026 12:29:39 +0000 Subject: [PATCH 5/5] Update API pages with v0.67.2 --- .../resources/edr-fleetdm-integrations.mdx | 1732 +++++++++++++++++ .../ipa/resources/idp-azure-integrations.mdx | 1728 ++++++++++++++++ .../ipa/resources/idp-google-integrations.mdx | 1655 ++++++++++++++++ .../resources/idp-okta-scim-integrations.mdx | 1517 +++++++++++++++ .../{idp.mdx => idp-scim-integrations.mdx} | 255 ++- src/pages/ipa/resources/notifications.mdx | 1727 ++++++++++++++++ src/pages/ipa/resources/services.mdx | 10 + 7 files changed, 8523 insertions(+), 101 deletions(-) create mode 100644 src/pages/ipa/resources/edr-fleetdm-integrations.mdx create mode 100644 src/pages/ipa/resources/idp-azure-integrations.mdx create mode 100644 src/pages/ipa/resources/idp-google-integrations.mdx create mode 100644 src/pages/ipa/resources/idp-okta-scim-integrations.mdx rename src/pages/ipa/resources/{idp.mdx => idp-scim-integrations.mdx} (94%) create mode 100644 src/pages/ipa/resources/notifications.mdx 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 000000000..5a7bccd77 --- /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 000000000..03dc2e232 --- /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 000000000..d0c7c8ac7 --- /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 000000000..5c5eff63d --- /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 e5443e039..ed47fa856 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 000000000..4add91b91 --- /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 9e255a3dd..afee5e817 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": {