Docusigner

This gem is meant to be a simple ActiveResource based interface to DocuSign's REST api. Where applicable, objects know about their association relationships.

You can read more about DocuSign's REST API:

SPECIAL NOTE: I do not yet have access to the production server, so please consider this a beta. It has only been tested against the demo server and against the expected responses provided by the above API guide.

Requirements

  • reactive_resource
  • multipart_post

This library will handle multipart post requests to DocuSign and provide the correct headers for the individual posts. The multipart_post gem is required for its internals, but not used as it did not allow the headers DocuSign expects.

Setup

You can use either the X-DocuSign-Authentication header or an OAuth2 bearer token to access the API. Configuration for your app is simple.

X-DocuSign-Authentication

Docusigner::Base.authentication = {
    :username => "your_username_here",
    :password => "your_password_here",
    :integrator_key => "your_integrator_key_here"
}

OAuth2

Docusigner::Base.token = "your_api_token"

Additionally, you can easily request (or revoke) a token through the API.

# request an OAuth2 token
token = Docusigner::Oauth2.token("username", "password", "integrator_key")

# revoke an OAuth2 token
Docusigner::Oauth2.revoke("token")

Domain

By default, the API points to the development platform at https://demo.docusign.net. Changing to the live site is simple:

Docusigner::Base.site = "https://www.docusign.net/restapi/v2"

Usage

Once you've configured the client, accessing resources is easy. This client is based off of reactive_resource which is built off of active_resource. Code should look similar to using ActiveRecord objects.

Examples:

Fetch basic account information

# find the account
account = Docusigner::Account.find(1234)

# access basic attributes
account.id
=> 1234
account.name
=> "My account name" 

# list templates
account.templates
=> [#<Docusigner::Template>, #<Docusigner::Template>]

Create an envelope

envelope = Docusigner::Envelope.new({
  :account_id => 1234,
  :emailSubject => "Fee Agreement",
  :emailBlurb => "Please sign the attached document"
  :recipients => {
    :signers => [
      {
        :email => "[email protected]",
        :name => "Bob Smith",
        :recipientId => 1,
        :clientUserId => 123, # if you want to do 
        :tabs => {
            # can add tabs here
        },
      }
    ]
  },
  :documents => [
    {
      :name => "Fee Agreement",
      :documentId => 333,
    }
  ],
  :status => Docusigner::Envelope::Status::SENT
})
envelope.add_document(File.open("/path/to/document.pdf"), 333)
envelope.save

For the most part, the complex data structures expected as parameters can be expressed with nested hashes when creating elements.

Contributing

If you would like to contribute, please fork my repository and send me a pull request. Please include tests.

I have not implemented every API endpoint, as I do not have enough time right now.