{"openapi":"3.0.1","info":{"title":"Groups","description":"Groups","version":"v3"},"servers":[{"url":"https://talk.perspio.io/groups/v3","description":"AU Region"},{"url":"https://us-talk.perspio.io/groups/v3","description":"US Region"}],"paths":{"/{id}":{"delete":{"tags":["Asset Groups"],"summary":"Delete Asset Group","description":"Delete an asset group by id.","operationId":"deletegroup","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"responses":{"200":{"description":"The asset group was deleted."},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.DeleteGroup","errorType":"ArgumentException","statusCode":400,"request":"DELETE /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.DeleteGroup","errorType":"NullReferenceException","statusCode":500,"request":"DELETE /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}},"get":{"tags":["Asset Groups"],"summary":"Get Asset Group","description":"Fetch a single asset group by id.","operationId":"getAssetGroup","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"x-perspio-filter","in":"header","description":"Global data filter (JSON-serialised) scoping results to matching assets. Optional keys, each an array of strings: locationHierarchyL1..L3, productHierarchyL1..L3, operationalHierarchyL1..L3, groupIds; plus boolean 'enabled'. Omit for no additional filtering (security-group scoping always applies). Example: {\"locationHierarchyL1\":[\"NSW\"],\"enabled\":true}","schema":{"type":"string"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"assetCount":{"type":"number","description":"Number of assets in the group."},"assetGroupName":{"type":"string","description":"Display name of the asset group."},"assetIds":{"type":"array","items":{"type":"string"},"description":"Ids of the assets in the group."},"category":{"type":"string","description":"Category of the group."},"correlationId":{"type":"string","description":"Client-supplied correlation id, echoed back for request tracing."},"createdBy":{"type":"string","description":"User or system that created the record."},"createdDate":{"type":"string","description":"UTC timestamp when the record was created.","format":"date-time"},"deleted":{"type":"boolean","description":"Whether the group is soft-deleted."},"description":{"type":"string","description":"Free-text description of the group."},"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"id":{"type":"string","description":"Unique identifier of this record."},"ownedBy":{"type":"string","description":"Owner of the record."},"ownerId":{"type":"string","description":"Id of the group owner."},"rbacIds":{"type":"array","items":{"type":"string"},"description":"Role-based access control ids associated with the group."},"type":{"type":"string","description":"Record type discriminator."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags associated with the group."},"updatedBy":{"type":"string","description":"User or system that last modified the record."},"updatedDate":{"type":"string","description":"UTC timestamp when the record was last modified.","format":"date-time"}}}},"example":[{"assetCount":5,"assetGroupName":"Delivery Fleet Group A","assetIds":["asset-001","asset-002","asset-003","asset-004","asset-005"],"category":"Fleet","correlationId":"corr-abc123","createdBy":"john.doe@example.com","createdDate":"2025-07-01T09:00:00.0000000+00:00","deleted":false,"description":"Group for all delivery fleet operating in Sydney","geofenceIds":["in-gf-001001","in-gf-001002"],"id":"group-0001","ownedBy":"operations-team","ownerId":"user-001","rbacIds":["rbac-101","rbac-102"],"type":"AssetGroup","tags":["delivery","priority","fleet"],"updatedBy":"jane.smith@example.com","updatedDate":"2025-07-02T09:30:00.0000000+00:00"},{"assetCount":3,"assetGroupName":"Maintenance Equipment Group","assetIds":["asset-010","asset-011","asset-012"],"category":"Equipment","correlationId":"corr-def456","createdBy":"alex.lee@example.com","createdDate":"2025-07-01T11:00:00.0000000+00:00","deleted":false,"description":"Group for maintenance assets used in warehouse operations","geofenceIds":["in-gf-000123"],"id":"group-0002","ownedBy":"maintenance-team","ownerId":"user-002","rbacIds":["rbac-201"],"type":"AssetGroup","tags":["equipment","warehouse","tools"],"updatedBy":"alex.lee@example.com","updatedDate":"2025-07-02T11:50:00.0000000+00:00"}]}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroup","errorType":"ArgumentException","statusCode":400,"request":"GET /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Resource Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroup","errorType":"NullReferenceException","statusCode":500,"request":"GET /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}},"put":{"tags":["Asset Groups"],"summary":"Update Asset Group","description":"Update assets in an asset group.","operationId":"updateAssetGroup","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"requestBody":{"description":"Group object to update (polymorphic based on recordType)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of this record."},"recordType":{"type":"string"},"category":{"type":"string","description":"Category of the group."},"assetGroupName":{"type":"string","description":"Display name of the asset group."},"description":{"type":"string","description":"Free-text description of the group."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags associated with the group."},"deleted":{"type":"boolean","description":"Whether the group is soft-deleted."},"assetCount":{"type":"number","description":"Number of assets in the group."},"conditions":{"type":"object","description":"Rule conditions - custom structure"},"createdBy":{"type":"string","description":"User or system that created the record."},"createdDateUTC":{"type":"string","format":"date-time"},"updatedBy":{"type":"string","description":"User or system that last modified the record."},"updatedDateUTC":{"type":"string","format":"date-time"}}},"example":{"id":"group-789","recordType":"iotGroup","category":"Sensors","assetGroupName":"Temperature Sensors","description":"Updated description","tags":["iot","temperature"],"deleted":false,"assetCount":10,"conditions":{"rule":"some rule JSON or DSL"},"createdBy":"admin@example.com","createdDateUTC":"2025-07-10T10:00:00.0000000+00:00","updatedBy":"editor@example.com","updatedDateUTC":"2025-07-16T10:00:00.0000000+00:00"}}}},"responses":{"200":{"description":"The asset group was updated."},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroup","errorType":"ArgumentException","statusCode":400,"request":"PUT /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Asset Group Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroup","errorType":"NullReferenceException","statusCode":500,"request":"PUT /api/groups/IN-ASTG-000123","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/{id}/copy":{"post":{"tags":["Asset Groups"],"summary":"Copy Asset Group","description":"Create a copy of an existing asset group.","operationId":"copygroup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"requestBody":{"description":"Copy group request data","content":{"application/json":{"schema":{"required":["name"],"type":"object","properties":{"name":{"type":"string","description":"Name of the new copied group"},"description":{"type":"string","description":"Description for the new group; optional"},"groupType":{"type":"string","description":"Type of group to create; optional"}}},"example":{"name":"Copied Group Name","description":"Optional description for the copied group","groupType":"securityGroup"}}}},"responses":{"200":{"description":"The asset group was copied.","content":{"application/json":{"schema":{"type":"object","properties":{"assetCount":{"type":"integer","description":"Number of assets in the group.","format":"int32","nullable":true},"assetGroupName":{"type":"string","description":"Display name of the asset group."},"assetIds":{"type":"array","items":{"type":"string"},"description":"Ids of the assets in the group."},"category":{"type":"string","description":"Category of the group."},"correlationId":{"type":"string","description":"Client-supplied correlation id, echoed back for request tracing."},"createdBy":{"type":"string","description":"User or system that created the record."},"createdDate":{"type":"string","description":"UTC timestamp when the record was created.","format":"date-time"},"deleted":{"type":"boolean","description":"Whether the group is soft-deleted."},"description":{"type":"string","description":"Free-text description of the group."},"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"id":{"type":"string","description":"Unique identifier of this record."},"ownedBy":{"type":"string","description":"Owner of the record."},"ownerId":{"type":"string","description":"Id of the group owner."},"rbacIds":{"type":"array","items":{"type":"string"},"description":"Role-based access control ids associated with the group."},"type":{"type":"string","description":"Record type discriminator."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags associated with the group."},"updatedBy":{"type":"string","description":"User or system that last modified the record."},"updatedDate":{"type":"string","description":"UTC timestamp when the record was last modified.","format":"date-time"}}},"example":{"assetCount":null,"assetGroupName":"Northern Depot Fleet","assetIds":["in-000052"],"category":"fleet","correlationId":"AG-000123","createdBy":"createdBy","createdDate":"2022-10-21T02:27:17.0000000+00:00","deleted":false,"description":"description","geofenceIds":["in-gf-000123"],"id":"AG-000123","ownedBy":"ownedBy","ownerId":"AG-000123","rbacIds":["in-000052"],"type":"type","tags":["fleet"],"updatedBy":"2026-06-28T10:00:00.0000000+00:00","updatedDate":"2022-10-21T02:27:17.0000000+00:00"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.CopyGroup","errorType":"ArgumentException","statusCode":400,"request":"POST /api/groups/IN-ASTG-000123/copy","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.CopyGroup","errorType":"NullReferenceException","statusCode":500,"request":"POST /api/groups/IN-ASTG-000123/copy","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/":{"get":{"tags":["Asset Groups"],"summary":"Get Asset Groups","description":"List the tenant's asset groups.","operationId":"getAssetGroups","parameters":[{"name":"type","in":"query","schema":{"type":"string"}},{"name":"geofenceId","in":"query","schema":{"type":"string"},"example":"geofence-123"},{"name":"x-perspio-filter","in":"header","description":"Global data filter (JSON-serialised) scoping results to matching assets. Optional keys, each an array of strings: locationHierarchyL1..L3, productHierarchyL1..L3, operationalHierarchyL1..L3, groupIds; plus boolean 'enabled'. Omit for no additional filtering (security-group scoping always applies). Example: {\"locationHierarchyL1\":[\"NSW\"],\"enabled\":true}","schema":{"type":"string"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"assetCount":{"type":"number","description":"Number of assets in the group."},"assetGroupName":{"type":"string","description":"Display name of the asset group."},"assetIds":{"type":"array","items":{"type":"string"},"description":"Ids of the assets in the group."},"category":{"type":"string","description":"Category of the group."},"correlationId":{"type":"string","description":"Client-supplied correlation id, echoed back for request tracing."},"createdBy":{"type":"string","description":"User or system that created the record."},"createdDate":{"type":"string","description":"UTC timestamp when the record was created.","format":"date-time"},"deleted":{"type":"boolean","description":"Whether the group is soft-deleted."},"description":{"type":"string","description":"Free-text description of the group."},"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"id":{"type":"string","description":"Unique identifier of this record."},"ownedBy":{"type":"string","description":"Owner of the record."},"ownerId":{"type":"string","description":"Id of the group owner."},"rbacIds":{"type":"array","items":{"type":"string"},"description":"Role-based access control ids associated with the group."},"type":{"type":"string","description":"Record type discriminator."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags associated with the group."},"updatedBy":{"type":"string","description":"User or system that last modified the record."},"updatedDate":{"type":"string","description":"UTC timestamp when the record was last modified.","format":"date-time"}}}},"example":[{"assetCount":5,"assetGroupName":"Delivery Fleet Group A","assetIds":["asset-001","asset-002","asset-003","asset-004","asset-005"],"category":"Fleet","correlationId":"corr-abc123","createdBy":"john.doe@example.com","createdDate":"2025-07-01T09:00:00.0000000+00:00","deleted":false,"description":"Group for all delivery fleet operating in Sydney","geofenceIds":["in-gf-001001","in-gf-001002"],"id":"group-0001","ownedBy":"operations-team","ownerId":"user-001","rbacIds":["rbac-101","rbac-102"],"type":"AssetGroup","tags":["delivery","priority","fleet"],"updatedBy":"jane.smith@example.com","updatedDate":"2025-07-02T09:30:00.0000000+00:00"},{"assetCount":3,"assetGroupName":"Maintenance Equipment Group","assetIds":["asset-010","asset-011","asset-012"],"category":"Equipment","correlationId":"corr-def456","createdBy":"alex.lee@example.com","createdDate":"2025-07-01T11:00:00.0000000+00:00","deleted":false,"description":"Group for maintenance assets used in warehouse operations","geofenceIds":["in-gf-000123"],"id":"group-0002","ownedBy":"maintenance-team","ownerId":"user-002","rbacIds":["rbac-201"],"type":"AssetGroup","tags":["equipment","warehouse","tools"],"updatedBy":"alex.lee@example.com","updatedDate":"2025-07-02T11:50:00.0000000+00:00"}]}}},"400":{"description":"Invalid Request"},"401":{"description":"Invalid API Key provided or Invalid Access token"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroups","errorType":"NullReferenceException","statusCode":500,"request":"GET /api/groups","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}},"post":{"tags":["Asset Groups"],"summary":"Create Asset Group","description":"Create a new asset or security group.","operationId":"creategGroup","requestBody":{"description":"Group metadata and associated assets","content":{"application/json":{"schema":{"required":["group"],"type":"object","properties":{"group":{"type":"object","description":"Polymorphic group object (type resolved by 'recordType')"},"assetIds":{"type":"array","items":{"type":"string"},"description":"Optional list of asset IDs to associate"}}},"example":{"group":{"name":"Temperature Sensors","description":"All IoT temp sensors in Building A"},"assetIds":["asset-123","asset-456"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"assetCount":{"type":"integer","description":"Number of assets in the group.","format":"int32","nullable":true},"assetGroupName":{"type":"string","description":"Display name of the asset group."},"assetIds":{"type":"array","items":{"type":"string"},"description":"Ids of the assets in the group."},"category":{"type":"string","description":"Category of the group."},"correlationId":{"type":"string","description":"Client-supplied correlation id, echoed back for request tracing."},"createdBy":{"type":"string","description":"User or system that created the record."},"createdDate":{"type":"string","description":"UTC timestamp when the record was created.","format":"date-time"},"deleted":{"type":"boolean","description":"Whether the group is soft-deleted."},"description":{"type":"string","description":"Free-text description of the group."},"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"id":{"type":"string","description":"Unique identifier of this record."},"ownedBy":{"type":"string","description":"Owner of the record."},"ownerId":{"type":"string","description":"Id of the group owner."},"rbacIds":{"type":"array","items":{"type":"string"},"description":"Role-based access control ids associated with the group."},"type":{"type":"string","description":"Record type discriminator."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags associated with the group."},"updatedBy":{"type":"string","description":"User or system that last modified the record."},"updatedDate":{"type":"string","description":"UTC timestamp when the record was last modified.","format":"date-time"}}},"example":{"assetCount":null,"assetGroupName":"Northern Depot Fleet","assetIds":["in-000052"],"category":"fleet","correlationId":"AG-000123","createdBy":"createdBy","createdDate":"2022-10-21T02:27:17.0000000+00:00","deleted":false,"description":"description","geofenceIds":["in-gf-000123"],"id":"AG-000123","ownedBy":"ownedBy","ownerId":"AG-000123","rbacIds":["in-000052"],"type":"type","tags":["fleet"],"updatedBy":"2026-06-28T10:00:00.0000000+00:00","updatedDate":"2022-10-21T02:27:17.0000000+00:00"}}}},"400":{"description":"Invalid Request"},"401":{"description":"Invalid API Key provided or Invalid Access token"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.CreateGroup","errorType":"NullReferenceException","statusCode":500,"request":"POST /api/groups","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/{id}/membershipChanges":{"get":{"tags":["Membership"],"summary":"Get Group Membership Changes","description":"Fetch changes of an asset group.","operationId":"getGroupMembershipChanges","parameters":[{"name":"id","in":"path","description":"ID of the group","required":true,"schema":{"type":"string","example":"br-astg-000047"}},{"name":"from","in":"query","description":"Start time in ISO 8601 format","required":true,"schema":{"type":"string","format":"date-time","example":"2000-01-01T12:00:00.0000000+00:00"}},{"name":"objectid","in":"query","description":"Object ID","required":true,"schema":{"type":"string","example":"br-astg-000047"}},{"name":"page_size","in":"query","description":"Number of results per page","schema":{"type":"integer","example":10}},{"name":"orderBy","in":"query","description":"Order by parameter","schema":{"type":"string","example":"desc"}},{"name":"x-perspio-filter","in":"header","description":"Global data filter (JSON-serialised) scoping results to matching assets. Optional keys, each an array of strings: locationHierarchyL1..L3, productHierarchyL1..L3, operationalHierarchyL1..L3, groupIds; plus boolean 'enabled'. Omit for no additional filtering (security-group scoping always applies). Example: {\"locationHierarchyL1\":[\"NSW\"],\"enabled\":true}","schema":{"type":"string"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"},{"name":"ContinuationToken","in":"header","description":"Continuation token from the previous response's ContinuationToken header, used to fetch the next page.","schema":{"type":"string"},"example":"eyJ0b2tlbiI6IjEwMDAifQ=="}],"responses":{"200":{"description":"Success","headers":{"ContinuationToken":{"description":"Token to pass back for the next page; absent on the last page.","schema":{"type":"string"},"example":"eyJ0b2tlbiI6IjEwMDAifQ=="},"ResultCount":{"description":"Number of items returned in this page.","schema":{"type":"integer","format":"int64"},"example":50},"TotalCount":{"description":"Total number of items matching the request across all pages.","schema":{"type":"integer","format":"int64"},"example":1372}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of this record."},"assetName":{"type":"string","description":"Name of the asset."},"assetTypeId":{"type":"number","description":"Asset type identifier."},"customerAssetId":{"type":"string","description":"Customer-assigned asset id."},"url":{"type":"string","description":"Link to the asset."},"dateUtc":{"type":"string","description":"UTC time of the membership change."}}}},"example":[{"id":"asset-001","assetName":"Truck A23","assetTypeId":101,"customerAssetId":"cust-asset-789","url":"https://example.com/assets/asset-001","dateUtc":"2025-06-25T10:30:00.0000000+00:00"}]}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroupMembershipChanges","errorType":"ArgumentException","statusCode":400,"request":"GET /api/groups/br-astg-000047/membershipChanges","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Resource Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroupMembershipChanges","errorType":"NullReferenceException","statusCode":500,"request":"GET /api/groups/br-astg-000047/membershipChanges","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/{id}/assets":{"get":{"tags":["Membership"],"summary":"Get Group Members","description":"Fetch all assets of an asset group.","operationId":"getGroupMembers","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"signals","in":"query","description":"Optional list of signal keys to include for each member.","schema":{"type":"array","items":{"type":"string"}}},{"name":"x-perspio-filter","in":"header","description":"Global data filter (JSON-serialised) scoping results to matching assets. Optional keys, each an array of strings: locationHierarchyL1..L3, productHierarchyL1..L3, operationalHierarchyL1..L3, groupIds; plus boolean 'enabled'. Omit for no additional filtering (security-group scoping always applies). Example: {\"locationHierarchyL1\":[\"NSW\"],\"enabled\":true}","schema":{"type":"string"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"assetName":{"type":"string","description":"Name of the asset."},"id":{"type":"string","description":"Unique identifier of this record."}}},"description":"Assets that are members of the group."},"groupId":{"type":"string","description":"Id of the group."}}},"example":{"assets":[{"assetName":"Truck A1","id":"asset-001"},{"assetName":"Forklift B2","id":"asset-002"},{"assetName":"Van C3","id":"asset-003"}],"groupId":"group-789"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroupAssets","errorType":"ArgumentException","statusCode":400,"request":"GET /api/groups/IN-ASTG-000123/assets","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Resource Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.GetGroupAssets","errorType":"NullReferenceException","statusCode":500,"request":"GET /api/groups/IN-ASTG-000123/assets","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}},"put":{"tags":["Membership"],"summary":"Update Group Members","description":"Replace the asset members of a group.","operationId":"updateGroupMembers","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-ASTG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAssetGroupAssets-RequestObject"},"example":{"groupId":"IN-ASTG-000124","assets":[{"id":"IN-000123","assetName":"BLADE - IVECO Truck XN05NX"},{"id":"IN-000124","assetName":"LT - Diesel - Innov8 - 2000W"}]}}}},"responses":{"200":{"description":"The group members were updated."},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupAssets","errorType":"ArgumentException","statusCode":400,"request":"PUT /api/groups/IN-ASTG-000123/assets","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Asset Group Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupAssets","errorType":"NullReferenceException","statusCode":500,"request":"PUT /api/groups/IN-ASTG-000123/assets","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/{id}/secured-dashboards":{"put":{"tags":["Membership"],"summary":"Update Security Group Dashboards","description":"Replace the dashboards secured to a group.","operationId":"updateSecuredDashboards","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-SECG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSecurityGroupDashboards-RequestObject"},"example":{"groupId":"IN-SECG-000124","securedDashboards":["in-dash-000085","in-dash-000091"]}}}},"responses":{"200":{"description":"The secured dashboards were updated."},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupDashboards","errorType":"ArgumentException","statusCode":400,"request":"PUT /api/groups/IN-SECG-000123/secured-dashboards","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Asset Group Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupDashboards","errorType":"NullReferenceException","statusCode":500,"request":"PUT /api/groups/IN-SECG-000123/secured-dashboards","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}},"/{id}/secured-geofences":{"put":{"tags":["Membership"],"summary":"Update Security Group Geofences","description":"Replace the geofences secured to a group.","operationId":"updateSecuredGeofences","parameters":[{"name":"id","in":"path","description":"Group Id","required":true,"schema":{"type":"string","example":"IN-SECG-000123"}},{"name":"includedisabledassets","in":"header","description":"When true, disabled assets are included in the tenant scope applied to this request. Defaults to false.","schema":{"type":"boolean"},"example":"False"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSecurityGroupGeofences-RequestObject"},"example":{"groupId":"IN-SECG-000124","securedGeofences":["in-gf-000001"]}}}},"responses":{"200":{"description":"The secured geofences were updated."},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupGeofences","errorType":"ArgumentException","statusCode":400,"request":"PUT /api/groups/IN-SECG-000123/secured-geofences","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Invalid group ID format: 'abc123'. Expected format: xx-astg-nnnnnn or xx-secg-nnnnnn"}}}},"401":{"description":"Invalid API Key provided or Invalid Access token"},"404":{"description":"Asset Group Not Found"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerspioError"},"example":{"functionName":"Perspio.API.Groups.GroupDetails.UpdateGroupGeofences","errorType":"NullReferenceException","statusCode":500,"request":"PUT /api/groups/IN-SECG-000123/secured-geofences","tenantId":"in-93b1a4c6-1234-4c1c-9d2a-1f2e3d4c5b6a","message":"Internal Server Error: Object reference not set to an instance of an object."}}}}}}}},"components":{"schemas":{"PerspioBadRequest":{"type":"object","properties":{"request":{"type":"string"},"statusCode":{"type":"integer"},"errorType":{"type":"string"},"method":{"type":"string"},"message":{"type":"string"},"error":{"type":"object","properties":{"stackTrace":{}}}}},"PerspioError":{"type":"object","properties":{"functionName":{"type":"string","description":"Name of the backend function that raised the error."},"errorType":{"type":"string","description":"Exception/error type name."},"statusCode":{"type":"integer","description":"HTTP status code of the error.","format":"int32"},"request":{"type":"string","description":"Method and URL of the failing request."},"tenantId":{"type":"string","description":"Tenant the request was executed for."},"message":{"type":"string","description":"Human-readable error message."}},"description":"Standard Perspio backend error body (ErrorResultObject emitted by the error-handling middleware)."},"CreateAssetGroup-RequestObject":{"type":"object","properties":{"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"assetCount":{"type":"number","description":"Number of assets in the group."}}},"UpdateAssetGroup-RequestObject":{"type":"object","properties":{"geofenceIds":{"type":"array","items":{"type":"string"},"description":"Ids of the geofences secured to the group."},"assetCount":{"type":"number","description":"Number of assets in the group."}}},"UpdateAssetGroupAssets-RequestObject":{"type":"object","properties":{"groupId":{"type":"string","description":"Id of the group."},"assets":{"type":"array","items":{"required":["id","assetName"],"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of this record."},"assetName":{"type":"string","description":"Name of the asset."}}},"description":"Assets that are members of the group."}}},"UpdateSecurityGroupDashboards-RequestObject":{"type":"object","properties":{"groupId":{"type":"string","description":"Id of the group."},"securedDashboards":{"type":"array","items":{"type":"string"}}}},"UpdateSecurityGroupGeofences-RequestObject":{"type":"object","properties":{"groupId":{"type":"string","description":"Id of the group."},"securedGeofences":{"type":"array","items":{"type":"string"}}}}},"securitySchemes":{"oauth2":{"type":"oauth2","description":"Client credentials from your Perspio API application. See Get Access Token.","flows":{"clientCredentials":{"tokenUrl":"/auth/v3/token","scopes":{}}}},"subscriptionKey":{"type":"apiKey","name":"Ocp-Apim-Subscription-Key","in":"header","description":"Your tenant's subscription key, from your API application."},"tenantId":{"type":"apiKey","name":"tid","in":"header","description":"Your tenant ID (tid), from your API application."}}},"security":[{"oauth2":[],"subscriptionKey":[],"tenantId":[]}],"tags":[{"name":"Membership","description":"Group membership and membership changes."},{"name":"Asset Groups","description":"Asset group management."}],"x-readme":{"oauth-options":{"useInsecureClientAuthentication":true}}}