Skip to navigation

Managing Forma Assets

View as Markdown

Managing assets is the core of the functionality the Forma Assets service provides. This tutorial demonstrates how to use the Forma Assets API to manage a Forma project’s assets. This will include:

  • Creating new assets
  • Updating existing assets
  • Deleting assets
  • Creating new relationships between assets and other entities (e.g. forms)
  • Deleting relationships between assets and other entities

This tutorial assumes that the project’s Asset settings have already been set up. For more details on how to do this, see the Setup Forma Assets Project Settings tutorial.

Batch Endpoints

In order to reduce the number of calls needed to manage assets, many of the Assets APIs are batched. This includes creating, updating, fetching, and deleting assets, as well as fetching categories, statuses, status sets, and custom attributes.

The specific syntax varies a bit between endpoints, but in general batch endpoints will accept a set of items, assets to create or category IDs to fetch for example, and return the relevant set of entities.

When fetching entities in batch, invalid entities that are requested will simply be omitted from the response. It is the client’s responsibility to ensure the requested entities are indeed present in the response.

Batch endpoints generally support operating on up to 100 entities at a given time, unless otherwise noted in the endpoint documentation.

For more details about Forma Assets API, see the Assets Field Guide.

Before You Begin

  • Register an app, and select the Data Management and Forma APIs.
  • Acquire a 3-legged OAuth token with data:create and data:write scopes.
  • Verify that you have access to the relevant Forma hub, project, and folder.
  • Retrieve the relevant Forma Hub and Project ID. In this tutorial we will use the example project ID f6a1e3b5-abaa-4b01-b33a-5d55f36ba047, but you should replace that with the project ID you have retrieved for your project.

Step 1: Create new Assets

To create new assets, use the project ID (f6a1e3b5-abaa-4b01-b33a-5d55f36ba047) to call POST assets/v2/projects/:projectId/assets:batch-create.

This is a batch endpoint that can be used to create multiple assets at a time. The endpoint accepts a set of asset definitions and returns the set of created assets.

Unlike batch fetch endpoints, batch creating assets is “all-or-nothing”. If any of the asset definitions in the request are invalid, none of the assets will be created and a 400 - Error: Bad Request will be returned with a list of the violations that need to be corrected before the request can succeed.

For more details on finding out which categories, statuses, and custom attributes are available and required, see the Retrieve Forma Assets Data tutorial.

Request

curl 'https://developer.api.autodesk.com/construction/assets/v2/projects/f6a1e3b5-abaa-4b01-b33a-5d55f36ba047/assets:batch-create' \
-X 'POST' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '[
{
"clientAssetId": "MVS-3D2",
"categoryId": "124",
"statusId": "b302d910-b5e3-46ba-81d8-6b6d30406e14",
"description": "Electrical outlet - single",
"barcode": "F0086728",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
}
},
{
"clientAssetId": "MVS-F38",
"categoryId": "124",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac",
"description": "Electrical outlet - double",
"barcode": "F0086730",
"customAttributes": {
"ca1": "582eac28-f4e4-475d-b38c-fd57997c9cc6"
}
}
]'

Response

{
"results": [
{
"id": "8947f8af-3247-4bfe-82f9-976181596e24",
"clientAssetId": "MVS-3D2",
"categoryId": "124",
"statusId": "b302d910-b5e3-46ba-81d8-6b6d30406e14",
"description": "Electrical outlet - single",
"barcode": "F0086728",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-01T06:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 1
},
{
"id": "a0fd5800-1616-49d8-a847-103fc44bdc6a",
"clientAssetId": "MVS-F38",
"categoryId": "124",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac",
"description": "Electrical outlet - double",
"barcode": "F0086730",
"customAttributes": {
"ca1": "582eac28-f4e4-475d-b38c-fd57997c9cc6"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-01T06:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 1
}
]
}

Step 2: Update Existing Assets

To update existing assets, like the assets that were created in Step 1 above, use the project ID (f6a1e3b5-abaa-4b01-b33a-5d55f36ba047) to call PATCH assets/v2/projects/:projectId/assets:batch-patch.

This is a batch endpoint that can be used to modify multiple assets at a time. The endpoint accepts a map of asset IDs to the desired asset patch updates, and returns the set of updated assets. Note that this is a patch and not a full update, so only the fields specified in the request body will be updated and the remaining fields will be left unaltered.

Unlike batch fetch endpoints, batch updating assets is “all-or-nothing”. If any of the asset patches in the request are invalid, none of the assets will be updated and a 400 - Error: Bad Request will be returned with a list of the violations that need to be corrected before the request can succeed.

For more details on finding out which categories, statuses, and custom attributes are available and required, see the Retrieve Forma Assets Data tutorial.

Request

curl 'https://developer.api.autodesk.com/construction/assets/v2/projects/f6a1e3b5-abaa-4b01-b33a-5d55f36ba047/assets:batch-patch' \
-X 'PATCH' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '{
"8947f8af-3247-4bfe-82f9-976181596e24": {
"clientAssetId": "MVS-3D2 v2.0",
"description": "Modified 2.0 Electrical outlet - single",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac"
},
"4a125d1b-0803-408e-ab8b-ccdd159b8ca8": {
"clientAssetId": "MVS-F38 v2.0",
"description": "Modified 2.0 Electrical outlet - double",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
}
}
}'

Response

{
"8947f8af-3247-4bfe-82f9-976181596e24": {
"id": "8947f8af-3247-4bfe-82f9-976181596e24",
"clientAssetId": "MVS-3D2 v2.0",
"categoryId": "124",
"description": "Modified 2.0 Electrical outlet - single",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac",
"barcode": "F0086728",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-02T14:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 2
},
"a0fd5800-1616-49d8-a847-103fc44bdc6a": {
"id": "a0fd5800-1616-49d8-a847-103fc44bdc6a",
"clientAssetId": "MVS-F38 v2.0",
"categoryId": "124",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac",
"description": "Modified 2.0 Electrical outlet - double",
"barcode": "F0086730",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-02T14:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 2
}
}

Step 3: Fetch Existing Assets

To fetch existing assets, like the assets that were created in Step 1 above, use the project ID (f6a1e3b5-abaa-4b01-b33a-5d55f36ba047) to call POST assets/v2/projects/:projectId/assets:batch-get.

This is a batch endpoint that can be used to fetch multiple assets at a time. The endpoint accepts a set of asset IDs to be fetched, and returns the set of valid requested assets. Any invalid asset IDs in the request will simply be omitted from the response and the client is responsible for verifying the presence of all requested assets.

Request

curl 'https://developer.api.autodesk.com/construction/assets/v2/projects/f6a1e3b5-abaa-4b01-b33a-5d55f36ba047/assets:batch-get?includeCustomAttributes=true' \
-X 'POST' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '{
"ids": [
"8947f8af-3247-4bfe-82f9-976181596e24",
"a0fd5800-1616-49d8-a847-103fc44bdc6a"
]
}'

Response

{
"results": [
{
"id": "8947f8af-3247-4bfe-82f9-976181596e24",
"clientAssetId": "MVS-3D2",
"categoryId": "124",
"statusId": "b302d910-b5e3-46ba-81d8-6b6d30406e14",
"description": "Electrical outlet - single",
"barcode": "F0086728",
"customAttributes": {
"ca1": "fd0e4a00-26df-454e-8fba-e76652aa55b4"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-01T06:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 1
},
{
"id": "a0fd5800-1616-49d8-a847-103fc44bdc6a",
"clientAssetId": "MVS-F38",
"categoryId": "124",
"statusId": "e0484858-1683-42fe-9136-6575e43c8eac",
"description": "Electrical outlet - double",
"barcode": "F0086730",
"customAttributes": {
"ca1": "582eac28-f4e4-475d-b38c-fd57997c9cc6"
},
"companyId": "07b5f07d-c54a-4236-a086-f84192fabdb3",
"createdAt": "2020-05-01T06:00:00.000Z",
"createdBy": "LA7ZL85MU7ML",
"updatedAt": "2020-05-01T06:00:00.000Z",
"updatedBy": "LA7ZL85MU7ML",
"isActive": true,
"version": 1
}
]
}

Step 4: Create Asset Relationships

To create asset relationships, attaching an issue to an asset for example, the preferred means is to use the Relationship API. For more information on how to create relationships please see Create Relationships tutorial</en/docs/bim360/v1/tutorials/relationships/relationships-create/>.

In order to create a relationship between an asset and another entity, you will need to obtain the ID of the entity you wish to link to the asset. This may require setting up access to other Autodesk APIs, depending on what type of entities you wish to link to your assets. See the GET issues or GET forms for examples of retrieving related entities. In this example we will assume we fetched the issues for the project, and wish to attach an issue with ID a3311fc6-4571-4fca-9fb4-37120d976bd2 to the asset.

Note that within Forma projects, assets may be linked to any of the following domains and types:

DomainEntity Type
autodesk-bim360-documentmanagementdocumentlineage
autodesk-construction-formform
autodesk-bim360-issueissue
autodesk-construction-markupmarkupdocument
autodesk-construction-markupmarkupsheethistory
autodesk-construction-photophoto
autodesk-bim360-rfirfi
autodesk-construction-sheetsheetlineage
autodesk-construction-submittalssubmittalitem
autodesk-construction-scheduleactivity
autodesk-bim360-meetingminutesmeeting
autodesk-bim360-meetingminutesmeetingitem
autodesk-bim360-meetingminutesmeetingitemseries
autodesk-bim360-costpco
autodesk-bim360-costoco
autodesk-bim360-costrco
autodesk-bim360-costrfq
autodesk-bim360-costsco
autodesk-bim360-costcontract
autodesk-bim360-costcostpayment
autodesk-bim360-costbudget
autodesk-bim360-costbudgetpayment
autodesk-bim360-costexpense
autodesk-bim360-costmaincontract

Additionally, you can use the Relationships API to search for all existing relationships associated with your project, or you can search for the relationships associated with a specific asset. For more information on querying the Relationships API, see the Relationship Field Guide and the Relationship Querying tutorial.

Request

curl -v 'https://developer.api.autodesk.com/bim360/relationship/v2/containers/fbd6cb57-7d0e-4961-8c2c-69646514ef44/relationships' \
-X 'PUT' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '[
{
"entities": [
{
"id": "a0fd5800-1616-49d8-a847-103fc44bdc6a",
"domain": "autodesk-bim360-asset",
"type": "asset"
},
{
"id": "a3311fc6-4571-4fca-9fb4-37120d976bd2",
"domain": "autodesk-bim360-issue",
"type": "issue"
}
]
}
]'

Response

[
{
"id": "2299821e-c3e6-4ad7-92c3-ea4ddaf941bf",
"createdOn": "2020-05-01T06:00:00.000Z",
"isReadOnly": false,
"isService": false,
"isDeleted": false,
"entities": [
{
"id": "a0fd5800-1616-49d8-a847-103fc44bdc6a",
"domain": "autodesk-bim360-asset",
"type": "asset",
"createdOn": "2020-05-01T06:00:00.000Z"
},
{
"id": "a3311fc6-4571-4fca-9fb4-37120d976bd2",
"domain": "autodesk-bim360-issue",
"type": "issue",
"createdOn": "2020-05-01T06:00:00.000Z"
}
]
}
]

Step 5: Delete Asset Relationships

To delete the relationship between an asset and a given entity, first you must determine the relationship IDs you want to delete.

You can use the Relationships API to search for all existing relationships associated with your project, or you can search for the relationships associated with a specific asset. For more information on querying the Relationships API, see the Relationships Field Guide and the Relationships Querying tutorial.

In this example, we will use the ID of the relationship we created in step 5 above (2299821e-c3e6-4ad7-92c3-ea4ddaf941bf).

Use the relationship IDs you want to delete and the project ID (f6a1e3b5-abaa-4b01-b33a-5d55f36ba047) to call POST relationship/v2/containers/:containerId/relationships:delete.

Request

curl 'https://developer.api.autodesk.com/bim360/relationship/v2/containers/f6a1e3b5-abaa-4b01-b33a-5d55f36ba047/relationships:delete' \
-X 'POST' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '[ "2299821e-c3e6-4ad7-92c3-ea4ddaf941bf" ]'

Response

{
"deleted": [
"2299821e-c3e6-4ad7-92c3-ea4ddaf941bf"
]
}

Step 6: Delete Assets

To delete assets, like the assets that were created in Step 1 above, use the project ID (f6a1e3b5-abaa-4b01-b33a-5d55f36ba047) to call POST assets/v2/projects/:projectId/assets:batch-delete.

This is a batch endpoint that can be used to delete multiple assets at a time. The endpoint accepts a set of asset IDs to be deleted, and simply returns a 204 - No Content response if successful.

Note that when assets are deleted, they are always soft deleted. This means that the deleted assets are not fully removed from the assets service, but will not be returned when fetching assets unless you include the query parameter includeDeleted=true. Soft-deleted assets can be identified as having isActive=false.

Unlike batch fetch endpoints, batch deleting assets is “all-or-nothing”. If any of the asset IDs in the request are invalid, none of the assets will be deleted and a 400 - Error: Bad Request will be returned with a list of the violations that need to be corrected before the request can succeed.

Request

curl 'https://developer.api.autodesk.com/construction/assets/v2/projects/f6a1e3b5-abaa-4b01-b33a-5d55f36ba047/assets:batch-delete' \
-X 'POST' \
-H 'Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT' \
-H 'Content-Type: application/json' \
-d '{
"ids": [
"8947f8af-3247-4bfe-82f9-976181596e24",
"a0fd5800-1616-49d8-a847-103fc44bdc6a"
]
}'

Response

204 No Content

Imported from the Autodesk Platform Services documentation: https://aps.autodesk.com/en/docs/acc/v1/tutorials/assets/manage-assets.