NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4313 most downloaded on PyPI
NetBox API client library
Last release 3 months ago
18 Jun 2026
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
87 releases · first in 2017
pynetbox can now be extended to support third-party NetBox plugins without modifying the library. You can register custom record types for a plugin's
pynetbox can now be extended to support third-party NetBox plugins without modifying the library. You can register custom record types for a plugin's endpoints, so working with plugin objects feels the same as working with built-in NetBox objects. The new branching (#710) and Custom Objects (#751) integrations are built on this framework.
When threading is enabled, you can now control how the parallel requests behind .all() and .filter() are run. You can adjust how many worker threads are used, and supply your own executor - useful for carrying context such as tracing information into the worker threads.
pynetbox can now page through large result sets using NetBox 4.6's cursor-based pagination.
RecordsRecord methods as constructors in _parse_valuesRecord items that lack an IDRecord.__getattr__custom_fieldsOne column per quarter.
### New Features - #762 - Support NetBox 4.6: add VirtualMachineTypes model, virtual_machine_type and device typed attributes on VirtualMachines, oob_
VirtualMachineTypes model, virtual_machine_type and device typed attributes on VirtualMachines, oob_ip typed attribute on Devices, and dcim.cablebundle / dcim.rackgroup content type mappingscreate_token (NetBox 4.5+)Record.serialize() now includes new properties added by the user## Enhancements - #726 - Use dict instead of OrderedDict in Record serialization ## New Features - #434 - Add cable path tracing support for front por
## Breaking Changes * #700 - Moved ObjectChange to core for NetBox 4.1.0 compatibility ## New Features * #728 - Added support for v2 Tokens introduced
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v7.5.0...v7.6.0
Full Changelog: v7.5.0...v7.6.0
core module for NetBox 4.1.0+ compatibility
extras.object_changesnb.core.object_changesrack.elevation.list(render='svg')Return correct choices when API token can PUT but not POST by @BenoitKnecht in #592
Full Changelog: v7.4.1...v7.5.0
nb.activate_branch() context manager for NetBox branching pluginnb.version property when using OIDC proxy authenticationUpdated requests and urllib3 python libraries due to security vulnerabilities.
requests and urllib3 Python libraries to address security vulnerabilitiesFix: pynetbox greater than 7.0.0 fails to insert complex custom_fields. Fixes #597 by @costasd in #598
Full Changelog: v7.3.4...v7.4.0
None with 'null' in query parametersFix API version for Netbox version > 4.x by @btriller in #616
Full Changelog: v7.3.3...v7.3.4
#### Fixes - PyPI release fix - No functional changes ---
Add support for NetBox v3.6 by @abhi1693 in https://github.com/netbox-community/pynetbox/pull/576
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v7.1.0...v7.2.0
Add support for NetBox v3.5 by @abhi1693 in https://github.com/netbox-community/pynetbox/pull/564
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v7.0.1...v7.1.0
Removed pre-NetBox 3.3 features by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/521
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v7.0.0...v7.0.1
BREAKING CHANGE Due to changes for a_terminations, b_terminations this version only supports NetBox 3.3 and later.
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.6.1...v7.0.0
ci: test against the currently supported python versions by @raddessi in https://github.com/netbox-community/pynetbox/pull/446
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.6.1...v6.6.2
ci: update the versions of netbox in the test suite by @raddessi in https://github.com/netbox-community/pynetbox/pull/444
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.6.0...v6.6.1
Upgrade Black to the first non-beta release by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/441
VirtualChassis.__str__(), make VirtualChassis.master a Devices object by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/439Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.5.0...v6.6.0
Docstring updates: remove secrets from examples by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/432
secrets from examples by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/432available-vlans child endpoint for VLAN groups by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/428Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.4.1...v6.5.0
Fixes #422: Adds support for HTTP 409 when allocation is unsuccessful by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/423
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.4.0...v6.4.1
Use display field in Record.__str__() to support future models by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/419
display field in Record.__str__() to support future models by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/419Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.3.0...v6.4.0
Handle list results in DetailEndpoint.create() (fixes #395) by @markkuleinio in https://github.com/netbox-community/pynetbox/pull/418
.filter() with no args equivalent to .all(), 7.0 will remove the latter.Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.2.0...v6.3.0
Fixes #316 bulk update/delete on both Endpoint and RecordSet by @steffenschumacher in https://github.com/netbox-community/pynetbox/pull/409
Full Changelog: https://github.com/netbox-community/pynetbox/compare/v6.1.3...v6.2.0
Adds dash-separated plugin endpoint name support (#332 Thanks @dvaccarosenna)
Adds dash-separated plugin endpoint name support (#332 Thanks @dvaccarosenna)
Fixes issue giving Endpoint.create() a list of dicts (#370).
Endpoint.create() a list of dicts (#370).Fixes issue with duplicate returns when threading is enabled (#364).
Adds a __next__ method to RecordSet objects (#358 - thanks @jqueuniet)
__next__ method to RecordSet objects (#358 - thanks @jqueuniet)Fix len() calls for empty RecordSet (#359 - Thanks @jqueuniet)
Fixes broken DetailEndpoint.list()
BREAKING CHANGE Endpoint.all() and .filter() no longer return lists, instead they return a ReturnSet object now. Iterating over this object calls a ge…
Endpoint.all() and .filter() no longer return lists, instead they return a ReturnSet object now. Iterating over this object calls a generator which steps through paginated results now as-needed.Endpoint.all() and .filter() now accept a limit kwarg that controls the page size of paginated results.Endpoint.all() and `.filter() (#331, thanks again @markkuleinio).Fixes URL on requests to plugins endpoints (#302).
Fixes URL on requests to plugins endpoints (#302).
Improves on Record._endpoint_from_url()'s path parsing to avoid URL format issues. #323
Record._endpoint_from_url()'s path parsing to avoid URL format issues. #323Fixes tests. #319 (Thanks @ignatenkobrain)
Adds support for the /dcim/interfaces/:id/trace endpoint via the .trace() method on an interface record. #280 (Thanks @raddessi)
/dcim/interfaces/:id/trace endpoint via the .trace() method on an interface record. #280 (Thanks @raddessi)/api/users/ endpoints in NetBox 2.9+. #313 (Thanks @markkuleinio)Endpoint.get() to return None when a non-existent object is queried by ID. #292 (Thanks @Dimaqa)Fixes issue saving tags on NetBox 2.9+ instances
Fixes issue saving tags on NetBox 2.9+ instances (#311)
Fixes bug with where URL was mangled calling .save()
.save() (#304)Add Basic plugins support (#290).
Fixes malformed URL when calling .save() and .delete() on nested objects.
.save() and .delete() on nested objects. (#287)Nothing published for this version
Fixes issue with unchanged tags being reordered when .save() is called that caused unnecessary updates to NetBox.
Fixes issue saving local_config_context attribute on objects (#266 - Thanks @markkuleinio)
local_config_context attribute on objects (#266 - Thanks @markkuleinio)Fixes issue with threads overwriting Request.filters. (#263 - thanks @weisdd and @markkuleinio)
Request.filters. (#263 - thanks @weisdd and @markkuleinio)Publish to pypi with github-actions.
Publish to pypi with github-actions.
Re-release of 4.3.2 that wasn't published to pypi.
Re-release of 4.3.2 that wasn't published to pypi.
Makes config_contex on virtualization record objects a JsonField. (PR #227)
config_contex on virtualization record objects a JsonField. (PR #227)Adds the ability to thread calls to NetBox from .filter() and .all() methods. (PR #216)
.filter() and .all() methods. (PR #216)save() is not idempotent when dealing with choice objects from NetBox 2.7 (PR #223).
Nothing published for this version
Fixes issues with hashing Record objects by adding name attribute to Endpoint and __eq__ method to Record objects to facilitate comparison. (PR #210)
__eq__ method to Record objects to facilitate comparison. (PR #210)Fixes infinite loop when filtering with paginated results. (PR #207)
Fix discrepancy in DetailEndpoint.create() and the docs where calling w/o arguments resulted in an exception. ( PR #192).
DetailEndpoint.create() and the docs where calling w/o arguments resulted in an exception. ( PR #192).Fixes URL in get_session_key (PR #202)
Fix Endpoint.choices() by assigning http_session. (PR #199)
Makes use of session in requests (PR #148)
Api.version property to query the NetBox version (PR #187).choices() method to endpoint objects that utilizes DRF's OPTIONS method for discovering available choices for fields that use it. This method will eventually replace App.choices() when NetBox retires the /_choices endpoint. (PR #183)__str__ to request_id. (PR #195)__hash__ method on Record. (PR #196)local_context_data field to device model as dict. (PR #197)#165 - Returns ContentError when 2XX response but not JSON.
#165 - Returns ContentError when 2XX response but not JSON.
# Bug Fixes * #156 - Returns AllocationError when NetBox responds with a 204 to Allocation requests (Thanks @markkuleinio). * #152 - Makes App object
## Bug Fixes * #137 - Fixes behavior where appending an existing VLAN object id to tagged_vlans would cause .save() to still trigger a PATCH operation
## Bug Fixes * #132 - Fixes list comparison issue in Record._diff. * #134 - Returns None from Endpoint.get() when no items are found instead of empty
Fixes IndexError introduced by fix for #127 when field is empty list.
v4.0.4 (2018-12-07)
v4.0.3 (2018-12-07) ## Bug Fixes * #127 - Fixes __iter__ method on Record object so that it properly returns lists of record objects. Like tagged_vlan
v4.0.3 (2018-12-07)
__iter__ method on Record object so that it properly returns lists of record objects. Like tagged_vlans on for Interfaces.v4.0.2 (2018-12-06) ## Bug Fixes * #126 - Fixes TypeError when calling save on interfaces Record with tagged_vlans.
v4.0.2 (2018-12-06)
v4.0.1 (2018-12-06) ## Bug Fixes * #122 - Adds missing authentication credentials for .choices().
Your coding agent can read these notes before it upgrades. Set up the MCP server →