Chris Romp
Chris Romp

Reputation: 258

DocuSign - View Form Data

Another company we partner with sends us new client information via DocuSign envelopes completed by those clients. I am attempting to extract the form data from the document, either via the PDF or via the DocuSign API. The PDF only appears to have the Envelope ID embedded in it. When I add my account as a CC recipient and try to view the form data in the DocuSign console, I receive an error message:

Cannot access form data. You do not have the necessary permission to access this data.

Additionally, I'm unable to view the form data via the DocuSign API.

{
  errorCode: "USER_LACKS_PERMISSIONS",
  message: "This user lacks sufficient permissions to access this resource."
}

I've tried accessing via the API at:

Questions:

  1. Is there a way for a user who is not in the sender's tenant to be able to view the envelope form data?
  2. Is there a way for DocuSign to embed the tab data into the PDF for extraction?
  3. Is there another approach I'm not considering?

Upvotes: 0

Views: 1188

Answers (2)

Chris Romp
Chris Romp

Reputation: 258

@Inbar-Gazit was kind enough to do some digging internally at DocuSign, and after a bit of back-and-forth, discovered that this is possible using the SOAP API with the RequestEnvelope and RequestEnvelopeV2 methods. I'm unsure if there's any advantage to using one method over the other. Both also have async methods.

https://developers.docusign.com/docs/esign-soap-api/reference/Status-and-Managing-Group/RequestEnvelope

Some quick-and-dirty C# validated that this will indeed work. I validated this both as the sending account (which also works via REST) and the CC recipient account (which did not work via REST).

var authString = $"<DocuSignCredentials><Username>{_userName}</Username><Password>{_password}</Password><IntegratorKey>{_apiKey}</IntegratorKey></DocuSignCredentials>";

var client = new DSAPIServiceSoapClient();

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
    httpRequestProperty.Headers.Add("X-DocuSign-Authentication", authString);
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

    EnvelopeStatus status = client.RequestStatusEx(_envelopeId);
    Console.Out.WriteLine("Subject: " + status.Subject);

    // RequestEnvelope Method
    var envelope = client.RequestEnvelope(_envelopeId, false);
    var testTab = envelope.Tabs.FirstOrDefault(t => t.TabLabel.Contains("Test"));
    if (testTab != null)
    {
        Console.WriteLine($"Tab {testTab.TabLabel}: {testTab.Value}");
    } else
    {
        Console.WriteLine("Tab not found.");
    }

    // RequestEnvelopeV2 Method
    var requestOptions = new RequestEnvelopeV2Options() {
        IncludeAC = false,
        IncludeAnchorTabLocations = true,
        IncludeDocumentBytes = false
    };
    var envelopeV2 = client.RequestEnvelopeV2(_envelopeId, requestOptions);
    var testTabV2 = envelopeV2.Tabs.FirstOrDefault(t => t.TabLabel.Contains("Test"));
    if (testTabV2 != null)
    {
        Console.WriteLine($"Tab(v2) {testTabV2.TabLabel}: {testTabV2.Value}");
    } else
    {
        Console.WriteLine("Tab(v2) not found.");
    }

    Console.WriteLine("\r\nDone.");
    Console.ReadKey();
}

Output:

Subject: Please DocuSign: Test Envelope
Tab txtDataLabelTest1: Some Data Here
Tab(v2) txtDataLabelTest1: Some Data Here

Done.

Upvotes: 0

Inbar Gazit
Inbar Gazit

Reputation: 14015

If the user is cc to the envelope using the same userId and email combination that is on their account, then that user also can use the API to gain account information. (account is what you call "tenant.")

If the user is not on the envelope and you just receive the PDF some other way, then you cannot use the API to obtain information about the envelope because that is limited only to recipients of the envelope.

Upvotes: 0

Related Questions