Roles and permissions in Harmony

This page is for workspace administrators, integration leads, and support staff who need to manage access in Harmony. It explains workspace roles and permissions, API token scopes for (third party) integrations, and touch point codes for shared devices.

Scopes and roles

A scope is a single permission, such as "view master data" or "create and update
locations". Each is either a read or a write permission. Every API
endpoint declares the scope it requires, and a request without that scope is rejected.

A role is a predefined bundle of scopes. People are assigned roles, not scopes.

Roles are not additive. A membership carries exactly one role, and Harmony has no team
construct, so there is no mechanism by which permissions accumulate. Individual scopes
are assignable in one place only: API tokens. A token can therefore be scoped more
narrowly than any role. Touch points are a third case: they hold a fixed set that
cannot be edited.

Where a role applies

A role is a property of a membership rather than of a user account. One user may be an
Owner of one workspace, a Maintainer of a second, and have no membership of a third.
Role changes apply only to the workspace in which they are made.

flowchart LR
    U(["One user account"])
    U -- "membership: Owner" --> A["Workspace A"]
    U -- "membership: Maintainer" --> B["Workspace B"]
    U ~~~ C["Workspace C<br/>no membership"]

    classDef noAccess stroke-dasharray:4 3
    class C noAccess

An Observer or Operator membership can also be limited to a subset of the workspace's
locations, in which case the role's permissions apply only to those locations. Use it
when an operator may only send data on behalf of their own site, or when an observer may
only see one location or a specific set of them.

The five roles

Harmony defines five roles. Observer, Maintainer, Admin and Owner form an ascending
hierarchy, each containing the permissions of the one below it. Operator does not fit
that hierarchy; it is a separate set of permissions.

flowchart LR
    Ob["Observer"] --> Ma["Maintainer"] --> Ad["Admin"] --> Ow["Owner"]
    Op["Operator<br/>separate scope set,<br/>not part of the hierarchy"]

    classDef aside stroke-dasharray:4 3
    class Op aside

A short description of each role is given below. For a more detailed overview of all permissions, see: Permission reference

Observer

Read-only. An Observer can see operational data but cannot change anything.

Use for people who report on operations rather than run them: supply chain analysts,
warehouse managers, and colleagues investigating a discrepancy. Observer is the default
role for new invitations and the appropriate starting point when the access a person
needs is not yet established.

Operator

The role for personnel performing scanning work at a read point, packing bench or gate.
It is scoped to carrying out an operational task rather than to reviewing one.

Operator is not a superset of Observer. It is a separate set of permissions that
deliberately omits most of Observer's reporting access, with the effect that an
Operator produces data without being able to review it afterwards. Consult the
permission reference rather than assuming an Operator can see whatever an Observer can.

Operators are also routed differently in the web application: authentication as an
Operator redirects to the Operator Hub rather than the full workspace interface.

Use for store and warehouse personnel performing counts, packing, goods-in and
goods-out, and for fixed tablets at a tunnel or gate.

Maintainer

Maintainers can edit workspace configuration, locations, read points and readers, and
inspect hook and location logs. The role is mainly used by internal staff and support
engineers.

Admin

Operational control of the workspace, covering members, credentials, and
integrations. Admin holds everything except the commercial settings reserved for Owner
and the Owner role itself, which an Admin can neither grant nor modify.

Use for the person who runs the workspace: integration lead, rollout project manager,
or the IT contact responsible for issuing API credentials.

Owner

Unrestricted access, including the commercial settings and the Owner role itself. Nedap recommends at
least two Owners per workspace so that account control survives personnel changes.

Use for the party commercially and organizationally accountable for the workspace.

Touch points

A touch point is a screen or handheld paired to a single read point: a tablet at a
packing bench, a handheld at goods-in, the display beside a tunnel. It is not a user
account and has no role. It gets its own token, tied to one read point, with a fixed set
of permissions.

This section covers what a touch point may do. For the device-side setup, including
generating the code and adding the touch point to an iPad home screen, see
Run as Touchpoint.

Pairing with a code

Pairing runs through a one-time code, so nobody has to put Harmony credentials on the
device.

  1. Someone with "Associate and configure touch points" (Maintainer and up) generates a
    code for a read point.
  2. The code is entered on the device.
  3. Harmony issues the device a token and records it against the read point.

What the code is:

  • Nine characters, lowercase letters and digits, from a cryptographic random generator.
  • Valid for 72 hours from creation.
  • Single use. Redeeming it deletes it.
  • One touch point per read point. Generating a second code for a read point that is
    already paired returns a conflict, and so does redeeming one.
  • Redemption is unauthenticated, so the code alone is enough. Each attempt is delayed by
    one second to slow down guessing.
  • Expired codes are removed automatically seven days after they lapse.

This is what makes it workable for external users. You can send someone a code, or read
it out over the phone, and they can bring a device online without an account, without a
password, and without you issuing an API token.

What a touch point may do

The token itself carries no scopes. Every request is checked against a fixed allow-list
of 18 scopes, shown in the Touch point column of the permission reference. In practice it
covers running the station: triggering reads, capturing and querying EPCIS events,
working with documents, requesting serial numbers, read access to master data and
locations, and the iD Cloud API.

A touch point is close to Operator but is not the same set, and neither contains the
other. They share 11 permissions. An Operator additionally sees read points, read point
actions and associated readers, none of which a touch point can list. A touch point
additionally queries EPCIS events and sees EPC status, device state, device observations
and location maps, none of which an Operator has. Only Admin and Owner hold everything a
touch point does.

The list is not configurable. A touch point cannot be widened or narrowed per device,
and a code cannot hand out a subset of it. Every touch point in every workspace gets the
same 18 permissions, so a read point is the only thing that scopes a device down.

Ending access

A touch point holds "Disassociate a touch point", so it can unpair itself. Anyone with
that permission can also do it from Harmony, which clears the token from the read point
and, for a paired native device, releases the reader.

The token is issued with a nine-year expiry, the same as an API token. Disassociation is
what ends access, not expiry.

Permission reference

Which roles hold which permission. A filled bullet (●) means granted, an empty bullet
(○) not granted. The last column is not a role: it is the fixed permission set of a
touch point, listed here because it is the only way to compare it against the roles.

AreaCapabilityObserverOperatorMaintainerAdminOwnerTouch point
ApplicationsView applications assigned to a read point○●●●●●
ApplicationsView applications○○●●●○
ApplicationsCreate and edit applications○○○●●○
ApplicationsAssign applications to read points○○●●●○
DocumentsView documents○●●●●●
DocumentsCreate, edit and delete documents○●○●●●
DocumentsBulk document import and deletion○○○●●○
Events and traceability dataQuery EPCIS events●○●●●●
Events and traceability dataCapture EPCIS events○●○●●●
Events and traceability dataView EPC status●○●●●●
Events and traceability dataUpdate EPC status○○○●●○
Events and traceability dataView EPC device observations●○●●●●
Events and traceability dataView EPC device state●○●●●●
Events and traceability dataView EPC/TID bindings○○○●●○
Events and traceability dataRegister EPC/TID bindings○○○●●○
Events and traceability dataView consolidations●○●●●○
Events and traceability dataCreate and update consolidations○○○●●○
Hooks and background jobsView hook job status and logs○○●●●○
Hooks and background jobsEnqueue, cancel and delete hook jobs○●●●●●
Hooks and background jobsView hook definitions○○●●●○
Hooks and background jobsCreate and edit hook definitions○○○●●○
Hooks and background jobsView background jobs○○●●●○
IntegrationsAccess the iD Cloud API○○○●●●
IntegrationsView third-party integrations○○○●●○
IntegrationsSend requests to third-party integrations○○○●●○
IntegrationsView iD Cloud integration settings○○○●●○
IntegrationsConfigure the iD Cloud integration○○○●●○
IntegrationsSend email○○○●●○
Locations and master dataView locations●●●●●●
Locations and master dataView location maps●○●●●●
Locations and master dataCreate and edit locations○○●●●○
Locations and master dataCreate and edit location maps○○●●●○
Locations and master dataView master data●●●●●●
Locations and master dataCreate, edit and delete master data○○●●●○
Read pointsView read points●●●●●○
Read pointsCreate and configure read points○○●●●○
Read pointsView triggers sent to a read point●○●●●○
Read pointsTrigger a read point (start and stop reading)○●●●●●
Read pointsView read point actions●●●●●○
Read pointsCreate read point actions○○○●●○
Read pointsView read point logs●○●●●○
Read pointsSubmit read point logs○○○●●○
Read pointsView open read point screens○●●●●●
Read pointsRegister open read point screens○●●●●●
Readers and touch pointsView associated readers●●●●●○
Readers and touch pointsAssociate and disassociate readers○○●●●○
Readers and touch pointsAccept third-party reader heartbeats○○○●●○
Readers and touch pointsAssociate and configure touch points○○●●●○
Readers and touch pointsDisassociate a touch point○○●●●●
SerialisationView serialisation ranges○○●●●○
SerialisationCreate serialisation ranges○○●●●○
SerialisationRequest serial numbers○●●●●●
Workspace administrationView workspace members○○●●●○
Workspace administrationInvite, remove and re-role members○○○●●○
Workspace administrationView API tokens○○○●●○
Workspace administrationCreate and revoke API tokens○○○●●○
Workspace administrationView workspace variables○○○●●○
Workspace administrationCreate, edit and delete workspace variables○○○●●○
Workspace administrationView workspace details○○●●●○
Workspace administrationChange notification settings○○●●●○
Workspace administrationChange workspace settings○○○○●○
Workspace administrationConfigure overhead traffic○○○●●○
Workspace administrationView billing details○○○○●○
Workspace administrationChange billing details○○○○●○
Workspace administrationView the subscription○○○○●○
Workspace administrationChange the subscription○○○○●○
Workspace administrationChange feature flags○○○○●○

API tokens

API tokens authenticate machines and integrations. Only Admin and Owner may create
them, and each token is bound to one workspace.

Choosing scopes

The creation form takes individual scopes or whole categories. Sixteen categories are
available to tokens: EPCIS, EPC Status, EPC Device Observations, EPC Device State, EPC
TID Bindings, Consolidations, Documents, Read Points, Locations, Master Data, Readers,
Serialisation, Variables, Third Party, Integration (email), and hook jobs.

Some permissions are closed to tokens entirely, full-access tokens included, an overview of which scopes are allowed can be found below. The scope value is what appears in the API token form and in a token's scope claim. 39 of the 67 scopes can be granted to an API token (●); the rest are interface-only (○).

AreaCapabilityScopeAPI token
ApplicationsView applications assigned to a read pointread:readpoint:applications○
ApplicationsView applicationsread:applications○
ApplicationsCreate and edit applicationswrite:applications○
ApplicationsAssign applications to read pointsmanage:applications○
DocumentsView documentsread:documents●
DocumentsCreate, edit and delete documentswrite:documents●
DocumentsBulk document import and deletionmanage:documents●
Events and traceability dataQuery EPCIS eventsread:epcis●
Events and traceability dataCapture EPCIS eventswrite:epcis●
Events and traceability dataView EPC statusread:epcstatus●
Events and traceability dataUpdate EPC statuswrite:epcstatus●
Events and traceability dataView EPC device observationsread:epcdeviceobservations●
Events and traceability dataView EPC device stateread:epcdevicestate●
Events and traceability dataView EPC/TID bindingsread:epctidbinding●
Events and traceability dataRegister EPC/TID bindingswrite:epctidbinding●
Events and traceability dataView consolidationsread:consolidations●
Events and traceability dataCreate and update consolidationswrite:consolidations●
Hooks and background jobsView hook job status and logsread:hook:jobs●
Hooks and background jobsEnqueue, cancel and delete hook jobswrite:hook:jobs●
Hooks and background jobsView hook definitionsread:hooks○
Hooks and background jobsCreate and edit hook definitionswrite:hooks○
Hooks and background jobsView background jobsread:backgroundjobs○
IntegrationsAccess the iD Cloud APIread:thirdparty:idcloud●
IntegrationsView third-party integrationsread:thirdparty○
IntegrationsSend requests to third-party integrationswrite:thirdparty●
IntegrationsView iD Cloud integration settingsread:idcloudIntegration○
IntegrationsConfigure the iD Cloud integrationwrite:idcloudIntegration○
IntegrationsSend emailwrite:email●
Locations and master dataView locationsread:locations●
Locations and master dataView location mapsread:location:maps●
Locations and master dataCreate and edit locationswrite:locations●
Locations and master dataCreate and edit location mapswrite:location:maps●
Locations and master dataView master dataread:masterdata●
Locations and master dataCreate, edit and delete master datawrite:masterdata●
Read pointsView read pointsread:readpoints●
Read pointsCreate and configure read pointswrite:readpoints●
Read pointsView triggers sent to a read pointread:readpoint:triggers●
Read pointsTrigger a read point (start and stop reading)write:readpoint:triggers●
Read pointsView read point actionsread:readpoint:actions●
Read pointsCreate read point actionswrite:readpoint:actions●
Read pointsView read point logsread:readpoint:logs●
Read pointsSubmit read point logswrite:readpoint:logs○
Read pointsView open read point screensread:readpoint:screensopen○
Read pointsRegister open read point screenswrite:readpoint:screensopen○
Readers and touch pointsView associated readersread:readers●
Readers and touch pointsAssociate and disassociate readerswrite:readers●
Readers and touch pointsAccept third-party reader heartbeatswrite:readers:thirdparty●
Readers and touch pointsAssociate and configure touch pointswrite:touchpoints○
Readers and touch pointsDisassociate a touch pointdisassociate:touchpoints○
SerialisationView serialisation rangesread:serialisation●
SerialisationCreate serialisation rangeswrite:serialisation●
SerialisationRequest serial numberswrite:serialnumbers●
Workspace administrationView workspace membersread:members○
Workspace administrationInvite, remove and re-role memberswrite:members○
Workspace administrationView API tokensread:apitokens○
Workspace administrationCreate and revoke API tokenswrite:apitokens○
Workspace administrationView workspace variablesread:variables●
Workspace administrationCreate, edit and delete workspace variableswrite:variables●
Workspace administrationView workspace detailsread:workspace○
Workspace administrationChange notification settingswrite:workspace:notifications○
Workspace administrationChange workspace settingswrite:workspace○
Workspace administrationConfigure overhead trafficwrite:workspace:overheadtraffic○
Workspace administrationView billing detailsread:workspace:billing○
Workspace administrationChange billing detailswrite:workspace:billing○
Workspace administrationView the subscriptionread:workspace:subscription○
Workspace administrationChange the subscriptionwrite:workspace:subscription○
Workspace administrationChange feature flagswrite:workspace:features○

Lifetime and revocation

Token lifetime is fixed at nine years from creation and is not configurable. There is no
expiry field, no maximum-lifetime policy and no rotation reminder, so rotation is a
manual process the workspace administrator owns. Issuing several narrowly scoped tokens
rather than one broad one keeps the cost of rotating any single credential low.

Revocation is immediate. Every request checks the token against the revocation list. The
token value appears once, at creation, and later listings show only its final five
characters, so record it in a secrets manager straight away.


Did this page help you?