ISE ERS API Complete Command Reference
Complete command reference for managing Cisco ISE via the External RESTful Services (ERS) API using netapi.
Overview
The ERS API (Port 9060) provides configuration management for ISE. All commands require authentication via dsec.
# Load credentials from dsec
DSEC_SECURITY_MODE=permissive eval $(dsec source d000 dev/network)
# Or set manually
export ISE_PAN_IP="10.50.1.21"
export ISE_API_USER="ers_admin"
export ISE_API_PASS="your_password"
Endpoint Management
Get Endpoint
Retrieve detailed information about a specific endpoint by MAC address.
netapi ise get-endpoint <MAC_ADDRESS>
Example:
netapi ise get-endpoint b4:e9:b8:f6:c8:17
Output:
{
"id": "uuid-here",
"name": "b4:e9:b8:f6:c8:17",
"mac": "B4:E9:B8:F6:C8:17",
"groupId": "endpoint-identity-group-id",
"staticGroupAssignment": true,
"description": "Dr. Shahab workstation"
}
Create Endpoint
Pre-register an endpoint with optional group assignment.
netapi ise create-endpoint <MAC_ADDRESS> \
--group <GROUP_NAME> \
--description "<DESCRIPTION>"
Example:
netapi ise create-endpoint b4:e9:b8:f6:c8:17 \
--group "Linux-Research-Onboarding" \
--description "chlxsbg.la.ad.chla.org - SRT Building 9th Floor"
Use Cases: - Pre-register devices before deployment - Assign to onboarding groups for MAB authentication - Track device ownership and location
Update Endpoint
Modify existing endpoint attributes including group membership, description, and static assignment flags.
netapi ise update-endpoint <MAC_ADDRESS> \
--group <NEW_GROUP_NAME> \
--description "<NEW_DESCRIPTION>" \
--static-group \
--static-profile
Options:
- --group - Set endpoint identity group
- --description - Update endpoint description
- --static-group - Enable static group assignment (prevents profiling override)
- --static-profile - Enable static profile assignment
- --no-static-group - Disable static group assignment
- --no-static-profile - Disable static profile assignment
Example (Migration Scenario):
# Move from onboarding to production with static assignment
netapi ise update-endpoint b4:e9:b8:f6:c8:17 \
--group "Linux-Research-Production" \
--description "Migrated to EAP-TLS - 2026-01-28" \
--static-group
|
Known Limitation (ciscoisesdk): Due to a bug in the underlying ciscoisesdk library, the Workaround: Use ISE GUI to set endpoint group with "Static Assignment" checkbox enabled. See: |
Update Endpoint Group
Convenience command to quickly change an endpoint’s identity group assignment.
netapi ise update-endpoint-group <MAC_ADDRESS> <GROUP_NAME> [--static/--no-static]
Options:
- --static - Enable static group assignment (default: true)
- --no-static - Allow ISE profiling to change group
Example:
# Move endpoint to Linux-Research-Onboarding group with static assignment
netapi ise update-endpoint-group b4:e9:b8:f6:c8:17 "Linux-Research-Onboarding" --static
# Quick group change (static by default)
netapi ise update-endpoint-group 00:11:22:33:44:55 "Blacklist"
|
Critical ISE Profiling Behavior: Without static assignment enabled, ISE Profiling service will automatically override manual group assignments. Endpoints will be moved to system groups like "Unknown" or "Profiled" during profiling runs. To ensure group assignment persists:
1. Always use Verification:
|
|
Known Limitation (ciscoisesdk): This command may fail to properly set Symptoms:
- Command reports success but groupId doesn’t change
- Endpoint remains in "Unknown" or "Profiled" system groups
- Workaround: Use ISE GUI: 1. Navigate to Context Visibility → Endpoints 2. Search for MAC address 3. Edit endpoint 4. Set identity group and CHECK "Static Assignment" checkbox 5. Save Technical Details: See |
Delete Endpoint
Remove endpoint registration from ISE.
netapi ise delete-endpoint <MAC_ADDRESS>
|
Deleting an endpoint removes it from ISE’s endpoint database. The device will be treated as unknown on next authentication attempt. |
List Endpoints
Retrieve all registered endpoints (paginated).
netapi ise list-endpoints [--limit <NUM>] [--offset <NUM>]
Example:
# First 100 endpoints
netapi ise list-endpoints --limit 100
# Next 100 (pagination)
netapi ise list-endpoints --limit 100 --offset 100
List Endpoint Groups
Retrieve all endpoint identity groups.
netapi ise list-endpoint-groups
Common Groups:
- Blacklist
- GuestEndpoints
- Profiled
- Unknown
- Custom groups (e.g., Linux-Research-Onboarding)
Create Endpoint Group
Create a new endpoint identity group.
netapi ise create-endpoint-group <GROUP_NAME> \
--description "<DESCRIPTION>"
Example:
netapi ise create-endpoint-group "Linux-Research-Onboarding" \
--description "Linux devices in MAB onboarding phase before EAP-TLS"
Delete Endpoint Group
Remove a custom endpoint identity group from ISE.
netapi ise delete-endpoint-group <GROUP_NAME>
Example:
netapi ise delete-endpoint-group "Old-Test-Group"
|
Restrictions: - Cannot delete system-defined groups (Profiled, Unknown, Blacklist, etc.) - Cannot delete groups that have endpoints assigned to them - Must first move or delete all endpoints from the group before deletion Best Practice: Verify no endpoints are using the group:
|
dACL Management
Get dACL
Retrieve a downloadable ACL configuration by name.
netapi ise get-dacl <DACL_NAME>
Example:
netapi ise get-dacl "DACL_Linux_Research_EAP_TLS"
Create dACL
Create a new downloadable ACL with specified rules.
netapi ise create-dacl <DACL_NAME> \
--descr "<DESCRIPTION>" \
--acl "<ACL_RULES>"
Example (Zero-Trust dACL):
netapi ise create-dacl "DACL_Linux_Research_EAP_TLS" \
--descr "Zero-trust ACL for Linux EAP-TLS" \
--acl "
permit udp any host 10.100.11.24 eq 53
permit udp any host 10.100.11.25 eq 53
permit udp any any eq 123
permit tcp any host 10.112.118.141 eq 88
permit tcp any host 10.112.118.141 eq 389
permit tcp any host 10.112.118.141 eq 636
permit tcp any host 10.101.2.131 eq 8443
permit tcp any host 10.101.2.132 eq 8443
permit ip any host 10.134.144.109
permit icmp any any
permit tcp any any eq 80
permit tcp any any eq 443
deny ip any 10.0.0.0 0.255.255.255 log
deny ip any 172.16.0.0 0.15.255.255 log
deny ip any 192.168.0.0 0.0.255.255 log
permit ip any any
"
|
ACL Ordering Matters!
|
Update dACL
Modify an existing dACL’s rules or description.
netapi ise update-dacl <DACL_NAME> \
--descr "<NEW_DESCRIPTION>" \
--acl "<NEW_ACL_RULES>"
Authorization Profile Management
Get Authorization Profile
Retrieve authorization profile details.
netapi ise get-authz-profile <PROFILE_NAME>
Example:
netapi ise get-authz-profile "Linux_Research_EAP_TLS"
Create Authorization Profile
Create a new authorization profile with dACL, VLAN, and reauth timer.
netapi ise create-authz-profile <PROFILE_NAME> \
--dacl <DACL_NAME> \
--vlan <VLAN_ID_OR_NAME> \
--reauth <SECONDS> \
--descr "<DESCRIPTION>"
Example:
netapi ise create-authz-profile "Linux_Research_EAP_TLS" \
--dacl "DACL_Linux_Research_EAP_TLS" \
--vlan "Research-VLAN" \
--reauth 28800 \
--descr "Hardened profile for Linux workstations with EAP-TLS"
Parameters:
- --dacl: Downloadable ACL name
- --vlan: VLAN ID (e.g., 50) or name (e.g., Research-VLAN)
- --reauth: Reauthentication timer in seconds (28800 = 8 hours)
Update Authorization Profile
Modify existing authorization profile.
netapi ise update-authz-profile <PROFILE_NAME> \
--dacl <NEW_DACL_NAME> \
--vlan <NEW_VLAN> \
--reauth <NEW_SECONDS>
Authorization Rules
Get Authorization Rules
Retrieve all rules in a policy set.
netapi ise get-authz-rules <POLICY_SET_NAME>
Example:
# MAB policy set
netapi ise get-authz-rules "Wired Closed MAB"
# DOT1X policy set
netapi ise get-authz-rules "Wired Closed DOT1X"
Add Authorization Rule
Add a new authorization rule to a policy set.
netapi ise add-authz-rule <POLICY_SET> <RULE_NAME> <AUTHZ_PROFILE> \
[--condition "<CONDITION>"] \
[--rank <POSITION>]
Example (Endpoint Group Condition):
netapi ise add-authz-rule "Wired Closed MAB" \
"Linux_Research_Onboard" \
"Research_Onboard" \
--condition "IdentityGroup:Name EQUALS Endpoint Identity Groups:Linux-Research-Onboarding" \
--rank 5
Example (AD Group Condition):
netapi ise add-authz-rule "Wired Closed DOT1X" \
"Linux_Research_EAP_TLS_Rule" \
"Linux_Research_EAP_TLS" \
--condition "INSIDE-AD:ExternalGroups CONTAINS inside.domusdigitalis.dev/Groups/Research/GRP-Research-Linux-Workstations" \
--rank 3
|
Rank/Position: Lower numbers = higher priority. ISE evaluates rules top-to-bottom. |
Network Device Management
Get Network Device
Retrieve NAD (Network Access Device) configuration.
netapi ise get-nad <DEVICE_NAME_OR_IP>
Create Network Device
Register a new network device (switch, WLC, etc.) in ISE.
netapi ise create-nad <DEVICE_NAME> \
--ip <IP_ADDRESS> \
--shared-secret <RADIUS_SECRET> \
[--group <DEVICE_GROUP>]
Example:
netapi ise create-nad "SRT-9-9300" \
--ip "10.238.179.1" \
--shared-secret "strong_radius_secret_here" \
--group "Location#All Locations#SRT Building"
Identity Store Management
Common Workflows
Workflow 1: Endpoint Onboarding (MAB)
# Step 1: Create endpoint group
netapi ise create-endpoint-group "Linux-Research-Onboarding" \
--description "Linux devices in onboarding phase"
# Step 2: Create permissive dACL
netapi ise create-dacl "DACL_Research_Onboard" \
--descr "Permissive onboarding policy" \
--acl "permit udp any any eq 53
permit tcp any any eq 88
permit tcp any any eq 389
permit tcp any any eq 443
permit ip any any"
# Step 3: Create authorization profile
netapi ise create-authz-profile "Research_Onboard" \
--dacl "DACL_Research_Onboard" \
--vlan "Research-VLAN" \
--reauth 28800
# Step 4: Add authz rule to MAB policy
netapi ise add-authz-rule "Wired Closed MAB" \
"Linux_Research_Onboard" \
"Research_Onboard" \
--condition "IdentityGroup:Name EQUALS Endpoint Identity Groups:Linux-Research-Onboarding"
# Step 5: Pre-register endpoint
netapi ise create-endpoint b4:e9:b8:f6:c8:17 \
--group "Linux-Research-Onboarding" \
--description "chlxsbg - Onboarding"
Workflow 2: Migration to EAP-TLS
# Step 1: Create hardened dACL (zero-trust)
netapi ise create-dacl "DACL_Linux_Research_EAP_TLS" \
--descr "Zero-trust ACL" \
--acl "<zero-trust-rules>"
# Step 2: Create hardened authz profile
netapi ise create-authz-profile "Linux_Research_EAP_TLS" \
--dacl "DACL_Linux_Research_EAP_TLS" \
--vlan "Research-VLAN" \
--reauth 28800
# Step 3: Add authz rule to DOT1X policy
netapi ise add-authz-rule "Wired Closed DOT1X" \
"Linux_Research_EAP_TLS_Rule" \
"Linux_Research_EAP_TLS" \
--condition "AD-GROUP-CONDITION-HERE"
# Step 4: Update endpoint group
netapi ise update-endpoint b4:e9:b8:f6:c8:17 \
--group "Linux-Research-Production"
# Step 5: Force reauthentication (see MnT API docs)
netapi ise mnt coa b4:e9:b8:f6:c8:17
Error Handling
Common Errors
401 Unauthorized:
Check ISE_API_USER and ISE_API_PASS credentials
Verify ERS API is enabled in ISE
404 Not Found:
Resource doesn't exist
Check spelling of dACL/profile/endpoint names
409 Conflict:
Resource already exists
Use update instead of create
Or delete existing resource first
500 Internal Server Error:
ISE configuration error
Check ISE logs: /opt/CSCOcpm/logs/
Verify ACL syntax if creating dACL
Best Practices
-
Always use dsec for credentials - Never hardcode secrets
-
Test dACLs in onboarding first - Before applying to production
-
Use descriptive names - Include purpose/environment in names
-
Document ACL ordering - Comment critical permit statements
-
Monitor after changes - Use MnT API to verify sessions
-
Backup before major changes - Export configs regularly
-
Use endpoint groups - Don’t hardcode MAC addresses in rules
-
Follow naming conventions - Consistent prefixes (DACL_, Linux_, etc.)