openapi: 3.1.0 info: title: Atomicwork Public accessManagement assets API version: 1.0.0 servers: - url: https://{tenant}.atomicwork.com description: Your Atomicwork tenant tags: - name: assets paths: /api/v1/assets: post: operationId: postapi-v-1-assets summary: Create Asset tags: - assets parameters: - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_postapi_v1_assets_Response_200' requestBody: content: application/json: schema: type: object properties: asset_type_id: type: integer format: int64 form_fields: $ref: '#/components/schemas/ApiV1AssetsPostRequestBodyContentApplicationJsonSchemaFormFields' image_id: type: integer format: int64 required: - asset_type_id - form_fields /api/v1/assets/attributes: get: operationId: getapi-v-1-assets-attributes summary: Get List of all Asset attributes tags: - assets parameters: - name: search_key in: query description: Search String required: false schema: type: string - name: asset_type in: query description: asset_type required: false schema: type: integer format: int64 - name: page in: query description: limit required: false schema: type: integer default: 1 - name: page_size in: query description: offset required: false schema: type: integer default: 25 - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_getapi_v1_assets_attributes_Response_200' /api/v1/assets/list: post: operationId: postapi-v-1-assets-list summary: Asset List with views, and filters. description: "\n### Filtering\n\nThe request body is an **array of filter objects**. Send an empty array (`[]`) to retrieve all records.\n\nEach filter object has the following fields:\n\n| Field | Type | Description |\n|---|---|---|\n| `attribute` | string | The field to filter on (see Supported attributes below) |\n| `operator` | string | Comparison operator (see Available operators below) |\n| `values` | array | One or more `{ \"value\": }` objects |\n\n**Supported attributes**\n\n| Attribute | Typical operator | Description |\n|---|---|---|\n| `status` | `IS_ANY_OF` | Asset status (e.g. `IN_USE`, `AVAILABLE`, `RETIRED`). |\n| `type_id` | `IS_ANY_OF` | Asset type ID. |\n| `assigned_to_id` | `IS_ANY_OF` | User ID the asset is assigned to. |\n\n**Available operators**\n\n| Operator | Meaning |\n|---|---|\n| `EQUALS` | Exact match |\n| `NOT_EQUALS` | Exclude exact match |\n| `IN` / `IS_ANY_OF` | Match any value in the list |\n| `IS_NOT_ANY_OF` | Exclude all listed values |\n| `IS_BETWEEN` | Inclusive range — pass exactly two values: `[start, end]` |\n| `IS_ON_OR_BEFORE` / `IS_ON_OR_AFTER` | Date/time boundary comparisons |\n| `CONTAINS` / `TEXT_CONTAINS` | Substring or set membership |\n| `IS_NULL` / `IS_NOT_NULL` | Null checks — `values` array can be empty |\n| `STARTS_WITH` / `ENDS_WITH` | String prefix/suffix match |\n\n**Example**\n\n```json\n[\n {\n \"attribute\": \"status\",\n \"operator\": \"IS_ANY_OF\",\n \"values\": [\n {\n \"value\": \"IN_USE\"\n },\n {\n \"value\": \"AVAILABLE\"\n }\n ]\n }\n]\n```\n" tags: - assets parameters: - name: sort_order in: query description: '' required: false schema: $ref: '#/components/schemas/ApiV1AssetsListPostParametersSortOrder' - name: sort in: query description: 'Generic multi-column sort, comma-separated `field:DIRECTION` (e.g. `display_name:ASC,created_at:DESC`). Sortable fields are those advertised with `sortable: true` by the asset fields endpoint. Takes precedence over `sort_order`. Invalid/unknown fields -> 400.' required: false schema: type: string - name: page in: query description: '' required: true schema: type: integer default: 1 - name: per_page in: query description: '' required: false schema: type: integer default: 25 - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_postapi_v1_assets_list_Response_200' requestBody: content: application/json: schema: type: array items: $ref: '#/components/schemas/ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItems' /api/v1/assets/users/{user_id}/list: get: operationId: getapi-v-1-assets-users-user-id-list summary: Get List of Assets for a user tags: - assets parameters: - name: user_id in: path description: userId required: true schema: type: integer format: int64 - name: search_key in: query description: Search String required: false schema: type: string - name: page in: query description: limit required: false schema: type: integer default: 1 - name: page_size in: query description: offset required: false schema: type: integer default: 25 - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_getapi_v1_assets_users__user_id__list_Response_200' /api/v1/assets/types/{asset_type_id}/form-fields: get: operationId: getapi-v-1-assets-types-asset-type-id-form-fields summary: Get Form Fields of an AssetType tags: - assets parameters: - name: asset_type_id in: path description: assetTypeId required: true schema: type: integer format: int64 - name: source in: query description: 'Optional. When provided (e.g. "KANDJI", "MS_INTUNE", "JAMF"), filters the returned form fields to only those mapped to that integration source — used by the per-source asset detail view to render only the fields the source contributes. When omitted, returns the full field set for the asset type (current behavior). ' required: false schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_getapi_v1_assets_types__asset_type_id__form_fields_Response_200' /api/v1/assets/{asset_id}: get: operationId: getapi-v-1-assets-asset-id summary: Get Asset Details tags: - assets parameters: - name: asset_id in: path description: assetId required: true schema: type: integer format: int64 - name: source in: query description: 'Optional. When provided (e.g. "KANDJI", "MS_INTUNE", "JAMF"), returns the asset''s view from that integration''s source-original ledger row instead of the merged unified view. The response''s asset_basic_info.id stays as the unified id (URL is canonical); asset_basic_info.source still reflects the unified''s origin; form_fields and per-row timestamps reflect the source''s contribution. Returns 404 if the asset has no contribution from the requested source. See asset_basic_info.additional_sources for the list of valid source values for this asset. ' required: false schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_getapi_v1_assets__asset_id_Response_200' put: operationId: putapi-v-1-assets-asset-id summary: Update Asset tags: - assets parameters: - name: asset_id in: path description: assetId required: true schema: type: integer format: int64 - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_putapi_v1_assets__asset_id_Response_200' requestBody: content: application/json: schema: type: object properties: asset_type_id: type: integer format: int64 form_fields: $ref: '#/components/schemas/ApiV1AssetsAssetIdPutRequestBodyContentApplicationJsonSchemaFormFields' image_id: type: integer format: int64 required: - asset_type_id - form_fields delete: operationId: deleteapi-v-1-assets-asset-id summary: Delete Asset tags: - assets parameters: - name: asset_id in: path description: assetId required: true schema: type: integer format: int64 - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_deleteapi_v1_assets__asset_id_Response_200' /api/v1/assets/{asset_id}/activities: get: operationId: getapi-v-1-assets-asset-id-activities summary: Get Asset Activities tags: - assets parameters: - name: asset_id in: path description: assetId required: true schema: type: integer format: int64 - name: page in: query description: '' required: true schema: type: integer default: 1 - name: per_page in: query description: '' required: false schema: type: integer default: 25 - name: next_page_token in: query description: '' required: false schema: type: string - name: source in: query description: 'Optional. When provided (e.g. "KANDJI", "MS_INTUNE", "JAMF"), returns the activity log of that integration''s source-original ledger row instead of the unified row''s activity log. Source-original entries capture each individual sync''s changes; unified entries capture derive-driven aggregations. Returns 404 if the asset has no contribution from the requested source. ' required: false schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: X-Workspace-Id in: header required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Assets_getapi_v1_assets__asset_id__activities_Response_200' components: schemas: ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItemsValue: type: object properties: {} title: ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItemsValue ApiV1AssetsPostRequestBodyContentApplicationJsonSchemaFormFields: type: object properties: {} title: ApiV1AssetsPostRequestBodyContentApplicationJsonSchemaFormFields ApiV1AssetsAssetIdPutRequestBodyContentApplicationJsonSchemaFormFields: type: object properties: {} title: ApiV1AssetsAssetIdPutRequestBodyContentApplicationJsonSchemaFormFields ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItems: type: object properties: attribute: type: string operator: $ref: '#/components/schemas/ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsOperator' values: type: array items: $ref: '#/components/schemas/ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItems' title: ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItems ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItems: type: object properties: value: $ref: '#/components/schemas/ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItemsValue' nested_filter: description: Any type title: ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsValuesItems Assets_getapi_v1_assets__asset_id_Response_200: type: object properties: {} description: Empty response body title: Assets_getapi_v1_assets__asset_id_Response_200 Assets_putapi_v1_assets__asset_id_Response_200: type: object properties: {} description: Empty response body title: Assets_putapi_v1_assets__asset_id_Response_200 Assets_getapi_v1_assets__asset_id__activities_Response_200: type: object properties: {} description: Empty response body title: Assets_getapi_v1_assets__asset_id__activities_Response_200 Assets_deleteapi_v1_assets__asset_id_Response_200: type: object properties: {} description: Empty response body title: Assets_deleteapi_v1_assets__asset_id_Response_200 Assets_getapi_v1_assets_types__asset_type_id__form_fields_Response_200: type: object properties: {} description: Empty response body title: Assets_getapi_v1_assets_types__asset_type_id__form_fields_Response_200 Assets_postapi_v1_assets_Response_200: type: object properties: {} description: Empty response body title: Assets_postapi_v1_assets_Response_200 ApiV1AssetsListPostParametersSortOrder: type: string enum: - CREATED_AT_DESC - CREATED_AT_ASC - UPDATED_AT_DESC - NAME_ASC - NAME_DESC title: ApiV1AssetsListPostParametersSortOrder ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsOperator: type: string enum: - EQUALS - NOT_EQUALS - CONTAINS - NOT_CONTAINS - IN - NOT_IN - GREATER_THAN - LESS_THAN - GREATER_THAN_EQUALS - LESS_THAN_EQUALS - IS_BETWEEN - IS_NULL - IS_NOT_NULL - STARTS_WITH - ENDS_WITH - TEXT_CONTAINS - TEXT_DOES_NOT_CONTAINS - IS_ANY_OF - IS_NOT_ANY_OF - IS_EXACTLY - IS_ON_OR_BEFORE - IS_ON_OR_AFTER - IS_WITHIN title: ApiV1AssetsListPostRequestBodyContentApplicationJsonSchemaItemsOperator Assets_postapi_v1_assets_list_Response_200: type: object properties: {} description: Empty response body title: Assets_postapi_v1_assets_list_Response_200 Assets_getapi_v1_assets_attributes_Response_200: type: object properties: {} description: Empty response body title: Assets_getapi_v1_assets_attributes_Response_200 Assets_getapi_v1_assets_users__user_id__list_Response_200: type: object properties: {} description: Empty response body title: Assets_getapi_v1_assets_users__user_id__list_Response_200 securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-Api-Key