DealCloudSDK 0.1.46
dotnet add package DealCloudSDK --version 0.1.46
NuGet\Install-Package DealCloudSDK -Version 0.1.46
<PackageReference Include="DealCloudSDK" Version="0.1.46" />
<PackageVersion Include="DealCloudSDK" Version="0.1.46" />
<PackageReference Include="DealCloudSDK" />
paket add DealCloudSDK --version 0.1.46
#r "nuget: DealCloudSDK, 0.1.46"
#:package DealCloudSDK@0.1.46
#addin nuget:?package=DealCloudSDK&version=0.1.46
#tool nuget:?package=DealCloudSDK&version=0.1.46
DealCloud SDK for .NET
The official .NET SDK for the DealCloud API, built by Intapp. This SDK provides a robust, type-safe wrapper around the DealCloud REST API, enabling developers to quickly build powerful integrations with the DealCloud platform.
π Key Features
- π§ Easy Integration - Simple, intuitive API wrapper that lets you focus on business logic
- β‘ High Performance - Built-in async/await support with intelligent retry policies
- π‘οΈ Enterprise Ready - Comprehensive error handling, logging, and security best practices
- π Type Safety - Strongly-typed models for all DealCloud entities
- π Auto-Retry - Automatic handling of rate limits and transient errors
- π Well Documented - Extensive documentation and examples
π Documentation
- Official SDK Documentation - Complete API reference and guides
- DealCloud API Documentation - Core API documentation
- CHANGELOG - Latest release notes and version history
- πCheckout the new Source Distribution with full example Program.cs
π Table of Contents
- π Key Features
- π Documentation
- π¦ Installation
- β‘ Quick Start
- π Authentication & Security
- π Usage Examples
- π οΈ Advanced Features
- π¨ Error Handling
- π€ Support
- π License
π¦ Installation
Package Manager
dotnet add package DealCloudSDK
Package Manager Console
Install-Package DealCloudSDK
PackageReference
<PackageReference Include="DealCloudSDK" Version="1.0.0" />
Supported Frameworks
- β .NET 6.0
- β .NET 7.0
- β .NET 8.0
- β .NET 9.0
β‘ Quick Start
Get up and running in minutes with this complete example:
using DealCloudSDK;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
// Configure your credentials (see Security section for best practices)
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
// Optional: Add structured logging
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddConsole()
.SetMinimumLevel(LogLevel.Information));
var logger = loggerFactory.CreateLogger<Program>();
// Initialize the DealCloud client
var dealCloud = new Client(config, logger);
try
{
// Discover your schema
var entryTypes = await dealCloud.Schema.GetObjects();
Console.WriteLine($"Available objects: {string.Join(", ", entryTypes.Select(e => e.Name))}");
// Read data from any object
var companies = await dealCloud.Data.ReadObject("Company", new() { Limit = 10 });
Console.WriteLine($"Found {companies.TotalRecords} companies");
// Create new records
var newCompany = new Dictionary<string, object>
{
["CompanyName"] = "Acme Corporation",
["Industry"] = "Technology"
};
var result = await dealCloud.Data.Insert("Company", new[] { newCompany });
Console.WriteLine($"Created company with ID: {result.EntryIds.First()}");
}
catch (Exception ex)
{
logger.LogError(ex, "An error occurred");
}
π Authentication & Security
Direct Initialization (Development)
var client = new Client(
siteUrl: "yoursite.dealcloud.com",
clientId: 12345,
clientSecret: "your-secret",
logger: logger
);
β οΈ Security Warning: Never hardcode credentials in production code or commit them to version control.
Configuration-Based Setup (Recommended)
appsettings.json:
{
"siteUrl": "yoursite.dealcloud.com",
"clientId": 12345,
"clientSecret": "your-secret"
}
Application Code:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables() // Override with environment variables
.Build();
var client = new Client(config, logger);
Environment Variables
For production deployments, use environment variables:
export DEALCLOUD_SITE_URL="yoursite.dealcloud.com"
export DEALCLOUD_CLIENT_ID="12345"
export DEALCLOUD_CLIENT_SECRET="your-secret"
Advanced Configuration
{
"siteUrl": "yoursite.dealcloud.com",
"clientId": 12345,
"clientSecret": "your-secret",
"querySettings": {
"pageSize": 1000,
"cellPaginationLimit": 9000,
"deletePageSize": 10000
},
"concurrencyLimits": {
"read": 2,
"delete": 2,
"create": 2
},
"responseRetrySettings": {
"tooManyRequests": 5,
"internalServerError": 2,
"serviceUnavailable": 2,
"backoffFactor": 2
}
}
π Usage Examples
Schema Discovery
Discover and understand your DealCloud site's structure:
// Get all available objects (EntryTypes)
var entryTypes = await client.Schema.GetObjects();
foreach (var entryType in entryTypes)
{
Console.WriteLine($"Object: {entryType.Name} (ID: {entryType.Id})");
}
// Get fields for a specific object
var companyFields = await client.Schema.GetFields("Company");
foreach (var field in companyFields)
{
Console.WriteLine($"Field: {field.Name} - Type: {field.FieldType}");
}
// Get complete schema in one call
var schema = await client.Schema.GetSchema();
Console.WriteLine($"Site has {schema.EntryTypes.Count} objects and {schema.Fields.Count} fields");
Data Operations
Reading Data
// Read all companies with pagination
var companies = await client.Data.ReadObject("Company", new CellsQuerySettings
{
Limit = 100,
Skip = 0
});
Console.WriteLine($"Found {companies.TotalRecords} total companies");
foreach (var company in companies.Rows)
{
Console.WriteLine($"Company: {company["CompanyName"]}");
}
// Read data from a specific view
var viewData = await client.Data.ReadView("MyCompanyView");
Creating Data
// Create single record
var newCompany = new Dictionary<string, object>
{
["CompanyName"] = "Tech Corp",
["Industry"] = "Technology",
["Revenue"] = 1000000
};
var result = await client.Data.Insert("Company", new[] { newCompany });
Console.WriteLine($"Created company with ID: {result.EntryIds.First()}");
// Bulk create
var companies = new[]
{
new Dictionary<string, object> { ["CompanyName"] = "Corp A" },
new Dictionary<string, object> { ["CompanyName"] = "Corp B" },
new Dictionary<string, object> { ["CompanyName"] = "Corp C" }
};
var bulkResult = await client.Data.Insert("Company", companies);
Console.WriteLine($"Created {bulkResult.EntryIds.Count} companies");
Updating Data
// Update existing record
var updates = new Dictionary<string, object>
{
["Revenue"] = 2000000,
["LastUpdated"] = DateTime.UtcNow
};
await client.Data.Update("Company", 12345, updates);
// Upsert (update if exists, create if not)
var upsertData = new Dictionary<string, object>
{
["CompanyName"] = "Unique Corp", // Used for matching
["Revenue"] = 1500000
};
await client.Data.Upsert("Company", new[] { upsertData });
π οΈ Advanced Features
Custom Retry Policies
{
"responseRetrySettings": {
"tooManyRequests": 10, // Retry 429 errors up to 10 times
"internalServerError": 3, // Retry 500 errors up to 3 times
"serviceUnavailable": 3, // Retry 503 errors up to 3 times
"backoffFactor": 3 // 3x exponential backoff (3s, 9s, 27s...)
}
}
Performance Tuning
{
"querySettings": {
"pageSize": 5000, // Larger pages for fewer API calls
"cellPaginationLimit": 15000, // Higher cell limits for wide objects
"deletePageSize": 5000 // Bulk delete size
},
"concurrencyLimits": {
"read": 5, // Parallel read operations
"create": 3, // Parallel create operations
"delete": 2 // Parallel delete operations
}
}
Field Mapping & ID Resolution
// Automatic ID mapping (default: enabled)
var client = new Client(config, logger, autoIdMapping: true);
// When enabled, you can use names instead of IDs:
var data = new Dictionary<string, object>
{
["CompanyType"] = "Public Company", // SDK resolves to ID automatically
["Industry"] = "Technology" // SDK resolves to ID automatically
};
await client.Data.Insert("Company", new[] { data });
π¨ Error Handling
The SDK provides comprehensive error handling with automatic retries:
try
{
var result = await client.Data.Insert("Company", data);
}
catch (HttpRequestException ex) when (ex.Message.Contains("401"))
{
// Authentication failed - check credentials
logger.LogError("Authentication failed: {Error}", ex.Message);
}
catch (HttpRequestException ex) when (ex.Message.Contains("403"))
{
// Permission denied - check user permissions
logger.LogError("Access denied: {Error}", ex.Message);
}
catch (HttpRequestException ex) when (ex.Message.Contains("429"))
{
// Rate limited - this should be rare due to auto-retry
logger.LogWarning("Rate limit exceeded: {Error}", ex.Message);
}
catch (ArgumentException ex)
{
// Invalid field names or object types
logger.LogError("Validation error: {Error}", ex.Message);
}
catch (Exception ex)
{
// Unexpected errors
logger.LogError(ex, "Unexpected error occurred");
}
Common Error Scenarios
| Error Code | Description | SDK Behavior |
|---|---|---|
| 401 | Unauthorized | Automatic token refresh, then fail |
| 403 | Forbidden | Immediate failure with clear message |
| 404 | Not Found | Immediate failure (object/view doesn't exist) |
| 429 | Rate Limited | Automatic retry with exponential backoff |
| 500 | Server Error | Automatic retry up to configured limit |
| 503 | Service Unavailable | Automatic retry up to configured limit |
π€ Support
Getting Help
- Documentation: Complete SDK docs
- API Reference: DealCloud API docs
- Support: Contact your DealCloud account team or Intapp Support
Reporting Issues
For bug reports or feature requests, please contact DealCloud support with:
- SDK version number
- .NET framework version
- Complete error messages and stack traces
- Minimal code sample that reproduces the issue
π License
Copyright Β© 2025 Intapp, Inc. All rights reserved.
This SDK is licensed under Intapp's Supplemental Software License Terms. See LICENSE for details.
Built by Intapp
Documentation β’ Support β’ API Reference
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- Microsoft.Extensions.Http (>= 8.0.0)
- Newtonsoft.Json (>= 13.0.4)
- Polly (>= 8.6.4)
- Polly.Extensions.Http (>= 3.0.0)
-
net7.0
- Microsoft.Extensions.Http (>= 8.0.0)
- Newtonsoft.Json (>= 13.0.4)
- Polly (>= 8.6.4)
- Polly.Extensions.Http (>= 3.0.0)
-
net8.0
- Microsoft.Extensions.Http (>= 8.0.0)
- Newtonsoft.Json (>= 13.0.4)
- Polly (>= 8.6.4)
- Polly.Extensions.Http (>= 3.0.0)
-
net9.0
- Microsoft.Extensions.Http (>= 8.0.0)
- Newtonsoft.Json (>= 13.0.4)
- Polly (>= 8.6.4)
- Polly.Extensions.Http (>= 3.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
See CHANGELOG.md for detailed release notes