Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com)
and this project adheres to [Semantic Versioning](http://semver.org).

## [Unreleased] - TBD

### Added
- Document Groups:
- Document Group Invites: create, get status, cancel, resend, reassign signer, and list pending invites for a document group signing workflow
- Document Group Embedded: create/cancel embedded invites, generate embedded invite links, and embedded editor/sending links for a document group
- Document Group Recipients: get and update recipients, expiration, reminder and signing order settings for a document group

## [1.5.0] - 2025-02-05
### Added
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2019 airSlate Inc.
Copyright (c) 2003-present SignNow

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
135 changes: 106 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# signNow.NET
# SignNow API .NET SDK

[![Build status][actions build badge]][actions build link]
[![Codecov][codecov badge]][codecov link]
[![NuGet Version][nuget badge]][nuget link]
[![NuGet Downloads][nuget downloads badge]][nuget downloads link]
[![License][license badge]](LICENSE)

## About signNow
## About SignNow

signNow.Net is the official .NET 4.6.2+ and .NET Standard class library for the signNow API. signNow allows you to embed legally-binding e-signatures into your app, CRM or cloud storage. Send documents for signature directly from your website. Invite multiple signers to finalize contracts. Track status of your requests and download signed copies automatically.
SignNow.Net is the official .NET 4.6.2+ and .NET Standard class library for the SignNow API. SignNow allows you to embed legally-binding e-signatures into your app, CRM or cloud storage. Send documents for signature directly from your website. Invite multiple signers to finalize contracts. Track status of your requests and download signed copies automatically.

Get your account at <https://www.signnow.com/developers>

Expand All @@ -32,11 +32,11 @@ Get your account at <https://www.signnow.com/developers>
- [Get modified documents][get_modified_docs example]
- [Get user documents][get_user_docs example]
- [Document](#document)
- [Upload a document to signNow][upload_document example]
- [Upload a document to SignNow][upload_document example]
- [Upload a document & Extract Fields][upload_doc_extract example]
- [Download a document from signNow][download_signed_doc example]
- [Download a document from SignNow][download_signed_doc example]
- [Retrieve a document resource][get_document example]
- [Merge two or more signNow documents into one][merge_documents example]
- [Merge two or more SignNow documents into one][merge_documents example]
- [Create a signing link to the document for signature][create_sign_lnk example]
- [Create a freeform invite to the document for signature][create_ff_invite example]
- [Create a role-based invite to the document for signature][create_rb_invite example]
Expand Down Expand Up @@ -71,7 +71,7 @@ Get your account at <https://www.signnow.com/developers>

## Get started

To start using the API you will need an API key. You can get one here <https://www.signnow.com/api>. For a full list of accepted parameters, refer to the signNow REST Endpoints API guide: [signNow API Reference][api reference link].
To start using the API you will need an API key. You can get one here <https://www.signnow.com/api>. For a full list of accepted parameters, refer to the SignNow REST Endpoints API guide: [SignNow API Reference][api reference link].

#### API and Application

Expand Down Expand Up @@ -108,7 +108,7 @@ Install-Package SignNow.Net -Version <package-version>

## Documentation

Read about the available signNow features in [signNow API Docs][api docs link].
Read about the available SignNow features in [SignNow API Docs][api docs link].

## Features

Expand All @@ -124,7 +124,7 @@ public static class AuthenticationExamples
/// <summary>
/// An example of obtaining an access token via OAuth 2.0 service.
/// </summary>
/// <param name="apiBase">signNow API base URL. Sandbox: "https://api-eval.signnow.com", Production: "https://api.signnow.com"</param>
/// <param name="apiBase">SignNow API base URL. Sandbox: "https://api-eval.signnow.com", Production: "https://api.signnow.com"</param>
/// <param name="clientInfo"><see cref="CredentialModel"/> with Application Client ID and Client Secret</param>
/// <param name="userCredentials"><see cref="CredentialModel"/> with User email and User password</param>
public static async Task<Token> RequestAccessToken(Uri apiBase, CredentialModel clientInfo, CredentialModel userCredentials)
Expand Down Expand Up @@ -191,15 +191,15 @@ More examples: [Create User][create_user example], [Retrieve User information][g

## Document

### Upload a document to signNow
### Upload a document to SignNow

All the features in signNow require a `document_id`. Once you upload a document to signNow, you get the `document_id` from a successful response.
All the features in SignNow require a `document_id`. Once you upload a document to SignNow, you get the `document_id` from a successful response.

```csharp
public static class DocumentExamples
{
/// <summary>
/// Uploads a PDF document to signNow and returns SignNowDocument object.
/// Uploads a PDF document to SignNow and returns SignNowDocument object.
/// </summary>
/// <param name="pdfFilePath">Full qualified path to your PDF file.</param>
/// <param name="token">Access token</param>
Expand All @@ -225,11 +225,11 @@ public static class DocumentExamples

More examples: [Upload document][upload_document example], [Upload document with field extract][upload_doc_extract example], [Upload document with complex tags][upload_document_complex_tags]

### Download a document from signNow
### Download a document from SignNow

Choose the type of download for your document:

- `PdfOriginal` - download a document in a state it's been when uploaded to signNow, before any changes
- `PdfOriginal` - download a document in a state it's been when uploaded to SignNow, before any changes
- `PdfCollapsed` - download a document in PDF file format
- `ZipCollapsed` - download a document in ZIP archive
- `PdfWithHistory` - download a document with its history, a full log of changes on a separate page.
Expand Down Expand Up @@ -258,9 +258,9 @@ public static class DocumentExamples

More examples: [Download signed document][download_signed_doc example]

### Merge two or more signNow documents into one
### Merge two or more SignNow documents into one

Merges two or more signNow documents into one single PDF file.
Merges two or more SignNow documents into one single PDF file.

Steps:

Expand Down Expand Up @@ -317,9 +317,9 @@ public static partial class DocumentExamples
/// <returns>
/// Response with:
/// <para> <see cref="SigningLinkResponse.Url"/>
/// to sign the document via web browser using signNow credentials. </para>
/// to sign the document via web browser using SignNow credentials. </para>
/// <para> <see cref="SigningLinkResponse.AnonymousUrl"/>
/// to sign the document via web browser without signNow credentials. </para>
/// to sign the document via web browser without SignNow credentials. </para>
/// </returns>
public static async Task<SigningLinkResponse>
CreateSigningLinkToTheDocument(string documentId, Token token)
Expand All @@ -343,7 +343,7 @@ More examples: [Create signing link][create_sign_lnk example], [Check signing st
Simply upload a document and send it for signature right away. No need for adding fields and configuring roles.
Just add the signer's email address and customize the message in your email.
The document will be available for signing via a button in the email.
Clicking the button opens a document in signNow editor. Signers can click anywhere on a document to add their signature.
Clicking the button opens a document in SignNow editor. Signers can click anywhere on a document to add their signature.

Remember: if your document contains even one fillable field, you have to create a role-based invite to get it signed.

Expand All @@ -353,7 +353,7 @@ public static partial class InviteExamples
/// <summary>
/// Create a freeform invite to the document for signature.
/// </summary>
/// <param name="document">signNow document you’d like to have signed</param>
/// <param name="document">SignNow document you’d like to have signed</param>
/// <param name="email">The email of the invitee.</param>
/// <param name="token">Access token</param>
/// <returns>
Expand Down Expand Up @@ -389,17 +389,17 @@ Role-based invites allow you to build e-signature workflows. The document can be
Upload a document or create one from a template.

The document will be available for signing via a button in the email. You can customize email messages for every signer.
Clicking the button opens a document in signNow editor. Signers can sign only the fields designated for their role.
Clicking the button opens a document in SignNow editor. Signers can sign only the fields designated for their role.

You can add more roles either in signNow web app while editing the fields, or with `ISignInvite` interface from SDK while specifying parameters of the `SignerOptions` object.
You can add more roles either in SignNow web app while editing the fields, or with `ISignInvite` interface from SDK while specifying parameters of the `SignerOptions` object.

```csharp
public static partial class InviteExamples
{
/// <summary>
/// Create a role-based invite to the document for signature.
/// </summary>
/// <param name="document">signNow document with fields you’d like to have signed</param>
/// <param name="document">SignNow document with fields you’d like to have signed</param>
/// <param name="email">The email of the invitee.</param>
/// <param name="token">Access token</param>
/// <returns><see cref="InviteResponse"/> without any Identity of invite request.</returns>
Expand Down Expand Up @@ -443,7 +443,7 @@ public static partial class InviteExamples
/// <summary>
/// Create an embedded signing invite to the document for signature.
/// </summary>
/// <param name="document">signNow document you’d like to have signed</param>
/// <param name="document">SignNow document you’d like to have signed</param>
/// <param name="email">The email of the invitee.</param>
/// <param name="token">Access token</param>
/// <returns>
Expand Down Expand Up @@ -529,7 +529,7 @@ More examples: [Get document history][document_history example]

### Create Template by flattening the existing Document

Set required templateName and documentId parameters to create the signNow Template.
Set required templateName and documentId parameters to create the SignNow Template.

```csharp
public static class DocumentExamples
Expand Down Expand Up @@ -602,6 +602,80 @@ public async Task<DocumentGroupInfoResponse> CreateDocumentGroupAsync()
```
More examples: [Document group operations][doc_group_operations example]

### Send a document group invite

Sends a signing invite to a document group, then checks its status.

```csharp
public async Task<GroupInviteResponse> SendDocumentGroupInviteAsync(string documentGroupId, string documentId, string roleId, string roleName)
{
var signNowContext = new SignNowContext(token);

var request = new CreateGroupInviteRequest
{
InviteSteps = new List<GroupInviteStep>
{
new GroupInviteStep
{
Order = 1,
InviteEmails = new List<GroupInviteEmail>
{
new GroupInviteEmail { Email = "signer@example.com", Role = roleName, RoleId = roleId, Order = 1 }
},
InviteActions = new List<GroupInviteAction>
{
new GroupInviteAction { Email = "signer@example.com", RoleName = roleName, DocumentId = documentId }
}
}
}
};

var invite = await signNowContext.GroupInvites
.CreateGroupInviteAsync(documentGroupId, request)
.ConfigureAwait(false);

// Check invite status, list pending signers, cancel/resend/reassign as needed
return await signNowContext.GroupInvites
.GetGroupInviteAsync(documentGroupId, invite.Data.Id)
.ConfigureAwait(false);
}
```
More examples: [Document group invite operations][doc_group_invite_operations example]

### Create an embedded session for a document group

Creates an embedded signing invite for a document group and generates links for the embedded editor, embedded sending and embedded signing flows, without sending emails.

```csharp
public async Task<Uri> CreateDocumentGroupEmbeddedEditorLinkAsync(string documentGroupId)
{
var signNowContext = new SignNowContext(token);

var editorLink = await signNowContext.DocumentGroup
.GenerateDocumentGroupEmbeddedEditorLinkAsync(documentGroupId, new EmbeddedEditorOptions { LinkExpiration = 30 })
.ConfigureAwait(false);

return editorLink.Link;
}
```
More examples: [Document group embedded operations][doc_group_embedded_operations example]

### Get and update document group recipients

Gets and updates the recipients, expiration, reminder and signing order settings for a document group.

```csharp
public async Task<DocumentGroupRecipientsResponse> GetDocumentGroupRecipientsAsync(string documentGroupId)
{
var signNowContext = new SignNowContext(token);

return await signNowContext.DocumentGroup
.GetDocumentGroupRecipientsAsync(documentGroupId)
.ConfigureAwait(false);
}
```
More examples: [Document group recipients operations][doc_group_recipients_operations example]


## Folders

Expand Down Expand Up @@ -647,9 +721,9 @@ This SDK is distributed under the MIT License, see [LICENSE][license link] for m

#### API Contact Information

If you have questions about the signNow API, please visit [signNow API Reference][api reference link] or email api@signnow.com.
If you have questions about the SignNow API, please visit [SignNow API Reference][api reference link] or email api@signnow.com.

**Support**: To contact signNow support, please email support@signnow.com or api@signnow.com.
**Support**: To contact SignNow support, please email support@signnow.com or api@signnow.com.

**Sales**: For pricing information, please call (800) 831-2050, email sales@signnow.com or visit <https://www.signnow.com/contact>.

Expand All @@ -662,7 +736,7 @@ If you have questions about the signNow API, please visit [signNow API Reference
[nuget link]: https://www.nuget.org/packages/SignNow.Net
[nuget downloads badge]: https://img.shields.io/nuget/dt/SignNow.Net.svg?style=flat-square
[nuget downloads link]: https://www.nuget.org/packages/SignNow.Net "NuGet Downloads"
[license badge]: https://img.shields.io/github/license/signnow/SignNow.NET?style=flat-square "signNow .Net SDK License"
[license badge]: https://img.shields.io/github/license/signnow/SignNow.NET?style=flat-square "SignNow .Net SDK License"
[license link]: https://github.com/signnow/SignNow.NET/blob/develop/LICENSE
[api docs link]: https://docs.signnow.com
[api reference link]: https://docs.signnow.com/docs/signnow/reference
Expand Down Expand Up @@ -708,7 +782,10 @@ If you have questions about the signNow API, please visit [signNow API Reference
[create_document example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Documents/CreateDocumentFromTheTemplate.cs

<!-- Document group -->
[doc_group_operations example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Document%20group/DocumentGroupOperations.cs
[doc_group_operations example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Document%20group/DocumentGroupOperations.cs
[doc_group_invite_operations example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Document%20group/DocumentGroupInviteOperations.cs
[doc_group_embedded_operations example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Document%20group/DocumentGroupEmbeddedOperations.cs
[doc_group_recipients_operations example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Document%20group/DocumentGroupRecipientsOperations.cs

<!-- Folders -->
[get_all_folders example]: https://github.com/signnow/SignNow.NET/blob/develop/SignNow.Net.Examples/Folders/GetAllFolders.cs
Expand Down
Loading
Loading