FMC REST API Reference
API Architecture
Three API Services
| Service | Base Path | Purpose |
|---|---|---|
fmc_config |
|
Device configuration, policies, objects, rules, NAT, routing, VPN, deployment. |
fmc_platform |
|
Authentication, token management, server info, domain listing, task status. |
fmc_tid |
|
Threat Intelligence Director — TAXII feeds, indicators, observables. |
FMC vs FDM
| FMC REST API | FDM API | |
|---|---|---|
Manages |
Multiple FTDs centrally |
Single FTD locally (no FMC) |
Base path |
|
|
Auth |
Token via header ( |
OAuth 2.0 |
Reference |
| The Cisco DevNet FTD API Reference documents the FDM API, not FMC. FDM endpoints do not work against FMC. |
API Explorer
Every FMC has a built-in API Explorer at <FMC_HOST>/api/api-explorer that documents every endpoint for your specific version.
Authentication
Token Lifecycle
| Property | Value |
|---|---|
Token lifetime |
30 minutes |
Refresh limit |
3 refreshes per token pair |
Maximum session |
~120 minutes (30 min + 3 × 30 min refreshes) |
Concurrent tokens |
3 per user |
GUI conflict |
Same user cannot use GUI and API simultaneously — one gets logged out |
Auth method |
HTTP Basic Auth for token generation; |
Endpoints
| Endpoint | Method | Purpose |
|---|---|---|
|
POST |
Generate access + refresh token (Basic Auth required) |
|
POST |
Refresh token (both tokens in headers, no credentials) |
|
GET |
List domains and their UUIDs |
|
GET |
FMC software version |
Query Parameters
| Parameter | Default | Description |
|---|---|---|
expanded |
false |
|
limit |
25 |
Items per page. Maximum: 1000. |
offset |
0 |
Starting position for pagination. |
filter |
(none) |
Object-specific filtering. Varies by endpoint. |
Rate Limiting
| Constraint | Value |
|---|---|
GET requests |
120/min per IP (300/min on FMC 7.6+) |
Non-GET |
1 at a time per device (serialized) |
Concurrent connections |
10 per IP |
Max payload |
2,048,000 bytes (~2 MB) |
Rate limit error |
HTTP 429 |
Error Codes
| Code | Meaning |
|---|---|
200 |
Success |
201 |
Created |
400 |
Bad request — malformed JSON or invalid parameters |
401 |
Unauthorized — token expired or missing |
403 |
Forbidden — RBAC insufficient |
404 |
Not found |
422 |
Payload too large or validation failure |
429 |
Rate limited — back off |
500 |
FMC internal error |
Endpoint Reference — fmc_config
All paths relative to /api/fmc_config/v1/domain/{domainUUID}/
Devices
| Endpoint | Methods |
|---|---|
|
GET |
|
GET |
|
GET |
|
GET |
|
GET, POST |
|
GET |
|
GET |
Objects — Network
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET (read-only aggregate) |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
Objects — Service / Port
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
Objects — Other
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET |
|
GET |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
Policies — Access Control
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, PUT |
Policies — Prefilter, NAT, Intrusion
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
VPN
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
Routing
| Endpoint | Methods |
|---|---|
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
|
GET, POST, PUT, DELETE |
Assignment / Deployment
| Endpoint | Methods | Note |
|---|---|---|
|
GET, POST, PUT |
Policy-to-device mapping |
|
GET |
Devices with pending changes |
|
GET |
What changed |
|
POST |
Trigger deployment (write) |
Audit
| Endpoint | Methods |
|---|---|
|
GET |
Endpoint Reference — fmc_platform
| Endpoint | Methods |
|---|---|
|
POST |
|
POST |
|
GET |
|
GET |
|
GET |
There is no token introspection endpoint. GET /auth/token returns an error ("Authentication resource supports only POST action"). To verify your API user’s role, check the FMC GUI: System → Users.
|
Operational Notes
Terminal Function Definitions
Do not paste multi-line shell functions into the terminal — line wrapping corrupts tokens inside strings (e.g., Content-T + ype). Define functions as single lines:
fmc_get() { /usr/bin/curl -sS -k -H "X-auth-access-token: ${ACCESS_TOKEN}" -H "Content-Type: application/json" "https://${FMC_HOST}/api/fmc_config/v1/domain/${DOMAIN_UUID}${1}"; }
Multi-line format is safe only in sourced scripts.
Pagination
Default limit is 25. Always pass limit=1000 (maximum) for audit queries. Check jq '.paging' to verify you’re not truncated.
-k and --cacert
When using -k (TLS bypass), --cacert has no effect — omit it. After certificate renewal, remove -k and restore --cacert.
EtherChannel Interfaces
If physical interfaces show no zone assignments, check EtherChannel (port-channel) interfaces — zones may be assigned there instead.