Add a stable script identifier to Extras Scripts API #727

Open
opened 2026-04-05 17:18:57 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @pergus on 12/16/2025

NetBox version

v4.4.8

Feature type

Other

Proposed functionality

When listing scripts via the Extras Scripts API (/api/extras/scripts/), there isn’t a field that shows the fully qualified script name, like demo.Echo.

The API currently gives you id, name, and display, but none of these make it easy to identify a script:

  • id works for execution but isn’t predictable or portable
  • name isn’t unique — multiple scripts can have the same class name
  • display is meant for humans, not automation

This makes it tricky to figure out which script in the API corresponds to a specific script in code.

Proposed change

Add a read-only field called script_name that contains the module and class name, e.g.:

"script_name": "demo.Echo"

Where:

  • demo is the script module (the file name without .py)
  • Echo is the script class name

Example

Current output:

{
    "id": 68,
    "url": "http://localhost:8000/api/extras/scripts/68/",
    "display_url": "http://localhost:8000/extras/scripts/68/",
    "module": 118,
    "name": "Echo",
    "description": "Echo back any json sent to it",
    "vars": {},
    "result": null,
    "display": "Echo (demo)",
    "is_executable": true
}

Proposed output:

{
    "id": 68,
    "url": "http://localhost:8000/api/extras/scripts/68/",
    "display_url": "http://localhost:8000/extras/scripts/68/",
    "module": 118,
    "name": "Echo",
    "script_name": "demo.Echo",
    "description": "Echo back any json sent to it",
    "vars": {},
    "result": null,
    "display": "Echo (demo)",
    "is_executable": true
}

Use case

Why this helps

  • Gives a stable, human-readable identifier for scripts
  • Avoids confusion when multiple scripts have the same class name
  • Makes it easier to reference custom scripts from external scripts.

Database changes

No response

External dependencies

No response

*Originally created by @pergus on 12/16/2025* ### NetBox version v4.4.8 ### Feature type Other ### Proposed functionality When listing scripts via the Extras Scripts API (`/api/extras/scripts/`), there isn’t a field that shows the fully qualified script name, like `demo.Echo`. The API currently gives you `id`, `name`, and `display`, but none of these make it easy to identify a script: * `id` works for execution but isn’t predictable or portable * `name` isn’t unique — multiple scripts can have the same class name * `display` is meant for humans, not automation This makes it tricky to figure out which script in the API corresponds to a specific script in code. ### Proposed change Add a read-only field called `script_name` that contains the module and class name, e.g.: ```json "script_name": "demo.Echo" ``` Where: * `demo` is the script module (the file name without `.py`) * `Echo` is the script class name ### Example Current output: ```json { "id": 68, "url": "http://localhost:8000/api/extras/scripts/68/", "display_url": "http://localhost:8000/extras/scripts/68/", "module": 118, "name": "Echo", "description": "Echo back any json sent to it", "vars": {}, "result": null, "display": "Echo (demo)", "is_executable": true } ``` Proposed output: ```json { "id": 68, "url": "http://localhost:8000/api/extras/scripts/68/", "display_url": "http://localhost:8000/extras/scripts/68/", "module": 118, "name": "Echo", "script_name": "demo.Echo", "description": "Echo back any json sent to it", "vars": {}, "result": null, "display": "Echo (demo)", "is_executable": true } ``` ### Use case ## Why this helps * Gives a stable, human-readable identifier for scripts * Avoids confusion when multiple scripts have the same class name * Makes it easier to reference custom scripts from external scripts. ### Database changes _No response_ ### External dependencies _No response_
MrUnknownDE added the status: under reviewnetboxtopic: custom scriptspending closuretype: featurestatus: under reviewstatus: under reviewstatus: under reviewstatus: under reviewstatus: under reviewnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxnetboxtopic: custom scriptstopic: custom scriptstopic: custom scriptstopic: custom scriptstopic: custom scriptspending closurepending closurepending closurepending closurepending closurepending closurepending closurepending closurepending closurepending closurepending closurepending closuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: feature labels 2026-04-05 17:19:23 +02:00
Sign in to join this conversation.
No Label netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox netbox pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure pending closure status: under review status: under review status: under review status: under review status: under review status: under review topic: custom scripts topic: custom scripts topic: custom scripts topic: custom scripts topic: custom scripts topic: custom scripts type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/netbox#727