Blueink.Client.Net
1.1.0
dotnet add package Blueink.Client.Net --version 1.1.0
NuGet\Install-Package Blueink.Client.Net -Version 1.1.0
<PackageReference Include="Blueink.Client.Net" Version="1.1.0" />
<PackageVersion Include="Blueink.Client.Net" Version="1.1.0" />
<PackageReference Include="Blueink.Client.Net" />
paket add Blueink.Client.Net --version 1.1.0
#r "nuget: Blueink.Client.Net, 1.1.0"
#:package Blueink.Client.Net@1.1.0
#addin nuget:?package=Blueink.Client.Net&version=1.1.0
#tool nuget:?package=Blueink.Client.Net&version=1.1.0
Blueink .NET SDK
Official .NET client library for the Blueink eSignature API. This SDK gives you a strongly typed, synchronous interface for working with Blueink API v2 resources such as bundles, packets, persons, templates, webhooks, and rate limits.
It is a good fit for server-side .NET applications that need to:
- send signature requests
- upload documents and place fields
- create embedded signing experiences
- manage contacts and templates
- receive webhook notifications
Core Concepts
Blueink's API uses a few domain terms that show up throughout this SDK:
Bundle: a signing workflow containing one or more documents and one or more signersPacket: an individual signer within a bundlePerson: a reusable contact recordTemplate: a reusable document or envelope definition
The SDK organizes those concepts into resource classes exposed from BlueinkService.
Supported Frameworks
This package targets:
.NET Standard 2.0.NET 8.0
That means it can be used from modern .NET apps and from older runtimes that support .NET Standard 2.0.
Installation
Using the .NET CLI:
dotnet add package Blueink.Client.Net
Using PackageReference:
<ItemGroup>
<PackageReference Include="Blueink.Client.Net" Version="1.1.0" />
</ItemGroup>
Authentication and Configuration
The SDK authenticates with a Blueink API key. By default, BlueinkService reads the key from the BLUEINK_API_KEY environment variable.
export BLUEINK_API_KEY="your-api-key"
If you need to override the API base URL, you can also set:
export BLUEINK_API_URL="https://api.blueink.com/api/v2/"
You can also pass values directly:
using Blueink.Client.Net.v2;
var client = new BlueinkService("your-api-key");
var customClient = new BlueinkService("your-api-key", "https://api.blueink.com/api/v2/");
Quick Start
All resource methods return request objects. Call Execute() to send the request and deserialize the response.
using System;
using Blueink.Client.Net.v2;
using (var client = new BlueinkService())
{
var request = client.BundleResource.ListBundles();
var bundles = request.Execute();
Console.WriteLine($"Fetched {bundles.Count} bundle(s).");
Console.WriteLine($"Page {request.CurrentPageNumber} of {request.TotalPagesCount}");
}
Common Examples
Create a person
using System;
using System.Collections.Generic;
using Blueink.Client.Net.v2;
using (var client = new BlueinkService())
{
var person = client.PersonResource.CreatePerson(
name: "Jane Signer",
metadata: new Dictionary<string, string>
{
["customer_id"] = "cust_12345"
},
emails: new List<string> { "jane@example.com" },
phones: new List<string> { "+15551234567" }
).Execute();
Console.WriteLine($"Created person: {person.Id}");
}
Create a bundle from an uploaded PDF
This example uploads a PDF, adds a signer, and places fields using anchor text.
using System;
using System.Collections.Generic;
using Blueink.Client.Net.v2;
using Blueink.Client.Net.v2.Helper;
using Blueink.Client.Net.v2.Model;
using (var client = new BlueinkService())
{
var bundle = new BundleHelper
{
Label = "Service Agreement",
EmailSubject = "Please sign your agreement",
EmailMessage = "Review and sign when ready.",
IsTest = true,
InOrder = true
};
var signerKey = bundle.AddSigner(
name: "Jane Signer",
email: "jane@example.com",
phone: null,
deliveryVia: DeliveryVia.Email,
order: 0);
var documentKey = bundle.AddDocumentAndFileToUpload(
key: "agreement",
filePath: "./agreement.pdf");
bundle.AddAutoplacement(
documentKey: documentKey,
kind: FieldKind.ESignature,
search: "[SIGN_HERE]",
w: 160,
h: 48,
offsetX: 0,
offsetY: 0,
editors: new List<string> { signerKey });
bundle.AddAutoplacement(
documentKey: documentKey,
kind: FieldKind.SigningDate,
search: "[DATE_HERE]",
w: 120,
h: 24,
offsetX: 0,
offsetY: 0,
editors: new List<string> { signerKey });
var created = client.BundleResource
.CreateBundleUploadFilesFromHelper(bundle)
.Execute();
Console.WriteLine($"Created bundle: {created.Id}");
}
If you already manage reusable templates in Blueink, the SDK also supports:
BundleResource.CreateBundleFromEnvelopeTemplate(...)BundleHelper.AddDocumentTemplate(...)
Create an embedded signing URL
using System;
using Blueink.Client.Net.v2;
using (var client = new BlueinkService())
{
var signing = client.PacketResource
.CreateEmbeddedSigningUrl("your-packet-id")
.Execute();
Console.WriteLine(signing.Url);
Console.WriteLine(signing.Expires);
}
Check your rate limit status
using System;
using Blueink.Client.Net.v2;
using (var client = new BlueinkService())
{
var rateLimit = client.RateLimitResource
.CheckRateLimitStatus()
.Execute();
Console.WriteLine($"Remaining: {rateLimit.Remaining}/{rateLimit.Limit}");
}
Available Resources
| Resource | Common operations |
|---|---|
BundleResource |
List, retrieve, create, cancel, expire, list events, list files, list data, add tags, remove tags, create from envelope templates |
PacketResource |
Retrieve, update, send reminder, create embedded signing URL, retrieve certificate of evidence |
TemplateResource |
List and retrieve document templates and envelope templates |
PersonResource |
List, retrieve, create, update, partially update, delete |
WebhookResource |
List, retrieve, create, update, partially update, delete, manage headers, inspect deliveries and events, manage webhook secrets |
RateLimitResource |
Check current API rate limit status |
Error Handling
The SDK throws configuration and API exceptions with structured context:
BlueinkConfigurationException: missing or invalid client configurationBlueinkApiException: API request failures with Blueink error details when availableBlueinkAuthenticationException: authentication failuresBlueinkValidationException: client-side validation failuresBlueinkNotFoundException: missing resourcesBlueinkRateLimitException: rate limiting
using System;
using Blueink.Client.Net.v2;
try
{
using (var client = new BlueinkService())
{
var bundle = client.BundleResource.GetBundle("bundle-id").Execute();
Console.WriteLine(bundle.Label);
}
}
catch (BlueinkConfigurationException ex)
{
Console.WriteLine($"Configuration error: {ex.Message}");
}
catch (BlueinkApiException ex)
{
Console.WriteLine($"Blueink API error: {ex.Message}");
}
Development
Run the unit tests:
dotnet test Tests/Blueink.Client.Net.v2.Tests.csproj /p:GeneratePackageOnBuild=false
Build the library without packing:
dotnet build Blueink.Client.Net.v2.csproj /p:GeneratePackageOnBuild=false
This project is configured to include README.md and LICENSE in the NuGet package. If you intend to pack or publish the library, make sure both files exist at the repository root.
Documentation
Repository
- Source: blueinkhq/blueink-client-dotnet
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Newtonsoft.Json (>= 13.0.3)
- System.ComponentModel.Annotations (>= 5.0.0)
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.