N-central Organizations
N-central models the MSP's world as a three-level hierarchy of org
units. Almost every other object — devices, active issues, tasks, custom
properties, access groups — is scoped to an org unit, so getting the
hierarchy right is the first step of any workflow.
Anti-triggers
- The client's commercial record — an N-central customer is a
monitoring scope, not a billing entity. The company of record is
connectwise-psa-companies, autotask-crm, syncro-customers, or
superops-clients.
- A Microsoft 365 tenant or an Entra OU — an N-central org unit is
neither, despite the shared "organizational unit" wording; use
cipp-tenants.
- Devices inside an org unit — use
ncentral-devices.
- The customer scope in another RMM — NinjaOne calls the same
boundary an organization and keeps its own ID space; use
ninjaone-organizations.
The Hierarchy
Service Organization (SO) — the MSP itself (usually one)
└── Customer — a client company
└── Site — a client location (optional level)
| Tool |
Use For |
ncentral_list_service_orgs |
Top-level SOs |
ncentral_list_customers / ncentral_get_customer |
Client companies |
ncentral_list_sites / ncentral_get_site |
Locations under customers |
ncentral_list_org_units / ncentral_get_org_unit |
Type-agnostic view of all three levels |
ncentral_list_org_unit_children |
Direct children of any org unit |
ncentral_get_registration_token |
Agent install token for an org unit |
Org Units vs Customers
"Org unit" is the umbrella type: an org unit's orgUnitType is SO,
CUSTOMER, or SITE, and every one has an orgUnitId in the same ID
space. The typed tools (ncentral_list_customers, ncentral_list_sites)
are convenience views over that same data.
Practical rules:
- When a tool takes an
orgUnitId (device listings, active issues,
custom properties), any level's ID is syntactically valid — but
semantics differ. Devices live at customer/site level; an SO-level
query may aggregate or reject depending on the endpoint.
- Active issues can only be listed for customers and sites, not for
the SO. Sweep customers in a loop rather than querying the SO.
- Use
ncentral_list_org_unit_children to walk the tree top-down when
building a full map (SO → customers → sites).
- Names are not unique across the tree; always carry the
orgUnitId
through a workflow rather than re-resolving by name.
Registration Tokens — Treat Like Credentials
ncentral_get_registration_token returns the token embedded in agent
installers for that org unit. Anyone holding it can register a device
into the customer's environment — treat it exactly like a password:
- Only fetch it when the user explicitly needs it (agent deployment).
- Never write it to files, tickets, or chat logs; paste it directly to the
user and say nothing more.
- Tokens expire and can be regenerated in the UI; if one leaks, tell the
user to rotate it there.
Custom Properties
Custom properties are typed key/value fields attached at two levels:
| Level |
Tools |
| Org unit |
ncentral_list_org_custom_properties, ncentral_get_org_custom_property, ncentral_update_org_custom_property |
| Device |
ncentral_list_device_custom_properties, ncentral_get_device_custom_property, ncentral_update_device_custom_property |
MSPs use them as the glue layer: PSA company IDs, billing codes, patch
rings, backup policies, onboarding status. Patterns that matter:
- Properties are defined at the SO or customer level and valued per
org unit or device — a property can exist but be empty for a given
target. Empty is a finding, not an error.
- Updates (
ncentral_update_*_custom_property) overwrite the value with
no history. Echo the current value before writing and confirm bulk
updates with the user.
- Automation policies and filters in N-central often key off custom
property values — changing one can silently change which policies apply
to a device. Mention this when updating properties that look
policy-related (e.g. "Patch Ring", "Maintenance Group").
- Property IDs are stable per server; property names are what humans
know. List first, resolve name →
propertyId, then get/update.
Best Practices
- Cache the org tree (IDs + names) at the start of a multi-customer
workflow instead of re-listing per step.
- For "across all customers" questions, iterate customers explicitly and
aggregate — report per-customer, then the rollup.
- When the user says "customer X", resolve by name via
ncentral_list_customers and confirm if more than one match.
Related Skills
1---2name: n-central-organizations3description: N-central org units: the service organization -> customer -> site hierarchy, the org-unit vs customer distinction, agent registration tokens (credential-sensitive), and custom properties at both org and device level.4---56# N-central Organizations78N-central models the MSP's world as a three-level hierarchy of **org9units**. Almost every other object — devices, active issues, tasks, custom10properties, access groups — is scoped to an org unit, so getting the11hierarchy right is the first step of any workflow.1213## Anti-triggers1415- **The client's commercial record** — an N-central customer is a16 monitoring scope, not a billing entity. The company of record is17 `connectwise-psa-companies`, `autotask-crm`, `syncro-customers`, or18 `superops-clients`.19- **A Microsoft 365 tenant or an Entra OU** — an N-central org unit is20 neither, despite the shared "organizational unit" wording; use21 `cipp-tenants`.22- **Devices inside an org unit** — use `ncentral-devices`.23- **The customer scope in another RMM** — NinjaOne calls the same24 boundary an organization and keeps its own ID space; use25 `ninjaone-organizations`.2627## The Hierarchy2829```30Service Organization (SO) — the MSP itself (usually one)31└── Customer — a client company32 └── Site — a client location (optional level)33```3435| Tool | Use For |36|------|---------|37| `ncentral_list_service_orgs` | Top-level SOs |38| `ncentral_list_customers` / `ncentral_get_customer` | Client companies |39| `ncentral_list_sites` / `ncentral_get_site` | Locations under customers |40| `ncentral_list_org_units` / `ncentral_get_org_unit` | Type-agnostic view of all three levels |41| `ncentral_list_org_unit_children` | Direct children of any org unit |42| `ncentral_get_registration_token` | Agent install token for an org unit |4344## Org Units vs Customers4546"Org unit" is the umbrella type: an org unit's `orgUnitType` is `SO`,47`CUSTOMER`, or `SITE`, and every one has an `orgUnitId` in the same ID48space. The typed tools (`ncentral_list_customers`, `ncentral_list_sites`)49are convenience views over that same data.5051Practical rules:5253- When a tool takes an `orgUnitId` (device listings, active issues,54 custom properties), any level's ID is syntactically valid — but55 semantics differ. Devices live at customer/site level; an SO-level56 query may aggregate or reject depending on the endpoint.57- **Active issues can only be listed for customers and sites**, not for58 the SO. Sweep customers in a loop rather than querying the SO.59- Use `ncentral_list_org_unit_children` to walk the tree top-down when60 building a full map (SO → customers → sites).61- Names are not unique across the tree; always carry the `orgUnitId`62 through a workflow rather than re-resolving by name.6364## Registration Tokens — Treat Like Credentials6566`ncentral_get_registration_token` returns the token embedded in agent67installers for that org unit. **Anyone holding it can register a device68into the customer's environment** — treat it exactly like a password:6970- Only fetch it when the user explicitly needs it (agent deployment).71- Never write it to files, tickets, or chat logs; paste it directly to the72 user and say nothing more.73- Tokens expire and can be regenerated in the UI; if one leaks, tell the74 user to rotate it there.7576## Custom Properties7778Custom properties are typed key/value fields attached at two levels:7980| Level | Tools |81|-------|-------|82| Org unit | `ncentral_list_org_custom_properties`, `ncentral_get_org_custom_property`, `ncentral_update_org_custom_property` |83| Device | `ncentral_list_device_custom_properties`, `ncentral_get_device_custom_property`, `ncentral_update_device_custom_property` |8485MSPs use them as the glue layer: PSA company IDs, billing codes, patch86rings, backup policies, onboarding status. Patterns that matter:8788- Properties are *defined* at the SO or customer level and *valued* per89 org unit or device — a property can exist but be empty for a given90 target. Empty is a finding, not an error.91- Updates (`ncentral_update_*_custom_property`) overwrite the value with92 no history. Echo the current value before writing and confirm bulk93 updates with the user.94- Automation policies and filters in N-central often key off custom95 property values — changing one can silently change which policies apply96 to a device. Mention this when updating properties that look97 policy-related (e.g. "Patch Ring", "Maintenance Group").98- Property IDs are stable per server; property *names* are what humans99 know. List first, resolve name → `propertyId`, then get/update.100101## Best Practices102103- Cache the org tree (IDs + names) at the start of a multi-customer104 workflow instead of re-listing per step.105- For "across all customers" questions, iterate customers explicitly and106 aggregate — report per-customer, then the rollup.107- When the user says "customer X", resolve by name via108 `ncentral_list_customers` and confirm if more than one match.109110## Related Skills111112- [api-patterns](../api-patterns/SKILL.md) - auth, pagination, preview endpoints113- [devices](../devices/SKILL.md) - device listings scoped by org unit114- [monitoring-tasks](../monitoring-tasks/SKILL.md) - per-customer active-issue sweeps