ICS/ IPS Configurations Using REST APIs

Getting Active Sessions

To Get details of up to 200 active users. To fetch next set of 200 active users use 'https://<ics-ip>/api/v1/system/active-users?number=200&start=201'.

By default, the gateway retrieves a maximum of 200 users per request.

The field is-last-recordcan be used in script to get the list of all the active users in a loop. Is-last-record set to false, if there are more users. It sets to true, when the gateway returned the last list of users.

Copy
Request
curl -X 'GET' \
      'https://<ics-ip>/api/v1/system/active-users?number=200&start=0' \
    --header 'Authorization: Basic dmt5M3ZjZmNpcWZqejd0ZCt1eWsveXRJYlM4VkIzK0kwdHhlVUpZUGRyRT06'
    -H 'accept: application/json'
Response
{
     "active-users": {
     "active-user-records": {
     "active-user-record": [
     {
        "active-secondary-user-name": null,
        "active-user-name": "admindb",
        "agent-type": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/118.0",
        "authentication-realm": "Admin Users",
        "browser-id": "2b420cd0c4fee298c621793205950c9c",
        "device-id": null,
        "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",
        "events": 0,
        "hc-failed-reasons": null,
        "login-node": "localhost2",
        "mac-address": null,
        "network-connect-ip": null,
        "network-connect-ipv6": null,
        "network-connect-transport-mode": null,
        "ngp-session-id": "8a1a7a0a7e",
        "primary-auth-server-name": "Administrators",
        "primary-auth-server-type": "Local Authentication",
        "pulse-client-version": null,
        "secondary-auth-server-name": null,
        "secondary-auth-server-type": null,
        "session-id": "sid1d84203295b2db0f880820e5435de02e775c2cab00000000",
        "sign-in-time-micro": "1699317427.743783",
        "source-ip": "10.97.4.153",
        "user-roles": ".Administrators",
        "user-sign-in-time": "2023/11/07 06:07:09"
    },
    {
        "active-secondary-user-name": null,
        "active-user-name": "user1",
        "agent-type": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
        "authentication-realm": "Users",
        "browser-id": "c02a789746114cb426183cae3ade8513",
        "device-id": null,
        "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",
        "events": 0,
        "hc-failed-reasons": null,
        "login-node": "localhost2",
        "mac-address": null,
        "network-connect-ip": null,
        "network-connect-ipv6": null,
        "network-connect-transport-mode": null,
        "ngp-session-id": "173a229e9a",
        "primary-auth-server-name": "System Local",
        "primary-auth-server-type": "Local Authentication",
        "pulse-client-version": null,
        "secondary-auth-server-name": null,
        "secondary-auth-server-type": null,
        "session-id": "sid8d40db34996df948e870fb097b2b07c20555e8dc00000000",
        "sign-in-time-micro": "1699327095.643966",
        "source-ip": "10.96.224.53",
        "user-roles": "Users",
        "user-sign-in-time": "2023/11/07 08:48:15"
    }
   ]
  },
    "total-matched-record-number": 2,
    "total-returned-record-number": 2,
    "user-login-permission": true
 }
}

Getting Particular Active Session Details

Copy
Request
    curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users?name=user2
Example:
    curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users?name=user2
Response
Content-Type: application/json
{
"active-users": {
  "active-user-records": {
     "active-user-record": [
       {
         "active-user-name": "user2",
         "agent-type": "Windows 7 Google Chrome",
         "authentication-realm": "localrealm",
         "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",
         "events": 0,
         "login-node": "localhost2",
         "network-connect-ip": null,
         "network-connect-transport-mode": null,
         "session-id": "sid68377b6249d24784edfdd07edfe61ee9934b556100000000",
         "user-roles": "localrealm",
         "user-sign-in-time": "2018/08/23 11:46:15"
      }
    ]
  },
  "total-matched-record-number": 1,
  "total-returned-record-number": 1,
  "user-login-permission": true
}
}

Deleting a Particular Active Session

Copy
Request
    curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users/session/sid6dc167193b66fef812ef3fdba62729e53f8499f0c25df3be -X DELETE
Example:
    curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://<IP Address>/api/v1/system/active-users/session/sid6dc167193b66fef812ef3fdba62729e53f8499f0c25df3be -X DELETE
Response
    HTTP/1.1 204 NO CONTENT
    Content-Length: 0
    Content-Type: application/json

Deleting All Active Sessions

Copy
Request
    curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users?all -X DELETE
Example:
    curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://<IP Address>/api/v1/system/active-users?all -X DELETE
Response
    HTTP/1.1 204 NO CONTENT
    Content-Length: 0
    Content-Type: application/json

Querying Set of Leased Licenses in the License Server System

Copy
Request
GET /api/v1/license/license-server-lease-information HTTP/1.1
Host: <IP Address>
Authorization: Basic
c2czWUJmc1lyUjcwN2daSFh6RHdqME1YSnNhdDZmcXlaOVZKNFNSdStaZz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 2210
Content-Type: application/json
{
"leased-license-counts": {
   "features": {
      "feature": [
        {
           "clients": {
              "client-info": [
                 {                     "leased-count": 0,
                     "name": "client1"
                 }
               ]
            },
            "name": "Advanced Mobile License - Onboarding",
            "total-count": 0
         },
         {
            "clients": {
            "client-info": [
              {
                 "leased-count": 0,
                 "name": "client1"
              }
            ]
         },
          "name": "Cloud Secure feature",
          "total-count": 0
      },
{
          "clients": {
            "client-info": [
              {
                 "leased-count": 0,
                 "name": "client1"
              }
            ]
          },
          "name": "Concurrent Meeting Users",
          "total-count": 0
       },
{
          "clients": {
            "client-info": [
             {
                "leased-count": 200,
                "name": "client1"
             },
{
                "leased-count": 0,
                "name": "client2"
             }
]
],
           "name": "Concurrent Users",
           "total-count": 200
        },
        {
          "clients": {
            "client-info": [
{
"leased-count": 0,
"name": "client1"
}
]
},
          "name": "Named Users",
          "total-count": 0
        },
        {
          "clients": {
            "client-info": [
              {
                "leased-count": 0,
"name": "client1"
              }
            ]
         },
         "name": "Premier Java Remote Desktop Applet",
         "total-count": 0
       }
      ]
     },
     "machine-id": "VASPMVKIT1NJNFPPS",
     "query-summary": {},
     "release-info": {
     "build-number": "10124",
     "version": "9.0"
      },
     "serial-number": null,
"signature":
"HMx/W0VhDAABAAAApoB/uSUYcwJSlk7HeXVMXK6+KsIPTrJnjXrUciJEef2EKWyqgbDGoXhzYaGDl6Ye29oOw2KRQlyCM/HRpIpujA==",
     "time-stamp": "Fri Aug 24 14:43:00 2018"
}
}

Pulling State from a License Server on a License Client

Copy
Request
    PUT /api/v1/license/license-client-lease-state HTTP/1.1
    Host: <IP Address>
    Authorization: Basic 
    OWZBcVNKUkRCcEdjSEVQY3A0aDZ2UnFwdjhXbExIYzUxRS91TVU1VnBnMD06
    Content-Type: application/json
    {
     
    }
    While using above URL (i.e., license-client-lease-state) by PUT operation, we provide empty JSON body as input, because PUT operation expects JSON body.
Response
HTTP/1.1 200 OK
Content-Length: 86
Content-Type: application/json
{
   "result": {
   "info": [
    {
      "message": "Success"
    }
   ]
  }
}

Configuring Certificates based on CSR Workflow

Copy
Request
POST /api/v1/system/certificates/device-certificates HTTP/1.1
Host: <IP Address>
Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06
Content-Type: application/json
{
    "cert":"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",
    "password": <certifcicate_password>,
    "internal-interfaces": { "internal-interface" : ["<Internal Port>", "vport1"] },
    "external-interfaces": { "external-interface" : ["<External Port>"] },
    "management-interface": true
}
Response
HTTP/1.1 201 CREATED
Content-Length: 112
Content-Type: application/json
{
    "result": {
     "info": [
       {
         "message": "Operation successfully completed."
       }
     ]
    }
}

Creating a CSR for a Device Certificate

Copy
Request
POST /api/v1/system/certificates/device-certificate-csrs HTTP/1.1
Host: <IP Address>
Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06
Content-Type: application/json
{
    "subject-common-name": "QA.pcs.company.com",
    "key-type": "ECDSA",
    "ecc-curve": "P-384"
}
Response
HTTP/1.1 201 OK
Content-Length: 266
Content-Type: application/json
{
"result": {
   "info": [
    {
       "message": "Created CSR 'CSR_164' successfully"
    },
    {
       "message": "Use POST /api/v1/system/certificates/device-certificate-csrs/CSR_164/certificate to upload the signed certificate"
    }
  ]
}
}

Deleting Device Certificate by Its Subject Name

Copy
Request
    DELETE /api/v1/system/certificates/device-certificates/srikrsa.test.saqacertserv.com HTTP/1.1
    Host: <IP Address>
    Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06
    Content-Type: application/json
Response
    HTTP/1.1 204 NO CONTENT
    Content-Length: 0
    Content-Type: application/json

Getting System Information

Copy
Request
GET /api/v1/system/system-information HTTP/1.1
Host: <IP Address>
Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 193
Content-Type: application/json
{
    "rollback-partition-information": {
        "build": "2330",
        "os-name": "ive-sa",
        "os-version": "9.1R2"
        },
    "software-inventory": {
        "software": {
        "build": "4520",
        "name": "IVE-OS",
        "type": "operating-system",
        "version": "9.1R4"
        }
    },
    "system-information": {
        "hardware-model": "ISA4000-V",
        "host-name": "localhost2",
        "os-name": "ive-sa",
        "os-version": "9.1R4",
        "serial-number": "VASPHJPEG824R1U0S"
        }
}

Retrieving Serial Number and Machine ID

Copy
Request
GET /api/v1/system/system-information HTTP/1.1
Host: <IP Address>
Authorization: Basic czM3MzVDTFVYbnFObFR5NHdNSTFES3piSDhrMTVwR0pLV2gwOTlMYmxhYz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 193
Content-Type: application/json
{
  "rollback-partition-information": {
    "build": "5801",
    "os-name": "ive-sa",
    "os-version": "9.1R6"
  },
  "software-inventory": {
    "software": {
      "build": "6087",
      "name": "IVE-OS",
      "type": "operating-system",
      "version": "9.1R7"
    }
  },
  "system-information": {
    "cluster-node": {},
    "hardware-model": "ISA-4000",
    "host-name": "node1",
    "machine-id": "0312MB24A0EZ504VS",
    "os-name": "ive-sa",
    "os-version": "9.1R7",
    "serial-number": "0312022017100103"
  }
}

Realm-based Administrator User Using Administrator Local Authentication Server

Copy
Request
POST /api/v1/realm_auth HTTP/1.1
Host: <IP Address>
Authorization: Basic YWRtaW4xOmRhbmExMjM=
Content-Type: application/json
{
    "realm": "<realm-name>"
}
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
    "api_key": "MjUwOGQyNzAyOWU3MWQ2MzNiMTM2Njg2MzAwNDg3MjU="
}

Realm-based Administrator User Using AD Authentication Server

Copy
Request
POST /api/v1/realm_auth HTTP/1.1
Host: <IP Address>
Authorization: Basic bmF6ZWVyOlBzZWN1cmUxMjMk
Content-Type: application/json
{
    "realm": "AdminADRealm"
}
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
    "api_key": "ODRjOTcxOTY5ZTlmYTcwY2QwYzk1ZDBjMWQ5N2RmN2Q="
}

Realm-based Administrator User Using LDAP Authentication Server

Copy
Request
POST /api/v1/realm_auth HTTP/1.1
Host: <IP Address>
Authorization: Basic bmF6ZWVyOlBzZWN1cmUxMjMk
Content-Type: application/json
{
    "realm": "LDAPRealm"
}
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
    "api_key": "ZTQxNTIxOTJhNmUwMjg3MWI5MjZkYmE1MGM0MzdiMDI="
}

Realm-based Administrator User Using Radius Authentication Server

Copy
Request
POST /api/v1/realm_auth HTTP/1.1
Host: <IP Address>
Authorization: Basic amFjazpqdW5pcGVy
Content-Type: application/json
{
    "realm": "RadiusAdminRealm"
}
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
    "api_key": "MGMzZjJkZDZlYmRlYzg0MDE5NzkwYzE1ZGM5MmQyYTQ="
}

Realm-based Administrator User from a Particular Source IP

Copy
Request
PUT /api/v1/configuration/administrators/admin-realms/realm/AdminLocalAuthRealm/authentication-policy/source-ip/customized HTTP/1.1
Host: <IP Address>
Authorization: Basic T1dFM056VTBPVEl5T0dFeU16WXpOakU0WVRFek9EWXhOamRoTVdVNFpqYz06
Content-Type: application/json
{
      "customized": "selected-ip"
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type →application/json
{
   "result": {
   "info": [
     {
        "message": "Operation succeeded without warning or error!"
     }
   ]
 }
}
Request
POST /api/v1/configuration/administrators/admin-realms/realm/AdminLocalAuthRealm/authentication-policy/source-ip/ips/ip HTTP/1.1
Host: <IP Address>
Authorization: Basic T1dFM056VTBPVEl5T0dFeU16WXpOakU0WVRFek9EWXhOamRoTVdVNFpqYz06
Content-Type: application/json
{
   "access": "allow",
   "address": "<IP Address>",
   "netmask": "255.255.255.255"
}
Response
HTTP/1.1 201 CREATED
Content-Length: 124
Content-Type: application/json
{
  "result": {
  "info": [
    {
      "message": "Operation succeeded without warning or error!"
    }
  ]
 }
}

Realm-based Administrator Authorization Role Mapping to Administrator Role

Copy
Request
PUT /api/v1/configuration/administrators/admin-realms/realm/AdminADRealm/role-mapping-rules HTTP/1.1
Host: <IP Address>
Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06
Content-Type: application/json
{
"user-selects-role": "false",
"rule": [
  {
     "roles": [
".Administrators"
 ],
     "stop-rules-processing": "true",
     "group": {
       "group-names": [
          "PCS-QA/systems"
       ]
},
     "name": "AdminADRoleMapping"
  }
],
"user-selects-roleset": "false"
}
Response
HTTP/1.1 200 OKContent-Length: 124Content-Type: application/json
{
"result": {
  "info": [
    {
      "message": "Operation succeeded without warning or error!"
    }
  ]
 }
}

Specifying Session Validity for REST Admin Session

Copy
Request
PUT /api/v1/configuration/administrators/admin-roles/admin-role/%2EAdministrators/general/session-options HTTP/1.1
Host: <IP Address>
Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06
Content-Type: application/json
{
    "idle-timeout": "5"
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
    "result": {
        "info": [
            {
                "message": "Operation succeeded without warning or error!"
            }
        ]
    }
}

Getting Active Directory Search Groups

Copy
Request
GET /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 294
Content-Type: application/json
{
"ad-group": [
     {
       "group": "ICS-QA/core",
       "name": "ICS-QA/core",
       "sid": "S-1-5-21-3875260349-1888520165-453808128-1112"
     },
     {
       "group": "ICS-QA/systems",
       "name": "ICS-QA/systems",
       "sid": "S-1-5-21-3875260349-1888520165-453808128-1108"
     }
   ]
}

Adding Search Group to Active Directory

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic 
RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
"ad-group": [
    {
        "group": "ICS-QA/systems",
        "name": "ICS-QA/systems"
    },
    {
        "group": "ICS-QA/core",
        "name": "ICS-QA/core"
    }
  ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
   "result": {
"info": [
     {
       "message": "Operation succeeded without warning or error!"
     }
     ]
   }
}

Updating Active Directory Group

To update a group, first get already available list using GET operation and append new group to it before PUT.

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic 
RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
"ad-group": [
  {
     "group": "ICS-QA/core",
     "name": "ICS-QA/core",
     "sid": "S-1-5-21-3875260349-1888520165-453808128-1112"
  },
  {
     "group": "ICS-QA/systems",
     "name": "ICS-QA/systems",
     "sid": "S-1-5-21-3875260349-1888520165-453808128-1108"
  },
  {
     "group": "PCS-QA/client",
     "name": "PCS-QA/client",
     "sid": "S-1-5-21-3875260349-1888520165-453808128-1113"
  }
 ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
"result": {
"info": [
     {
       "message": "Operation succeeded without warning or error!"
     }
   ]
  }
}

Deleting Active Directory Groups

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic 
RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
    "ad-group": [
    ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
    "result": {
    "info": [
      {
        "message": "Operation succeeded without warning or error!"
      }
    ]
  }
}

Getting All LDAP Group List

Copy
Request
GET /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json

Adding Groups to LDAP

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
"user-group": [
      {
        "dn": "CN=Administrators,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",
        "group-type": "static",
        "name": "Administrators"
      },
      {
        "dn": "CN=Users,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",
        "group-type": "static",
        "name": "Users"
      }
   ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
"result": {
"info": [
      {
        "message": "Operation succeeded without warning or error!"
      }
    ]
  }
}

Updating LDAP Source Group

To update a group, first get already available list using GET operation and append new group to it and then perform PUT operation.

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
"user-group": [
      {
        "dn": "CN=Administrators,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",
        "group-type": "static",
        "name": "Administrators"
      },
      {
        "dn": "CN=Users,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",
        "group-type": "static",
        "name": "Users"
      },
      {
        "dn": "CN=Guests,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",
        "group-type": "static",
        "name": "Guests"
      }
   ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
"result": {
"info": [
      {
        "message": "Operation succeeded without warning or error!"
      }
    ]
  }
}

Deleting LDAP Source Group

Copy
Request
PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1
Host: <IP Address>
Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06
Content-Type: application/json
{
    "user-group": [
    ]
}
Response
HTTP/1.1 200 OK
Content-Length: 124
Content-Type: application/json
{
"result": {
"info": [
      {
        "message": "Operation succeeded without warning or error!"
      }
    ]
  }
}

Creating a Cluster

Copy
Request
PUT /api/v1/cluster HTTP/1.1
Host: <IP Address>
Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06
Content-Type: application/json
{
    "cluster-name": "cluster1",
    "cluster-password": "dana123",
    "member-name": "nodeA",
    "action": "create"
}
Response
HTTP/1.1 200 OK
Content-Length: 118
Content-Type: application/json
{
    "result": {
        "info": [
            {
                "message": "Created cluster 'cluster1' successfully"
            }
        ]
    }
}

Adding a Member to Cluster

Copy
Request
POST /api/v1/cluster/members HTTP/1.1
Host: <IP Address>
Authorization: Basic THI5bmxreU50UE04MWJ6OHRhbjhFMW1PYTVuV3V5MG5XN0oyNmNWcTRhbz06
Content-Type: application/json
{
   "member-name" : "node225",
   "member-ip" : "<IP Address>",
   "member-netmask" : "<IP Address>",
   "member-gateway" : "<IP Address>",
   "member-external-ip" : "<IP Address>",
   "member-external-netmask" : "<IP Address>",
   "member-external-gateway" : "<IP Address>"
}
Response
HTTP/1.1 200 OK
Content-Length: 125
Content-Type: application/json
{
  "result": {
    "info": [
      {
        "message": "Added member 'node225' to cluster successfully"
      }
    ]
  }
}

Getting Cluster Status

Copy
Request
GET /api/v1/cluster HTTP/1.1
Host: 10.209.114.228
Authorization: Basic TWN2cUEzbFRYQXcySjBSbGpKWTAzdk1oa2RiTDFLUVJDUjNNdlQ0UlRJdz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 619
Content-Type: application/json
{
"members": [
    {
        "enabled": true,
        "external-ip": "",
        "external-network": "",
        "internal-ip": "<IP Address>",
        "internal-netmask": "<IP Address>",
        "name": "node225",
        "notes": "Enabled, Unreachable",
        "status-code": "0x18"
    },
    {
        "enabled": true,
        "external-ip": "<IP Address>",
        "external-network": "<IP Address>",
        "internal-ip": "<IP Address>",
        "internal-netmask": "<IP Address>",
        "name": "nodeA",
        "notes": "Leader",
        "status-code": "0x19004"
    }
  ],
  "mode": "Active/Active",
  "name": "cluster1"
}
{
"external-vip-ipv4": "<IP Address>",
"external-vip-owner": "node-51-39",
"internal-vip-ipv4": "<IP Address>",
"internal-vip-owner": "node-51-39",
"members": [
  {
    "enabled": true,
    "external-ip": "<IP Address>",
    "external-netmask": "<IP Address>",
    "internal-ip": "<IP Address>",
    "internal-netmask": "<IP Address>",
    "name": "node-51-39",
    "notes": "Leader",
    "status-code": "0x1b004"
  },
  {
    "enabled": true,
    "external-ip": "<IP Address>",
    "external-netmask": "<IP Address>",
    "internal-ip": "<IP Address>",
    "internal-netmask": "<IP Address>",
    "name": "Node-something",
    "notes": "Enabled, Unreachable",
    "status-code": "0x18"
  }
 ],
 "mode": "Active/Passive",
 "name": "TEST-CLUSTER"
}

Deleting Cluster Member

Copy
Request
DELETE /api/v1/cluster/members/node225 HTTP/1.1
Host: <IP Address>
Authorization: Basic TWN2cUEzbFRYQXcySjBSbGpKWTAzdk1oa2RiTDFLUVJDUjNNdlQ0UlRJdz06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 129
Content-Type: application/json
{
    "result": {
        "info": [
            {
                "message": "Removed member 'node225' from cluster successfully"
            }
        ]
    }
}

Getting Health Check Status

Copy
Request
GET /api/v1/system/healthcheck
Host: <IP Address>
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
   "message": "Security Gateway is accessible."
}
 
Request
GET /api/v1/system/healthcheck?status=all HTTP/1.1
Host: <IP Address>
Content-Type: application/json
Response
Content-Type: application/json
{
    "CPU-UTILIZATION4": 8,
    "SSL-CONNECTION-COUNT": 0,
    "MAX-LICENSED-USERS-REACHED": "NO",
    "SWAP-UTILIZATION": 1,
    "DISK-UTILIZATION": -1,
    "USER-COUNT": 0,
    "VPN-TUNNEL-COUNT": 0
}
 
Request
GET /api/v1/system/healthcheck?status=sbr HTTP/1.1
Host: <IP Address>
Content-Type: application/json
Response
Content-Type: application/json
{
   "SBR-AVAILABLE": 1
}

Joining a Cluster

Copy
Request
PUT /api/v1/cluster HTTP/1.1
Host: <IP Address>
Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06
Content-Type: application/json
{
   "cluster-name": "cluster",
   "cluster-password": "xxxxx",
   "member-address": "<IP Address>",
   "action": "join"
}
Response
HTTP/1.1 200 OK
Content-Length: 116
Content-Type: application/json
{
    "result": {
       "info": [
       {
             "message": "Joined cluster 'cluster' successfully"
       }
     ]
   }
}

VIP Failover

Copy
Request
PUT /api/v1/cluster
Host: <IP Address>
Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06
Content-Type: application/json
{
   "action": "vip-failover"
}
Response
In case of active-passive cluster:
{
  "result": {
    "info": [
      {
        "message": "VIP fail-over initiated"
      }
    ]
  }
}
In case of active-active cluster:
{
  "result": {
    "info": [
      {
        "message": "Node not part of an Active-Passive cluster. Invalid operation."
      }
    ]
  }
}

Getting Config Without Ivanti Packages (ESAP and Client Packages)

Copy
Request
GET /api/v1/configuration/authentication/endpoint/host-checker/esaps?expand&&excludePulsePackages HTTP/1.1
Host: <IP Address>
Authorization: Basic 
dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06
Content-Type: application/json
Response
HTTP/1.1 200 OK
Content-Length: 561
Content-Type: application/json
{
"active-version": "3.3.5",
"default-version": "3.3.5",
"esap": [
  {
      "esap-version": "3.3.5",
      "last-activated-time": "Sun 17 Mar 2019 23:54:12 PDT",
      "upload-time": "Sun 17 Mar 2019 23:53:35 PDT"
   },
   {
      "esap-version": "3.3.6",
      "last-activated-time": "Never",
      "upload-time": "Mon 18 Mar 2019 21:45:31 PDT"
   },
   {
      "esap-version": "3.3.7",
      "last-activated-time": "Never",
      "upload-time": "Mon 18 Mar 2019 21:46:12 PDT"
   }
],
"force-same-esap": "false",
"opswat-sdk-version": "4"
}

Backing Up Binary Configuration

Exports system and user configurations into one file as shown in the code snippet. To export them individually use the following, Password is optional.:

To export only system config use GET api/v1/system/binary-configuration?export=system_config&password=<password>
To export only user config use GET api/v1/system/binary-configuration?export=user_config&password=<password>
Copy
Request
GET /api/v1/system/binary-configuration HTTP/1.1
Host: <IP Address>
Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06
Response
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 50753630
UEsDBBQAAAAIAE9VmU4J1asqz3cDAKx3AwAKABwAc3lzdGVtLmNmZ1VUCQADvUHB
XL1BwVx1eAsAAQQAAAAABAAAAAAAC4D0fwnTMa1OLV2XgACOdwMAINEfP2AuIVXV
B1FhtptLC259gyNPT7WwhtQKbp2Y2+d1h1MTflQis8wbHytXP19D+SM+amX5UKeO
GDUggxgbrEQMXmwOSv8YBrvXIBShmGO5BVqfUemvdNK3OB+S/g8+LIPG5i2c3LVm
W8hY3PLQ9CJHMrFSBFtgyTX2at85MGCsupxd2gOQQ9e138KrI2hBoywDzCJiRUSU
...

Restoring Binary Configuration (import=normal)

The import normal mode will import the binary configuration excluding the IP, network configurations and cluster configuration. The normal mode is similar to default option in binary import.

Copy
Request
PUT /api/v1/system/binary-configuration?import=normal HTTP/1.1
Or
PUT /api/v1/system/binary-configuration HTTP/1.1
Host: <IP Address>
Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06
Content-Type: text/html; charset=utf-8
Response
HTTP/1.1 200 OK
{
  "result": {
    "info": [
      {
        "message": "Operation successfully completed."
      }
    ]
  }
}
Error Cases:
import mode specified is incorrect (other than normal or full)
Content-Length: 100
Content-Type: application/json
{
 "result": {
     "errors": [
       {
          "message": "Invalid import mode"
       }
     ]
  }
}
Content type is not a base 64 encoded binary configuration string
Content-Length: 126
Content-Type: application/json
{
 "result": {
    "errors": [
      {
        "message": "Error - Failed to extract configuration files"
      }
     ]
  }
}

Restoring Binary Configuration (import=full)

The import full mode will import everything from the binary configuration provided in the body. This is similar to full binary import.

Copy
Request
PUT /api/v1/system/binary-configuration?import=full HTTP/1.1
Host: <IP Address>
Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06
Content-Type: text/html; charset=utf-8
Body data:
Base64 configuration string as received in GET request)
 
UEsDBBQAAAAIAE9VmU4J1asqz3cDAKx3AwAKABwAc3lzdGVtLmNmZ1VUCQADvUHB
XL1BwVx1eAsAAQQAAAAABAAAAAAAC4D0fwnTMa1OLV2XgACOdwMAINEfP2AuIVXV
B1FhtptLC259gyNPT7WwhtQKbp2Y2+d1h1MTflQis8wbHytXP19D+SM+amX5UKeO
GDUggxgbrEQMXmwOSv8YBrvXIBShmGO5BVqfUemvdNK3OB+S/g8+LIPG5i2c3LVm
……
Response
HTTP/1.1 200 OK
Content-Length: 112
Content-Type: application/json
{
  "result": {
    "info": [
      {
        "message": "Operation successfully completed."
      }
     "errors": [
    ]
  }
}
Error Cases:
import mode specified is incorrect (other than normal or full)
Content-Length: 100
Content-Type: application/json
{
 "result": {
       {
          "message": "Invalid import mode"
       }
     ]
  }
}
Content type is not a base 64 encoded binary configuration string
Content-Length: 126
Content-Type: application/json
{
 "result": {
    "errors": [
      {
        "message": "Error - Failed to extract configuration files"
      }
     ]
  }
}

Get APIs to Delete Named Users

GET /api/v1/license/named-users

Gives two separate lists of ICS named users on license server.

Named users list on license client or independent ICS

GET /api/v1/license/named-users/<pcs>

Gives list of ICS named users on license server as required.

Example of GET API to fetch users list on independent ICS

Copy
REQUESTGET https://<IP Address>/api/v1/license/named-users HTTP/1.1
Authorization: Basic
Content-Type: application/json
RESPONSE
HTTP/1.1 200 OK
Content-Length: 933
Content-Type: application/json
{
"named-users": [
  {
    "IP": "x.x.x.x",
    "Last Agent Type": "Secure/8.3.4.0 (Windows) ivanti/10.0.4.1",
    "Last Role": [
    "Users"
    ],
    "Last Sign in": "2021-07-16 19:05:51",
    "User": "dev1"
  },
  {
    "IP": " x.x.x.x ",
    "Last Agent Type": "Secure/8.3.4.0 (Windows) ivanti/10.0.4.1",
    "Last Role": [
    "Users"
    ],
    "Last Sign in": "2021-07-16 19:05:51",
    "User": "dev4"
  },
  {
    "IP": " x.x.x.x ",
    "Last Agent Type": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1",
    "Last Role": [
    "Users"
    ],
    "Last Sign in": "2021-07-16 19:05:51",
    "User": "dev3"
  },
  {
    "IP": " x.x.x.x",
    "Last Agent Type": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1",
    "Last Role": [
    "Users"
    ],
    "Last Sign in": "2021-07-16 19:05:51",
    "User": "dev2"
  }
 ]
}

Example of GET API to fetch users list on license server which gives two separate lists of ICS named users

Copy
REQUEST
GET https://<IP Address>/api/v1/license/named-users HTTP/1.1
Authorization: Basic
Content-Type: application/json
RESPONSE
HTTP/1.1 200 OK
Content-Length: 1604
Content-Type: application/json
{
"pcs": {
"named-users": [
   {
    "Appliance": "ics_5",
    "Last Login IP": " x.x.x.x",
    "Last Login time": "2021-07-16 19:20:13",
    "Login Realm": "Users",
    "Role": "Users",
    "User": "dev1",
    "User Agent": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1"
   },
   {
    "Appliance": "ics_5",
    "Last Login IP": " x.x.x.x",
    "Last Login time": "2021-07-16 19:20:13",
    "Login Realm": "Users",
    "Role": "Users",
    "User": "dev2",
    "User Agent": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1"
   },
   {
    "Appliance": "ics_5",
    "Last Login IP": " x.x.x.x",
    "Last Login time": "2021-07-16 19:20:13",
    "Login Realm": "Users",
    "Role": "Users",
    "User": "dev3",
    "User Agent": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1"
   },
   {
    "Appliance": "ics_5",
    "Last Login IP": " x.x.x.x",
    "Last Login time": "2021-07-16 19:20:13",
    "Login Realm": "Users",
    "Role": "Users",
    "User": "dev4",
    "User Agent": "ivanti/8.3.4.0 (Windows) ivanti/10.0.4.1"
   }
  ]
},
"pps": {
"named-users": [
   {
    "Appliance": "ips_149",
    "Last Login IP": " x.x.x.x",
    "Last Login time": "2021-07-17 05:26:48",
    "Login Realm": "Users",
    "Role": "Users",
    "User": "test1",
    "User Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
   }
  ]
 }
}

PUT APIs to Delete single/ Multiple User

PUT /api/v1/license/named-users/<ics>

Not applicable to license client or independent ICS

Delete list of ICS named users on license server as required.

Copy
Content Type: json
{
    "action" : "remove",
    "users" : "<list of users>"
}

PUT /api/v1/license/named-users

Not applicable on license server.

Delete Named users list on license client or independent ICS

Copy
Content Type: json
{
    "action" : "remove",
    "delete-active-sessions": "true|false"
    "users" : "<list of users>"
}

PUT APIs to remove all users

PUT /api/v1/license/named-users/<ics>

Not applicable to license client or independent ICS

Delete list of ICS named users on license server as required.

Copy
Content Type: json
{
    "action": "remove-all"
}

PUT /api/v1/license/named-users

Not applicable on license server.

Delete Named users list on license client or independent ICS

Copy
Content Type: json
{
    "action": "remove-all",
    "delete-active-sessions": "true|false"
}

delete-active-sessions is an optional argument in PUT APIs. In case it is not specified, it will be considered as false.
For action remove-all, even if the list of users is given, it is ignored and not processed.

Example of PUT API to delete named users list on independent ICS

Copy
REQUESTPUT https://<IP Address>/api/v1/license/named-users HTTP/1.1
Authorization: Basic
Content-Type: application/json
{
    "action" : "remove",
    "delete-active-sessions": "true",
    "users" : ["dev1", "dev2"]
}
RESPONSE
HTTP/1.1 200 OK
Content-Length: 128
Content-Type: application/json
{
    "result": {
    "info": [
    {
     "message": "Deleted user(s) and corresponding active sessions"
    }
  ]
 }
}

Example of PUT API to delete named users list of ICS client from license Server

Copy
REQUEST
PUT https://<IP Address>/api/v1/license/named-users/pcs HTTP/1.1
Authorization: Basic
Content-Type: application/json
{
    "action" : "remove",
    "users" : ["dev1", "dev3"]
}
RESPONSE
HTTP/1.1 200 OK
Content-Length: 94
Content-Type: application/json
{
    "result": {
    "info": [
    {
     "message": "Deleted user(s)"
    }
  ]
 }
}

Example of PUT API to delete all named users list on independent ICS

Copy
REQUEST
PUT https://<IP Address>/api/v1/license/named-users HTTP/1.1
Authorization: Basic
Content-Type: application/json
{
    "action" : "remove-all",
    "delete-active-sessions": "false"
}
RESPONSE
HTTP/1.1 200 OK
Content-Length: 98
Content-Type: application/json
{
    "result": {
    "info": [
    {
     "message": "Deleted all user(s)"
    }
  ]
 }
}