NetBox Data Modeling
Your knowledge of NetBox data models may be outdated. Available model types, field options, and relationship patterns evolve between releases. Prefer retrieval over pre-trained knowledge.
Retrieval Sources
| Source |
URL / Method |
Use for |
| Data model docs |
https://netboxlabs.com/docs/netbox/models/ |
All model types and fields |
| Custom fields docs |
https://netboxlabs.com/docs/netbox/customization/custom-fields/ |
Field types, validation, filtering |
| NetBox repo |
https://github.com/netbox-community/netbox |
Model source code, migrations |
| NetBox MCP server |
If configured — explore existing data model, inspect object schemas |
Discover current structure |
When to Use This Skill
Load this skill when you need to:
- Design a NetBox data model from scratch or extend an existing one
- Choose between custom fields, tags, and config contexts
- Plan bulk data imports (dependency ordering)
- Understand object relationships and hierarchy patterns
- Model sites, IPAM, devices, or tenancy
For API mechanics (authentication, pagination, error handling), see
netbox-api-integration.
NetBox Model Architecture
Base Model Classes
Every NetBox object inherits from one of three base classes:
| Base Class |
Purpose |
Examples |
Key Traits |
| PrimaryModel |
Real infrastructure objects |
Device, Site, Prefix, Rack |
Has description, comments, owner |
| OrganizationalModel |
Categorization/taxonomy |
RIR, IPAM Role, ClusterType |
Unique name + slug |
| NestedGroupModel |
Recursive hierarchies |
Region, Location, DeviceRole |
Parent FK to self (MPTT tree) |
All three inherit from NetBoxModel, which provides: custom fields, tags, export templates, custom links, bookmarks, journaling, change logging, notifications, event rules. Every model you interact with has these features.
NetBox 4.5: DeviceRole and Platform changed from OrganizationalModel to NestedGroupModel — they now support parent-child hierarchies.
App Structure
| App |
Scope |
Key Models |
| dcim |
Physical infrastructure |
Region, Site, Location, Rack, Device, DeviceType, Manufacturer, DeviceRole, Platform, Interface, MACAddress |
| ipam |
IP addressing |
RIR, Aggregate, Prefix, IPAddress, IPRange, VRF, VLAN, VLANGroup, ASN |
| circuits |
Connectivity |
Provider, Circuit, CircuitGroup, VirtualCircuit |
| tenancy |
Ownership |
TenantGroup, Tenant, Contact, ContactAssignment |
| virtualization |
VMs |
ClusterType, Cluster, VirtualMachine, VMInterface, VirtualDisk |
| vpn |
Tunnels/VPNs |
Tunnel, TunnelGroup, L2VPN, IKE/IPSec policies |
| wireless |
Wireless |
WirelessLAN, WirelessLANGroup, WirelessLink |
See references/model-map.md for the complete relationship map.
Core Design Patterns
1. Site & Location Hierarchy
Region (geographic, recursive) SiteGroup (functional, recursive)
\ /
└──────── Site ──────────────┘
│
Location (recursive, within site)
│
Rack → Device
- Regions = geography: continent → country → metro
- SiteGroups = function: production, staging, lab, edge
- Site = a physical facility; optionally assigned to one Region AND/OR one SiteGroup
- Locations = subdivisions within a site: building → floor → room → row
- Use Regions when you need geographic filtering/reporting
- Use SiteGroups when you need functional grouping across geographies
- Both are optional — start simple, add hierarchy when filtering demands it
See references/model-map.md for the complete relationship map and hierarchy design guidance.
2. IPAM Organization
RIR → Aggregate (top-level allocation, e.g., 10.0.0.0/8)
└── Prefix (auto-nests by CIDR containment)
├── child Prefixes
├── IPRange
└── IPAddress
VRF ──── scopes Prefixes, IPAddresses, IPRanges
VLAN ←── linked to Prefix (optional)
Key rules:
- Use
status=container for summary/aggregate prefixes, status=active for allocated
- VRF=null means global routing table. Use VRFs for overlapping address spaces
- Set
enforce_unique=True on VRFs to prevent duplicate prefixes
- Prefixes auto-nest: creating 10.0.1.0/24 inside existing 10.0.0.0/16 builds the tree automatically
Scope pattern (4.x): Prefixes and VLANGroups use CachedScopeMixin — a generic FK (scope_type + scope_id) rather than a direct site FK. VLANGroup scope accepts Region, SiteGroup, Site, Location, Rack, ClusterGroup, Cluster (this full set since 4.5), plus RackGroup as of 4.6.
# Setting scope via API
{"prefix": "10.0.1.0/24", "scope_type": "dcim.site", "scope_id": 42}
3. Device Modeling
Manufacturer → DeviceType (template with component templates)
↓ (instantiation)
DeviceRole + Site + DeviceType → Device (with auto-created components)
- DeviceType defines the hardware template: interface templates, power ports, module bays
- Creating a Device auto-creates components from its DeviceType's templates
- Modules extend devices: module types define additional component templates inserted into module bays
- DeviceRole (4.5: hierarchical) — use for config context matching and classification
- Platform (4.5: hierarchical) — OS/firmware family; optionally tied to a Manufacturer
NetBox 4.5: MACAddress is now a standalone model, not just a field on Interface.
4. Tenant Assignment
Tenant is an optional FK on nearly every PrimaryModel: Site, Device, Rack, Prefix, VLAN, VRF, Circuit, VM, Cluster, IPAddress, etc.
Pattern: TenantGroup (hierarchy) → Tenant → assign to objects
Use cases:
- MSP customer segregation
- Internal department ownership
- Cost center tracking
Anti-pattern: Don't overload Tenant for two dimensions (e.g., both "customer" and "department"). Use Tenant for the primary ownership dimension; use custom fields or tags for secondary dimensions.
5. Contact Assignment
Contacts use a generic relation pattern: ContactAssignment links any object to a Contact with a ContactRole.
Contact + ContactRole + any object → ContactAssignment
ContactGroups organize contacts hierarchically. Multiple contacts with different roles can be assigned to the same object.
Extending the Data Model
Decision: Custom Field vs Tag vs Config Context
| Question |
→ Custom Field |
→ Tag |
→ Config Context |
| Does it have a value beyond yes/no? |
✅ |
❌ |
✅ |
| Applied across many object types? |
❌ (scoped) |
✅ |
❌ (devices/VMs only) |
| Need to filter/search by it? |
✅ |
✅ |
❌ (not directly) |
| Used by automation/config rendering? |
❌ |
❌ |
✅ |
| Inherited/computed from hierarchy? |
❌ |
❌ |
✅ |
| Per-object unique value? |
✅ |
❌ |
❌ (matched by criteria) |
Examples:
- Warranty expiry date → custom field (per-device, typed, filterable)
- PCI-compliant → tag (boolean-like, cross-object)
- NTP servers for a site's devices → config context (inherited, used in config rendering)
See references/custom-field-types.md for all field types and decision guidance.
Custom Fields — Key Points
- Types: text, longtext, integer, decimal, boolean, date, datetime, URL, JSON, selection, multi-selection, object, multi-object (13 types — unchanged in 4.6; there is no standalone "color" type)
- JSON fields accept an optional
validation_schema (4.6+) to enforce a JSON Schema on values
- Selection/multi-selection choice sets support per-choice colors (
choice_colors, 4.6+) — this is what release notes call the "color custom field", not a new field type
- Object/multi-object fields create relationships to other NetBox objects — prefer these over storing names in text fields
- Scope to specific object types at creation time
- Group fields with
group_name for UI organization
- Visibility: always / if-set / hidden
- Filter via API:
?cf_<field_name>=<value>
Tags — Key Points
- Properties: name, slug, color, description
- Restrict
object_types to relevant models (don't let every tag appear everywhere)
- Filter via API:
?tag=<slug>
- No value — presence/absence only. If you need a value, use a custom field
Config Contexts — Key Points
- JSON data matched to devices/VMs via: regions, site_groups, sites, locations, device_types, roles, platforms, cluster_types, cluster_groups, clusters, tenant_groups, tenants, tags
- Weight-based merging: lower weight merges first, higher weight overwrites conflicts
- Deep merge for dicts; replace for lists
- Local context data (on device/VM directly) always wins
- ConfigContextProfile enforces JSON Schema validation
- Performance: exclude with
?exclude=config_context when listing devices/VMs
Dependency Order
When bulk-importing data, create objects in dependency order. Required FKs must exist before the dependent object.
High-level order:
- Organizational models (RIR, Manufacturer, ClusterType, DeviceRole, Platform, IPAM Role, RackRole)
- Taxonomy hierarchies (Region, SiteGroup, TenantGroup, Tenant)
- Sites → Locations → Racks
- DeviceTypes (needs Manufacturer)
- Devices (needs DeviceType, DeviceRole, Site)
- IPAM: VRFs → Aggregates → Prefixes → IP Addresses
- VLANGroups → VLANs
- Clusters → VMs
- Circuits (needs Provider, CircuitType)
- Custom fields, tags, config contexts (can be created at any point but best early)
See references/dependency-order.md for the complete ordered list.
Anti-Patterns
- Flat site structure — Not using Regions/SiteGroups with 50+ sites. Kills filtering and reporting.
- Text custom fields as relationships — Use object/multi-object custom field types instead of storing names as text.
- Duplicate dimensions — Having both
cf_environment=production AND tag production. Pick one.
- Ignoring dependency order — Creating devices before sites/device types. Scripts fail on missing FKs.
- Everything in global VRF — Model overlapping address spaces properly with VRFs.
- Overloading tenant — Using tenant for two things. One dimension only; use custom fields for the rest.
- Giant config contexts — Store variables, not entire configs. Use config templates for rendering.
- Unused roles — DeviceRole drives config context matching. Design roles deliberately, use 4.5 hierarchy.
- Prefix without status — Always set container/active/reserved. Container = organizational, active = allocated.
- Hardcoded PKs — Use name/slug for lookups. PKs differ across environments.
Version Notes
NetBox 4.5
| Change |
Impact |
| DeviceRole → NestedGroupModel |
Design role hierarchies (e.g., network → network/router, network/switch) |
| Platform → NestedGroupModel |
Design platform hierarchies (e.g., cisco-ios → cisco-ios/xe, cisco-ios/xr) |
| MACAddress standalone model |
MAC addresses are first-class objects, not just interface fields |
| VirtualDeviceContext |
Model VDCs on multi-tenant devices |
| CachedScopeMixin on Prefix/VLANGroup |
Use scope_type/scope_id instead of direct site FK |
| v2 API tokens |
Use Bearer nbt_<key>.<secret> format |
| ConfigContextProfile |
Validate config context data against JSON Schema |
| VirtualCircuit, CircuitGroup |
New circuit modeling options |
| VirtualDisk |
Disk modeling for VMs |
NetBox 4.6 (all 4.6+ only — don't assume on a 4.5.x instance)
| Change |
Impact |
| VirtualMachineType |
Reusable VM classification (like DeviceType) supplying default platform/vCPUs/memory; endpoint virtualization/virtual-machine-types/. VM gains optional virtual_machine_type FK |
VM cluster now optional |
A VM must be tied to at least one of site, cluster, or device — clusterless VMs attached directly to a Device are now first-class |
| CableBundle |
Logical grouping of cables (conduit/trunk/harness); Cable.bundle FK, optional, does not affect tracing; endpoint dcim/cable-bundles/ |
| RackGroup (flat) |
Secondary, non-hierarchical rack categorization (row/aisle/cage) orthogonal to Location; Rack.group FK; endpoint dcim/rack-groups/. Can scope VLANGroups |
| VLANGroup scope += rackgroup |
rackgroup added to the VLANGroup scope types (full set: region/sitegroup/site/location/rackgroup/rack/clustergroup/cluster) |
ASN role |
ASNs can now carry an ipam Role (Roles classify prefixes, VLANs, and ASNs) |
JSON CF validation_schema |
JSON custom fields can enforce a JSON Schema |
| Choice colors |
Per-choice colors on selection/multiselect choice sets (choice_colors) — not a new field type |
| v1 API tokens |
Deprecated in 4.6, removed in 5.0; v2 nbt_ tokens return plaintext once at creation (4.6.1) |
1---2name: netbox-data-modeling3description: Design and manage NetBox data models effectively. Covers site/location hierarchy, IPAM organization, device modeling, tenant assignment, custom fields vs tags vs config contexts, dependency ordering, and relationship patterns. Use when planning NetBox data structure, importing bulk data, or choosing between extensibility mechanisms.4license: Apache-2.05---67# NetBox Data Modeling89> **Your knowledge of NetBox data models may be outdated.** Available model types, field options, and relationship patterns evolve between releases. Prefer retrieval over pre-trained knowledge.1011## Retrieval Sources1213| Source | URL / Method | Use for |14|--------|-------------|---------|15| Data model docs | `https://netboxlabs.com/docs/netbox/models/` | All model types and fields |16| Custom fields docs | `https://netboxlabs.com/docs/netbox/customization/custom-fields/` | Field types, validation, filtering |17| NetBox repo | `https://github.com/netbox-community/netbox` | Model source code, migrations |18| NetBox MCP server | If configured — explore existing data model, inspect object schemas | Discover current structure |1920## When to Use This Skill2122Load this skill when you need to:23- Design a NetBox data model from scratch or extend an existing one24- Choose between custom fields, tags, and config contexts25- Plan bulk data imports (dependency ordering)26- Understand object relationships and hierarchy patterns27- Model sites, IPAM, devices, or tenancy2829For API mechanics (authentication, pagination, error handling), see30[netbox-api-integration](../netbox-api-integration/SKILL.md).3132## NetBox Model Architecture3334### Base Model Classes3536Every NetBox object inherits from one of three base classes:3738| Base Class | Purpose | Examples | Key Traits |39|-----------|---------|----------|------------|40| **PrimaryModel** | Real infrastructure objects | Device, Site, Prefix, Rack | Has description, comments, owner |41| **OrganizationalModel** | Categorization/taxonomy | RIR, IPAM Role, ClusterType | Unique name + slug |42| **NestedGroupModel** | Recursive hierarchies | Region, Location, DeviceRole | Parent FK to self (MPTT tree) |4344All three inherit from **NetBoxModel**, which provides: custom fields, tags, export templates, custom links, bookmarks, journaling, change logging, notifications, event rules. Every model you interact with has these features.4546> **NetBox 4.5**: DeviceRole and Platform changed from OrganizationalModel to **NestedGroupModel** — they now support parent-child hierarchies.4748### App Structure4950| App | Scope | Key Models |51|-----|-------|------------|52| **dcim** | Physical infrastructure | Region, Site, Location, Rack, Device, DeviceType, Manufacturer, DeviceRole, Platform, Interface, MACAddress |53| **ipam** | IP addressing | RIR, Aggregate, Prefix, IPAddress, IPRange, VRF, VLAN, VLANGroup, ASN |54| **circuits** | Connectivity | Provider, Circuit, CircuitGroup, VirtualCircuit |55| **tenancy** | Ownership | TenantGroup, Tenant, Contact, ContactAssignment |56| **virtualization** | VMs | ClusterType, Cluster, VirtualMachine, VMInterface, VirtualDisk |57| **vpn** | Tunnels/VPNs | Tunnel, TunnelGroup, L2VPN, IKE/IPSec policies |58| **wireless** | Wireless | WirelessLAN, WirelessLANGroup, WirelessLink |5960See [references/model-map.md](references/model-map.md) for the complete relationship map.6162## Core Design Patterns6364### 1. Site & Location Hierarchy6566```67Region (geographic, recursive) SiteGroup (functional, recursive)68 \ /69 └──────── Site ──────────────┘70 │71 Location (recursive, within site)72 │73 Rack → Device74```7576- **Regions** = geography: continent → country → metro77- **SiteGroups** = function: production, staging, lab, edge78- **Site** = a physical facility; optionally assigned to one Region AND/OR one SiteGroup79- **Locations** = subdivisions within a site: building → floor → room → row80- Use Regions when you need geographic filtering/reporting81- Use SiteGroups when you need functional grouping across geographies82- Both are optional — start simple, add hierarchy when filtering demands it8384See [references/model-map.md](references/model-map.md) for the complete relationship map and hierarchy design guidance.8586### 2. IPAM Organization8788```89RIR → Aggregate (top-level allocation, e.g., 10.0.0.0/8)90 └── Prefix (auto-nests by CIDR containment)91 ├── child Prefixes92 ├── IPRange93 └── IPAddress9495VRF ──── scopes Prefixes, IPAddresses, IPRanges96VLAN ←── linked to Prefix (optional)97```9899**Key rules:**100- Use `status=container` for summary/aggregate prefixes, `status=active` for allocated101- VRF=null means global routing table. Use VRFs for overlapping address spaces102- Set `enforce_unique=True` on VRFs to prevent duplicate prefixes103- Prefixes auto-nest: creating 10.0.1.0/24 inside existing 10.0.0.0/16 builds the tree automatically104105**Scope pattern (4.x):** Prefixes and VLANGroups use **CachedScopeMixin** — a generic FK (`scope_type` + `scope_id`) rather than a direct `site` FK. VLANGroup scope accepts **Region, SiteGroup, Site, Location, Rack, ClusterGroup, Cluster** (this full set since 4.5), plus **RackGroup as of 4.6**.106107```python108# Setting scope via API109{"prefix": "10.0.1.0/24", "scope_type": "dcim.site", "scope_id": 42}110```111112### 3. Device Modeling113114```115Manufacturer → DeviceType (template with component templates)116 ↓ (instantiation)117DeviceRole + Site + DeviceType → Device (with auto-created components)118```119120- **DeviceType** defines the hardware template: interface templates, power ports, module bays121- Creating a Device auto-creates components from its DeviceType's templates122- **Modules** extend devices: module types define additional component templates inserted into module bays123- **DeviceRole** (4.5: hierarchical) — use for config context matching and classification124- **Platform** (4.5: hierarchical) — OS/firmware family; optionally tied to a Manufacturer125126> **NetBox 4.5**: MACAddress is now a standalone model, not just a field on Interface.127128### 4. Tenant Assignment129130Tenant is an **optional FK on nearly every PrimaryModel**: Site, Device, Rack, Prefix, VLAN, VRF, Circuit, VM, Cluster, IPAddress, etc.131132**Pattern:** TenantGroup (hierarchy) → Tenant → assign to objects133134**Use cases:**135- MSP customer segregation136- Internal department ownership137- Cost center tracking138139**Anti-pattern:** Don't overload Tenant for two dimensions (e.g., both "customer" and "department"). Use Tenant for the primary ownership dimension; use custom fields or tags for secondary dimensions.140141### 5. Contact Assignment142143Contacts use a **generic relation pattern**: ContactAssignment links any object to a Contact with a ContactRole.144145```146Contact + ContactRole + any object → ContactAssignment147```148149ContactGroups organize contacts hierarchically. Multiple contacts with different roles can be assigned to the same object.150151## Extending the Data Model152153### Decision: Custom Field vs Tag vs Config Context154155| Question | → Custom Field | → Tag | → Config Context |156|----------|---------------|-------|-----------------|157| Does it have a value beyond yes/no? | ✅ | ❌ | ✅ |158| Applied across many object types? | ❌ (scoped) | ✅ | ❌ (devices/VMs only) |159| Need to filter/search by it? | ✅ | ✅ | ❌ (not directly) |160| Used by automation/config rendering? | ❌ | ❌ | ✅ |161| Inherited/computed from hierarchy? | ❌ | ❌ | ✅ |162| Per-object unique value? | ✅ | ❌ | ❌ (matched by criteria) |163164**Examples:**165- Warranty expiry date → **custom field** (per-device, typed, filterable)166- PCI-compliant → **tag** (boolean-like, cross-object)167- NTP servers for a site's devices → **config context** (inherited, used in config rendering)168169See [references/custom-field-types.md](references/custom-field-types.md) for all field types and decision guidance.170171### Custom Fields — Key Points172173- **Types:** text, longtext, integer, decimal, boolean, date, datetime, URL, JSON, selection, multi-selection, object, multi-object (13 types — unchanged in 4.6; there is **no** standalone "color" type)174- **JSON fields** accept an optional **`validation_schema`** (4.6+) to enforce a JSON Schema on values175- **Selection/multi-selection** choice sets support per-choice colors (`choice_colors`, 4.6+) — this is what release notes call the "color custom field", not a new field type176- **Object/multi-object fields** create relationships to other NetBox objects — prefer these over storing names in text fields177- **Scope** to specific object types at creation time178- **Group** fields with `group_name` for UI organization179- **Visibility:** always / if-set / hidden180- Filter via API: `?cf_<field_name>=<value>`181182### Tags — Key Points183184- Properties: name, slug, color, description185- **Restrict** `object_types` to relevant models (don't let every tag appear everywhere)186- Filter via API: `?tag=<slug>`187- No value — presence/absence only. If you need a value, use a custom field188189### Config Contexts — Key Points190191- JSON data matched to devices/VMs via: regions, site_groups, sites, locations, device_types, roles, platforms, cluster_types, cluster_groups, clusters, tenant_groups, tenants, tags192- **Weight-based merging:** lower weight merges first, higher weight overwrites conflicts193- **Deep merge** for dicts; **replace** for lists194- **Local context data** (on device/VM directly) always wins195- **ConfigContextProfile** enforces JSON Schema validation196- **Performance:** exclude with `?exclude=config_context` when listing devices/VMs197198## Dependency Order199200When bulk-importing data, create objects in dependency order. Required FKs must exist before the dependent object.201202**High-level order:**2031. Organizational models (RIR, Manufacturer, ClusterType, DeviceRole, Platform, IPAM Role, RackRole)2042. Taxonomy hierarchies (Region, SiteGroup, TenantGroup, Tenant)2053. Sites → Locations → Racks2064. DeviceTypes (needs Manufacturer)2075. Devices (needs DeviceType, DeviceRole, Site)2086. IPAM: VRFs → Aggregates → Prefixes → IP Addresses2097. VLANGroups → VLANs2108. Clusters → VMs2119. Circuits (needs Provider, CircuitType)21210. Custom fields, tags, config contexts (can be created at any point but best early)213214See [references/dependency-order.md](references/dependency-order.md) for the complete ordered list.215216## Anti-Patterns2172181. **Flat site structure** — Not using Regions/SiteGroups with 50+ sites. Kills filtering and reporting.2192. **Text custom fields as relationships** — Use object/multi-object custom field types instead of storing names as text.2203. **Duplicate dimensions** — Having both `cf_environment=production` AND tag `production`. Pick one.2214. **Ignoring dependency order** — Creating devices before sites/device types. Scripts fail on missing FKs.2225. **Everything in global VRF** — Model overlapping address spaces properly with VRFs.2236. **Overloading tenant** — Using tenant for two things. One dimension only; use custom fields for the rest.2247. **Giant config contexts** — Store variables, not entire configs. Use config templates for rendering.2258. **Unused roles** — DeviceRole drives config context matching. Design roles deliberately, use 4.5 hierarchy.2269. **Prefix without status** — Always set container/active/reserved. Container = organizational, active = allocated.22710. **Hardcoded PKs** — Use name/slug for lookups. PKs differ across environments.228229## Version Notes230231### NetBox 4.5232233| Change | Impact |234|--------|--------|235| DeviceRole → NestedGroupModel | Design role hierarchies (e.g., `network` → `network/router`, `network/switch`) |236| Platform → NestedGroupModel | Design platform hierarchies (e.g., `cisco-ios` → `cisco-ios/xe`, `cisco-ios/xr`) |237| MACAddress standalone model | MAC addresses are first-class objects, not just interface fields |238| VirtualDeviceContext | Model VDCs on multi-tenant devices |239| CachedScopeMixin on Prefix/VLANGroup | Use `scope_type`/`scope_id` instead of direct `site` FK |240| v2 API tokens | Use `Bearer nbt_<key>.<secret>` format |241| ConfigContextProfile | Validate config context data against JSON Schema |242| VirtualCircuit, CircuitGroup | New circuit modeling options |243| VirtualDisk | Disk modeling for VMs |244245### NetBox 4.6 (all 4.6+ only — don't assume on a 4.5.x instance)246247| Change | Impact |248|--------|--------|249| **VirtualMachineType** | Reusable VM classification (like DeviceType) supplying default platform/vCPUs/memory; endpoint `virtualization/virtual-machine-types/`. VM gains optional `virtual_machine_type` FK |250| **VM `cluster` now optional** | A VM must be tied to **at least one of** site, cluster, or device — clusterless VMs attached directly to a Device are now first-class |251| **CableBundle** | Logical grouping of cables (conduit/trunk/harness); `Cable.bundle` FK, optional, does not affect tracing; endpoint `dcim/cable-bundles/` |252| **RackGroup (flat)** | Secondary, **non-hierarchical** rack categorization (row/aisle/cage) orthogonal to Location; `Rack.group` FK; endpoint `dcim/rack-groups/`. Can scope VLANGroups |253| **VLANGroup scope += rackgroup** | `rackgroup` added to the VLANGroup scope types (full set: region/sitegroup/site/location/rackgroup/rack/clustergroup/cluster) |254| **ASN `role`** | ASNs can now carry an ipam Role (Roles classify prefixes, VLANs, **and** ASNs) |255| **JSON CF `validation_schema`** | JSON custom fields can enforce a JSON Schema |256| **Choice colors** | Per-choice colors on selection/multiselect choice sets (`choice_colors`) — not a new field type |257| v1 API tokens | **Deprecated in 4.6, removed in 5.0**; v2 `nbt_` tokens return plaintext once at creation (4.6.1) |