A .NET library for working with Revit Server REST API. Provides easy access to Revit Server operations including folder management, project operations, locking, and history tracking.
- Server Management: Get server information and status
- Folder Operations: Create, delete, and manage folders on Revit Server
- Project Management: Handle project operations and metadata
- Locking System: Manage file locks and permissions
- History Tracking: Access project history and version information
- Direct Export: Convert Revit Server models to RVT using RS assemblies (net48/net6/net8)
- Multi-Version Support: Supports Revit Server versions from 2012 to 2026
- Async Operations: All API calls are asynchronous for better performance
Install-Package RevitServerNetOr via NuGet Package Manager:
RevitServerNet
Or via .NET CLI:
dotnet add package RevitServerNetusingRevitServerNet;// Initialize API clientvarapi=newRevitServerApi("your-server-host","your-username");// Get server informationvarserverInfo=awaitapi.GetServerInfoAsync();// List foldersvarfolders=awaitapi.GetFoldersAsync("/path/to/folder");- Revit Server 2012-2026
- .NET Framework 4.8 or .NET 6/8
- Newtonsoft.Json 13.0.3
usingRevitServerNet;// Create API clientvarapi=newRevitServerApi(host:"your-revit-server.com",userName:"your-username",useHttps:true,// Optional, default: falseserverVersion:"2024"// Optional, default: "2019");// Get server informationvarserverInfo=awaitapi.GetServerInfoAsync();// Get server statusvarstatus=awaitapi.GetServerStatusAsync();// List folders in a directoryvarfolders=awaitapi.GetFoldersAsync("/Projects");// Create a new folderawaitapi.CreateFolderAsync("/Projects/NewProject");// Delete a folderawaitapi.DeleteFolderAsync("/Projects/OldProject");// Get project informationvarprojectInfo=awaitapi.GetProjectInfoAsync("/Projects/MyProject");// Get project historyvarhistory=awaitapi.GetProjectHistoryAsync("/Projects/MyProject");// Lock a fileawaitapi.LockFileAsync("/Projects/MyProject/file.rvt");// Unlock a fileawaitapi.UnlockFileAsync("/Projects/MyProject/file.rvt");// Get lock informationvarlockInfo=awaitapi.GetLockInfoAsync("/Projects/MyProject/file.rvt");RevitServerNet can export a model directly to a local RVT file using the RS Enterprise assemblies — without calling RevitServerTool.exe. This works on .NET Framework 4.8, .NET 6, and .NET 8 on Windows.
Prerequisites:
- Windows with .NET Framework 4.8 or .NET 6/8
- Access to the Revit Server host
- RS assemblies for the target version available in
RSAssemblies/<year>(shipped in the repo) or in a custom folder you pass viaAssembliesPath
usingRevitServerNet;varoptions=newModelExporterOptions{ServerHost="revit-server.local",ModelPipePath="|Projects|Demo|Model.rvt",// pipe or Windows-style pathDestinationFile=@"C:\Exports\Demo.rvt",RevitVersion="2024",AssembliesPath=@"C:\path\to\RSAssemblies\2024",// optional: autodetected if bundled folder is presentOverwrite=true};varresultPath=awaitModelExporter.ExportAsync(options,newProgress<long>(bytes =>Console.WriteLine($"Downloaded {bytes} bytes")));Console.WriteLine($"Exported to: {resultPath}");usingRevitServerNet;usingRevitServerNet.Extensions;varapi=newRevitServerApi("revit-server.local","user",serverVersion:"2024");awaitapi.ExportModelAsync(modelPath:"|Projects|Demo|Model.rvt",destinationFile:@"C:\Exports\Demo.rvt",overwrite:true);Notes:
- The extension infers host/version from
api.BaseUrl. It throwsPlatformNotSupportedExceptionon targets other than net48/net6/net8. - Use pipe-format paths (
|Projects|...|file.rvt) or Windows-style relative paths (Projects\...\file.rvt).
See AnlaxRSExportService (net48 WebAPI + CLI) for a working sample that wraps ModelExporter:
- CLI:
AnlaxRSExportService.exe --export <server> <pipePath> <localPath> <revitVersion> [rsAssembliesPath] - HTTP:
POST http://localhost:3074/api/export/exportwith JSON matchingModelExporterOptionsfields.
Main class for interacting with Revit Server REST API.
publicRevitServerApi(string host,string userName,bool useHttps = false,string serverVersion = "2019")BaseUrl: Gets the base URL for API requestsUserName: Gets the user name used for API requests
GetAsync(string command, Dictionary<string, string> additionalHeaders = null): Performs GET requestPostAsync(string command, string data = null, Dictionary<string, string> additionalHeaders = null): Performs POST requestPutAsync(string command, string data = null, Dictionary<string, string> additionalHeaders = null): Performs PUT requestDeleteAsync(string command, Dictionary<string, string> additionalHeaders = null): Performs DELETE request
The library provides extension methods for common operations:
GetServerInfoAsync(this RevitServerApi api)GetServerStatusAsync(this RevitServerApi api)
GetFoldersAsync(this RevitServerApi api, string path)CreateFolderAsync(this RevitServerApi api, string path)DeleteFolderAsync(this RevitServerApi api, string path)
GetProjectInfoAsync(this RevitServerApi api, string path)
GetProjectHistoryAsync(this RevitServerApi api, string path)
LockFileAsync(this RevitServerApi api, string path)UnlockFileAsync(this RevitServerApi api, string path)GetLockInfoAsync(this RevitServerApi api, string path)
The library throws RevitServerApiException for API-related errors:
try{varfolders=awaitapi.GetFoldersAsync("/Projects");}catch(RevitServerApiExceptionex){Console.WriteLine($"API Error: {ex.Message}");}Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions, please open an issue on the GitHub repository.