Use rest api to assign a signer that is a companyUser - docusignapi

Right now when creating an envelope, I am unable to designate any other Company Users as signers.
Is there a way to create an envelope via the API and make one of the Signers the an Company user?
This is the signers enclosed in the inline template
"recipients":{
"signers":[
{
"name":"MoCkVotEr testpass",
"email":"kevin+2#joinmosaic.com",
"accessCode":null,
"roleName":"Recipient",
"clientUserId":"a499e405-1385-46fe-9742-b338c2a5d3b2",
"recipientId":"1",
"tabs":{
"textTabs":[
{
"tabLabel":"\\*loanAgreementId",
"value":"3",
"tabId":null
},
{
"tabLabel":"\\*borrowerName",
"value":"MoCkVotEr testpass",
"tabId":null
},
{
"tabLabel":"\\*accountHolderName",
"value":"Account Holder",
"tabId":null
},
{
"tabLabel":"\\*accountNumber",
"value":"11111111111111111",
"tabId":null
},
{
"tabLabel":"\\*routingNumber",
"value":"111111111",
"tabId":null
},
{
"tabLabel":"\\*bankName",
"value":"asdf",
"tabId":null
}
],
"checkboxTabs":[
{
"tabLabel":"\\*isCheckingAccount",
"selected":true,
"tabId":null
},
{
"tabLabel":"\\*isSavingsAccount",
"selected":false,
"tabId":null
}
],
"titleTabs":[
]
},
"routingOrder":null
},
{
"name":"Kevin",
"email":"kevin#joinmosaic.com",
"accessCode":null,
"roleName":"Mosaic",
"clientUserId":"MosaicSignator",
"userId":"3103274b-89ac-4f0c-8f4a-c92a9d2f3749",
"status":"created",
"recipientId":"2",
"tabs":{
"textTabs":[
],
"checkboxTabs":[
],
"titleTabs":[
]
},
"routingOrder":null
}
]
}
This is the result when requesting recipients from the envelope
{
"signers": [
{
"name": "Kevin",
"email": "kevin#joinmosaic.com",
"recipientId": "2",
"recipientIdGuid": "818293ec-ba4a-4adf-941d-3119740e62eb",
"requireIdLookup": "false",
"userId": "**3da53563-5c29-488f-8527-aa5913b004c0**",
"clientUserId": "MosaicSignator",
"routingOrder": "3",
"note": "",
"roleName": "Mosaic",
"status": "created",
"templateLocked": "false",
"templateRequired": "false"
},
{
"name": "MoCkVotEr testpass",
"email": "kevin+2#joinmosaic.com",
"recipientId": "1",
"recipientIdGuid": "ebb98be0-b1bd-446d-ac79-b7b38b63199c",
"requireIdLookup": "false",
"userId": "12f73115-5cb2-4a51-84b3-640a89915b61",
"clientUserId": "a499e405-1385-46fe-9742-b338c2a5d3b2",
"routingOrder": "1",
"note": "",
"roleName": "Recipient",
"status": "sent",
"templateLocked": "false",
"templateRequired": "false"
}
],
"agents": [],
"editors": [],
"intermediaries": [],
"carbonCopies": [],
"certifiedDeliveries": [],
"inPersonSigners": [],
"recipientCount": "3",
"currentRoutingOrder": "1"
}
This is my user from the /account/{}/users api call
{
"userName": "Kevin xxxxx",
"userId": "**3103274b-89ac-4f0c-8f4a-c92a9d2f3749**",
"userType": "CompanyUser",
"userStatus": "Active",
"uri": "/users/3103274b-89ac-4f0c-8f4a-c92a9d2f3749"
}
As you can see the two UserIds do not match. However when going through the GUIConsole They do match.

The DocuSign system will only recognize recipients and match them to their existing DS accounts if all their info is the same as the account user. This definitely includes their email, name, and userId, but might contain other aspects too such as a clientUserId (if you are using Embedded functionality).
To figure out what is different with these users you can make the Get Envelope Recipient Status API call, which will return the above info (plus more) for each recipient. You can then go through and make sure all the IDs, emails, etc. are what you expect.
Check out this API Walkthrough for making the call:
http://iodocs.docusign.com/APIWalkthrough/getEnvelopeRecipientStatus

Related

DocuSign REST Phone Authentication with Template

I created templates in Docusign.
I call the REST API to generate a new enveloppe using these templates.
Code works fine:
Signers get populated
Fields get populated
But I cant get the Phone Authentication to work. I checked other code on the DocuSign website and here.
The only differences I can see:
Different number of parameters: I tried with and without (recordVoicePrint=false,validateRecipProvidedNumber=false), it does'nt change the outcome
I call a template instead of sending the Base64 doc like in other examples
Here is the JSON request:
{
"templateRoles": [
{
"tabs": {
"textTabs": [
{
"value": "Some Name",
"tabLabel": "CustName"
},
{
"value": "315750.00",
"tabLabel": "TotEqptCost"
}
]
},
"roleName": "Signer",
"requireIdLookup": true,
"phoneAuthentication": {
"senderProvidedNumbers": [
"(222) 222-2222"
],
"recipMayProvideNumber": false
},
"name": "James",
"idCheckConfigurationName": "Phone Auth $",
"email": "James#gmail.com"
},
{
"tabs": {
"textTabs": [
{
"value": "Dome Name",
"tabLabel": "CustName"
},
{
"value": "315750.00",
"tabLabel": "TotEqptCost"
}
]
},
"roleName": "Signer2",
"requireIdLookup": true,
"phoneAuthentication": {
"senderProvidedNumbers": [
"+1 (111) 111-1111"
],
"recipMayProvideNumber": false
},
"name": "Joe",
"idCheckConfigurationName": "Phone Auth $",
"email": "Joe#thing.com"
}
],
"templateId": "a315793d-896f-41b4-9c61-dfc6873bc6f3",
"status": "created",
"emailSubject": "Testing"
}
It seems you are entering phone number in wrong format, try below json snippet:
{
"signers": [
{
"name": "Test Name",
"email": "testemail+name#gmail.com",
"roleName": "Signer 1",
"routingOrder": 1,
"recipientId": "1",
"requireIdLookup": true,
"idCheckConfigurationName": "Phone Auth $",
"phoneAuthentication": {
"recipMayProvideNumber": false,
"senderProvidedNumbers": [
"+18889619998"
]
}
}
]
}
I was able to resolve my issue by using the Composite Templates. See code below.
{
"compositeTemplates": [
{
"compositeTemplateId": "1",
"inlineTemplates": [
{
"recipients": {
"signers": [
{
"email": "James#gmail.com",
"name": "James",
"roleName": "Signer",
"recipientId": "1",
"requireIdLookup": true,
"phoneAuthentication": {
"senderProvidedNumbers": [
"(222) 222-2222"
],
"recipMayProvideNumber": false
},
"idCheckConfigurationName": "Phone Auth $",
"tabs": {
"textTabs": [
{
"value": "Some Name",
"tabLabel": "CustName"
},
{
"value": "315750.00",
"tabLabel": "TotEqptCost"
}
]
}
},
{
"email": "John#company.com",
"name": "John",
"recipientId": "2",
"requireIdLookup": true,
"phoneAuthentication": {
"senderProvidedNumbers": [
"(222) 222-2222"
],
"recipMayProvideNumber": false
},
"idCheckConfigurationName": "Phone Auth $",
"roleName": "Signer2",
"tabs": {
"textTabs": [
{
"value": "Some Name",
"tabLabel": "CustName"
},
{
"value": "315750.00",
"tabLabel": "TotEqptCost"
}
]
}
}
]
},
"sequence": "1"
}
],
"serverTemplates": [
{
"sequence": "1",
"templateId": "a315793d-896f-41b4-9c61-dfc6873bc6f3"
}
]
},
],
"status": "created",
"emailSubject": "Testing"
}

RecipientId get changed by docusign

I am creating envelope using DocuSign API. While creating envelope I am also passing list of signers and also set my own unique "RecipientId" (GUID) for each signers. But when envelope gets created and checking the list of recipients(signers) and found that recipient id gets changed all time. It is not "RecipientId" which I am passing.
Can you help me how can we set own "RecipientId" while creating envelope?
-- Create envelope request
{ "documents": [{
"documentBase64": "<Base64BytesHere>",
"documentId": "1",
"fileExtension": "pdf",
"name": "lite"
}],
"emailSubject": "test recipient 2",
"recipients": { "signers": [ { "email": "xxx.yyy#xxx.com",
"name": "xxx yyy",
"recipientId": "1"
} ]
},
"status": "sent"
}
-- Web hook Response see recipient Id --
<DocuSignEnvelopeInformation><EnvelopeStatus>
<RecipientStatuses>
<RecipientStatus>
<Type>Signer</Type>
<Email>xxx.yyy#abc.com</Email>
<UserName>xxx yyy</UserName>
<RoutingOrder>1</RoutingOrder>
<Sent>2017-08-29T02:13:33.853</Sent>
<DeclineReason xsi:nil="true"/>
<Status>Sent</Status>
<RecipientIPAddress/>
<CustomFields/>
<AccountStatus>Active</AccountStatus>
<RecipientId>011eac75-f2fa-4f57-94df-5aedaxxxxxxx</RecipientId>
</RecipientStatus>
</RecipientStatuses>
....
<DocuSignEnvelopeInformation><EnvelopeStatus>
Another way around this is to use recipient.customFields. It's an array of strings:
someEnvelopeSigner.customFields = [yourUUID, somethingElse]
In the webhook / event notification, it will come through in DocuSignEnvelopeInformation.EnvelopeStatus[0].RecipientStatuses[0].RecipientStatus[i].CustomFields and look something like (in JSONified form)
{
"CustomFields": [{
"CustomField": [
"6e45cb20-3953-11ea-b02d-dedef9da77b9",
"something else!"
]
}],
}
You can specify a unique recipientId for each recipient while creating an envelope.
Here is a sample CreateEnvelope request
POST /v2/accounts/{accountId}/envelopes
Json Payload.
{
"emailSubject": "Please sign the agreement",
"status": "sent",
"recipients": {
"signers": [
{
"email": "janedoe#acme.com",
"name": "jane doe",
"recipientId": 1,
"routingOrder": 1,
"tabs": {
"signHereTabs": [
{
"documentId": "1", "pageNumber": "1", "xPosition": "80", "yPosition": "80"
}
]
}
},
{
"email": "johnsmith#acme.com",
"name": "john smith",
"recipientId": 2,
"routingOrder": 2,
"tabs": {
"signHereTabs": [
{
"documentId": "1", "pageNumber": "1", "xPosition": "80", "yPosition": "180"
}
]
}
}
]
},
"documents": [
{
"documentId": "1",
"name": "Contract",
"fileExtension": "txt",
"documentBase64": "RG9jIFRXTyBUV08gVFdP"
}
]
}
Use the listEnvelopeRecipients api to retrieve the list of recipients in the envelope.
{
"signers": [
{
"creationReason": "sender",
"isBulkRecipient": "false",
"name": "jane doe",
"email": "janedoe#acme.com",
"recipientId": "1",
"recipientIdGuid": "98d60cc3-5f67-46e4-9fc0-ca6bb519f1c9",
"requireIdLookup": "false",
"userId": "585b8733-b1a9-4329-87e7-4f20bcde00c2",
"routingOrder": "1",
"status": "sent"
},
{
"creationReason": "sender",
"isBulkRecipient": "false",
"name": "john smith",
"email": "johnsmith#acme.com",
"recipientId": "2",
"recipientIdGuid": "726bd54d-89ed-41ba-a751-fdb129894b8b",
"requireIdLookup": "false",
"userId": "45abe022-ae12-4816-8c42-fd66d207807a",
"routingOrder": "2",
"status": "created"
}
],
"agents": [],
"editors": [],
"intermediaries": [],
"carbonCopies": [],
"certifiedDeliveries": [],
"inPersonSigners": [],
"recipientCount": "2",
"currentRoutingOrder": "1"
}

Composite Templates and RoutingOrder - Nothing for second signer

I have been experimenting with the DocuSign eSign C# library, and everything has been working as expected for single template envelopes. I now need to use 2 different templates within a single envelope and have run into some issues.
I have 2 templates that I wish to combine. Everything works exactly as expected when I create a composite template, add the necessary recipients, and send the notification. This sends the combined templates to both recipients in parallel.
As soon as I add a RoutingOrder of 1/2 to the recipients, the first recipient gets prompted to sign as expected, and then once signed it is passed on to the second recipient. This is where the problem lies... the second recipient doesn't have any tabs to fill in and/or any place to sign.
If I switch the RoutingOrder of the recipients, I get the same behavior, so it is definitely related to a person being the second recipient.
Any thoughts on what I can do to fix this are greatly appreciated! The JSON generated by the DocuSign eSign API can be found below:
{
"eventNotification": {
"url": "<my_webhook_callback_url>",
"loggingEnabled": "true",
"requireAcknowledgment": "true",
"envelopeEvents": [
{ "envelopeEventStatusCode": "sent" },
{ "envelopeEventStatusCode": "delivered" },
{ "envelopeEventStatusCode": "completed" },
{ "envelopeEventStatusCode": "declined" },
{ "envelopeEventStatusCode": "voided" }
],
"recipientEvents": [
{ "recipientEventStatusCode": "Sent" },
{ "recipientEventStatusCode": "Delivered" },
{ "recipientEventStatusCode": "Completed" },
{ "recipientEventStatusCode": "Declined" },
{ "recipientEventStatusCode": "AuthenticationFailed" },
{ "recipientEventStatusCode": "AutoResponded" }
],
"useSoapInterface": "false",
"includeCertificateWithSoap": "false",
"signMessageWithX509Cert": "false",
"includeDocuments": "true",
"includeEnvelopeVoidReason": "true",
"includeTimeZone": "true",
"includeSenderAccountAsCustomField": "true",
"includeDocumentFields": "true",
"includeCertificateOfCompletion": "true"
},
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "1b5230a2-15da-4502-8ea4-9a7a28ae02aa"
}
],
"inlineTemplates": [
{
"sequence": "1",
"recipients": {
"signers": [
{
"name": "<customer_signer_name>",
"email": "<customer_signer_name>",
"recipientId": "1",
"routingOrder": "1",
"roleName": "Customer"
},
{
"name": "<internal_signer_name>",
"email": "<internal_signer_email>",
"recipientId": "2",
"routingOrder": "2",
"roleName": "InternalSigner"
}
]
}
}
]
},
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "ae08ac4b-2d92-43cc-9c18-5eaa0a6cc8c7"
}
],
"inlineTemplates": [
{
"sequence": "1",
"recipients": {
"signers": [
{
"name": "<customer_signer_name>",
"email": "<customer_signer_name>",
"recipientId": "1",
"routingOrder": "1",
"roleName": "Customer"
},
{
"name": "<internal_signer_name>",
"email": "<internal_signer_email>",
"recipientId": "2",
"routingOrder": "2",
"roleName": "InternalSigner"
}
]
}
}
]
}
],
"status": "sent",
"emailSubject": "Test Email Subject"
}
Your server templates have both the recipients at routing order 1. Since the inlineTemplates specify the recipient at routing Order 2, the tabs in the server template will not be associated with the recipient at routing order 2.
Recipient matching is based on Recipient Role and Routing Order. If there are matches, the recipient information is merged together. A final pass is done on all CompositeTemplates, after all template overlays have been applied, to collapse recipients with the same email, username and routing order. This prevents having the same recipients at the same routing order.
You will have to either update the routing order of the recipient on your server template or specify tabs in the inline template.

Docusign emails seem to always have the same subject

This is thru the Docusign api. Here is the envelope definition:
{
"eventNotification": {
"requireAcknowledgment": "true",
"envelopeEvents": [
{
"envelopeEventStatusCode": "Delivered"
},
{
"envelopeEventStatusCode": "Completed"
},
{
"envelopeEventStatusCode": "Declined"
},
{
"envelopeEventStatusCode": "Voided"
},
{
"envelopeEventStatusCode": "Sent"
}
],
"useSoapInterface": "false",
"includeCertificateWithSoap": "false",
"signMessageWithX509Cert": "false",
"includeDocuments": "false",
"includeEnvelopeVoidReason": "false",
"includeTimeZone": "true",
"includeSenderAccountAsCustomField": "true",
"includeDocumentFields": "true",
"includeCertificateOfCompletion": "false"
},
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "c110d14a-3690-4ed1-921d-a7bef9524ed6"
}
],
"inlineTemplates": [
{
"sequence": "2",
"recipients": {
"signers": [
{
"name": "Kathy Lori",
"email": "kathylori#xxx.com",
"recipientId": "1",
"accessCode": "12345",
"customFields": [],
"routingOrder": "1",
"note": "",
"roleName": "##Buyer1"
}
],
"certifiedDeliveries": []
},
"customFields": {
"textCustomFields": [
{
"name": "EnvelopeInfo",
"value": "my data"
}
]
}
}
],
"document": {
"documentId": "1",
"name": "c:\three of the test.docx",
"fileExtension": ".docx",
"documentFields": [],
"documentBase64": [bytearray]
}
}
],
"status": "sent",
"emailSubject": "This is the new subject"
}
The subject still shows as "Please DocuSign: sign this". I would have thought setting the subject would have addressed this, but I must be missing something.
You have most likely configured per recipient email subject in your server template. In such a case the emailSubject that is specified at the root level of the postEnvelope request is ignored.
You can confirm that by making a getTemplates call using your server template Id. It will look something like below. Look specifically for recipients.signers.emailNotification property. I have removed some of the properties for simplicity.
{
"envelopeTemplateDefinition": {
"templateId": "xxxxxxxx-xxxx-xxxx-xxxx-e672c4efd436",
},
"documents": [ ],
"emailSubject": "This is the subject on the server template.",
"emailBlurb": "",
"recipients": {
"signers": [
{
"tabs": {},
"roleName": "RoleOne",
"emailNotification": {
"emailSubject": "Please DocuSign: sign this",
"emailBody": "",
"supportedLanguage": "en"
},
}
]
}
}
To override the per recipient email subject specified in the server template, specify the emailNotification property in the inlineTemplate.
{
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "c110d14a-3690-4ed1-921d-a7bef9524ed6"
}
],
"inlineTemplates": [
{
"sequence": "2",
"recipients": {
"signers": [
{
"name": "Kathy Lori",
"email": "kathylori#xxx.com",
"recipientId": "1",
"accessCode": "12345"
"routingOrder": "1",
"roleName": "##Buyer1",
"emailNotification": {
"emailSubject": "This is email subject to Buyer1",
"emailBody": "",
"supportedLanguage": "en"
},
}
],
}
}
],
"document": { }
}
],
"status": "sent",
}

DocuSign REST API v2 returning error ONESIGNALLSIGN_NOT_SATISFIED

I am having an issue with the DocuSign REST api (v2) attempting to create an envelope from a set of server templates (template stored with DS). I connect with DS and they accept my JSON, however, I get an error message back:
ONESIGNALLSIGN_NOT_SATISFIED => Freeform signing is not allowed for your account because it conflicts with other settings, please place signing tabs for each signer.
I cannot figure out what the message is actually referring too. I am in fact NOT including tabs for each signer in the JSON request, just the signer information and roleName. This is very similar to the way we are generating envelopes with the SOAP api successfully (aka, we are not including tab information with the signer information for each document).
I based my JSON on this example:
https://github.com/Ergin008/DocuSign-REST-API-Webinar-April2013/blob/master/example3.json
I have done some extensive searching and reading on this problem, and have tried many different ways for structuring the request JSON per examples I have found, but it seems that this error is blocking any forward progress. The only other place I could find a reference to another person struggling with this error was here:
Docusign signing url - Showing document 1 of a composite template
I tried to use some of that information to work out the kink to no avail. I am not completely sure what they are referencing with "Document Visability" etc... This could be my problem...
Any help that could be provided is greatly appreciated! Thank you!
JSON:
{
"status": "sent",
"emailSubject": "Testing DocuSign REST",
"emailBlurb": "",
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": 1,
"templateId": "9F712D11-2524-433F-98F0-D3ADCC041B42"
}
],
"inlineTemplates": [
{
"sequence": 1,
"recipients": {
"signers": [
{
"recipientId": "28214",
"clientUserId": "28214",
"email": “test1#yahoo.com",
"name": "COLBY",
"roleName": "BORROWER1",
"requireIDLookup": false
},
{
"recipientId": "13020",
"clientUserId": "13020",
"email": “test2#YAHOO.COM",
"name": “CHEESE”,
"roleName": "BORROWER3",
"requireIDLookup": false
}
]
},
"customFields": {
"textCustomFields": [
{
"name": "PDF_CLIENT",
"value": "108"
}
]
}
}
]
},
{
"serverTemplates": [
{
"sequence": 2,
"templateId": "06E28E05-FF6F-4CD0-962A-7EBF3EE78BC5"
}
],
"inlineTemplates": [
{
"sequence": 2,
"recipients": {
"signers": [
{
"recipientId": "28214",
"clientUserId": "28214",
"email": “test1#yahoo.com",
"name": "COLBY",
"roleName": "BORROWER1",
"requireIDLookup": false
},
{
"recipientId": "13020",
"clientUserId": "13020",
"email": “test2#YAHOO.COM",
"name": “CHEESE”,
"roleName": "BORROWER3",
"requireIDLookup": false
}
]
},
"customFields": {
"textCustomFields": [
{
"name": "PDF_CLIENT",
"value": "108"
}
]
}
}
]
},
{
"serverTemplates": [
{
"sequence": 3,
"templateId": "B702BFAD-DE2C-411E-A7EF-EA1E12805341"
}
],
"inlineTemplates": [
{
"sequence": 3,
"recipients": {
"signers": [
{
"recipientId": "28214",
"clientUserId": "28214",
"email": “test1#yahoo.com",
"name": "COLBY",
"roleName": "BORROWER1",
"requireIDLookup": false
},
{
"recipientId": "13020",
"clientUserId": "13020",
"email": “test2#YAHOO.COM",
"name": “CHEESE”,
"roleName": "BORROWER3",
"requireIDLookup": false
}
]
},
"customFields": {
"textCustomFields": [
{
"name": "PDF_CLIENT",
"value": "108"
}
]
}
}
]
}
],
"eventNotification": {
"url": “oureventhandlingprogramurl”,
"loggingEnabled": true,
"envelopeEvents": [
{
"envelopeEventStatusCode": "Sent",
"includeDocuments": false
},
{
"envelopeEventStatusCode": "Delivered",
"includeDocuments": false
},
{
"envelopeEventStatusCode": "Completed",
"includeDocuments": false
},
{
"envelopeEventStatusCode": "Declined",
"includeDocuments": false
},
{
"envelopeEventStatusCode": "Voided",
"includeDocuments": false
}
]
}
}
And the response
{
"errorCode": "ONESIGNALLSIGN_NOT_SATISFIED",
"message": "Freeform signing is not allowed for your account because it conflicts with other settings, please place signing tabs for each signer."
}
After some research, we found the issue in the DocuSign admin panel settings.
"Document Visibility" is one of the settings (its a dropdown) and setting it to "off" got us past the issue.
Hope this helps someone in the future!
In my case, I had two signers for a template but one of the signers didnt have any associated data tabs. After assigning data tabs to both signers, that fixed the above issue for us, and we were able to leave "Document Visibility" turned on.

Resources