4 Mar 2025
Copy attachments when transiting an item using Submittals API

As Autodesk Construction Cloud (ACC) Submittals API just announced the release of a new set of API endpoints at this blog post, we want to share the first tip and tricks for this release.
The tutorials below have provided instructions on creating and adding attachments from the ACC Files tool (Autodesk Docs) or local files, but you might wonder about the "Copy attachment" feature of the ACC Submittals Web UI. Is it possible to do similar using Submittals API?
- Step-by-step Tutorial - Attach Files From the ACC Files Tool to Submittals
- Step-by-step Tutorial - Attach Local Files to Submittals
Yes, absolutely!
On ACC Web UI, we can duplicate existing attachments of a submittal item as part of the transition we want to make, e.g. copying attachments submitted by the subcontractor as attachments for review or copying existing approved attachments from review state as the attachments of final response when closing the item, like the above snapshot shows. We can achieve that using the API!
All we need is to pass IDs of existing attachments to the "duplicateAttachments" field when making item transitions by calling POST item:transition for non-review states or POST task:close when the item is under review (stateId: rev).
Here is an example of transiting the item from "Prepare for Review" (mgr-1) "state to "Review" (rev), following step 4 of the Manage Submittal Item Transitions tutorial.
curl --location 'https://developer.api.autodesk.com/construction/submittals/v2/projects/2570d4e5-9aef-4b41-8e45-a454f2f3fd65/items/2ae22463-83d2-4f1a-9b2f-6898e616bfc3:transition' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"stateId":"rev",
"manager":"MFEGJ9W5GGQL",
"managerType":"1"
"mailNote": "Transit to mgr-1",
"duplicateAttachments": [
"6817093b-6cc8-4d15-9144-f037aff242d1",
"1d0a9b65-f411-4eb2-b6bb-69f8ea483207"
]
}'
It also applies to the item transition from "Close and Distribute" (mgr-2) "state to "Closed" (sbc-2). (See tutorial step 9)
Note. The request payload (body) might differ depending on the submittal item's current state. But the field "duplicateAttachments" is used to copy attachments, which doesn't change. For other fields used in the request payload, please check the object with id: "Item::wf_transition" that appears in the "permittedActions" array as the tutorials instructed.
Here is an example of adding a review to the item under "Review" (rev) state, following step 7 of the Manage Submittal Item Transitions tutorial.
curl --location 'https://developer.api.autodesk.com/construction/submittals/v2/projects/2570d4e5-9aef-4b41-8e45-a454f2f3fd65/items/2ae22463-83d2-4f1a-9b2f-6898e616bfc3/steps/e00a643d-e862-4be1-a6a3-aaa6acb118f0/tasks/00369989-8bf3-4ed2-beaf-99352393688c:close' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"responseId": "38ffb07d-d734-4aa6-bbf4-cb121c56972f",
"responseComment": "reviewed and approved"
"duplicateAttachments": [
"0500accc-43b1-48ce-8d69-401b20f5004c",
"deae0ced-604f-458b-8347-7d8608153f62",
"5dea3579-eb48-440d-8128-83a2d5ef6891"
]
}'
Once we duplicate attachments like the above, we can determine whether an attachment was duplicated using this way by checking the value of its "duplicatedFrom" field, which is the ID of the source attachment, when calling GET attachments. For example, like the following, the attachment with ID "1d4924af-3d6c-4962-917f-a0ae292b746e" is duplicated from attachment with ID "6817093b-6cc8-4d15-9144-f037aff242d1".
{
"pagination": {
"limit": 20,
"offset": 0,
"totalResults": 2
},
"results": [
{
"id": "6817093b-6cc8-4d15-9144-f037aff242d1",
"revisionFolderUrn": "urn:adsk.wipprod:fs.folder:co.7VpWGvSYTum-vKVHY2Ho2Q",
"permittedActions": [
{
"id": "Attachment::retrieve",
"fields": {},
"mandatoryFields": [],
"transitions": []
},
{
"id": "Attachment::annotate",
"fields": {},
"mandatoryFields": [],
"transitions": []
},
{
"id": "Attachment::copy",
"fields": {},
"mandatoryFields": [],
"transitions": []
}
],
"isFileUploaded": true,
"url": null,
"asyncState": "1",
"createdBy": "WD43ZJGKDFLFH",
"createdAt": "2025-03-05T14:44:41.305291Z",
"updatedBy": "WD43ZJGKDFLFH",
"updatedAt": "2025-03-05T14:45:24.876642Z",
"name": "racbasicsampleproject-2024.rvt",
"uploadUrn": "urn:adsk.objects:os.object:wip.dm.prod/febe1832-5592-494b-b875-4a0e729b5f8c.rvt",
"urn": "urn:adsk.wipprod:fs.file:vf.mdM_oMjhSaa0wSHJtunTYA?version=1",
"urnPage": null,
"resourceUrns": null,
"urnTypeId": "2",
"urnVersion": null,
"revision": 0,
"itemId": "d9c7d255-f78e-476e-95b3-73d923be5847",
"categoryId": "1",
"taskId": null,
"duplicatedFrom": null
},
{
"id": "1d4924af-3d6c-4962-917f-a0ae292b746e",
"revisionFolderUrn": "urn:adsk.wipprod:fs.folder:co.7VpWGvSYTum-vKVHY2Ho2Q",
"permittedActions": [
{
"id": "Attachment::retrieve",
"fields": {},
"mandatoryFields": [],
"transitions": []
},
{
"id": "Attachment::annotate",
"fields": {},
"mandatoryFields": [],
"transitions": []
},
{
"id": "Attachment::copy",
"fields": {},
"mandatoryFields": [],
"transitions": []
}
],
"isFileUploaded": true,
"url": null,
"asyncState": "1",
"createdBy": "WD43ZJGKDFLFH",
"createdAt": "2025-03-05T14:45:19.299832Z",
"updatedBy": "WD43ZJGKDFLFH",
"updatedAt": "2025-03-05T14:45:24.876642Z",
"name": "racbasicsampleproject-2024.rvt",
"uploadUrn": "urn:adsk.objects:os.object:wip.dm.prod/febe1832-5592-494b-b875-4a0e729b5f8c.rvt",
"urn": "urn:adsk.wipprod:fs.file:vf.mdM_oMjhSaa0wSHJtunTYA?version=1",
"urnPage": null,
"resourceUrns": null,
"urnTypeId": "2",
"urnVersion": null,
"revision": 0,
"itemId": "d9c7d255-f78e-476e-95b3-73d923be5847",
"categoryId": "2",
"taskId": null,
"duplicatedFrom": "6817093b-6cc8-4d15-9144-f037aff242d1"
}
]
}
If you have any questions or feedback, please contact us through our APS support channel.