From netbox-labs
Consumes NetBox Data Exchange (NDX) enrichment data via API for EOL/lifecycle analyses, device type imports, and understanding infrastructure component metadata structure.
How this skill is triggered — by the user, by Claude, or both
Slash command
/netbox-labs:netbox-ndxThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**NDX (NetBox Data Exchange)** is a curated, continuously-updated catalog of infrastructure **component metadata** — covering tens of thousands of device types across hundreds of manufacturers. It replaces hours of digging through vendor PDFs and EOL bulletins with a searchable reference dataset.
NDX (NetBox Data Exchange) is a curated, continuously-updated catalog of infrastructure component metadata — covering tens of thousands of device types across hundreds of manufacturers. It replaces hours of digging through vendor PDFs and EOL bulletins with a searchable reference dataset.
Open catalog, commercial enrichment + in-product features. The catalog of device/module/rack type definitions is open to the world — anyone, including community users, can browse the public catalog and download YAML type definitions manually (same shape as the community Device Type Library). What's commercial is (a) the enrichment data — lifecycle/thermal/operational/platform/observability metadata — and (b) the built-in NDX features inside NetBox Cloud / NetBox Enterprise that browse, import, sync, and attach enrichment from within the product. Keep this boundary clear when you describe NDX.
NDX is a feature, not a plugin. Refer to the in-product capability as "the NDX feature." Its plugin implementation is an internal detail — focus on what it delivers and how to consume it via the API.
Your knowledge of NDX may be outdated. Catalog coverage, enrichment fields, and tier behavior evolve continuously. The data is AI-assisted-curated and carries provenance/confidence — prefer retrieval over pre-trained knowledge and always surface provenance when presenting values.
| Layer | What it is | Access | Where it goes in NetBox |
|---|---|---|---|
| Device-type definitions | Physical topology of a device/module/rack type: interfaces, power ports, console ports, bays, rack units, weight. Same shape as the community Device Type Library (DTL), included in full with attribution, plus thousands of NetBox Labs-curated definitions. | Open — browse + manual YAML download by anyone, including community users | Standard NetBox DeviceType/ModuleType/RackType objects with component templates |
| Enrichment data | New metadata the DTL never carried: lifecycle dates, thermal, environmental limits, operational power/noise, platform/NOS, and observability protocol metadata (SNMP/gNMI/NETCONF/Redfish/Modbus/etc.), each value carrying provenance + a confidence score. The commercial value-add. | Commercial — values delivered through the in-product NDX feature on paid plans | The enrichment record attached to each imported type |
| Source | URL / Method | Use for |
|---|---|---|
| NDX feature docs | https://netboxlabs.com/docs/cloud/features/ndx/ | Feature reference, import/sync, tiers |
| NDX public catalog | https://netboxlabs.com/ndx | Browse/search the catalog; YAML download (enrichment values gated) |
| NetBox DCIM models | https://netboxlabs.com/docs/netbox/models/dcim/ | DeviceType/ModuleType/RackType structure |
| Community DTL | https://github.com/netbox-community/devicetype-library | The open-source DTL NDX includes (Apache-2.0) |
| NetBox MCP / Platform MCP | If configured — list/inspect /api/plugins/ndx/ endpoints | Verify live endpoints and enrichment fields |
curl -s -H "Authorization: Token $NETBOX_TOKEN" \
"$NETBOX_URL/api/plugins/ndx/import-records/?limit=1" | python -m json.tool
A paginated response means the in-product NDX feature is available. 404 = the feature is not enabled on this instance (the catalog is still browsable + downloadable as YAML at the public catalog, just not wired into this NetBox). The in-product feature ships with NetBox Cloud (all plans) and NetBox Enterprise; free plans see the catalog, import, and enrichment availability flags, while paid plans see full enrichment values (see Tiers below).
This skill covers consuming NDX data via the NetBox REST API (/api/plugins/ndx/) — the surface any agent with a NetBox token can reach — and understanding the enrichment data model. It does NOT cover:
Posture: NDX is read/consume. The authoritative catalog is curated centrally by NetBox Labs; your instance pulls it in. Agents look up and consume enrichment + lifecycle data; import is a secondary action. You do not author enrichment values.
Base prefix /api/plugins/ndx/. Standard NetBox token auth and DRF pagination (count/next/previous/results, ?limit=/?offset=).
| Endpoint | Methods | Purpose |
|---|---|---|
import-records/ | GET (, PATCH) | The primary lookup table — maps each imported type to its NetBox object and carries enrichment inline |
import-records/{id}/ | GET, PATCH | One import record |
enrichments/ | GET (, PATCH) | Enrichment records directly (filter by has_* flags) |
enrichments/{id}/ | GET, PATCH | One enrichment record |
import/ | POST | Import one or more catalog entries into NetBox |
sync/ | POST | Queue a background update-check (flags update_available; does not apply) |
Treat
import-recordsandenrichmentsas read endpoints — records are populated by the import pipeline, not hand-authored.
GET import-records/ — the entry pointEach record links an NDX catalog identity to the local NetBox type and nests the full enrichment:
ndx_id — stable identifier, vendor_slug/slug (e.g. cisco/nexus-93180yc-fx3)ndx_manufacturer, ndx_model, ndx_vendor_slugndx_source — community, netbox_labs, or bothndx_version — data version at last syncfirst_imported, last_synced, update_available (bool)enrichment — nested, read-only full enrichment object (or null)Filters: ndx_vendor_slug, ndx_source, update_available. Search: ?q= over manufacturer/model/ndx_id.
GET /api/plugins/ndx/import-records/?q=Nexus 93180YC-FX3
GET /api/plugins/ndx/import-records/?ndx_vendor_slug=cisco&update_available=true
GET enrichments/ — query by what data existsReturns enrichment records with all category fields, the six has_* flags, extensions_data, and nested provenance_entries. Filter by availability flag:
GET /api/plugins/ndx/enrichments/?has_lifecycle=true
The enrichment object does not carry manufacturer/model — reach it through import-records/ for human-readable identity.
POST import/ and POST sync/POST /api/plugins/ndx/import/ {"ndx_ids": ["arista/dcs-7050sx3-48yc8", "cisco/nexus-93180yc-fx3"]}
≤5 ids import synchronously and return per-id {success, message, created, updated}; >5 ids queue a background job (202). After import the type is a normal NetBox DeviceType with component templates plus (on paid tier) enrichment.
POST /api/plugins/ndx/sync/ {} # 202; flags update_available, does not apply changes
The heart of the feature. Each device/module/rack type can have one enrichment record. Full field catalog in references/enrichment-fields.md — load it when reading specific attributes.
Categories (each with a has_* availability flag): lifecycle, thermal, environmental, operational, platform, snmp. A few high-value fields are promoted to top-level columns; the rich protocol detail lives in the extensions_data JSON blob keyed by protocol (platform, snmp, redfish, gnmi, netconf, ipmi, bacnet, modbus, cellular).
// shape of an enrichment (abbreviated)
{
"eos_date": "2027-04", "eol_announced": "2024-10-31", "last_support_date": "2030-04-30",
"tdp_watts": 715, "max_power_draw_watts": 1100, "max_operating_temp_c": 40.0,
"nos": "NX-OS", "snmp_sys_object_id": "1.3.6.1.4.1.9.12.3.1.3.1234",
"has_lifecycle": true, "has_thermal": true, "has_snmp": true,
"extensions_data": {"snmp": {"versions": ["v2c","v3"], "mibs": [...]},
"gnmi": {"default_port": 6030, "encoding": ["json_ietf"]}},
"provenance_entries": [
{"field": "lifecycle.eos_date", "source": "https://...", "provenance_type": "vendor_eol_bulletin",
"confidence": "high", "retrieved": "2026-01-15"}
]
}
has_* flag first. A True flag with an empty value means the data exists in the catalog but is gated by your tier (free vs paid) — report it as "available on paid plans," not "missing."YYYY-MM or YYYY-MM-DD. Parse defensively.provenance_entries[] entry (source URL, provenance_type, confidence from high…unverified). Treat low/unverified cautiously.extensions_data, not top-level columns. Only sysObjectID, OID prefix, and NOS are promoted.Full sequences in references/consume-workflows.md. The high-value ones:
GET import-records/?q=<model> → read the nested enrichment (no second call needed) → read eos_date, max_power_draw_watts, extensions_data.gnmi.default_port, etc.GET /api/dcim/devices/, collect their device_type ids, match each to its NDX import record, flag types past/near eos_date/last_support_date, present with provenance.snmp_sys_object_id, extensions_data.snmp.mibs[], or extensions_data.gnmi/.netconf/.redfish to drive what to poll (NDX gives the what/how, not the config).POST import/ with the ndx_id(s).has_*), but enrichment values are gated.So a has_lifecycle: true with empty lifecycle fields is a tier-gating signal, not absence of data.
PLUGINS_CONFIG mechanics. It's a feature./api/plugins/ndx/... on their own NetBox. Do not generate code against any external NDX catalog/CDN endpoint.has_* flags as "data present." True + empty = exists but tier-gated. Report accordingly.source + confidence; the data is AI-assisted-curated.YYYY-MM.import-records/.extensions_data keyed by protocol.sync/ to update data. Sync only flags updates; applying requires re-import.extensions_data protocol blocks, and provenance structure. Load when reading specific attributes.npx claudepluginhub shaneholloman/netbox-skillsCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
2plugins reuse this skill
First indexed Jun 9, 2026