BumblebeeBumblebee

NinjaOne

Overview

The NinjaOne integration enables automated management of organizations, devices, contacts, alerts, and policies through Bumblebee workflows. Streamline your RMM operations with direct access to NinjaOne data.

Prerequisites & Setup

Before setting up the NinjaOne integration, you need:

  • An active NinjaOne account with Administrator access (the Administration menu is hidden for other roles)
  • Client ID and Client Secret from a NinjaOne API application
  • Your NinjaOne API base URL

Create API Credentials in NinjaOne

  1. Log in to your NinjaOne instance
  2. Navigate to Administration > Apps > API
  3. Click Add to create a new API application
  4. Configure the application:
    • Application platform: API Services (machine-to-machine)
    • Name: anything that helps you identify the application later
    • Redirect URIs: required by the form even though a Client credentials application never redirects anywhere. NinjaOne will not let you save without it — enter http://localhost or any other valid URL. The value is never used.
    • Scopes: tick all three of Monitoring, Management, and Control
    • Allowed grant types: tick Client credentials (this box is not ticked for you)
  5. Click Save
  6. Copy the Client ID and Client Secret — the secret is shown only once

Do not deselect Control. Bumblebee requests monitoring management control on every token request, so an application missing any one of the three fails on every tool, not just the ones that sound related to Control. Narrowing the scopes will break the integration.

You cannot verify the grant type after saving. NinjaOne does not show Client credentials alongside the saved scopes, so an application missing it looks identical to a correctly configured one. If the connection fails, re-open the application and confirm the box is still ticked rather than trusting the summary view.

Find your API Base URL

While signed in to NinjaOne, the API base URL is https:// plus the host shown in your browser's address bar — nothing more.

Most instances are on a tenant-specific host such as https://yourcompany.rmmservices.net. Regional hosts also exist:

RegionBase URL
UShttps://app.ninjarmm.com
EUhttps://eu.ninjarmm.com
Canadahttps://ca.ninjarmm.com
Oceaniahttps://oc.ninjarmm.com

Use whichever host your own address bar shows — not a URL from NinjaOne's marketing site or documentation.

Format rules:

  • Must start with https://
  • Host only — no trailing slash
  • No path — do not append /api/v2 or /ws/oauth/token
Value
https://yourcompany.rmmservices.net
https://yourcompany.rmmservices.net/ (trailing slash)
yourcompany.rmmservices.net (no scheme)

A wrong base URL usually surfaces as an authorization or scope error rather than a "not found" error, because the token request never reaches your instance. If you see a scope error after ticking all three scopes, check this field before touching the application in NinjaOne.

Configure in Bumblebee

  1. Go to the Integrations page in Bumblebee
  2. Select NinjaOne
  3. Enter:
    • Client ID
    • Client Secret
    • API Base URL
  4. Click Test Connection
  5. Save the configuration

Available Tools

Organizations

  • list_organizations - List organizations (clients) from NinjaOne. Optional: page_size (int), after (int)
  • get_organization - Get a specific organization by ID from NinjaOne. Required: organization_id (int)

Devices

  • list_devices - List devices from NinjaOne with optional filters. Optional: device_filter (str), page_size (int), after (int)
  • get_device - Get a specific device by ID from NinjaOne. Required: device_id (int)

Device Detail

  • get_device_software - Get software inventory for a specific device in NinjaOne. Required: device_id (int)
  • get_device_windows_services - Get Windows services for a specific device in NinjaOne. Required: device_id (int)
  • get_device_network_interfaces - Get network interfaces for a specific device in NinjaOne. Required: device_id (int)
  • get_device_volumes - Get storage volumes for a specific device in NinjaOne. Required: device_id (int)
  • get_device_disks - Get physical disk drives for a specific device in NinjaOne. Required: device_id (int)
  • get_device_processors - Get processor information for a specific device in NinjaOne. Required: device_id (int)
  • get_device_os_patches - Get pending, failed, and rejected OS patches for a device in NinjaOne. Required: device_id (int)
  • get_device_software_patches - Get pending, failed, and rejected software patches for a device in NinjaOne. Required: device_id (int)

Fleet-Wide Reports

  • search_software_inventory - Get fleet-wide software inventory report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_operating_systems - Get fleet-wide operating systems report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_computer_systems - Get fleet-wide computer systems report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_device_health - Get fleet-wide device health report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_antivirus_status - Get fleet-wide antivirus status report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_windows_services - Get fleet-wide Windows services report from NinjaOne. Optional: device_filter (str), name (str), state (str), page_size (int), cursor (str)
  • search_network_interfaces - Get fleet-wide network interfaces report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_disk_volumes - Get fleet-wide disk volumes report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_disk_drives - Get fleet-wide disk drives report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_processors - Get fleet-wide processor report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)
  • search_logged_on_users - Get fleet-wide last logged-on user report from NinjaOne. Optional: device_filter (str), page_size (int), cursor (str)

Device Context

  • get_device_activities - Get activity log for a specific device in NinjaOne. Required: device_id (int). Optional: older_than (int), newer_than (int), page_size (int)
  • get_device_alerts - Get active alerts (triggered conditions) for a device in NinjaOne. Required: device_id (int)
  • get_device_last_logged_on_user - Get the last logged-on user for a specific device in NinjaOne. Required: device_id (int)
  • get_device_os_patch_installs - Get OS patch installation history for a device in NinjaOne. Required: device_id (int)
  • get_device_software_patch_installs - Get software patch installation history for a device in NinjaOne. Required: device_id (int)
  • get_device_custom_fields - Get custom field values for a specific device in NinjaOne. Required: device_id (int)
  • get_device_active_jobs - Get currently running (active) jobs for a device in NinjaOne. Required: device_id (int)

Ticketing (PSA)

Reading tickets works with the standard API credentials above. Creating or changing tickets requires a second credential set — a NinjaOne application registered with the Authorization code and Refresh token grants, entered on the Authorization Code tab of the integration page. NinjaOne treats these endpoints as something a person does, not a machine, and rejects a client-credentials token on them with 403 user_context_required.

The same applies to run_script_on_device. Everything else on this page works from the Client Credentials tab alone.

  • list_ticket_boards - List ticket boards (saved views). Start here: pass a board's ID to list_tickets
  • list_tickets - List tickets on a board. Required: board_id (int). Optional: page_size (int), search_criteria (str), last_cursor_id (int), sort_field (str), sort_direction (str)
  • get_ticket - Get a single ticket by ID. Required: ticket_id (int)
  • get_ticket_log_entries - Get a ticket's history: comments, status changes and worked time. Required: ticket_id (int). Optional: type (str), page_size (int), anchor_id (int)
  • list_ticket_statuses - List the ticket statuses the account accepts
  • list_ticket_forms - List ticket forms
  • list_ticket_attributes - List custom ticket attributes
  • list_ticketing_contacts - List contacts available as ticket requesters
  • list_ticketing_app_users - List technicians, contacts and end users known to ticketing
  • create_ticket (user-context OAuth) - Create a ticket. Required: client_id (int), subject (str). Optional: description (str), ticket_form_id (int), status (str), type (str), priority (str), severity (str), requester_uid (str), assigned_app_user_id (int), location_id (int), node_id (int), tags (list)
  • update_ticket (user-context OAuth) - Triage a ticket: set its type, priority, severity, status or assignee. Required: ticket_id (int). Optional: status (str), type (str), priority (str), severity (str), subject (str), assigned_app_user_id (int), location_id (int), node_id (int), tags (list)
  • create_ticket_comment (user-context OAuth) - Add a comment or log worked time on a ticket. Required: ticket_id (int), body (str). Optional: public (bool), time_tracked_seconds (int)