npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@signnow/api-client

v1.8.2

Published

SignNow REST Service Wrapper

Downloads

27,772

Readme

The Official SignNow API client v1.8.2

SignNow Node.js REST API Wrapper

License Node version support Snyk vulnerabilities for npm package NPM package version Twitter Follow

Table of Contents

  1. About SignNow
  2. API Contact Information
  3. API and Application
  4. Installation
  5. Documentation
  6. Examples
  7. Unit Tests
  8. License
  9. Additional Contact Information

About SignNow

SignNow is a powerful web-based e-signature solution that streamlines the signing process and overall document flow for businesses of any size. SignNow offers SaaS as well as public and private cloud deployment options using the same underlying API. With SignNow you can easily sign, share and manage documents in compliance with international data laws and industry-specific regulations. SignNow enables you to collect signatures from partners, employees and customers from any device within minutes.

API Contact Information

If you have questions about the SignNow API, please visit https://docs.signnow.com or email [email protected].

See additional contact information at the bottom.

API and Application

Resources | Sandbox | Production ------------- | ------------- | ------------- API: | api-eval.signnow.com:443 | api.signnow.com:443 Application: | https://app-eval.signnow.com | https://app.signnow.com Entry page: | https://eval.signnow.com |

Installation

@signnow/api-client supports node.js v6.4.0 or later.

To install the latest version of @signnow/api-client run:

npm install @signnow/api-client

Documentation

See API reference in our Documentation.

Examples

To run the examples you will need an API key. You can get one here https://www.signnow.com/api. For a full list of accepted parameters, refer to the SignNow REST Endpoints API guide: https://docs.signnow.com.

Every resource is accessed via your api client instance:

const api = require('@signnow/api-client')({
  credentials: 'ENCODED_CLIENT_CREDENTIALS',
  production: false, // if false uses eval server
});

Every resource returns two parameters. The first param contains any errors and the second contains the results.

User

Create a User

By default verification email is not sent. To send it set verifyEmail option to true.

api.user.create({
  email: '[email protected]',
  password: 'your password',
  first_name: 'John',
  last_name: 'Wayne',
  number: '123-456-789',
  options: { verifyEmail: true } // false by default
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Send Verification Email

api.user.verifyEmail({
  email: '[email protected]',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Send Verification Email

api.user.verifyEmail({
  email: '[email protected]',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Retrieve User Information

api.user.retrieve({
  token: 'your auth token',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

OAuth 2.0

Request Access Token

api.oauth2.requestToken({
  username: 'username',
  password: 'password',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Verify Access Token

api.oauth2.verify({
  token: 'your auth token',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Refresh Access Token

api.oauth2.refreshToken({
  refresh_token: 'your refresh token',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Document

Retrieve a List of the User’s Documents

api.document.list({
  token: 'your auth token',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Retrieve a Document Resource

api.document.view({
  token: 'your auth token',
  id: 'document id',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Download a Collapsed Document

By default document is downloaded without history or attachments. To download it with history set withHistory option to true. To download it with attachments set withAttachments option to true.

api.document.download({
  token: 'your auth token',
  id: 'document id',
  options: { 
    withAttachments: true, // false by default
    withHistory: true, // false by default
  },
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Upload Document

api.document.create({
  token: 'your auth token',
  filepath: 'path to file',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Upload File & Extract Fields

api.document.fieldextract({
  token: 'your auth token',
  filepath: 'path to file',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Update Document (add fields)

const fields = {
  texts: [
    {
      size: 8,
      x: 61,
      y: 72,
      page_number: 0,
      font: 'Arial',
      data: 'sample text',
      line_height: 9.075,
    },
  ],
}

api.document.update({
  token: 'your auth token',
  id: 'document id',
  fields,
}, (err, res) => {
  // handle error or process response data
});

More: Add signature field example, Add text field example, CLI applet

Create Invite to Sign a Document

const fieldInvite = {
  from: 'EMAIL_OF_SENDER',
  to: [
    {
      email: 'EMAIL_OF_SIGNER',
      role: 'Signer 1',
      order: 1,
      reassign: '0',
      decline_by_signature: '0',
      reminder: 4,
      expiration_days: 27,
      subject: 'Field invite Signer1',
      message: 'Message',
    },
  ],
};

api.document.invite({
  data: {
    ...fieldInvite,
  },
  id: 'DOCUMENT_ID_GOES_HERE',
  token: 'YOUR_AUTH_TOKEN',
}, (err, res) => {
  // handle error or process response data
});

More: Invite to sign example, Invite with payment request example, CLI applet

Create Free Form Invite

api.document.invite({
  token: 'your auth token',
  id: 'document id',
  data: {
    from: 'email address',
    to: 'email address',
  },
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Cancel Field Invite to Sign a Document

api.document.cancelFieldInvite({
  token: 'your auth token',
  id: 'document id',
}, (err, res) => {
  // handle error or process response data
});

Cancel Free Form Invite

api.document.cancelFreeFormInvite({
  token: 'your auth token',
  id: 'id of invite',
}, (err, res) => {
  // handle error or process response data
});

Create a One-time Use Download URL

api.document.share({
  token: 'your auth token',
  id: 'document id',
}, (err, res) => {
  // handle error or process response data
});

More: Full example

Merge Existing Documents

By default original documents are not removed after merging. To remove original documents set removeOriginalDocuments option to true.

api.document.merge({
  token: 'your auth token',
  name: 'the merged doc',
  document_ids: [
    '84a18d12bf7473ea3dd0e4dd1cdcded6ba6281aa',
    'a71d963c49f33176e90c5827069c422616b1500c',
  ],
  options: {
    removeOriginalDocuments: true, // false by default
  },
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Get Document History

api.document.history({
  token: 'your auth token',
  id: 'document id',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Remove Document

By default document invites are not cancelled during deletion. To cancel all document invites set cancelInvites option to true.

api.document.remove({
  token: 'your auth token',
  id: 'document id',
  options: {
    cancelInvites: true, // false by default
  },
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

Links

Create Signing Link

api.link.create({
  token: 'your auth token',
  document_id: 'document or template id',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Enumerations

Add Enumeration Field to a Document

api.enumerations.addField({
  token: 'your auth token',
  document_id: 'document id',
  x: 150,
  y: 200,
  width: 200,
  height: 50,
  page_number: 0,
  role: 'buyer',
  required: true,
  label: 'Clothing Brand',
}, (err, res) => {
  // handle error or process response data
});

Add Enumeration Options to the Field

api.enumerations.addOptions({
  token: 'your auth token',
  enumeration_options: [
    {
      enumeration_id: '8a3501896160b12d4ef7507a81b2f0998b8137b1',
      data: 'Active',
    },
    {
      enumeration_id: '8a3501896160b12d4ef7507a81b2f0998b8137b1',
      data: 'Old Navy',
    },
    {
      enumeration_id: '8a3501896160b12d4ef7507a81b2f0998b8137b1',
      data: 'Volcom',
    },
  ],
}, (err, res) => {
  // handle error or process response data
});

Template

Create a Template

By default original document is not removed after template creation. To remove original document set removeOriginalDocument option to true.

api.template.create({
  token: 'your auth token',
  document_id: 'document id',
  document_name: 'my template',
  options: {
    removeOriginalDocument: true, // false by default
  },
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Create a Document from a Template

api.template.duplicate({
  token: 'your auth token',
  id: 'document id',
  name: 'my template',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Create Invite to Sign a Template

const fieldInvite = {
  from: 'EMAIL_OF_SENDER',
  to: [
    {
      email: 'EMAIL_OF_SIGNER',
      role: 'Signer 1',
      order: 1,
      reassign: '0',
      decline_by_signature: '0',
      reminder: 4,
      expiration_days: 27,
      subject: 'Field invite Signer1',
      message: 'Message',
    },
  ],
};

api.template.invite({
  data: {
    ...fieldInvite,
  },
  id: 'TEMPLATE_ID_GOES_HERE',
  token: 'YOUR_AUTH_TOKEN',
}, (err, res) => {
  // handle error or process response data
});

More: Full one role example, Full two roles example, CLI applet

Create Free Form Invite from Template

api.template.invite({
  token: 'YOUR_AUTH_TOKEN',
  id: 'TEMPLATE_ID_GOES_HERE',
  data: {
    from: 'EMAIL_OF_SENDER',
    to: 'EMAIL_OF_SIGNER',
  },
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Remove Template

api.template.remove({
  token: 'your auth token',
  id: 'template id',
}, (err, res) => {
  // handle error or process response data
});

More: CLI applet

View Routing Details

api.template.getRoutingDetails({
  token: 'your auth token',
  id: 'template id',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Update Routing Details

const routingDetails = {
  template_data: [
    {
      default_email: '',
      inviter_role: false,
      name: 'Signer 1',
      role_id: 'SIGNER 1 ROLE ID',
      signing_order: 1,
      decline_by_signature: true,
    },
    {
      default_email: '[email protected]',
      inviter_role: false,
      name: 'Signer 2',
      role_id: 'SIGNER 2 ROLE ID',
      signing_order: 2,
    },
  ],
  cc: [
    '[email protected]',
    '[email protected]',
  ],
  cc_step: [
    {
      email: '[email protected]',
      step: 1,
      name: 'CC 1',
    },
    {
      email: '[email protected]',
      step: 2,
      name: 'CC 2',
    },
  ],
  invite_link_instructions: 'Invite link signing instruction',
};

api.template.updateRoutingDetails({
  data: routingDetails,
  token: 'your auth token',
  id: 'template id',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Folder

Returns a list of folders

api.folder.list({
  token: 'your auth token',
}, (err, res) => {
  // handle error or process response data
});

Returns a list of documents inside a folder

Filters | Values ------------- | ------------- signing-status | waiting-for-me, waiting-for-others, signed, pending document-updated | new Date() document-created | new Date()

Sort | Values ------------- | ------------- document-name | asc/desc updated | asc/desc created | asc/desc

api.folder.documents({
  token: 'your auth token',
  id: 'folder id',
  filter: [
    {
      'signing-status': 'pending',
    },
  ],
  sort: {
    'document-name': 'asc',
  },
}, (err, res) => {
  // handle error or process response data
});

Document Group

Create Document Group

api.documentGroup.create({
  token: 'your auth token',
  group_name: 'my document group name',
  ids: [
    // put document or template IDs here
    '84a18d12bf7473ea3dd0e4dd1cdcded6ba6281aa',
    'a71d963c49f33176e90c5827069c422616b1500c',
  ],
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

View Document Group

api.documentGroup.view({
  token: 'Your auth token',
  id: 'Document Group ID',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Create Invite to Sign a Document Group

const data = {
  invite_steps: [
    {
      order: 1,
      invite_emails: [
        {
          email: 'Email of Signer 1',
          subject: 'Signer 1 Needs Your Signature',
          message: 'Signer 1 invited you to sign Document 1',
          expiration_days: 30,
          reminder: 0,
        },
      ],
      invite_actions: [
        {
          email: 'Email of Signer 1',
          role_name: 'Signer 1',
          action: 'sign',
          document_id: 'Document 1 ID',
          allow_reassign: '0',
          decline_by_signature: '0',
        },
      ],
    },
    {
      order: 2,
      invite_emails: [
        {
          email: 'Email of Signer 2',
          subject: 'Signer 2 Needs Your Signature',
          message: 'Signer 2 invited you to sign Document 2',
          expiration_days: 30,
          reminder: 0,
        },
      ],
      invite_actions: [
        {
          email: 'Email of Signer 2',
          role_name: 'Signer 2',
          action: 'sign',
          document_id: 'Document 2 ID',
          allow_reassign: '0',
          decline_by_signature: '0',
        },
      ],
    },
  ],
};

api.documentGroup.invite({
  token: 'your auth token',
  id: 'Document Group ID',
  data,
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Cancel Invite to Sign a Document Group

api.documentGroup.cancelInvite({
  token: 'your auth token',
  id: 'Document Group ID',
  inviteId: 'Document Group invite ID'
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Download Document Group

By default Document Group is downloaded without history as .zip archive with PDF files. To download it as a signle merged PDF set type to merged. To download document group with history set with_history to after_each_document or after_merged_pdf.

api.documentGroup.download({
  token: 'your auth token',
  id: 'document group ID',
  type: 'merged', // 'zip' by default
  with_history: 'after_each_document', // 'no' by default
}, (err, res) => {
  // handle error or process response data
});

More: Zipped Download Example, Merged Download Example, CLI applet

Document Group Template

Create Document Group Template

const routing_details = {
  invite_steps: [
    {
      order: 1,
      invite_emails: [
        {
          email: 'Email of Signer 1',
          subject: 'Signer 1 Needs Your Signature',
          message: 'Signer 1 invited you to sign Document 1',
          expiration_days: 30,
          reminder: 0,
          hasSignActions: true,
          allow_reassign: '0',
        },
      ],
      invite_actions: [
        {
          email: 'Email of Signer 1',
          role_name: 'Signer 1',
          action: 'sign',
          document_id: 'b6f4f61a5662c5c4385b02421397b76dc6d9c8af',
          document_name: 'Document 1',
          allow_reassign: '0',
          decline_by_signature: '0',
        },
      ],
    },
    {
      order: 2,
      invite_emails: [
        {
          email: 'Email of Signer 2',
          subject: 'Signer 2 Needs Your Signature',
          message: 'Signer 2 invited you to sign Document 2',
          expiration_days: 30,
          reminder: 0,
          hasSignActions: true,
          allow_reassign: '0',
        },
      ],
      invite_actions: [
        {
          email: 'Email of Signer 2',
          role_name: 'Signer 2',
          action: 'sign',
          document_id: '14f02aac643770f22a384fe4e7a6b1ed6d15a9b8',
          document_name: 'Document 2',
          allow_reassign: '0',
          decline_by_signature: '0',
        },
      ],
    },
  ],
  include_email_attachments: 0,
};

api.documentGroupTemplate.create({
  token: 'your auth token',
  template_ids: [
      '84a18d12bf7473ea3dd0e4dd1cdcded6ba6281aa',
      'a71d963c49f33176e90c5827069c422616b1500c',
    ],
  template_group_name: 'Document group template name',
  routing_details,
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

View Document Group Template

api.documentGroupTemplate.view({
  token: 'Your auth token',
  id: 'Document Group Template ID',
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Create Invite to Sign a Document Group Template

api.documentGroupTemplate.invite({
  token: 'Your auth token',
  id: 'Document Group Template ID'
}, (err, res) => {
  // handle error or process response data
});

More: Full example, CLI applet

Webhook

Returns a list of Webhooks

signnow.webhook.list({
  token: 'your auth token',
}, (err, res) => {
  // handle error or process response data
});

Create a Webhook

Events | Description ------------- | ------------- document.create | Webhook is triggered when a document is uploaded to users account in SignNow document.update | Webhook is triggered when a document is updated (fields added, text added, signature added, etc.) document.delete | Webhook is triggered when a document is deleted from invite.create | Webhook is triggered when an invitation to a SignNow document is created. invite.update | Webhook is triggered when an invite to SignNow document is updated. Ex. A signer has signed the document.

api.webhook.create({
  token: 'your auth token',
  event: 'document.create',
  callback_url: 'http://www.domain.com/path',
}, (err, res) => {
  // handle error or process response data
});

Embedded

Create embedded signing invites for a document without sending emails

signnow.embedded.createInvite({
  token: 'access token',
  document_id: 'document id',
  invites: [
    {
      email: 'email of signer',
      role_id: 'role id',
      order: 1,
      auth_method: 'password',
    },
  ],
}, (err, res) => {
  // handle error or process response data
});

Creates a link for the embedded invite.

signnow.embedded.generateInviteLink({
  token: 'access token',
  document_id: 'document id',
  field_invite_unique_id: 'field invite unique id',
  link_expiration: 15,
  auth_method: 'password',
}, (err, res) => {
  // handle error or process response data
});

Deletes embedded invites for a document.

signnow.embedded.cancelInvites({
  token: 'access token',
  document_id: 'document id',
}, (err, res) => {
  // handle error or process response data
});

Promisify methods

If you are using node.js version 8.0.0 or higher you can use built in promisify utility:

const { promisify } = require('util');
const api = require('@signnow/api-client')({
  credentials: 'ENCODED_CLIENT_CREDENTIALS',
  production: false, // if false uses eval server
});
const requestToken = promisify(api.oauth2.requestToken);

requestToken({
  username: 'username',
  password: 'password',
})
  .then(res => {
    // process response data
  })
  .catch(err => {
    // handle error
  });

If you are using node.js version prior to 8.0.0 you can use our own simple promisify utility:

const { promisify } = require('@signnow/api-client/utils');
const api = require('@signnow/api-client')({
  credentials: 'ENCODED_CLIENT_CREDENTIALS',
  production: false, // if false uses eval server
});
const requestToken = promisify(api.oauth2.requestToken);

requestToken({
  username: 'username',
  password: 'password',
})
  .then(res => {
    // process response data
  })
  .catch(err => {
    // handle error
  });

Unit Tests

To run the unit test you will need to install "Mocha" and "Chai". You also need to edit a test.settings.js in the test folder of the api client module. The file need to contain the following:

exports.settings = {
  credentials: '[ENCODED CLIENT CREDENTIALS]',
  token: '[ACCESS TOKEN]',
  username: '[SIGNNOW USERNAME]',
  password: '[SIGNNOW PASSWORD]',
  documentid: '[EXISTING DOCUMENT ID]',
  templateid: '[EXISTING TEMPLATE ID]',
  folderid: '[EXISTING FOLDER ID]',
  email: '[FROM EMAIL FOR INVITE]',
  testemail: '[TO EMAIL FOR INVITE]',
};

License

This project is released under the MIT License.

Additional Contact Information

Support

To contact SignNow support, please email [email protected] or [email protected].

Sales

For pricing information, please call (800) 831-2050, email [email protected] or visit https://www.signnow.com/contact.