ISE ERS API Patterns
ISE ERS API patterns from production 802.1X deployments. Every entry has a date and context.
2026-04-02: Register Endpoint for iPSK via ERS
Problem: New machine needs MAC address registered in ISE for iPSK WiFi access before certificates are available.
Context: P16g deployment, bootstrapping network access. WiFi requires iPSK authentication — ISE policy checks the device MAC against the iPSK Manager via secure ODBC. The MAC must be registered in the DOMUS-IoT group BEFORE WiFi will work.
The Fix:
# Register endpoint MAC via netapi
netapi ise endpoint create --mac "XX:XX:XX:XX:XX:XX" --group "DOMUS-IoT"
# Or via curl to ERS directly
curl -k -X POST \
-u "$ISE_API_USER:$ISE_API_PASS" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
https://ise-01.inside.domusdigitalis.dev:9060/ers/config/endpoint \
-d '{"ERSEndPoint": {"mac": "XX:XX:XX:XX:XX:XX", "groupId": "...", "staticGroupAssignment": true}}'
# Verify registration via DataConnect
netapi ise dc endpoint E0:D5:5D:6C:E1:66
netapi ise dc auth-history E0:D5:5D:6C:E1:66 --hours 1
Rule: iPSK registration = create endpoint with MAC + assign to identity group via ERS. Verify with netapi ise dc endpoint or DataConnect query. iPSK uses MAB — ISE matches MAC against the iPSK Manager ODBC source.
Worklog: WRKLOG-2026-04-02
2026-03-22: ERS Pagination (page + size parameters)
Problem: ERS GET requests return max 20 results by default. Missing endpoints in large deployments.
Context: ISE endpoint audit, CHLA environment with thousands of endpoints
The Fix:
# Default returns only first 20
curl -k -u "$ISE_API_USER:$ISE_API_PASS" \
-H "Accept: application/json" \
https://ise-01.inside.domusdigitalis.dev:9060/ers/config/endpoint
# Paginate with page and size
curl -k -u "$ISE_API_USER:$ISE_API_PASS" \
-H "Accept: application/json" \
"https://ise-01.inside.domusdigitalis.dev:9060/ers/config/endpoint?page=1&size=100"
# Response includes total count:
# "SearchResult": {"total": 1847, "resources": [...]}
Rule: ERS defaults to 20 results per page. Always set ?size=100 (max). Use total from response to know when to stop paginating.
Worklog: WRKLOG-2026-03-22