Sample code for 30+ languages & platforms
Dart

DocuSign Add Recipients to a Draft Envelope

See more DocuSign Examples

Demonstrates how to add one or more recipients to a DocuSign draft envelope.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example assumes the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final http = CkHttp();

  // Load a previously obtained OAuth2 access token.
  final jsonToken = CkJsonObject();
  try {
    jsonToken.loadFile('qa_data/tokens/docusign.json');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Adds the "Authorization: Bearer eyJ0eXAi.....UE8Kl_V8KroQ" header.
  http.authToken = jsonToken.stringOf('access_token');

  // Send the following request.
  // Make sure to use your own account ID (obtained from Get Docusign User Account Information)

  // POST https://demo.docusign.net/restapi/v2.1/accounts/<account ID>/envelopes/<envelope ID>/recipients HTTP/1.1
  // Accept: application/json
  // Cache-Control: no-cache
  // Authorization: Bearer eyJ0eX...
  // Content-Length: ...
  // Content-Type: application/json
  // 
  // {
  //   "carbonCopies": [
  //     {
  //       "email": "support@chilkatsoft.com",
  //       "name": "Chilkat Support",
  //       "recipientId": "101",
  //       "tabs": {}
  //     }
  //   ],
  //   "signers": [
  //     {
  //       "email": "admin@chilkatsoft.com",
  //       "name": "Chilkat Admin",
  //       "recipientId": "1",
  // 	 "tabs": {
  // 	    "signHereTabs": [{
  // 	        "anchorString": "Please Sign Here",
  // 	        "anchorXOffset": "1",
  // 	        "anchorYOffset": "0",
  // 	        "anchorIgnoreIfNotPresent": "false",
  // 	        "anchorUnits": "inches"
  // 	    }]
  // 	}
  //     },
  //     {
  //       "email": "matt@chilkat.io",
  //       "name": "Matt",
  //       "recipientId": "2",
  // 	 "tabs": {
  // 	    "signHereTabs": [{
  // 	        "anchorString": "Please Also Sign Here",
  // 	        "anchorXOffset": "1",
  // 	        "anchorYOffset": "0",
  // 	        "anchorIgnoreIfNotPresent": "false",
  // 	        "anchorUnits": "inches"
  // 	    }]
  // 	}
  //     }
  //   ]
  // }

  final json = CkJsonObject();
  var i = 0;
  json.i = i;
  json.updateString('carbonCopies[i].email', 'support@chilkatsoft.com');
  json.updateString('carbonCopies[i].name', 'Chilkat Support');
  json.updateString('carbonCopies[i].recipientId', '101');
  json.updateNewObject('carbonCopies[i].tabs');
  i = 0;
  json.i = i;
  json.updateString('signers[i].email', 'admin@chilkatsoft.com');
  json.updateString('signers[i].name', 'Chilkat Admin');
  json.updateString('signers[i].recipientId', '1');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorString', 'Please Sign Here');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorXOffset', '1');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorYOffset', '0');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorIgnoreIfNotPresent', 'false');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorUnits', 'inches');
  i++;
  json.i = i;
  json.updateString('signers[i].email', 'matt@chilkat.io');
  json.updateString('signers[i].name', 'Matt');
  json.updateString('signers[i].recipientId', '2');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorString', 'Please Also Sign Here');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorXOffset', '1');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorYOffset', '0');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorIgnoreIfNotPresent', 'false');
  json.updateString('signers[i].tabs.signHereTabs[0].anchorUnits', 'inches');

  final sbJson = CkStringBuilder();
  json.emitCompact = false;
  json.emitSb(sbJson);

  http.setRequestHeader('Cache-Control', 'no-cache');
  http.setRequestHeader('Accept', 'application/json');

  // Use your own account ID here.
  http.setUrlVar('accountId', '7f3f65ed-5e87-418d-94c1-92499ddc8252');
  // Use the envelope ID returned by DocuSign when creating the draft envelope).
  http.setUrlVar('envelopeId', 'cee4191c-f94e-4089-9d7c-8033685cbc1a');

  final url = 'https://demo.docusign.net/restapi/v2.1/accounts/{\$accountId}/envelopes/{\$envelopeId}/recipients';
  final resp = CkHttpResponse();
  try {
    http.httpSb('POST', url, sbJson, 'utf-8', 'application/json', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final jResp = CkJsonObject();
  jResp.load(resp.bodyStr);
  jResp.emitCompact = false;

  print('Response Body:');
  print(jResp.emit());

  // If you get a 401 response status code, it's likely you need to refresh the DocuSign OAuth2 token).
  final respStatusCode = resp.statusCode;
  print('Response Status Code = $respStatusCode');
  if (respStatusCode >= 400) {
    print('Response Header:');
    print(resp.header);
    print('Failed.');
    return;
  }

  // Sample JSON response:
  // (Sample code for parsing the JSON response is shown below)

  // {
  //     "signers": [
  //         {
  //             "creationReason": "sender",
  //             "requireUploadSignature": "false",
  //             "email": "admin@chilkatsoft.com",
  //             "recipientId": "1",
  //             "requireIdLookup": "false",
  //             "routingOrder": "1",
  //             "status": "created",
  //             "completedCount": "0",
  //             "deliveryMethod": "email",
  //             "recipientType": "signer"
  //         },
  //         {
  //             "creationReason": "sender",
  //             "requireUploadSignature": "false",
  //             "email": "matt@chilkat.io",
  //             "recipientId": "2",
  //             "requireIdLookup": "false",
  //             "routingOrder": "1",
  //             "status": "created",
  //             "completedCount": "0",
  //             "deliveryMethod": "email",
  //             "recipientType": "signer"
  //         }
  //     ],
  //     "agents": [],
  //     "editors": [],
  //     "intermediaries": [],
  //     "carbonCopies": [
  //         {
  //             "email": "support@chilkatsoft.com",
  //             "recipientId": "101",
  //             "requireIdLookup": "false",
  //             "routingOrder": "1",
  //             "status": "created",
  //             "completedCount": "0",
  //             "deliveryMethod": "email",
  //             "recipientType": "carboncopy"
  //         }
  //     ],
  //     "certifiedDeliveries": [],
  //     "inPersonSigners": [],
  //     "seals": [],
  //     "witnesses": [],
  //     "recipientCount": "3"
  // }

  // Sample code for parsing the JSON response...
  // Use the following online tool to generate parsing code from sample JSON:
  // Generate Parsing Code from JSON

  var creationReason = '';
  var requireUploadSignature = '';
  var email = '';
  var recipientId = '';
  var requireIdLookup = '';
  var routingOrder = '';
  var status = '';
  var completedCount = '';
  var deliveryMethod = '';
  var recipientType = '';

  final recipientCount = json.stringOf('recipientCount');
  i = 0;
  var countI = json.sizeOfArray('signers');
  while (i < countI) {
    json.i = i;
    creationReason = json.stringOf('signers[i].creationReason');
    requireUploadSignature = json.stringOf('signers[i].requireUploadSignature');
    email = json.stringOf('signers[i].email');
    recipientId = json.stringOf('signers[i].recipientId');
    requireIdLookup = json.stringOf('signers[i].requireIdLookup');
    routingOrder = json.stringOf('signers[i].routingOrder');
    status = json.stringOf('signers[i].status');
    completedCount = json.stringOf('signers[i].completedCount');
    deliveryMethod = json.stringOf('signers[i].deliveryMethod');
    recipientType = json.stringOf('signers[i].recipientType');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('agents');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('editors');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('intermediaries');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('carbonCopies');
  while (i < countI) {
    json.i = i;
    email = json.stringOf('carbonCopies[i].email');
    recipientId = json.stringOf('carbonCopies[i].recipientId');
    requireIdLookup = json.stringOf('carbonCopies[i].requireIdLookup');
    routingOrder = json.stringOf('carbonCopies[i].routingOrder');
    status = json.stringOf('carbonCopies[i].status');
    completedCount = json.stringOf('carbonCopies[i].completedCount');
    deliveryMethod = json.stringOf('carbonCopies[i].deliveryMethod');
    recipientType = json.stringOf('carbonCopies[i].recipientType');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('certifiedDeliveries');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('inPersonSigners');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('seals');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('witnesses');
  while (i < countI) {
    json.i = i;
    //    ...
    i++;
  }

  // If the recipient already exists within the envelope, we would get
  // a success (201) response status code, but errors within the JSON response, such as this:

  // {
  //   "signers": [
  //     {
  //       "creationReason": "sender",
  //       "requireUploadSignature": "false",
  //       "email": "admin@chilkatsoft.com",
  //       "recipientId": "1",
  //       "requireIdLookup": "false",
  //       "routingOrder": "1",
  //       "status": "error",
  //       "completedCount": "0",
  //       "deliveryMethod": "email",
  //       "errorDetails": {
  //         "errorCode": "RECIPIENT_ALREADY_EXISTS_IN_ENVELOPE",
  //         "message": "This recipientId already exists."
  //       },
  //       "recipientType": "signer"
  //     },
  //     {
  //       "creationReason": "sender",
  //       "requireUploadSignature": "false",
  //       "email": "matt@chilkat.io",
  //       "recipientId": "2",
  //       "requireIdLookup": "false",
  //       "routingOrder": "1",
  //       "status": "error",
  //       "completedCount": "0",
  //       "deliveryMethod": "email",
  //       "errorDetails": {
  //         "errorCode": "RECIPIENT_ALREADY_EXISTS_IN_ENVELOPE",
  //         "message": "This recipientId already exists."
  //       },
  //       "recipientType": "signer"
  //     }
  //   ],
  //   "agents": [
  //   ],
  //   "editors": [
  //   ],
  //   "intermediaries": [
  //   ],
  //   "carbonCopies": [
  //     {
  //       "email": "support@chilkatsoft.com",
  //       "recipientId": "101",
  //       "requireIdLookup": "false",
  //       "routingOrder": "1",
  //       "status": "error",
  //       "completedCount": "0",
  //       "deliveryMethod": "email",
  //       "errorDetails": {
  //         "errorCode": "RECIPIENT_ALREADY_EXISTS_IN_ENVELOPE",
  //         "message": "This recipientId already exists."
  //       },
  //       "recipientType": "carboncopy"
  //     }
  //   ],
  //   "certifiedDeliveries": [
  //   ],
  //   "inPersonSigners": [
  //   ],
  //   "seals": [
  //   ],
  //   "witnesses": [
  //   ],
  //   "recipientCount": "3"
  // }
  // 
}