Skip to content

Endpoint Group Routes

List group routes

View source specification ↗
GET /group-routes

API to enumerate the group routes that a principal has permissions to.

Required scope

group:read

Query parameters

ownerstring

Filter the results by the owner of the resource. Defaults to the authenticated caller's resources when omitted. Use '~caller' to make that scope explicit. Another owner can be selected only for resources the caller can read.

nextTokenstring

Opaque token for the next page of results. Pass the continuation token returned by the previous response, unchanged. Omit it to start from the first page.

maxResultsinteger

Maximum number of results to return in one page. Defaults to 100. Values from 1 through 100 are accepted.

minimum: 1

maximum: 100

Default: 100

expandarray<string>

Expansion tokens that request related or computed fields for each result. When omitted, the response contains only the default, shallower set of fields for each result.

Returns

200

Group routes retrieved successfully

Fields
resultsarray<EndpointGroupRoute>Required

A route within an endpoint group linking a plugin route to a group with interface metadata.

etagstringRequired

Opaque strong version of the stored native route. Send as If-Match when deleting.

pluginProfileIdstring

Stable profile ID from the registered plugin declaration.

minLength: 1

ontologicalTypesarray<string>

Actual native group route classifications.

idstringRequired

Unique group route ID.

pattern: "^port1/[^/]+/[^/]+/endpoint-group-routes/[^/]+$"

associatedGroupIdstring

The associated endpoint group ID; omitted for an orphaned route.

pattern: "^port1/[^/]+/[^/]+/endpoint-groups/[^/]+$"

associatedPluginIdstringRequired

Associated plugin ID.

associatedPluginRouteIdstringRequired

Stable plugin-owned route ID. Match synchronized plugin or fixture membership with this value, not the Port OS group route `id`.

associatedAuthLinkIdstringRequired

Associated auth link ID.

ownerIdstringRequired

Group route owner's ID.

memberPluginRouteIdsarray<string>

Member plugin route IDs.

interfacesarray<RouteInterface>Required

Supported interfaces.

namestringRequired

The name of the interface

versionstring

the version of the interface

messagesarray<ApplicationInterfaceMessage>

Supported inbound message subset for the declared interface version. An omitted or empty list declares no supported messages; null also declares none. A supplied array contains distinct canonical names for implemented messages.

nullable: true

namestringRequired

The name of the command

attributesarray<ApplicationInterfaceAttribute>

Supported attribute subset. An omitted or empty list declares no supported attributes.

namestringRequired

The name of the attribute

valueobject

the value of the attribute, this is an opaque resource object, so it can be any type of struct.

configurationobject

The configuration of the interface

pluginCustomMetadataobject

Provider-defined route metadata for plugin use.

namestring

The provider-native group name, which can differ from the customer aggregate name.

enablementstringRequired

Whether Port OS uses an endpoint or group. A disabled one is hidden from collections by default and cannot be sent device messages or targeted by them; exact authorized reads still return it. Rediscovery never changes it, so disabling is how a user hides a discovered device or room for good.

Default: ENABLED

Allowed values

  • ENABLED
  • DISABLED
memberEndpointIdsarray<string>

Resolved Port OS endpoint IDs in this native route.

uniqueItems: true

paginationContextPaginationContext
errorsarray<Error>

Partial query errors collected while returning available results.

The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.

familystringRequired

The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.

codestringRequired

The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.

messagestringRequired

Plain-language description of the failure and the suggested next action.

detailsErrorDetails

Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.

errorsarray<SynchronizationItemError>

Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.

One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.

pluginRouteIdstring

Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.

relationshipExternalIdstring

Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.

interfacestring

Canonical capability interface name the failure applies to, when the failure is interface-specific.

versionstring

Declared capability interface version the failure applies to, when the failure is interface-specific.

codestringRequired

The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.

familystringRequired

The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.

statusintegerRequired

HTTP-equivalent status code of the item failure.

minimum: 400

maximum: 599

messagestringRequired

Plain-language description of the failure and the suggested fix.

Errors

400 BAD_REQUEST

Bad request - missing required parameters

Check the request fields and any validation details, then correct the payload.

401 UNAUTHORIZED

Unauthorized - invalid or missing authentication token

Obtain a valid access token, then retry.

403 FORBIDDEN

Forbidden - insufficient permissions

Check the linked account and its permissions for the device or resource.

500 INTERNAL

Internal server error

Retry with backoff only when the operation is safe to repeat. Include the error code when reporting persistent failures.

Delete a group route

View source specification ↗
DELETE /{namespace}/{principalType}/{principalId}/group-routes/{groupId}

Deletes an existing group route and its graph/state references atomically. Requires If-Match and Idempotency-Key; identical retries replay for 24 hours. DELETE has no request body.

Required scope

group:manage

Path parameters

namespacestringRequired

The namespace of the principal

principalTypestringRequired

The type of principal

principalIdstringRequired

The ID of the principal

groupIdstringRequired

The ID of the group route to delete

Header parameters

If-MatchstringRequired

The quoted strong entity tag of the resource the client last read (its `etag` field or `ETag` response header). The mutation is applied only when it still matches: a stale value returns 412 PRECONDITION_FAILED and a missing header returns 428 PRECONDITION_REQUIRED. Wildcards are accepted only where the operation explicitly permits them.

minLength: 1

Idempotency-KeystringRequired

Client-chosen key that makes a non-idempotent request retry-safe, following draft-ietf-httpapi-idempotency-key-header. A committed response is stored for 24 hours and replayed for the same principal, operation, key and payload. Missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, a key longer than 255 characters returns 400 IDEMPOTENCY_KEY_INVALID, the same key with a different payload returns 422, and the same key while the first request is still in flight returns 409. Requests rolled back before external provider attempts do not consume the key. Group mutations retain terminal failed responses after provider attempts together with received provider truth; their operation contract defines these replayable outcomes.

minLength: 1

maxLength: 255

Returns

200

Group route deleted successfully

No response body.

Errors

400 BAD_REQUEST

Invalid request payload

Check the request fields and any validation details, then correct the payload.

401 UNAUTHORIZED

Unauthorized - invalid or missing authentication token

Obtain a valid access token, then retry.

403 FORBIDDEN

Forbidden - insufficient permissions

Check the linked account and its permissions for the device or resource.

404 NOT_FOUND

Group route not found

Verify the target identifier and that its endpoint or plugin route still exists.

409 IDEMPOTENCY_KEY_IN_FLIGHT

The same idempotency key is in flight

Check the device’s current mode or state. Retry only after the conflict is resolved.

412 PRECONDITION_FAILED

If-Match does not match the stored route version

Inspect the returned code and family and follow the error handling guide.

422 IDEMPOTENCY_KEY_REUSED

The same key was used with a different request

Correct the rejected value using the constraints in the error details or request schema.

428 PRECONDITION_REQUIRED

If-Match is required

Inspect the returned code and family and follow the error handling guide.

500 INTERNAL

Internal server error

Retry with backoff only when the operation is safe to repeat. Include the error code when reporting persistent failures.

Get a group route

View source specification ↗
GET /{namespace}/{principalType}/{principalId}/group-routes/{groupId}

Reads the stored native route and its current strong etag.

Required scope

group:read

Path parameters

namespacestringRequired

The namespace of the principal

principalTypestringRequired

The type of principal

principalIdstringRequired

The ID of the principal

groupIdstringRequired

The ID of the group route to retrieve

Returns

200

Group route retrieved

Fields
etagstringRequired

Opaque strong version of the stored native route. Send as If-Match when deleting.

pluginProfileIdstring

Stable profile ID from the registered plugin declaration.

minLength: 1

ontologicalTypesarray<string>

Actual native group route classifications.

idstringRequired

Unique group route ID.

pattern: "^port1/[^/]+/[^/]+/endpoint-group-routes/[^/]+$"

associatedGroupIdstring

The associated endpoint group ID; omitted for an orphaned route.

pattern: "^port1/[^/]+/[^/]+/endpoint-groups/[^/]+$"

associatedPluginIdstringRequired

Associated plugin ID.

associatedPluginRouteIdstringRequired

Stable plugin-owned route ID. Match synchronized plugin or fixture membership with this value, not the Port OS group route `id`.

associatedAuthLinkIdstringRequired

Associated auth link ID.

ownerIdstringRequired

Group route owner's ID.

memberPluginRouteIdsarray<string>

Member plugin route IDs.

interfacesarray<RouteInterface>Required

Supported interfaces.

namestringRequired

The name of the interface

versionstring

the version of the interface

messagesarray<ApplicationInterfaceMessage>

Supported inbound message subset for the declared interface version. An omitted or empty list declares no supported messages; null also declares none. A supplied array contains distinct canonical names for implemented messages.

nullable: true

namestringRequired

The name of the command

attributesarray<ApplicationInterfaceAttribute>

Supported attribute subset. An omitted or empty list declares no supported attributes.

namestringRequired

The name of the attribute

valueobject

the value of the attribute, this is an opaque resource object, so it can be any type of struct.

configurationobject

The configuration of the interface

pluginCustomMetadataobject

Provider-defined route metadata for plugin use.

namestring

The provider-native group name, which can differ from the customer aggregate name.

enablementstringRequired

Whether Port OS uses an endpoint or group. A disabled one is hidden from collections by default and cannot be sent device messages or targeted by them; exact authorized reads still return it. Rediscovery never changes it, so disabling is how a user hides a discovered device or room for good.

Default: ENABLED

Allowed values

  • ENABLED
  • DISABLED
memberEndpointIdsarray<string>

Resolved Port OS endpoint IDs in this native route.

uniqueItems: true

Response headers
ETagstring

Opaque strong entity tag of the returned resource version. Send it back in `If-Match` on the next mutation of the same resource.

Errors

400 BAD_REQUEST

Invalid route ID

Check the request fields and any validation details, then correct the payload.

401 UNAUTHORIZED

Authentication required

Obtain a valid access token, then retry.

403 FORBIDDEN

Insufficient permissions

Check the linked account and its permissions for the device or resource.

404 NOT_FOUND

Group route not found

Verify the target identifier and that its endpoint or plugin route still exists.

500 INTERNAL

Internal server error

Retry with backoff only when the operation is safe to repeat. Include the error code when reporting persistent failures.