An appbundle is the package of binaries and supporting files which make your Revit
Addin application.
Design Automation API for Revit expects your appbundle to be a zip file with certain contents. Here is the zip file for a sample appbundle called DeleteWallsApp.zip:
DeleteWallsApp.zip |-- DeleteWalls.bundle | |-- PackageContents.xml | |-- Contents | | |-- DeleteWalls.dll | | |-- DeleteWalls.addin
The top-level folder needs be named *.bundle. In *.bundle put a PackageContents.xml file that contains the description of the appbundle and the relative path to its .addin file.
<?xml version="1.0" encoding="utf-8" ?>
<ApplicationPackage>
<Components Description="Delete Walls">
<RuntimeRequirements OS="Win64"
Platform="Revit"
SeriesMin="R2018"
SeriesMax="R2018" />
<ComponentEntry AppName="DeleteWalls"
Version="1.0.0"
ModuleName="./Contents/DeleteWalls.addin"
AppDescription="Deletes walls"
LoadOnCommandInvocation="False"
LoadOnRevitStartup="True" />
</Components>
</ApplicationPackage>
Note: SeriesMin and SeriesMax both refer to Revit 2018 as R2018. As of September 2018, Design Automation for Revit supports appbundles which run on Revit R2018 and R2019.
In the *.bundle\Contents folder, put the addin file and the application DLL and its dependencies.
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="DBApplication">
<Name>DeleteWalls</Name>
<Assembly>.\DeleteWalls.dll</Assembly>
<AddInId>d7fe1983-8f10-4983-98e2-c3cc332fc978</AddInId>
<FullClassName>DeleteWalls.DeleteWallsApp</FullClassName>
<Description>"Walls Deleter"</Description>
<VendorId>Autodesk</VendorId>
<VendorDescription>
</VendorDescription>
</AddIn>
</RevitAddIns>
Note: Type must be DBApplication. Design Automation for Revit doesn't support applications that need Revit's UI functionality.
Assembly must be a relative path to the DLL.
Examples of the format for the *.bundle folder and PackageContent.xml file can been found in the presentation on Autodesk Exchange Revit Apps here. While PackageContents.xml from existing Autodesk Exchange Revit apps can be used as-is, Design Automation for Revit only reads the RuntimeRequirements and ComponentEntry blocks which are circled in the image below.
This page explains the following appbundle APIs:
The base URL is https://developer.api.autodesk.com/da/us-east.
More APIs for app can be found here.
To publish your appbundle to Design Automation, you need to POST your appbundle's identity and upload its package.
This example creates a new app DeleteWallsApp by posting its identity. The target engine of Revit running in Design Automation for this example app is Revit 2018.
curl -X POST \
https://developer.api.autodesk.com/da/us-east/v3/appbundles \
-H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' \
-H 'Content-Type: application/json' \
-d '{
"id": "DeleteWallsApp",
"engine": "Autodesk.Revit+2018",
"description": "Delete Walls app based on Revit 2018"
}'
id – The name given to the new app.engine – The engine running in Design Automation used by the app.
{
"uploadParameters": {
"endpointURL": "https://dasdev-store.s3.amazonaws.com",
"formData": {
"key": "apps/Revit/DeleteWallsApp/1",
"content-type": "application/octet-stream",
"policy": "eyJleHBpcmF0aW9uIjoiMjAxOC... (truncated)",
"success_action_status": "200",
"success_action_redirect": null,
"x-amz-signature": "6c68268e23ecb8452... (truncated)",
"x-amz-credential": "ASIAQ2W... (truncated)",
"x-amz-algorithm": "AWS4-HMAC-SHA256",
"x-amz-date": "20180810... (truncated)",
"x-amz-server-side-encryption": "AES256",
"x-amz-security-token": "FQoGZXIvYXdzEPj//////////wEaDHavu... (truncated)"
}
},
"engine": "Autodesk.Revit+2018",
"description": "Delete Walls app based on Revit 2018",
"version": 1,
"id": "YourNickname.DeleteWallsApp"
}
endpointURL – This is the URL to which you must upload your app's ZIP file.version – The version number for the app created by the POST request. For the Post request creating a new app, version always returns 1.formData – The form data that needs to be sent back when uploading the file in the following POST request.Now you can upload your app's ZIP to the signed URL returned by endpointURL:
curl -X POST \ https://dasdev-store.s3.amazonaws.com \ -H 'Cache-Control: no-cache' \ -F key=apps/Revit/DeleteWallsApp/1 \ -F content-type=application/octet-stream \ -F policy=eyJleHBpcmF0aW9uIjoiMjAxOC... (truncated) \ -F success_action_status=200 \ -F x-amz-signature=6c68268e23ecb8452... (truncated) \ -F x-amz-credential=ASIAQ2W... (truncated) \ -F x-amz-algorithm=AWS4-HMAC-SHA256 \ -F x-amz-date=20180810... (truncated) \ -F x-amz-server-side-encryption=AES256 \ -F 'x-amz-security-token=FQoGZXIvYXdzEPj//////////wEaDHavu... (truncated)' \ -F 'file=@path/to/your/app/zip'
This is a curl example. You can use other way, e.g. Postman, to do the uploading. Just remember to include all form-data in your request.
The new version of your app will be referenced via an alias.
This example creates an alias with id test. This alias labels version 1 of app DeleteWallsApp.
curl -X POST \
https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/aliases \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' \
-d '{
"version": 1,
"id": "test"
}'
To update an existing app, you need to create a new version for the app and then upload the updated zip package.
If you still do the Post request for creating a new app above , you will get a 409 Conflict error.
This Post creates a new version for the app DeleteWallsApp.
curl -X POST \
https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/versions\
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' \
-d '{
"id": null,
"engine": "Autodesk.Revit+2018",
"description": "Delete Walls app based on Revit 2018 Update"
}'
{
"package": "https://dasprod-store.s3.amazonaws.com/appbundles/xxxxxxxx",
"engine": "Autodesk.Revit+2018",
"description": "Delete Walls app based on Revit 2018",
"version": 2,
"id": "YourNickname.DeleteWallsApp"
}
The response to the app version post includes:
package – This is the signed URL to which you must upload your updated app package ZIP file.version – The new version number for the app created by the above POST request.Now you can upload the updated app's zip file to the new signed URL returned by package same as above.
You can update an existing alias to point to another version of an app.
For example, after you post a new version of an app, you may wish to assign an existing alias to point to that new app's version.
Here is an example where alias test labels version 1 of an app DeleteWallsApp. A new version 2 has been posted for this app, but no alias labels version 2:
You can reassign alias test to label app version 2:
To update the alias, you can either
curl -X PATCH \
https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/aliases/test \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' \
-d '{
"version": 2
}'
Each app POST request specifies the engine on which the application will run. Different Design Automation engine version aliases correspond to different releases of Revit. The specified engine needs to be compatible with your app's PackageContent.xml SeriesMin and SeriesMax.