|

|  How to Integrate Adobe Sign API in C# for Digital Signatures

How to Integrate Adobe Sign API in C# for Digital Signatures

October 31, 2024

Unlock seamless digital signatures in your C# apps with our Adobe Sign API integration guide. Step-by-step instructions for developers.

How to Integrate Adobe Sign API in C# for Digital Signatures

 

Authenticate with Adobe Sign

 

  • Acquire OAuth access tokens to authenticate API requests. Ensure your application has the necessary permissions set up in your Adobe Sign account to interact with documents.
  •  

  • Use libraries like `IdentityModel` to simplify OAuth 2.0 authentication if needed. This C# package can help manage token requests and storage.

 


using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class AdobeSignClient
{
    private static readonly HttpClient client = new HttpClient();

    public async Task<string> GetAccessToken(string clientId, string clientSecret, string redirectUri, string code)
    {
        var request = new HttpRequestMessage(HttpMethod.Post, "https://api.na1.echosign.com/oauth/token");
        request.Content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("grant_type", "authorization_code"),
            new KeyValuePair<string, string>("client_id", clientId),
            new KeyValuePair<string, string>("client_secret", clientSecret),
            new KeyValuePair<string, string>("redirect_uri", redirectUri),
            new KeyValuePair<string, string>("code", code)
        });

        var response = await client.SendAsync(request);
        response.EnsureSuccessStatusCode();

        var responseContent = await response.Content.ReadAsStringAsync();
        return responseContent; // Handle and parse token
    }
}

 

Create an Agreement

 

  • Build a request to create an agreement, including the necessary document workflow parameters like sender info, recipient details, and document binaries.
  •  

  • Specify necessary details—such as name, file info, and signer information—according to the Adobe Sign API's `agreementCreationInfo` object structure.

 


using System.Net.Http;
using System.Text;

public async Task<string> CreateAgreement(string accessToken, string fileId, string recipientEmail)
{
    var agreement = new
    {
        documentCreationInfo = new
        {
            fileInfos = new[]
            {
                new { libraryDocumentId = fileId }
            },
            name = "Example Agreement",
            recipientSetInfos = new[]
            {
                new
                {
                    recipientSetMemberInfos = new[]
                    {
                        new { email = recipientEmail }
                    },
                    recipientSetRole = "SIGNER"
                }
            },
            signatureType = "ESIGN",
            state = "IN_PROCESS"
        }
    };

    var jsonString = JsonConvert.SerializeObject(agreement);
    var requestContent = new StringContent(jsonString, Encoding.UTF8, "application/json");

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    var response = await client.PostAsync("https://api.na1.echosign.com/api/rest/v6/agreements", requestContent);

    var responseContent = await response.Content.ReadAsStringAsync();
    return responseContent; // Handle and parse response
}

 

Monitor Signature Status

 

  • Check the status of an agreement using its ID. The Adobe Sign API allows querying for current status to determine if it has been signed.
  •  

  • Use periodic polling or webhooks for real-time updates. Webhooks can notify your application when a document is signed, eliminating the need for constant polling.

 


public async Task<string> GetAgreementStatus(string accessToken, string agreementId)
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    var response = await client.GetAsync($"https://api.na1.echosign.com/api/rest/v6/agreements/{agreementId}");

    var responseContent = await response.Content.ReadAsStringAsync();
    return responseContent; // Handle and parse response for status
}

 

Download Signed Document

 

  • Once an agreement is completed, you can download the signed document by accessing it using its agreement ID and using the associated file API.
  •  

  • Ensure your application handles storage correctly, complying with privacy and security standards if necessary to store signed documents.

 


public async Task<byte[]> DownloadSignedDocument(string accessToken, string agreementId)
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    var response = await client.GetAsync($"https://api.na1.echosign.com/api/rest/v6/agreements/{agreementId}/documents");

    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsByteArrayAsync();
}

 

Error Handling and Best Practices

 

  • Implement robust error handling such as retries for transient faults, and handle exceptions gracefully by logging them appropriately.
  •  

  • Securely manage access tokens, ensure they're kept confidential and are refreshed appropriately to prevent downtime in service.