DealCloudSDK.Source 0.1.46-dev.3

This is a prerelease version of DealCloudSDK.Source.
dotnet add package DealCloudSDK.Source --version 0.1.46-dev.3
                    
NuGet\Install-Package DealCloudSDK.Source -Version 0.1.46-dev.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DealCloudSDK.Source" Version="0.1.46-dev.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DealCloudSDK.Source" Version="0.1.46-dev.3" />
                    
Directory.Packages.props
<PackageReference Include="DealCloudSDK.Source">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DealCloudSDK.Source --version 0.1.46-dev.3
                    
#r "nuget: DealCloudSDK.Source, 0.1.46-dev.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DealCloudSDK.Source@0.1.46-dev.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DealCloudSDK.Source&version=0.1.46-dev.3&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=DealCloudSDK.Source&version=0.1.46-dev.3&prerelease
                    
Install as a Cake Tool

DealCloud SDK for .NET

NuGet NuGet Downloads License

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

πŸ“‘ Table of Contents


πŸ“¦ 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.

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

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

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.46-dev.3 0 10/10/2025

See CHANGELOG.md for detailed release notes