Each individual compositeTemplate object in the request must specify both:
- document(s) -- either defined via serverTemplate(s) or via standalone document that's specified as part of the request
AND
- recipients
For example, the following multipart request will create an Envelope that contains the documents from the server Template, followed by the additional document that's specified in the request:
POST https://demo.docusign.net/restapi/v2/accounts/201105/envelopes HTTP/1.1
X-DocuSign-Authentication: {"Username":"username@test.com","Password":"mypassword","IntegratorKey":"ABCD-dbd5f342-d9f6-47c3-b293-xxxxxxxxxxxx"}
Content-Type: multipart/form-data; boundary=MY_BOUNDARY
Accept: application/json
Host: demo.docusign.net
Content-Length: 272956
Expect: 100-continue
--MY_BOUNDARY
Content-Type: application/json
Content-Disposition: form-data
{
"status" : "sent",
"emailSubject" : "Test Envelope Subject",
"emailBlurb" : "Test Envelope Blurb",
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence" : 1,
"templateId": "TEMPLATE_ID"
}],
"inlineTemplates": [
{
"sequence" : 2,
"recipients": {
"signers" : [{
"email": "abbysemail@outlook.com",
"name": "Abby Abbott",
"recipientId": "1",
"roleName": "Initiator",
"routingOrder":"1"
}
]
}
}]
},
{
"inlineTemplates": [
{
"sequence" : 1,
"recipients": {
"signers" : [{
"email": "abbysemail@outlook.com",
"name": "Abby Abbott",
"recipientId": "1"
}]
}
}],
"document": {
"documentId": 1,
"name": "Customer Agreement",
"fileExtension": "pdf"
}
}
]}
--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="CustomerAgreement.pdf"; documentid="1"
PDF_BYTE_STREAM_HERE
--MY_BOUNDARY--
If I wanted the additional document to appear first in the envelope, I would simply swap the order of compositeTemplate objects in the request, so that the document is specified before the server template:
POST https://demo.docusign.net/restapi/v2/accounts/201105/envelopes HTTP/1.1
X-DocuSign-Authentication: {"Username":"username@test.com","Password":"mypassword","IntegratorKey":"ABCD-dbd5f342-d9f6-47c3-b293-xxxxxxxxxxxx"}
Content-Type: multipart/form-data; boundary=MY_BOUNDARY
Accept: application/json
Host: demo.docusign.net
Content-Length: 272956
Expect: 100-continue
--MY_BOUNDARY
Content-Type: application/json
Content-Disposition: form-data
{
"status" : "sent",
"emailSubject" : "Test Envelope Subject",
"emailBlurb" : "Test Envelope Blurb",
"compositeTemplates": [
{
"inlineTemplates": [
{
"sequence" : 1,
"recipients": {
"signers" : [{
"email": "abbysemail@outlook.com",
"name": "Abby Abbott",
"recipientId": "1"
}]
}
}],
"document": {
"documentId": 1,
"name": "Customer Agreement",
"fileExtension": "pdf"
}
},
{
"serverTemplates": [
{
"sequence" : 1,
"templateId": "TEMPLATE_ID"
}],
"inlineTemplates": [
{
"sequence" : 2,
"recipients": {
"signers" : [{
"email": "abbysemail@outlook.com",
"name": "Abby Abbott",
"recipientId": "1",
"roleName": "Initiator",
"routingOrder":"1"
}
]
}
}]
}
]}
--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="CustomerAgreement.pdf"; documentid="1"
PDF_BYTE_STREAM_HERE
--MY_BOUNDARY--
Based on the code you've posted in your question, I'd suspect that the error is being caused by the fact that the second compositeTemplate object in the request does not specify recipients.
Finally, a few additional comments:
- Make sure that the recipient info (email, name, recipientId) you specify matches exactly across all composite template objects.
- If you use a multipart request to create the envelope (as shown in the above examples), pay close attention to line breaks -- they must occur exactly as shown in the examples.
- Although you can use a multipart request to create an envelope that contains document(s) you specify as part of the request (as the examples above show), an easier/simpler way to do so would be to use a "normal" (i.e., not multi-part) request whereby you simply specify base-64-encoded document bytes within the document object itself, by using the documentBase64 property -- which eliminates the need for the multipart request. See https://www.docusign.com/p/RESTAPIGuide/RESTAPIGuide.htm#REST API References/Document Parameters.htm?Highlight=documentbase64.