Sample code for 30+ languages & platforms
Dart

Yousign - Setup email notifications

See more Yousign Examples

Demonstrates how to setup email notifications based on events. An event is triggered when a user (or our API) make an action or when a status has changed.

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();

  // Implements the following CURL command:

  // curl --location --request POST 'https://staging-api.yousign.com/procedures' \
  // --header 'Authorization: Bearer YOUR_API_KEY' \
  // --header 'Content-Type: application/json' \
  // --data-raw '{
  //     "name": "My first procedure with emails",
  //     "description": "Powerful! Here is the description of my first procedure with emails",
  //     "members": [
  //         {
  //             "firstname": "John",
  //             "lastname": "Doe",
  //             "email": "john.doe@yousign.fr",
  //             "phone": "+33612345678",
  //             "fileObjects": [
  //                 {
  //                     "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //                     "page": 2,
  //                     "position": "230,499,464,589",
  //                     "mention": "Read and approved",
  //                     "mention2": "Signed by John Doe"
  //                 }
  //             ]
  //         }
  //     ],
  //     "config": {
  //         "email": {
  //             "member.started": [
  //                 {
  //                     "subject": "Hey! You are invited to sign!",
  //                     "message": "Hello <tag data-tag-type=\"string\" data-tag-name=\"recipient.firstname\"></tag> <tag data-tag-type=\"string\" data-tag-name=\"recipient.lastname\"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type=\"button\" data-tag-name=\"url\" data-tag-title=\"Access to documents\">Access to documents</tag>",
  //                     "to": ["@member"]
  //                 }
  //             ],
  //             "procedure.started": [
  //                 {
  //                     "subject": "John, created a procedure your API have.",
  //                     "message": "The content of this email is totally awesome.",
  //                     "to": ["@creator", "@members", "billing@yousign.fr"]
  //                 }
  //             ]
  //         }
  //     }
  // }'

  // Use the following online tool to generate HTTP code from a CURL command
  // Convert a cURL Command to HTTP Source Code

  // Use this online tool to generate code from sample JSON:
  // Generate Code to Create JSON

  // The following JSON is sent in the request body.

  // {
  //   "name": "My first procedure with emails",
  //   "description": "Powerful! Here is the description of my first procedure with emails",
  //   "members": [
  //     {
  //       "firstname": "John",
  //       "lastname": "Doe",
  //       "email": "john.doe@yousign.fr",
  //       "phone": "+33612345678",
  //       "fileObjects": [
  //         {
  //           "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //           "page": 2,
  //           "position": "230,499,464,589",
  //           "mention": "Read and approved",
  //           "mention2": "Signed by John Doe"
  //         }
  //       ]
  //     }
  //   ],
  //   "config": {
  //     "email": {
  //       "member.started": [
  //         {
  //           "subject": "Hey! You are invited to sign!",
  //           "message": "Hello <tag data-tag-type=",
  //           " data-tag-name=": <tag,
  //           "button": [
  //             "@member"
  //           ]
  //         }
  //       ],
  //       "procedure.started": [
  //         {
  //           "subject": "John, created a procedure your API have.",
  //           "message": "The content of this email is totally awesome.",
  //           "to": [
  //             "@creator",
  //             "@members",
  //             "billing@yousign.fr"
  //           ]
  //         }
  //       ]
  //     }
  //   }
  // }

  final json = CkJsonObject();
  json.updateString('name', 'My first procedure with emails');
  json.updateString('description', 'Powerful! Here is the description of my first procedure with emails');
  json.updateString('members[0].firstname', 'John');
  json.updateString('members[0].lastname', 'Doe');
  json.updateString('members[0].email', 'john.doe@yousign.fr');
  json.updateString('members[0].phone', '+33612345678');
  // Use the actual file ID here...
  json.updateString('members[0].fileObjects[0].file', '/files/23686fbe-3ae1-4de9-9e01-58bbf29b2b18');
  json.updateInt('members[0].fileObjects[0].page', 2);
  json.updateString('members[0].fileObjects[0].position', '230,499,464,589');
  json.updateString('members[0].fileObjects[0].mention', 'Read and approved');
  json.updateString('members[0].fileObjects[0].mention2', 'Signed by John Doe');
  json.updateString('config.email."member.started"[0].subject', 'Hey! You are invited to sign!');
  json.updateString('config.email."member.started"[0].message', 'Hello <tag data-tag-type="string" data-tag-name="recipient.firstname"></tag> <tag data-tag-type="string" data-tag-name="recipient.lastname"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type="button" data-tag-name="url" data-tag-title="Access to documents">Access to documents</tag>');
  json.updateString('config.email."member.started"[0].to[0]', '@member');
  json.updateString('config.email."procedure.started"[0].subject', 'John, created a procedure your API have.');
  json.updateString('config.email."procedure.started"[0].message', 'The content of this email is totally awesome.');
  json.updateString('config.email."procedure.started"[0].to[0]', '@creator');
  json.updateString('config.email."procedure.started"[0].to[1]', '@members');
  json.updateString('config.email."procedure.started"[0].to[2]', 'billing@yousign.fr');

  // Adds the "Authorization: Bearer YOUR_API_KEY" header.
  http.authToken = 'YOUR_API_KEY';

  final resp = CkHttpResponse();
  try {
    http.httpJson('POST', 'https://staging-api.yousign.com/procedures', json, 'application/json', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final sbResponseBody = CkStringBuilder();
  resp.getBodySb(sbResponseBody);
  final jResp = CkJsonObject();
  jResp.loadSb(sbResponseBody);
  jResp.emitCompact = false;

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

  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)

  // {
  //   "id": "/procedures/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //   "name": "My first procedure with emails",
  //   "description": "Powerful! Here is the description of my first procedure with emails",
  //   "createdAt": "2018-12-05T06:53:34+01:00",
  //   "updatedAt": "2018-12-05T06:53:34+01:00",
  //   "finishedAt": null,
  //   "expiresAt": null,
  //   "status": "active",
  //   "creator": null,
  //   "creatorFirstName": null,
  //   "creatorLastName": null,
  //   "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //   "template": false,
  //   "ordered": false,
  //   "parent": null,
  //   "metadata": [
  //   ],
  //   "config": {
  //     "email": {
  //       "procedure.started": [
  //         {
  //           "subject": "John, created a procedure your API have.",
  //           "message": "The content of this email is totally awesome.",
  //           "to": [
  //             "@creator",
  //             "@members",
  //             "billing@yousign.fr"
  //           ]
  //         }
  //       ],
  //       "member.started": [
  //         {
  //           "subject": "Hey! You are invited to sign!",
  //           "message": "Hello <tag data-tag-type=\"string\" data-tag-name=\"recipient.firstname\"></tag> <tag data-tag-type=\"string\" data-tag-name=\"recipient.lastname\"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type=\"button\" data-tag-name=\"url\" data-tag-title=\"Access to documents\">Access to documents</tag>",
  //           "to": [
  //             "@member"
  //           ]
  //         }
  //       ]
  //     }
  //   },
  //   "members": [
  //     {
  //       "id": "/members/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //       "user": null,
  //       "type": "signer",
  //       "firstname": "John",
  //       "lastname": "Doe",
  //       "email": "john.doe@yousign.fr",
  //       "phone": "+33612345678",
  //       "position": 1,
  //       "createdAt": "2018-12-05T06:53:34+01:00",
  //       "updatedAt": "2018-12-05T06:53:34+01:00",
  //       "finishedAt": null,
  //       "status": "pending",
  //       "fileObjects": [
  //         {
  //           "id": "/file_objects/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //           "file": {
  //             "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //             "name": "The best name for my file.pdf",
  //             "type": "signable",
  //             "contentType": "application/pdf",
  //             "description": null,
  //             "createdAt": "2018-12-05T06:52:54+01:00",
  //             "updatedAt": "2018-12-05T06:53:34+01:00",
  //             "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
  //             "metadata": [
  //             ],
  //             "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //             "creator": null,
  //             "protected": false,
  //             "position": 0,
  //             "parent": null
  //           },
  //           "page": 2,
  //           "position": "230,499,464,589",
  //           "fieldName": null,
  //           "mention": "Read and approved",
  //           "mention2": "Signed by John Doe",
  //           "createdAt": "2018-12-05T06:53:34+01:00",
  //           "updatedAt": "2018-12-05T06:53:34+01:00",
  //           "parent": null,
  //           "reason": "Signed by Yousign"
  //         }
  //       ],
  //       "comment": null,
  //       "notificationsEmail": [
  //       ],
  //       "operationLevel": "custom",
  //       "operationCustomModes": [
  //         "sms"
  //       ],
  //       "operationModeSmsConfig": null,
  //       "parent": null
  //     }
  //   ],
  //   "subscribers": [
  //   ],
  //   "files": [
  //     {
  //       "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //       "name": "The best name for my file.pdf",
  //       "type": "signable",
  //       "contentType": "application/pdf",
  //       "description": null,
  //       "createdAt": "2018-12-05T06:52:54+01:00",
  //       "updatedAt": "2018-12-05T06:53:34+01:00",
  //       "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
  //       "metadata": [
  //       ],
  //       "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  //       "creator": null,
  //       "protected": false,
  //       "position": 0,
  //       "parent": null
  //     }
  //   ],
  //   "relatedFilesEnable": false,
  //   "archive": false,
  //   "archiveMetadata": [
  //   ],
  //   "fields": [
  //   ],
  //   "permissions": [
  //   ]
  // }

  // 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 subject = '';
  var message = '';
  var j = 0;
  var countJ = 0;
  var strVal = '';
  var user = '';
  var vType = '';
  var firstname = '';
  var lastname = '';
  var email = '';
  var phone = '';
  var position = 0;
  var comment = '';
  var operationLevel = '';
  var operationModeSmsConfig = '';
  var fileId = '';
  var fileName = '';
  var fileType = '';
  var fileContentType = '';
  var fileDescription = '';
  var fileCreatedAt = '';
  var fileUpdatedAt = '';
  var fileSha256 = '';
  var fileWorkspace = '';
  var fileCreator = '';
  var filePosition = 0;
  var fileParent = '';
  var page = 0;
  var positionStr = '';
  var fieldName = '';
  var mention = '';
  var mention2 = '';
  var reason = '';
  var k = 0;
  var countK = 0;
  var contentType = '';
  var sha256 = '';

  var id = jResp.stringOf('id');
  var name = jResp.stringOf('name');
  var description = jResp.stringOf('description');
  var createdAt = jResp.stringOf('createdAt');
  var updatedAt = jResp.stringOf('updatedAt');
  var finishedAt = jResp.stringOf('finishedAt');
  final expiresAt = jResp.stringOf('expiresAt');
  var status = jResp.stringOf('status');
  var creator = jResp.stringOf('creator');
  final creatorFirstName = jResp.stringOf('creatorFirstName');
  final creatorLastName = jResp.stringOf('creatorLastName');
  var workspace = jResp.stringOf('workspace');
  var parent = jResp.stringOf('parent');
  var i = 0;
  var countI = jResp.sizeOfArray('metadata');
  while (i < countI) {
    jResp.i = i;
    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('config.email."procedure.started"');
  while (i < countI) {
    jResp.i = i;
    subject = jResp.stringOf('config.email."procedure.started"[i].subject');
    message = jResp.stringOf('config.email."procedure.started"[i].message');
    j = 0;
    countJ = jResp.sizeOfArray('config.email."procedure.started"[i].to');
    while (j < countJ) {
      jResp.j = j;
      strVal = jResp.stringOf('config.email."procedure.started"[i].to[j]');
      j++;
    }

    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('config.email."member.started"');
  while (i < countI) {
    jResp.i = i;
    subject = jResp.stringOf('config.email."member.started"[i].subject');
    message = jResp.stringOf('config.email."member.started"[i].message');
    j = 0;
    countJ = jResp.sizeOfArray('config.email."member.started"[i].to');
    while (j < countJ) {
      jResp.j = j;
      strVal = jResp.stringOf('config.email."member.started"[i].to[j]');
      j++;
    }

    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('members');
  while (i < countI) {
    jResp.i = i;
    id = jResp.stringOf('members[i].id');
    user = jResp.stringOf('members[i].user');
    vType = jResp.stringOf('members[i].type');
    firstname = jResp.stringOf('members[i].firstname');
    lastname = jResp.stringOf('members[i].lastname');
    email = jResp.stringOf('members[i].email');
    phone = jResp.stringOf('members[i].phone');
    position = jResp.intOf('members[i].position');
    createdAt = jResp.stringOf('members[i].createdAt');
    updatedAt = jResp.stringOf('members[i].updatedAt');
    finishedAt = jResp.stringOf('members[i].finishedAt');
    status = jResp.stringOf('members[i].status');
    comment = jResp.stringOf('members[i].comment');
    operationLevel = jResp.stringOf('members[i].operationLevel');
    operationModeSmsConfig = jResp.stringOf('members[i].operationModeSmsConfig');
    parent = jResp.stringOf('members[i].parent');
    j = 0;
    countJ = jResp.sizeOfArray('members[i].fileObjects');
    while (j < countJ) {
      jResp.j = j;
      id = jResp.stringOf('members[i].fileObjects[j].id');
      fileId = jResp.stringOf('members[i].fileObjects[j].file.id');
      fileName = jResp.stringOf('members[i].fileObjects[j].file.name');
      fileType = jResp.stringOf('members[i].fileObjects[j].file.type');
      fileContentType = jResp.stringOf('members[i].fileObjects[j].file.contentType');
      fileDescription = jResp.stringOf('members[i].fileObjects[j].file.description');
      fileCreatedAt = jResp.stringOf('members[i].fileObjects[j].file.createdAt');
      fileUpdatedAt = jResp.stringOf('members[i].fileObjects[j].file.updatedAt');
      fileSha256 = jResp.stringOf('members[i].fileObjects[j].file.sha256');
      fileWorkspace = jResp.stringOf('members[i].fileObjects[j].file.workspace');
      fileCreator = jResp.stringOf('members[i].fileObjects[j].file.creator');
      jResp.boolOf('members[i].fileObjects[j].file.protected');
      filePosition = jResp.intOf('members[i].fileObjects[j].file.position');
      fileParent = jResp.stringOf('members[i].fileObjects[j].file.parent');
      page = jResp.intOf('members[i].fileObjects[j].page');
      positionStr = jResp.stringOf('members[i].fileObjects[j].position');
      fieldName = jResp.stringOf('members[i].fileObjects[j].fieldName');
      mention = jResp.stringOf('members[i].fileObjects[j].mention');
      mention2 = jResp.stringOf('members[i].fileObjects[j].mention2');
      createdAt = jResp.stringOf('members[i].fileObjects[j].createdAt');
      updatedAt = jResp.stringOf('members[i].fileObjects[j].updatedAt');
      parent = jResp.stringOf('members[i].fileObjects[j].parent');
      reason = jResp.stringOf('members[i].fileObjects[j].reason');
      k = 0;
      countK = jResp.sizeOfArray('members[i].fileObjects[j].file.metadata');
      while (k < countK) {
        jResp.k = k;
        k++;
      }

      j++;
    }

    j = 0;
    countJ = jResp.sizeOfArray('members[i].notificationsEmail');
    while (j < countJ) {
      jResp.j = j;
      j++;
    }

    j = 0;
    countJ = jResp.sizeOfArray('members[i].operationCustomModes');
    while (j < countJ) {
      jResp.j = j;
      strVal = jResp.stringOf('members[i].operationCustomModes[j]');
      j++;
    }

    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('subscribers');
  while (i < countI) {
    jResp.i = i;
    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('files');
  while (i < countI) {
    jResp.i = i;
    id = jResp.stringOf('files[i].id');
    name = jResp.stringOf('files[i].name');
    vType = jResp.stringOf('files[i].type');
    contentType = jResp.stringOf('files[i].contentType');
    description = jResp.stringOf('files[i].description');
    createdAt = jResp.stringOf('files[i].createdAt');
    updatedAt = jResp.stringOf('files[i].updatedAt');
    sha256 = jResp.stringOf('files[i].sha256');
    workspace = jResp.stringOf('files[i].workspace');
    creator = jResp.stringOf('files[i].creator');
    jResp.boolOf('files[i].protected');
    position = jResp.intOf('files[i].position');
    parent = jResp.stringOf('files[i].parent');
    j = 0;
    countJ = jResp.sizeOfArray('files[i].metadata');
    while (j < countJ) {
      jResp.j = j;
      j++;
    }

    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('archiveMetadata');
  while (i < countI) {
    jResp.i = i;
    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('fields');
  while (i < countI) {
    jResp.i = i;
    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('permissions');
  while (i < countI) {
    jResp.i = i;
    i++;
  }
}