Intalio.Signing.SDK 2.0.0

dotnet add package Intalio.Signing.SDK --version 2.0.0
                    
NuGet\Install-Package Intalio.Signing.SDK -Version 2.0.0
                    
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="Intalio.Signing.SDK" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Intalio.Signing.SDK" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Intalio.Signing.SDK" />
                    
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 Intalio.Signing.SDK --version 2.0.0
                    
#r "nuget: Intalio.Signing.SDK, 2.0.0"
                    
#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 Intalio.Signing.SDK@2.0.0
                    
#: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=Intalio.Signing.SDK&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Intalio.Signing.SDK&version=2.0.0
                    
Install as a Cake Tool

Intalio.Signing.SDK

Official .NET SDK for document signing. Self-contained library - pass document bytes in, get signed bytes out. No external storage configuration required.

Installation

# Package Manager
Install-Package Intalio.Signing.SDK

# .NET CLI
dotnet add package Intalio.Signing.SDK

Quick Start (Zero Configuration)

// 1. Register the SDK (Program.cs)
builder.Services.AddIntalioSigning(builder.Configuration);

// 2. Inject and use
public class MyService(ISigningService signingService)
{
    public async Task<byte[]> SignDocumentAsync(byte[] documentBytes)
    {
        // Create sign request - just pass the bytes!
        var session = await signingService.CreateSignRequestAsync(new CreateSignRequest
        {
            TenantId = "my-tenant",
            UserId = "user-123",
            DocumentBytes = documentBytes,     // Pass document bytes directly
            FileName = "contract.pdf",         // SDK detects PDF/DOCX from extension
            Placements =
            [
                new PlacementInput { PageNumber = 1, X = 100, Y = 700, Width = 200, Height = 50 }
            ]
        });

        // Finalize and get signed bytes back
        var result = await signingService.FinalizeSignRequestAsync(session.Id);

        return result.SignedDocumentBytes!;  // Your signed document!
    }
}

That's it! No storage URLs, no external dependencies. The SDK handles everything internally.

Configuration Options

Minimal (In-Memory, No Persistence)

{
  "Signer": {
    "StorageMode": "InMemory",
    "PersistToDatabase": false
  },
  "Database": {
    "Provider": "InMemory"
  }
}

With Database Persistence

{
  "Signer": {
    "StorageMode": "Database",
    "PersistToDatabase": true,
    "RetentionDays": 90,
    "Providers": "Aspose"
  },
  "Database": {
    "Provider": "SqlServer",
    "ConnectionString": "Server=...;Database=SigningDB;..."
  },
  "Aspose": {
    "LicensePath": "C:\\licenses\\Aspose.Total.lic"
  }
}

Storage Modes

Mode Description Use Case
InMemory No persistence. Bytes in → Signed bytes out Simple signing, stateless APIs
Database Documents stored in DB Multi-party workflows, audit trails
External Use external storage provider Large documents, existing infrastructure

SigningOptions

builder.Services.AddIntalioSigning(builder.Configuration, options =>
{
    options.StorageMode = StorageMode.InMemory;       // InMemory | Database | External
    options.PersistToDatabase = false;                // Save to DB?
    options.IncludeSignedBytesInResponse = true;      // Return bytes in response?
    options.MaxDocumentSizeBytes = 50 * 1024 * 1024;  // 50MB limit
    options.RetentionDays = 90;                       // For DB persistence
});

Features

  • Self-Contained - Pass bytes in, get signed bytes out
  • Zero Configuration - Works out of the box with InMemory mode
  • PDF & DOCX Support - PAdES-LT signing standard
  • Multiple Providers - Aspose (default), UAE Pass, DocuSign
  • Multi-Party Signing - Sequential, Parallel, Quorum patterns
  • Bulk Signing - Sign multiple documents in batch
  • Flexible Storage - InMemory, Database, or External
  • Full Audit Trail - When persistence is enabled

Multi-Party Signing

var session = await signingService.CreateSignRequestAsync(new CreateSignRequest
{
    TenantId = "my-tenant",
    UserId = "initiator",
    DocumentBytes = documentBytes,
    FileName = "contract.pdf",
    Pattern = "Sequential",  // Sequential | Parallel | Quorum
    Signers =
    [
        new SignerInput { UserId = "manager", Role = "Approver" },
        new SignerInput { UserId = "director", Role = "Signer" }
    ],
    Placements =
    [
        new PlacementInput { PageNumber = 1, X = 100, Y = 600, SignerUserId = "manager" },
        new PlacementInput { PageNumber = 1, X = 100, Y = 700, SignerUserId = "director" }
    ]
});

// Each signer completes their action
await signingService.CompleteSignerAsync(session.Id, signerId);

Bulk Signing

var job = await signingService.SubmitBulkSignAsync(new BulkSignRequest
{
    TenantId = "my-tenant",
    UserId = "user-123",
    Documents =
    [
        new BulkDocumentInput { DocumentBytes = doc1Bytes, FileName = "doc1.pdf" },
        new BulkDocumentInput { DocumentBytes = doc2Bytes, FileName = "doc2.pdf" }
    ],
    Placements = [new PlacementInput { PageNumber = 1, X = 100, Y = 700 }]
});

// Check progress
var status = await signingService.GetBulkSignJobAsync(job.Id);

API Reference

Method Description
CreateSignRequestAsync() Create a signing session
FinalizeSignRequestAsync() Apply signature, get signed bytes
GetSignRequestAsync() Get session status
ListSignRequestsAsync() List sessions with pagination
CancelSignRequestAsync() Cancel a session
CompleteSignerAsync() Mark signer as complete
RejectSignerAsync() Reject signing request
SubmitBulkSignAsync() Batch sign multiple documents
GetBulkSignJobAsync() Check bulk job status

Advanced: Direct Database Access

For advanced scenarios, you can access Domain entities and Infrastructure services directly:

using Platform.Signer.Domain.Entities;
using Platform.Signer.Domain.Interfaces;
using Platform.Signer.Domain.Enums;
using Platform.Signer.Infrastructure.Persistence;

public class MyAdvancedService(
    ISigningSessionRepository sessionRepository,
    ICertificateRepository certificateRepository,
    IUnitOfWork unitOfWork,
    SigningDbContext dbContext)  // Direct DbContext access!
{
    public async Task CustomQueryAsync()
    {
        // Direct DbContext for custom queries
        var sessions = await dbContext.SigningSessions
            .Where(s => s.TenantId == "tenant-1" && s.Status == SigningStatus.Signed)
            .Include(s => s.Signers)
            .ToListAsync();
    }

    public async Task CustomInsertAsync()
    {
        // Direct entity creation
        var session = SigningSession.Create(
            tenantId: "tenant-1",
            documentRef: "doc.pdf",
            provider: SigningProvider.Aspose,
            placements: new[] { new Placement(1, 100, 700, 200, 50) },
            pattern: SigningPattern.Single);

        await sessionRepository.AddAsync(session);
        await unitOfWork.SaveChangesAsync();
    }
}

Available Types

Category Types
Entities SigningSession, SignerEntity, Certificate, SignatureTemplate, SignatureArtifact, BulkSignJob
Repositories ISigningSessionRepository, ICertificateRepository, ISignatureTemplateRepository, etc.
Services IUnitOfWork, IStorageClient, ISigningProviderFactory, IEventPublisher
DbContext SigningDbContext (EF Core)

Documentation

See full documentation for complete API reference.

License

MIT

Product Compatible and additional computed target framework versions.
.NET 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0 92 3/23/2026
1.9.3 89 3/9/2026
1.9.2 88 3/9/2026
1.9.1 82 3/6/2026
1.9.0 82 3/6/2026
1.8.1 85 3/6/2026
1.8.0 82 3/6/2026
1.7.0 85 3/6/2026
1.6.0 83 3/6/2026
1.5.0 90 3/5/2026
1.4.0 84 3/5/2026
1.3.0 84 3/3/2026
1.2.0 88 3/3/2026
1.0.0 91 3/3/2026