[![Dependency Status] david-image]david-url
NPM module that wraps the DocuSign API
Documentation about the DocuSign API
Documentation about this package
You can sign up for a free developer sandbox.
Node 2.2.1 or later.
Install the client locally: npm install docusign-esign --save --save-exact
(note you may have to use sudo
based on your permissions)
Alternatively you can just copy the source code directly into your project.
This client has the following external dependencies:
To initialize the client, make the Login API Call and send a template for signature:
var docusign = require('docusign-esign');
var async = require('async');
var integratorKey = '***'; // Integrator Key associated with your DocuSign Integration
var email = 'YOUR_EMAIL'; // Email for your DocuSign Account
var password = 'YOUR_PASSWORD'; // Password for your DocuSign Account
var docusignEnv = 'demo'; // DocuSign Environment generally demo for testing purposes
var fullName = 'Joan Jett'; // Recipient's Full Name
var recipientEmail = '[email protected]'; // Recipient's Email
var templateId = '***'; // ID of the Template you want to create the Envelope with
var templateRoleName = '***'; // Role Name of the Template
var baseUrl = 'https://' + docusignEnv + '.docusign.net/restapi';
// initialize the api client
var apiClient = new docusign.ApiClient();
apiClient.setBasePath(baseUrl);
// create JSON formatted auth header
var creds = JSON.stringify({
Username: email,
Password: password,
IntegratorKey: integratorKey
});
apiClient.addDefaultHeader('X-DocuSign-Authentication', creds);
// assign api client to the Configuration object
docusign.Configuration.default.setDefaultApiClient(apiClient);
async.waterfall([
function login (next) {
// login call available off the AuthenticationApi
var authApi = new docusign.AuthenticationApi();
// login has some optional parameters we can set
var loginOps = {};
loginOps.apiPassword = 'true';
loginOps.includeAccountIdGuid = 'true';
authApi.login(loginOps, function (err, loginInfo, response) {
if (err) {
return next(err);
}
if (loginInfo) {
// list of user account(s)
// note that a given user may be a member of multiple accounts
var loginAccounts = loginInfo.loginAccounts;
console.log('LoginInformation: ' + JSON.stringify(loginAccounts));
var loginAccount = loginAccounts[0];
var accountId = loginAccount.accountId;
var baseUrl = loginAccount.baseUrl;
var accountDomain = baseUrl.split("/v2");
// below code required for production, no effect in demo (same domain)
apiClient.setBasePath(accountDomain[0]);
docusign.Configuration.default.setDefaultApiClient(apiClient);
next(null, loginAccount);
}
});
},
function sendTemplate (loginAccount, next) {
// create a new envelope object that we will manage the signature request through
var envDef = new docusign.EnvelopeDefinition();
envDef.emailSubject = 'Please sign this document sent from Node SDK';
envDef.templateId = templateId;
// create a template role with a valid templateId and roleName and assign signer info
var tRole = new docusign.TemplateRole();
tRole.roleName = templateRoleName;
tRole.name = fullName;
tRole.email = recipientEmail;
// create a list of template roles and add our newly created role
var templateRolesList = [];
templateRolesList.push(tRole);
// assign template role(s) to the envelope
envDef.templateRoles = templateRolesList;
// send the envelope by setting |status| to 'sent'. To save as a draft set to 'created'
envDef.status = 'sent';
// use the |accountId| we retrieved through the Login API to create the Envelope
var accountId = loginAccount.accountId;
// instantiate a new EnvelopesApi object
var envelopesApi = new docusign.EnvelopesApi();
// call the createEnvelope() API
envelopesApi.createEnvelope(accountId, {'envelopeDefinition': envDef}, function (err, envelopeSummary, response) {
if (err) {
return next(err);
}
console.log('EnvelopeSummary: ' + JSON.stringify(envelopeSummary));
next(null);
});
}
], function end (error) {
if (error) {
console.log('Error: ', error);
process.exit(1);
}
process.exit();
});
var docusign = require('docusign-esign');
var async = require('async');
var integratorKey = '***'; // Integrator Key associated with your DocuSign Integration
var email = 'YOUR_EMAIL'; // Email for your DocuSign Account
var password = 'YOUR_PASSWORD'; // Password for your DocuSign Account
var docusignEnv = 'demo'; // DocuSign Environment generally demo for testing purposes
var fullName = 'Joan Jett'; // Recipient's Full Name
var recipientEmail = '[email protected]'; // Recipient's Email
var templateId = '***'; // ID of the Template you want to create the Envelope with
var templateRoleName = '***'; // Role Name of the Template
var baseUrl = 'https://' + docusignEnv + '.docusign.net/restapi';
// initialize the api client
var apiClient = new docusign.ApiClient();
apiClient.setBasePath(baseUrl);
// create JSON formatted auth header
var creds = JSON.stringify({
Username: email,
Password: password,
IntegratorKey: integratorKey
});
apiClient.addDefaultHeader('X-DocuSign-Authentication', creds);
// assign api client to the Configuration object
docusign.Configuration.default.setDefaultApiClient(apiClient);
async.waterfall([
function login (next) {
// login call available off the AuthenticationApi
var authApi = new docusign.AuthenticationApi();
// login has some optional parameters we can set
var loginOps = new authApi.LoginOptions();
loginOps.setApiPassword('true');
loginOps.setIncludeAccountIdGuid('true');
authApi.login(loginOps, function (err, loginInfo, response) {
if (err) {
return next(err);
}
if (loginInfo) {
// list of user account(s)
// note that a given user may be a member of multiple accounts
var loginAccounts = loginInfo.getLoginAccounts();
console.log('LoginInformation: ' + JSON.stringify(loginAccounts));
var loginAccount = loginAccounts[0];
var accountId = loginAccount.accountId;
var baseUrl = loginAccount.baseUrl;
var accountDomain = baseUrl.split("/v2");
// below code required for production, no effect in demo (same domain)
apiClient.setBasePath(accountDomain[0]);
docusign.Configuration.default.setDefaultApiClient(apiClient);
next(null, loginAccount);
}
});
},
function sendTemplate (loginAccount, next) {
// create a new envelope object that we will manage the signature request through
var envDef = new docusign.EnvelopeDefinition();
envDef.setEmailSubject('Please sign this document sent from Node SDK');
envDef.setTemplateId(templateId);
// create a template role with a valid templateId and roleName and assign signer info
var tRole = new docusign.TemplateRole();
tRole.setRoleName(templateRoleName);
tRole.setName(fullName);
tRole.setEmail(recipientEmail);
// create a list of template roles and add our newly created role
var templateRolesList = [];
templateRolesList.push(tRole);
// assign template role(s) to the envelope
envDef.setTemplateRoles(templateRolesList);
// send the envelope by setting |status| to 'sent'. To save as a draft set to 'created'
envDef.setStatus('sent');
// use the |accountId| we retrieved through the Login API to create the Envelope
var accountId = loginAccount.accountId;
// instantiate a new EnvelopesApi object
var envelopesApi = new docusign.EnvelopesApi();
// call the createEnvelope() API
envelopesApi.createEnvelope(accountId, envDef, null, function (err, envelopeSummary, response) {
if (err) {
return next(err);
}
console.log('EnvelopeSummary: ' + JSON.stringify(envelopeSummary));
next(null);
});
}
], function end (error) {
if (error) {
console.log('Error: ', error);
process.exit(1);
}
process.exit();
});
See CoreRecipes.js for more examples.
(Legacy Header Authentication uses the X-DocuSign-Authentication header.)
- Use the Authentication: login method to retrieve the account number and the baseUrl for the account.
The url for the login method is www.docusign.net for production and demo.docusign.net for the developer sandbox.
The
baseUrl
field is part of theloginAccount
object. See the docs and the loginAccount object - The baseUrl for the selected account, in production, will start with na1, na2, na3, eu1, or something else. Use the baseUrl that is returned to create the basePath (see the next step.) Use the basePath for all of your subsequent API calls.
- As returned by login method, the baseUrl includes the API version and account id. Split the string to obtain the basePath, just the server name and api name. Eg, you will receive
https://na1.docusign.net/restapi/v2/accounts/123123123
. You want justhttps://na1.docusign.net/restapi
- Instantiate the SDK using the basePath. Eg
ApiClient apiClient = new ApiClient(basePath);
- Set the authentication header as shown in the examples by using
Configuration.Default.AddDefaultHeader
- After obtaining a Bearer token, call the OAuth: Userinfo method. Obtain the selected account's
base_uri
(server name) field. The url for the Userinfo method is account-d.docusign.com for the demo/developer environment, and account.docusign.com for the production environment. - Combine the base_uri with "/restapi" to create the basePath. The base_uri will start with na1, na2, na3, eu1, or something else. Use the basePath for your subsequent API calls.
- Instantiate the SDK using the basePath. Eg
ApiClient apiClient = new ApiClient(basePath);
- Create the
authentication_value
by combining thetoken_type
andaccess_token
fields you receive from either an Authorization Code Grant or Implicit Grant OAuth flow. - Set the authentication header by using
Configuration.Default.AddDefaultHeader('Authorization', authentication_value)
Unit tests are available in the Test folder.
This SDK is auto-generated from OpenAPI specification file. For that reason, we actually do NOT accept pull requests. If you find a bug or have an idea that you want to see in the SDK, please open a new issue.
Feel free to log issues against this client through GitHub. We also have an active developer community on Stack Overflow, search the DocuSignAPI tag.
The DocuSign Node Client is licensed under the following License.