Cisco DNA Center
Domain 4, Cisco DNA Center, covers the controller's intent API: authenticating, inventorying devices, running show commands at scale, deploying templates, imaging, plug-and-play onboarding, and polling asynchronous tasks. The exam mostly asks which endpoint family applies and which step comes next in a workflow.
Authentication and base paths
DNA Center splits its API. The token comes from POST https://{dnac}/dna/system/api/v1/auth/token using HTTP Basic credentials; the reply carries Token, which later calls send as X-Auth-Token. Configuration and monitoring endpoints sit under /dna/intent/api/v1/. Tokens expire, so a long-running script must catch 401 and re-authenticate instead of crashing.
Endpoint families
- Inventory:
/network-device,/network-device/{id},/network-device/count. - Sites and health:
/site,/site-health,/sites. - Templates:
/template-programmer/project,/template-programmer/template,/template-programmer/template/version/{id},POST /template-programmer/template/deploy. - PnP:
/onboarding/pnp-device,/pnp-global-setting. - Images:
/image/importation, then activation. - Command Runner:
POST /network-device-poller/cli/read-requestwithcommandsanddeviceUuids.
The asynchronous pattern
Most mutating calls return a task envelope such as {"response": {"taskId": "..."}, "version": "1.0"}. Poll /dna/intent/api/v1/task/{taskId} until endTime is present and isError is false. Command Runner adds a hop, because the task result carries a fileId that you fetch from /file/{fileId}.
Templates
Templates use Apache Velocity: $__device.hostname, $__siteName, $__interface plus custom variables resolved at deploy time. A template belongs to a project, has versions, and deployment targets a version ID rather than the template name.
Worked example
Push a new NTP server to 60 devices. Get a token; GET /template-programmer/template?name=BaseConfig for the template; GET /template-programmer/template/version/{templateId} for the current version and its variables; then POST /template-programmer/template/deploy with the version templateId, forcePush: true, and targetInfo entries carrying each device id, type: "MANAGED_DEVICE_UUID" and params. Capture the taskId and poll it. Reasoning: the deploy is asynchronous, so acceptance is not completion, and the unversioned ID fails validation.
Traps
- Calling the token endpoint under
/dna/intent/api/v1/. - Deploying with the template name or an unversioned ID.
- Using a PnP device ID where a network-device UUID is required.
- Treating deploy acceptance as completion.
- Ignoring 401 on hour-long runs instead of refreshing the token.