Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.0.0+

Send DocuSign XML Request

See more HTTP Misc Examples

Demonstrates how to send a DocuSign XML request.

Chilkat Dart Downloads

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

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

  final req = CkHttpRequest();

  req.httpVerb = 'POST';

  // Replace "12999999" with your own account number. (12999999 is a ficticious account number)
  req.path = '/restapi/v2/accounts/12999999/envelopes';

  req.addHeader('Accept', 'application/xml');

  // Don't worry about the boundary string.  Chilkat will automatically generate one and include it.
  req.contentType = 'multipart/form-data';

  final xmlCred = CkXml();
  xmlCred.tag = 'DocuSignCredentials';
  xmlCred.updateChildContent('Username', 'YOUR_DOCUSIGN_USERNAME');
  xmlCred.updateChildContent('Password', 'YOUR_DOCUSIGN_PASSWORD');
  xmlCred.updateChildContent('IntegratorKey', 'ABCD-12345678-1234-AAAA-BBBB-abcdabcdabcd');
  xmlCred.emitXmlDecl = false;
  xmlCred.emitCompact = true;
  req.addHeader('X-DocuSign-Authentication', xmlCred.getXml());

  // Don't worry about Host or Content-Length headers, Chilkat automatically adds them...

  // Build the XML for the 1st body part..
  final xml = CkXml();
  xml.tag = 'envelopeDefinition';
  xml.addAttribute('xmlns', 'http://www.docusign.com/restapi');
  xml.updateChildContent('emailSubject', 'Signature Request: Test Test:001019:033611');
  xml.updateChildContent('status', 'sent');
  xml.updateChildContent('documents|document|documentId', '1');
  xml.updateChildContent('documents|document|name', '001019_TestTest_RetailDeals_163357');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|hostEmail', 'admin@chilkatsoft.com');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|hostName', 'Chilkat Admin');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|signerName', 'Test  Test');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|recipientId', '1');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|routingOrder', '1');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|signerEmail', 'test@tyest.com');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorString', '\\SDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorString', '\\OSDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|optional', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorString', '\\OPSSDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|optional', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|scaleValue', '0.7');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorString', '\\PSSDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|scaleValue', '0.7');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorString', '\\IDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorString', '\\OIDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|optional', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorString', '\\OPSIDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|optional', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|scaleValue', '0.5');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorString', '\\PSIDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|scaleValue', '0.5');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|hostEmail', 'admin@chilkatsoft.com');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|hostName', 'Chilkat Admin');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|signerName', 'Dealer Representative');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|recipientId', '2');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|routingOrder', '2');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorString', '\\DSDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorString', '\\DOSDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|optional', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorString', '\\DIDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|optional', 'False');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent', 'True');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorString', '\\DOIDP');
  xml.updateChildContent('recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|optional', 'True');
  xml.emitXmlDecl = false;

  print(xml.getXml());

  xml.emitCompact = true;

  req.addStringForUpload2('', '', xml.getXml(), 'utf-8', 'application/xml');
  req.addFileForUpload2('', 'qa_data/pdf/signatureForm.pdf', 'application/pdf');
  req.addSubHeader(1, 'Content-Disposition', 'file; filename="signatureForm.pdf";documentid=1');

  final http = CkHttp();

  http.sessionLogFilename = 'qa_output/log.txt';

  final resp = CkHttpResponse();
  try {
    http.httpSReq('na2.docusign.net', 443, true, req, resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  if (resp.statusCode != 201) {
    print(resp.bodyStr);
    print('Response status code: ${resp.statusCode}');
    print('Failed.');
    return;
  }

  // Examine the response..
  xml.loadXml(resp.bodyStr);
  final envelopeId = xml.getChildContent('envelopeId');
  print('envelopeId = $envelopeId');
  final status = xml.getChildContent('status');
  print('status = $status');
  final statusDateTime = xml.getChildContent('statusDateTime');
  print('statusDateTime = $statusDateTime');
  final uri = xml.getChildContent('uri');
  print('uri = $uri');
}