Back to Blog
โ˜…โ˜…โ˜…Advanced๐Ÿข Data Center / Cloud
Cisco ACIData CenterSDNAPICSpine-LeafContracts

Cisco ACI Fundamentals: Tenants, EPGs, Contracts, and Day-2 Operations

March 13, 2026ยท23 min read

Overview

Cisco ACI (Application Centric Infrastructure) is Cisco's policy-based SDN solution for data center fabrics. The fundamental departure from traditional networking is this: you never log into a spine or leaf switch and type forwarding policy. Instead, every forwarding decision โ€” which VLANs exist, which endpoints can talk to which, what happens to traffic crossing a zone boundary โ€” is defined as objects in the APIC (Application Policy Infrastructure Controller) and pushed down to the hardware on-demand.

Traditional networks are configured imperatively: you SSH to each switch, create VLANs, configure trunk ports, add ACLs. ACI is declarative: you define the desired state in the APIC object store, and the system figures out which ASICs need which TCAM entries. A leaf switch that has no endpoints belonging to an EPG literally has no VLAN deployed on it โ€” the hardware stays clean until traffic needs to flow.

This has real operational consequences. Day-2 troubleshooting requires understanding the policy model, not just reading interface counters. A packet drop might be a contract miss (no policy permitting the flow), a missing static binding (endpoint not assigned to an EPG on that port), or an endpoint not learned (leaf hasn't seen the MAC/IP yet). The APIC gives you visibility into all of these through atomic counters, fault objects, and the endpoint tracker.

Key ACI differentiators vs. traditional Nexus:

  • Policy is centrally defined โ€” no per-switch VLAN/ACL config
  • Whitelist security model โ€” EPG-to-EPG traffic is denied by default without a contract
  • iVXLAN/VXLAN underlay with MP-BGP EVPN control plane (automatic, no manual config)
  • IS-IS runs as the underlay routing protocol between spine and leaf (not OSPF)
  • APICs are not in the data path โ€” fabric forwards at line rate even if APIC is down

ACI Physical Fabric

The physical fabric has three types of nodes: APIC controllers, spine switches, and leaf switches. Understanding what each does โ€” and critically, what each does not do โ€” prevents hours of troubleshooting confusion.

APIC Cluster

Deploy a minimum of 3 APIC nodes for production HA. APICs run a distributed object store using a Raft-based consensus protocol. The cluster elects a leader; all nodes hold full copies of the policy database. Critically: APICs are not in the data path. If all three APICs go offline, the fabric continues forwarding based on the last-pushed policy. No traffic interruption occurs from APIC failure โ€” you just lose the ability to make changes.

APIC nodes connect to leaf switches (not spines) via a dedicated infra VLAN (VLAN 4093 by default). The APIC-to-leaf link is a standard 10G/25G port, usually eth1/1.

Spine Switches (Nexus 9500 series)

Spines run only two protocols: IS-IS for the underlay (TEP/VTEP reachability) and MP-BGP EVPN for the overlay control plane. Spines never connect to servers or external networks directly โ€” they connect only to leaf switches. Every spine connects to every leaf (full mesh). Spine count is typically 2 for small fabrics, up to 4โ€“6 for large deployments.

Leaf Switches (Nexus 9300 series)

Leaves connect to everything: servers, storage, external routers (for L3Out), APICs, and other leaf switches in a vPC pair. Every leaf connects to every spine. Leaves learn endpoint MAC/IP addresses and report them to the APIC via OpFlex (a policy protocol over HTTPS). The leaf is where EPG policy is enforced โ€” ingress and egress TCAM entries from contracts live on the leaf ASIC.

Underlay: IS-IS + iVXLAN

ACI uses IS-IS (not OSPF) to distribute TEP (Tunnel Endpoint) addresses โ€” each leaf and spine gets a unique TEP IP from the infra address pool (typically 10.0.0.0/16). iVXLAN adds an extra shim header to standard VXLAN carrying ACI-specific policy metadata (src-EPG class ID). MP-BGP EVPN distributes endpoint (MAC/IP) information across the fabric so leaves can build forwarding tables without flooding.

// ACI PHYSICAL FABRIC โ€” SPINE-LEAF WITH APIC CLUSTER APIC-1 Controller 10.0.0.1 APIC-2 Controller 10.0.0.2 APIC-3 Controller 10.0.0.3 Spine-101 N9K-9508 TEP: 10.0.32.64 Spine-102 N9K-9508 TEP: 10.0.32.65 OpFlex / HTTPS mgmt Leaf-101 N9K-9348 TEP: 10.0.32.96 Leaf-102 N9K-9348 TEP: 10.0.32.97 Leaf-103 N9K-9348 (Border) TEP: 10.0.32.98 IS-IS underlay + iVXLAN/MP-BGP EVPN fabric links Srv-A 10.1.1.10 Srv-B 10.1.1.11 Srv-C 10.1.2.10 Ext-Router L3Out / BGP peer

ACI Logical Object Model

The logical hierarchy is what separates ACI from every other network OS. You are not configuring interfaces and VLANs โ€” you are building a policy model that describes who can talk to whom and what network services they share. The hardware configuration is derived automatically.

Tenant

A Tenant is an administrative domain โ€” a container for all the other objects. ACI ships with three built-in tenants: common (shared services: DNS, NTP, shared L3Outs), mgmt (APIC management), and infra (fabric underlay). You create one tenant per application, business unit, or customer depending on your operational model. Tenants provide fault isolation โ€” objects in one tenant cannot accidentally leak into another.

VRF (Context)

Inside a Tenant, a VRF defines one L3 routing domain. Think of it as a routing table โ€” all Bridge Domains in the same VRF share the same IP space and can route to each other (subject to contracts). A tenant can have multiple VRFs for complete L3 separation (e.g., Production VRF and Dev VRF that must never communicate).

Bridge Domain (BD)

A BD is ACI's replacement for a VLAN. It is the L2 forwarding domain and always belongs to exactly one VRF. A BD can have multiple subnets โ€” you configure the gateway IP on the BD, and ACI's distributed anycast gateway responds on every leaf simultaneously (same MAC, same IP, no STP). A BD maps to a VXLAN VNI in the underlay. Key BD settings: unicast routing (enable/disable), ARP flooding (flood vs. proxy), L3 subnet with scope (private/public/shared).

EPG (Endpoint Group)

An EPG is a collection of endpoints that share the same forwarding and security policy. It always belongs to exactly one BD. The EPG is what gets a VLAN ID on the wire โ€” you create a static port binding that says "port eth1/5 on leaf-101, VLAN 100 = this EPG." When an endpoint sends traffic on that port/VLAN, it is classified into the EPG and the ASIC applies EPG-based TCAM rules.

EPGs can also be associated with VMM domains (VMware vCenter integration), which automates port group creation in vSphere โ€” the leaf trunk port gets the VLAN automatically when a VM is attached in vCenter.

Endpoint

The actual host or VM. ACI learns endpoints via ARP/RARP/DHCP snooping on the leaf. When learned, the leaf reports the endpoint (MAC + IP + location: leaf node + port + VLAN) to the APIC via OpFlex. The APIC stores this in the endpoint tracker, giving you a full history of where every IP address has been โ€” invaluable during VM live migration troubleshooting.

// ACI LOGICAL OBJECT HIERARCHY Tenant: Prod-App Administrative Domain VRF: Prod-VRF L3 Routing Domain / IP Space Bridge Domain: Prod-BD GW: 10.1.0.1/16 โ€” VNI 10100 EPG: Web-EPG VLAN 100 / Class-ID: 16386 EPG: App-EPG VLAN 101 / Class-ID: 16387 10.1.1.10 10.1.1.11 10.1.2.10 10.1.2.11

The key insight is that two EPGs sitting in the same Bridge Domain are on the same L2 segment โ€” but they still cannot communicate at L3 without a contract. This is the whitelist model: topology determines reachability, but policy determines whether traffic is actually forwarded.


Contracts and Filters

Contracts are the heart of ACI's security model. The default behavior between any two EPGs is deny all โ€” there is no implicit permit-same-subnet rule, no VRF-level allow, nothing. If you don't configure a contract, traffic doesn't flow. Period.

Filter

A Filter defines what traffic to match: protocol (TCP/UDP/ICMP) + destination port + optionally source port and DSCP. You create filters as reusable objects at the Tenant level. A single filter entry might say "TCP, dst-port 8080" โ€” that's it. Filters are intentionally simple so they can be reused across many contracts.

Subject

A Subject groups one or more filters and specifies directionality: both (bidirectional โ€” preferred for most use cases), Provider-to-Consumer only, or Consumer-to-Provider only. Subjects also control whether QoS policy is applied and whether reverse port filtering is needed. One contract can have multiple subjects with different filter sets and different directionalities.

Contract

A Contract contains one or more subjects. The contract is the policy object you export (Provider EPG) and import (Consumer EPG). Contracts live at the Tenant level and can be shared across application profiles within the same tenant.

Provider and Consumer

When you bind a contract to EPGs, you designate one EPG as the provider (the service being accessed) and one as the consumer (the client making requests). The convention is: the EPG offering a service provides the contract; the EPG consuming the service imports it. Traffic from Consumer to Provider is permitted by the filter definition. With a bidirectional subject, return traffic is also permitted. If you get the direction wrong โ€” consumer set as provider or vice versa โ€” traffic drops silently with no obvious error message. This is the single most common ACI misconfiguration in production environments.

vzAny

vzAny is a special object that represents all EPGs within a VRF simultaneously. Attaching a contract to vzAny applies it to every EPG in that VRF โ€” useful for shared services like DNS (UDP/53) and NTP (UDP/123) that every EPG needs to reach. Be careful: vzAny contracts can unintentionally open large amounts of traffic if the filter is too broad.

// CONTRACT ENFORCEMENT: WHITELIST POLICY MODEL Web-EPG Consumer 10.1.1.0/24 Contract: web-to-app Subject: permit-app Filter: TCP dst 8080 App-EPG Provider 10.1.2.0/24 consume provide DB-EPG No Contract 10.1.3.0/24 DENY ALL (default drop) โœ• vzAny Contract: shared-services All EPGs in VRF โ€” DNS:53, NTP:123, Syslog:514

L3Out โ€” External Network Connectivity

L3Out is how ACI connects to the outside world โ€” WAN edge routers, internet, corporate network, or anything external to the ACI fabric. Without an L3Out, traffic cannot leave the fabric.

Border Leaf

L3Out is configured on a specific leaf or pair of leaves designated as border leaves. The border leaf runs a routing protocol (OSPF, BGP, EIGRP, or static) toward the external router. From the fabric's perspective, the external router is just another endpoint โ€” but one that happens to have routes behind it.

External EPG (l3extInstP)

The external EPG defines what subnets are "outside." You list prefixes here (0.0.0.0/0 for default route, or specific subnets). The external EPG participates in contracts just like an internal EPG โ€” if you want web servers to reach the internet, you create a contract between Web-EPG (consumer) and the external EPG (provider). Without the contract, even if routing works, ACI drops the traffic at the ingress leaf TCAM.

L3Out Configuration Object Hierarchy

The L3Out hierarchy is deeper than internal EPGs: L3Out โ†’ Logical Node Profile (selects which leaves) โ†’ Logical Interface Profile (selects which interfaces) โ†’ Routing protocol configuration โ†’ External EPG with subnet definitions. Each layer has specific attributes, and missing any one causes the routing adjacency or route import to fail, often silently.

Transit Routing

ACI supports transit routing โ€” traffic entering on one L3Out (e.g., from WAN) and exiting another L3Out (e.g., to internet DMZ). This requires the fabric VRF to be shared between both L3Outs and the route reflector (spine) to propagate the routes. Transit routing has scale limits depending on the ACI version and hardware generation.

Preferred Group

By default, every EPG-to-EPG communication (including external EPG) requires a contract. The preferred group feature allows you to mark certain EPGs as trusted โ€” traffic within the preferred group is permitted without contracts. Useful for migration scenarios where you want to bring ACI in without immediately building all contracts. Use sparingly in production โ€” it removes the whitelist enforcement that ACI is designed to provide.


APIC Configuration Workflow

Building a new application tenant in ACI follows a consistent sequence. Skipping steps or building out of order causes objects to fail validation or deploy incorrectly.

Step 1: Create Tenant

Navigate to Tenants โ†’ Add Tenant. Give it a meaningful name matching the application or business unit. ACI creates a default VRF automatically โ€” you can keep or rename it.

Step 2: Create VRF

Tenant โ†’ Networking โ†’ VRFs โ†’ Create VRF. Set policy enforcement to "Enforced" (contracts required) โ€” never use unenforced in production. Set preferred group to disabled unless you have a specific migration reason.

Step 3: Create Bridge Domain

Tenant โ†’ Networking โ†’ Bridge Domains โ†’ Create BD. Associate with your VRF. Add a subnet (the gateway IP that ACI will answer ARP for). Enable unicast routing. ARP mode: if you have unknown unicast flooding needs, set to flood โ€” otherwise ARP proxy (default) is preferred for scale.

Step 4: Create Application Profile and EPGs

Tenant โ†’ Application Profiles โ†’ Create Application Profile (logical grouping of EPGs for a single application). Within the AP, create EPGs. Associate each EPG to a BD. Add static port bindings: select the leaf node, interface, and VLAN. Add a VMM domain if deploying VMs via vCenter.

Step 5: Create Filter and Contract

Tenant โ†’ Contracts โ†’ Filters: create a filter entry specifying EtherType (IP), protocol (TCP/UDP), and destination ports. Tenant โ†’ Contracts: create a Contract, add a Subject, associate the filter. Set filter direction on the subject (both for bidirectional).

Step 6: Bind Contract to EPGs

On the provider EPG: Add Contract โ†’ Provider โ†’ select your contract. On the consumer EPG: Add Contract โ†’ Consumer โ†’ select the same contract. The APIC validates and pushes TCAM entries to all leaves where these EPGs have endpoints.

REST API Equivalents

# Create Tenant via APIC REST API (JSON)
POST https://apic/api/mo/uni.json
{
  "fvTenant": {
    "attributes": {
      "name": "Prod-App",
      "descr": "Production Application Tenant"
    }
  }
}
# Create VRF inside Tenant
POST https://apic/api/mo/uni/tn-Prod-App.json
{
  "fvCtx": {
    "attributes": {
      "name": "Prod-VRF",
      "pcEnfPref": "enforced"
    }
  }
}
# Create Bridge Domain with subnet and VRF association
POST https://apic/api/mo/uni/tn-Prod-App.json
{
  "fvBD": {
    "attributes": {
      "name": "Prod-BD",
      "arpFlood": "no",
      "unicastRoute": "yes"
    },
    "children": [
      {"fvRsCtx": {"attributes": {"tnFvCtxName": "Prod-VRF"}}},
      {"fvSubnet": {"attributes": {"ip": "10.1.1.1/24", "scope": "public"}}}
    ]
  }
}
# Create EPG with static port binding (leaf 101, eth1/5, vlan-100)
POST https://apic/api/mo/uni/tn-Prod-App/ap-App-Profile.json
{
  "fvAEPg": {
    "attributes": {"name": "Web-EPG"},
    "children": [
      {"fvRsBd": {"attributes": {"tnFvBDName": "Prod-BD"}}},
      {"fvRsPathAtt": {
        "attributes": {
          "tDn": "topology/pod-1/paths-101/pathep-[eth1/5]",
          "mode": "regular",
          "encap": "vlan-100"
        }
      }}
    ]
  }
}
# Create Filter entry: TCP dst 8080
POST https://apic/api/mo/uni/tn-Prod-App.json
{
  "vzFilter": {
    "attributes": {"name": "flt-tcp8080"},
    "children": [{
      "vzEntry": {
        "attributes": {
          "name": "tcp8080",
          "etherT": "ip",
          "prot": "tcp",
          "dToPort": "8080",
          "dFromPort": "8080"
        }
      }
    }]
  }
}
# Create Contract with Subject referencing filter
POST https://apic/api/mo/uni/tn-Prod-App.json
{
  "vzBrCP": {
    "attributes": {"name": "web-to-app", "scope": "tenant"},
    "children": [{
      "vzSubj": {
        "attributes": {"name": "permit-app", "revFltPorts": "yes"},
        "children": [
          {"vzRsSubjFiltAtt": {"attributes": {"tnVzFilterName": "flt-tcp8080"}}}
        ]
      }
    }]
  }
}

Day-2 Verification Commands

Once the fabric is running, you live in the NX-OS CLI on leaves and the APIC moquery tool. These are the commands used daily for operational verification.

Endpoint Learning Verification

# Show all locally learned endpoints on a leaf
Leaf-101# show endpoint
Legend: L - local   O - peer-attached   H - vtep   S - static
        V - vpc-attached   a - locally-aged   B - bounce
+-----------------------------------+------------------+-----------+--------+
      VLAN/Domain           MAC Address          Node/Module  Interface
+-----------------------------------+------------------+-----------+--------+
Prod-App:Web-EPG   vlan-100  a0b1.c2d3.e4f5  10.1.1.10   local eth1/5
Prod-App:App-EPG   vlan-101  b1c2.d3e4.f5a6  10.1.2.10   local eth1/7
# Find endpoint by IP address
Leaf-101# show endpoint ip 10.1.1.10
# Find endpoint by MAC address
Leaf-101# show endpoint mac a0b1.c2d3.e4f5
# Show endpoints on a specific interface
Leaf-101# show endpoint interface ethernet 1/5

EVPN Control Plane Verification

# Check BGP EVPN neighbor state (spines are route reflectors)
Leaf-101# show bgp l2vpn evpn summary
BGP summary information for VRF overlay-1, address family L2VPN EVPN
BGP router identifier 10.0.32.96, local AS number 65001
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State
10.0.32.64      4 65001    2341    2100      890    0    0  5d04h    48
10.0.32.65      4 65001    2338    2097      890    0    0  5d04h    48
# Show all EVPN routes for a VNI (L2 VNI for VLAN 100 = VNI 10100)
Leaf-101# show bgp l2vpn evpn vni-id 10100
# Show Type-2 MAC/IP route for a specific endpoint
Leaf-101# show bgp l2vpn evpn route-type 2 mac a0b1.c2d3.e4f5
# Show Type-5 IP prefix routes (L3 inter-subnet routing)
Leaf-101# show bgp l2vpn evpn route-type 5

VXLAN and VNI Mapping

# Show VXLAN VNI to VLAN mapping on leaf
Leaf-101# show vxlan
VLAN      VN-Segment     Type       Intf
100       10100          L2         nve1
101       10101          L2         nve1
3000      3000100        L3 (VRF)   nve1
# Show NVE interface and remote VTEP peers
Leaf-101# show nve peers
Interface  Peer-IP          State  LearnType  Uptime    Router-MAC
nve1       10.0.32.97       Up     CP         5d04h     001b.54a1.bd08
nve1       10.0.32.98       Up     CP         5d04h     001b.54a2.bd09
# Show NVE interface counters
Leaf-101# show interface nve 1 counters

Zoning Rule and Contract Verification

# Show TCAM zoning rules for a VRF scope (get scope from show vrf)
Leaf-101# show vrf
VRF-Name                           VRF-ID  State  Reason
Prod-App:Prod-VRF                  10      Up     --
Leaf-101# show zoning-rule scope 2621440
Rule ID   SrcEPG  DstEPG  Prio              Action  Label
4099      16386   16387   src_dst_any       permit  web-to-app
4100      16387   16386   src_dst_any       permit  web-to-app (reverse)
4101      0       0       any               deny    implicit-deny
# Show contract via APIC moquery
apic# moquery -c vzBrCP -f 'vzBrCP.name=="web-to-app"'
# Run atomic counters between two EPGs to verify traffic
apic# acidiag run atomicCounters epg Prod-App/App-Profile/Web-EPG Prod-App/App-Profile/App-EPG

APIC moquery Reference

# Find endpoint by IP across entire fabric
apic# moquery -c fvCEp -f 'fvCEp.ip=="10.1.1.10"'
# Show endpoint move history
apic# moquery -c fvIpAttr -f 'fvIpAttr.ip=="10.1.1.10"'
# Show all active faults in a tenant
apic# moquery -c faultInst -f 'faultInst.dn~"tn-Prod-App"' -p severity
# Show all leaf nodes in the fabric
apic# moquery -c topSystem -f 'topSystem.role=="leaf"'
# Show deployed EPG port bindings on a specific node
apic# moquery -c fvIfConn -f 'fvIfConn.dn~"node-101"'
# Show L3Out configuration
apic# moquery -c l3extOut -f 'l3extOut.dn~"tn-Prod-App"'

Troubleshooting

ACI troubleshooting is a structured process of eliminating layers: physical fabric up? Endpoint learned? EPG deployed on correct leaf and port? Contract exists? Contract in the right direction? Work through these systematically โ€” jumping to contract issues before verifying endpoint learning wastes time.

Endpoint Not Learned

Symptom: show endpoint ip 10.1.1.10 returns nothing on any leaf.

  • Static port binding missing or wrong: Verify the EPG has a static port binding for the correct node, interface, and VLAN. Use moquery -c fvRsPathAtt -f 'fvRsPathAtt.dn~"Web-EPG"' to check.
  • VLAN not deployed: The VLAN will not appear on the leaf trunk if the EPG has no static binding. Check show vlan id 100 on the leaf.
  • AEP (Attachable Entity Profile) missing: The physical interface policy group must reference an AEP that links to the EPG's domain. Missing AEP means the VLAN is not programmed in the TCAM even if the static binding exists.
  • VM not connected: If using VMM integration, check that the VM's port group in vCenter matches the EPG. An unconnected VM generates no ARP and cannot be learned.

Contract Not Enforcing

Symptom: endpoints are learned, show endpoint shows both sides, but ping and application traffic fail.

  • Provider/consumer reversed: The most common error in production. Verify which EPG is provider and which is consumer. The server offering the service should be provider.
  • Filter direction wrong: If the Subject filter is "Consumer-to-Provider only" and you need bidirectional, change to "both" and add revFltPorts: yes on the subject.
  • Wrong filter entry: TCP vs UDP mismatch, wrong destination port, or EtherType set to "unspecified" instead of "IP" for L4 matches.
  • Contract scope wrong: Inter-tenant contracts require scope "global" โ€” tenant-scope contracts do not cross tenant boundaries.

L3Out Route Not Imported

Symptom: external destinations unreachable despite L3Out configured and BGP neighbor established.

  • External EPG subnet mismatch: The subnet defined in the external EPG must match or be a superset of the route being received. Using 0.0.0.0/0 with scope "import-security" catches all external routes.
  • Contract missing on external EPG: A routing adjacency and route import do not automatically permit traffic. The external EPG still requires a contract binding with the internal EPG.
  • Route-map filtering: ACI auto-generates route-maps based on external EPG subnet definitions. Routes not matching the external EPG are silently dropped at import.

APIC Disconnected from Fabric

Symptom: APIC GUI shows a leaf as "unavailable" or "disconnected" under Fabric โ†’ Inventory.

  • Infra VLAN 4093: The APIC connects to the leaf on VLAN 4093. If this VLAN is pruned or the port is misconfigured, APIC loses connectivity. Check show interface eth1/1 trunk on the leaf.
  • LLDP blocked: ACI uses LLDP for initial node discovery. If LLDP is disabled or blocked by upstream switches between the APIC and leaf, discovery fails.
  • Cluster quorum: Check acidiag avread on any APIC to see cluster leader, quorum state, and which nodes are reachable.
SymptomFirst CheckCommandLikely Cause
Traffic dropped between EPGsContract exists and direction correct?show zoning-rule scope <vnid>Missing or reversed contract
Endpoint not in show endpointStatic port binding configured?moquery -c fvRsPathAttMissing EPG-to-port binding or AEP
External route missing from VRFBGP neighbor state up?show bgp l2vpn evpn summaryL3Out routing not established
VLAN not present on leaf trunkAEP โ†’ Domain โ†’ EPG chain intact?show vlan id <id>AEP or VMM domain not linked to EPG
APIC shows leaf disconnectedInfra VLAN 4093 on uplink?show interface eth1/1 trunkInfra VLAN missing or LLDP blocked
Atomic counter shows dropsFilter entry protocol and port correct?acidiag run atomicCountersWrong L4 protocol or port in filter

ACI Object Model Quick Reference

ACI ObjectMO ClassAPIC DN ExampleTraditional Equivalent
TenantfvTenantuni/tn-Prod-AppAdministrative boundary / VRF instance
VRF (Context)fvCtxuni/tn-Prod-App/ctx-Prod-VRFVRF / routing table
Bridge DomainfvBDuni/tn-Prod-App/BD-Prod-BDVLAN + SVI (anycast GW)
EPGfvAEPguni/tn-Prod-App/ap-AP/epg-Web-EPGVLAN access group + ACL zone
EndpointfvCEpuni/epp/fv-[epg-dn]/node-101/stpathatt-[eth1/5]/conndef/ip-[10.1.1.10]ARP / MAC table entry
ContractvzBrCPuni/tn-Prod-App/brc-web-to-appACL / Security Policy
FiltervzFilteruni/tn-Prod-App/flt-tcp8080ACL entry (protocol + port match)
L3Outl3extOutuni/tn-Prod-App/out-WAN-L3OutBGP/OSPF neighbor + redistribution
External EPGl3extInstPuni/tn-Prod-App/out-WAN-L3Out/instP-ext-epgPrefix-list / route source definition

ACI rewards engineers who understand the object model. Every GUI action, every REST API call, every moquery maps to these managed objects (MOs). When something breaks, trace the DN (distinguished name) of the failing object and query it directly โ€” the fault object attached to it will tell you exactly what the APIC attempted to push and why it failed. The fabric is transparent if you know where to look.