Send Document To Other Users For Signature In DocuSign

We saw how to convert a PDF file into a JSON file from DocuSign for signature and fill out the other form’s contents in the previous article. Click here to learn more about this.


In this tutorial, we’ll go over how to transmit documents to DocuSign for signature step by step. So let’s begin.

Step 1:

Set the necessary key into your appsetting.json file. If you want to know how to get keys from DocuSign then you can read my previous blog by clicking here. 

"DocuSign": {
    "IntegrationKey": "fc81131e-XXXX-XXXX-XXXX-0dbfc94e3af7",
    "UserId": "29c410f7-XXXX-XXXX-XXXX-1a4fc813defd",
    "AuthServer": "",
    "RSAPrivateKeyFile": "private.key",
    "JWTLifeTime": "1",
    "BaseURI": "",
    "AccountId": "e2f2e355-XXXX-XXXX-XXXX-764d6994f8c2",

Step 2:

Put the downloaded JSON file in the Properties folder. Click here if you want to know how to create a JSON file for signature in DocuSign.

Step 3:

Add this code to your controller.

public async Task<IActionResult> SendDocumentForSignature(string accessToken)
    var apiResponse = await _docuSignService.SendDocumentForSignature(accessToken);
    return new JsonResult(apiResponse);

Step 4:

Add Document response class and declare your method in your interface class.

public class SendDocumentResponse
        public SendDocumentResponse(string redirectUrl, string envelopeId)
            RedirectUrl = redirectUrl;
            EnvelopeId = envelopeId;

        public string RedirectUrl { get; }
        public string EnvelopeId { get; }

Task<SendDocumentResponse> SendDocumentForSignature(string accessToken);

Step 5:

Add BuildTemplate(), BuildEnvelope(), GetApiClient(), and BuildRecipientViewRequest() in your method defination class.

public async Task<EnvelopeTemplate> BuildTemplate(string rootDir)
     using var reader = new StreamReader(rootDir + "Properties/Sample_Document.json");
     return await Task.FromResult(JsonConvert.DeserializeObject<EnvelopeTemplate>(reader.ReadToEnd()));

public async Task<EnvelopeDefinition> BuildEnvelope(string userFullName, string userEmail)
    var role = new TemplateRole
        Email = userEmail,
        Name = userFullName,
        RoleName = "User",
        ClientUserId = "1000"

    var env = new EnvelopeDefinition { TemplateRoles = new List<TemplateRole> { role }, Status = "Sent" };

    return await Task.FromResult(env);

private async Task<ApiClient> GetApiClient(string token)
    var docuSignConfig = new Configuration(_configuration["DocuSign:BaseURI"] + "/restapi");
    docuSignConfig.AddDefaultHeader("Authorization", "Bearer " + token);
    docuSignConfig.AccessToken = token;
    var apiClient = new ApiClient(docuSignConfig);
    return await Task.FromResult(apiClient);

private async Task<RecipientViewRequest> BuildRecipientViewRequest(string signerEmail, string signerName, string returnUrl, string pingUrl)
    RecipientViewRequest viewRequest = new RecipientViewRequest
        ReturnUrl = returnUrl,
        AuthenticationMethod = "none",
        Email = signerEmail,
        UserName = signerName,
        ClientUserId = "1000"

    if (pingUrl != null)
        viewRequest.PingFrequency = "600";
        viewRequest.PingUrl = pingUrl;

    return await Task.FromResult(viewRequest);

Step 6:

Finally, add SendDocumentForSignature() method.

public async Task<SendDocumentResponse> SendDocumentForSignature(string accessToken)
    SendDocumentResponse sendDocumentResponse = null;
        if (!string.IsNullOrEmpty(accessToken))
            var userFullName = "Shaikh Shahjaha";
            string rootDir = _configuration.GetValue<string>(WebHostDefaults.ContentRootKey);
            EnvelopeTemplate envelopeTemplate = await BuildTemplate(rootDir);
            EnvelopeDefinition envelope = await BuildEnvelope(userFullName, "");
            var client = await GetApiClient(accessToken);
            if (client != null)
                var templatesApi = new TemplatesApi(client);
                var listTemplates = templatesApi.ListTemplates(_configuration["DocuSign:AccountId"]);
                EnvelopeTemplate template = listTemplates?.EnvelopeTemplates?.FirstOrDefault(x => x.Name == "Sample Document");
                if (template != null)
                    envelope.TemplateId = template.TemplateId;
                    TemplateSummary templateSummary = templatesApi.CreateTemplate(_configuration["DocuSign:AccountId"], envelopeTemplate);
                    envelope.TemplateId = templateSummary.TemplateId;
                var envelopesApi = new EnvelopesApi(client);
                EnvelopeSummary envelopeSummary = envelopesApi.CreateEnvelope(_configuration["DocuSign:AccountId"], envelope);
                ViewUrl recipientView = envelopesApi.CreateRecipientView(
                   await BuildRecipientViewRequest(
                sendDocumentResponse = new SendDocumentResponse(recipientView.Url, envelopeSummary.EnvelopeId);
    catch (Exception ex)
        sendDocumentResponse = null;
    return await Task.FromResult(sendDocumentResponse);


Following the addition of this code to your project, you will receive a DocuSign redirect URL in the response. Simply copy it and paste it into a new tab. You’ll also require an access token, which we obtained in the previous blog. Click here for instructions on how to obtain an access token from DocuSign.

Related Articles:

Getting Started With The DocuSign

Get Authentication Token From The DocuSign (Part-1)

Get Authentication Token From The DocuSign (Part-2)

How To Create JSON Document File For Signature In DocuSign

Get Document Data From DocuSign

Download Document From DocuSign

Submit a Comment

Your email address will not be published. Required fields are marked *


Select Categories