Methods

Table of contents

List Businesses

A list of existing businesses on your Xodo Sign account can be accessed by making a simple HTTP GET call to the Xodo Sign API's business endpoint.

API Response Objects:

HTTP GET

List Businesses

API Request

https://api.eversign.com/business
  ? access_key = YOUR_ACCESS_KEY

API Response

[{
    "business_id": 1,
    "business_status": 1,
    "business_identifier": "first",
    "business_name": "My First Business",
    "creation_time_stamp": 1490203825,
    "is_primary": 1
}, {
    "business_id": 2,
    "business_status": 1,
    "business_identifier": "second",
    "business_name": "My Second Business",
    "creation_time_stamp": 1490203925,
    "is_primary": 0
}]

Create Document

In order to create a document an HTTP POST request containing a series of parameters and objects to the API's document endpoint is required. All parameters and objects are specified below:

files Object

Document files can be uploaded to your document either by providing a URL, a reference to an existing file ID or through a base64 string. This object can contain multiple sub arrays.

Required

Please specify only one of three upload parameters (file_url, file_id or file_base64) for each sub array.

signers Object

This object must contain a sub array for each signer of the document being created. Each sub array requires a unique ID, name and email address.

At least one signer

Please note that at least one signer sub array must be specified.

Signer Authentication Overages

Signer authentication by SMS has limited credits. Exceeding these credits is allowed for all non-free accounts and it will result in additional charges (overages).

recipients Object

This object can contain a sub array for each CC of the document to be signed.

meta Object

This object contains optional key-value data that should be attached to the document. This data will be included when making a GET call for the document created.

fields Object

The fields that should be placed on the document, expressed as a 2-dimensional JSON array. One array of fields is required for each file provided in the files object. If a file has no fields, an empty array must be provided. This structure is illustrated below:

In our example above, the fields of type signature and text will be placed onto the pages of the first document file uploaded, and the fields of type note and attachment will be placed onto the second document file uploaded.

No Fields

If no signature fields are specified within your document creation request the Xodo Sign API will automatically append to your document an additional signature page containing signature fields to be completed by each signer. Furthermore, field date signed will be populated with the current date.

HTTP POST

Create Document

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
{
    "sandbox": 0,
    "is_draft": 0,
    "embedded": 0,
    "title": "Sample Document",
    "message": "This is my general document message.",
    "use_signer_order": 1,
    "reminders": 1,
    "require_all_signers": 1,
    "custom_requester_name": "",
    "custom_requester_email": "",
    "redirect": "https://myredirect.com/completed",
    "redirect_decline": "https://myredirect.com/declined",
    "client": "",
    "embedded_signing_enabled": 0,
    "flexible_signing": 0,
    "use_hidden_tags": 0,
    "files": [{
      "name": "My Document File",
      "file_url": "https://eversign.com/uploads/sample-document.pdf",
      "file_id": "",
      "file_base64": ""
    }, {
      "name": "My Second Document File",
      "file_url": "https://eversign.com/uploads/sample-document.pdf",
      "file_id": "",
      "file_base64": ""
    }],
    "signers": [{
      "id": 1,
      "name": "Paul McSign",
      "email": "paul@mcsign.com",
      "order": 1,
      "pin": "3874",
      "signer_authentication_sms_enabled": 0,
      "signer_authentication_phone_number": "+000000000000000",
      "message": "This is my custom message to Paul.",
      "deliver_email": "",
      "language": "en"
    }, {
      "id": 2,
      "name": "Julian McSign",
      "email": "julian@mcsign.com",
      "order": 2,
      "pin": "3944",
      "message": "",
      "deliver_email": "",
      "language": "en"
    }],
    "recipients": [{
      "name": "Jane McSign",
      "email": "jane@mcsign.com",
      "language": "en"
	}, {
      "name": "Frank McSign",
      "email": "frank@mcsign.com",
      "language": "en"
    }],
    "meta": {
      "some_key": "some_value",
      "another_key": "another_value"
    },
    "fields": [
      [
        {
          "merge": 0,
          "identifier": "unique_field_identifier_1",
          "name": "Full Name",
          "options": "",
          "group": "",
          "value": "",
          "type": "text",
          "x": 119.42348754448399,
          "y": 169.54655093793733,
          "page": 1,
          "width": 148,
          "height": 18,
          "signer": 1,
          "validation_type": "",
          "required": 0,
          "readonly": 0,
          "text_size": 10,
          "text_color": "#000000",
          "text_style": "",
          "text_font": "arial"
        },
        {
          "merge": 0,
          "identifier": "unique_field_identifier_2",
          "name": "Title",
          "options": "",
          "group": "",
          "value": "",
          "type": "text",
          "x": 109.25978647686833,
          "y": 209.37132254666102,
          "page": 1,
          "width": 55,
          "height": 17,
          "signer": 1,
          "validation_type": "",
          "required": 0,
          "readonly": 0,
          "text_size": 10,
          "text_color": "#000000",
          "text_style": "",
          "text_font": "arial"
        },
        {
          "merge": 0,
          "identifier": "unique_field_identifier_3",
          "name": "Company",
          "options": "",
          "group": "",
          "value": "",
          "type": "text",
          "x": 142.7153024911032,
          "y": 247.92509080617012,
          "page": 1,
          "width": 105,
          "height": 17,
          "signer": 1,
          "validation_type": "",
          "required": 0,
          "readonly": 0,
          "text_size": 10,
          "text_color": "#000000",
          "text_style": "",
          "text_font": "arial"
        },
        {
          "merge": 0,
          "identifier": "unique_field_identifier_4",
          "name": "Email",
          "options": "",
          "group": "",
          "value": "",
          "type": "text",
          "x": 115.18861209964413,
          "y": 288.1735301979653,
          "page": 1,
          "width": 154,
          "height": 18,
          "signer": 1,
          "validation_type": "",
          "required": 0,
          "readonly": 0,
          "text_size": 10,
          "text_color": "#000000",
          "text_style": "",
          "text_font": "arial"
        },
        {
          "merge": 0,
          "identifier": "unique_field_identifier_5",
          "name": "Signature",
          "options": "",
          "group": "",
          "value": "",
          "type": "signature",
          "x": 143.1387900355872,
          "y": 318.2539427960439,
          "page": 1,
          "width": 120,
          "height": 35,
          "signer": 1,
          "validation_type": "",
          "required": 1,
          "readonly": 0,
          "text_size": "",
          "text_color": "",
          "text_style": "",
          "text_font": ""
        },
        {
          "merge": 0,
          "identifier": "unique_field_identifier_6",
          "name": "Date Signed",
          "options": "",
          "group": "",
          "value": "",
          "type": "date_signed",
          "x": 111.37722419928825,
          "y": 365.70473450005505,
          "page": 1,
          "width": 60,
          "height": 17,
          "signer": 1,
          "validation_type": "",
          "required": 0,
          "readonly": 0,
          "text_size": 10,
          "text_color": "#000000",
          "text_style": "",
          "text_font": "arial"
        }
      ],
    []
  ]
}

API Response

If successful, the Xodo Sign API will return the entire document in JSON format. In order to see how this response looks like, please jump to the Get Document section.

Create Template

In order to create a template an HTTP POST request containing a series of parameters and objects to the API's document endpoint is required. All parameters and objects are specified below:

files Object

Template files can be uploaded to your template either by providing a URL, a reference to an existing file ID or through a base64 string. This object can contain multiple sub arrays.

Required

Please specify only one of three upload parameters (file_url, file_id or file_base64) for each sub array.

signers Object

This object must contain a sub array for each signer role of the template being created. Each sub array requires a unique ID and role name.

Templates without roles

You can also choose to create your template without providing a role. In this case, it will only act as an appendix document (e.g. terms and conditions document) and cannot contain any signer-related fields.

recipients Object

This object can contain a sub array for each CC of the document to be signed.

meta Object

This object contains optional key-value data that should be attached to the document. This data will be included when making a GET call for the document created.

fields Object

The fields that should be placed on the template, expressed as a 2-dimensional JSON array. One array of fields is required for each file provided in the files object. If a file has no fields, an empty array must be provided. This structure is illustrated below:

In our example above, the fields of type signature and text will be placed onto the pages of the first template file uploaded, and the fields of type note and attachment will be placed onto the second template file uploaded.

HTTP POST

Create Template

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
{
  "sandbox": 0,
  "is_template": 1,
  "is_draft": 0,
  "title": "test_title",
  "message": "test_message",
  "use_signer_order": 0,
  "reminders": 0,
  "require_all_signers": 0,
  "files": [{
    "name": "My Template File",
    "file_url": "https://eversign.com/uploads/sample-document.pdf",
    "file_id": "",
    "file_base64": ""
  }],
  "signers": [{
    "id": 1,
    "role": "Client",
    "name": "",
    "email": "",
    "required": 1
  }],
  "recipients": [],
  "meta": {
    "some_key": "some_value",
    "another_key": "another_value"
  },
  "fields": [
    [
      {
        "merge": 0,
        "identifier": "unique_field_identifier_1",
        "name": "Full Name",
        "options": "",
        "group": "",
        "value": "",
        "type": "text",
        "x": 119.42348754448399,
        "y": 169.54655093793733,
        "page": 1,
        "width": 148,
        "height": 18,
        "signer": 1,
        "validation_type": "",
        "required": 0,
        "readonly": 0,
        "text_size": 10,
        "text_color": "#000000",
        "text_style": "",
        "text_font": "arial"
      },
      {
        "merge": 0,
        "identifier": "unique_field_identifier_2",
        "name": "Title",
        "options": "",
        "group": "",
        "value": "",
        "type": "text",
        "x": 109.25978647686833,
        "y": 209.37132254666102,
        "page": 1,
        "width": 55,
        "height": 17,
        "signer": 1,
        "validation_type": "",
        "required": 0,
        "readonly": 0,
        "text_size": 10,
        "text_color": "#000000",
        "text_style": "",
        "text_font": "arial"
      },
      {
        "merge": 0,
        "identifier": "unique_field_identifier_3",
        "name": "Company",
        "options": "",
        "group": "",
        "value": "",
        "type": "text",
        "x": 142.7153024911032,
        "y": 247.92509080617012,
        "page": 1,
        "width": 105,
        "height": 17,
        "signer": 1,
        "validation_type": "",
        "required": 0,
        "readonly": 0,
        "text_size": 10,
        "text_color": "#000000",
        "text_style": "",
        "text_font": "arial"
      },
      {
        "merge": 0,
        "identifier": "unique_field_identifier_4",
        "name": "Email",
        "options": "",
        "group": "",
        "value": "",
        "type": "text",
        "x": 115.18861209964413,
        "y": 288.1735301979653,
        "page": 1,
        "width": 154,
        "height": 18,
        "signer": 1,
        "validation_type": "",
        "required": 0,
        "readonly": 0,
        "text_size": 10,
        "text_color": "#000000",
        "text_style": "",
        "text_font": "arial"
      },
      {
        "merge": 0,
        "identifier": "unique_field_identifier_5",
        "name": "Signature",
        "options": "",
        "group": "",
        "value": "",
        "type": "signature",
        "x": 143.1387900355872,
        "y": 318.2539427960439,
        "page": 1,
        "width": 120,
        "height": 35,
        "signer": 1,
        "validation_type": "",
        "required": 1,
        "readonly": 0,
        "text_size": "",
        "text_color": "",
        "text_style": "",
        "text_font": ""
      },
      {
        "merge": 0,
        "identifier": "unique_field_identifier_6",
        "name": "Date Signed",
        "options": "",
        "group": "",
        "value": "",
        "type": "date_signed",
        "x": 111.37722419928825,
        "y": 365.70473450005505,
        "page": 1,
        "width": 60,
        "height": 17,
        "signer": 1,
        "validation_type": "",
        "required": 0,
        "readonly": 0,
        "text_size": 10,
        "text_color": "#000000",
        "text_style": "",
        "text_font": "arial"
      }
    ]
  ]
}

API Response

If successful, the Xodo Sign API will return the entire template in JSON format. In order to see how this response looks like, please jump to the Get Template section.

Use Template

An existing template can be used by making an HTTP POST request to the document endpoint containing some key parameters. All optional and required parameters are listed in the table below.

Look up your template

Before using a template you might want to access it in order to review its signer and recipient roles, fields and other settings. In order to look up your template, a GET Template request is required.

signers Object

This object must contain a sub array for each signing role of your template. Each sub array must contain the role name, signer name and signer email address. At this point, an optional Signer PIN and message can be specified as well.

All required roles must be specified

Please note that all required roles must be specified in order to use a template.

Signer Authentication Overages

Signer authentication by SMS has limited credits. Exceeding these credits is allowed for all non-free accounts and it will result in additional charges (overages).

recipients Object

This object must contain a sub array for each recipient (CC) role of your template. Each sub array must contain the role name, CC name and CC email address.

fields Object

This object must contain a sub array for each Merge Field of this template.

HTTP POST

Use Template

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
{
  "sandbox": 0,
  "template_id": "j6yMcaF4gQBIIQ",
  "title": "My New Document",
  "message": "This is my message.",
  "custom_requester_name": "",
  "custom_requester_email": "",
  "redirect": "https://myredirect.com/completed",
  "redirect_decline": "https://myredirect.com/declined",
  "client": "",
  "expires": 1494276966,
  "embedded_signing_enabled": 0,
  "signers": [{
    "role": "Sales Rep",
    "name": "Paul McSign",
    "email": "paul@mcsign.com",
    "pin": "1234",
    "signer_authentication_sms_enabled": 1,
    "signer_authentication_phone_number": "+43123221234",
    "message": "This is my custom message to Paul.",
    "deliver_email": "",
    "language": "en"
  }, {
    "role": "Client",
    "name": "Julian McSign",
    "email": "julian@mcsign.com",
    "pin": "4321",
    "message": "",
    "deliver_email": "",
    "language": "en"
  }],
  "recipients": [{
    "role": "Assistant",
    "name": "Jane McSign",
    "email": "jane@mcsign.com",
    "language": "en"
  }, {
    "role": "Finance Department",
    "name": "Frank McSign",
    "email": "frank@mcsign.com",
    "language": "en"
  }],
  "fields": [{
    "identifier": "unique_field_identifier_1",
    "value": "Merge Field Content"
  }, {
    "identifier": "unique_field_identifier_2",
    "value": "Other Merge Field Content"
  }]
}

API Response

If successful, the Xodo Sign API will return the created document in JSON format. In order to see how a response like this looks like, please jump to the Get Document section.

Get Document / Template

An existing document or template can be accessed using a straightforward HTTP GET call. If successful, the API will return the entire document/template data set. All the objects contained in the API response are described below:

files Object

signers Object

Signing Status Values:

  • declined: Signer has declined to sign

  • signed: Signer has signed

  • waiting_for_signature: Signer has not signed yet

  • on_hold: Document delivery is queued (waiting for other signers to sign)

recipients Object

fields Object

log Object

Document Event Values:

There is a series of different event values that can be inside a document's log object:

  • document_created: Document has been created

  • document_edited: Document has been edited

  • document_completed: Document has been completed

  • document_sent: Document has been sent

  • document_restored: Document has been restored from trash

  • document_cancelled: Document has been cancelled

  • document_trashed: Document has been trashed

  • document_archived: Document has been archived

  • document_unarchived: Document has been unarchived

  • document_deleted: Document has been deleted

  • document_expired: Document has expired

  • document_viewed: Document has been opened/viewed

  • document_declined: Document has been declined

  • document_signed: Document has been signed by a signer

meta Object

If specified, this object contains a sub array for each custom field specified for the requested document.

HTTP GET

Get Document /
Template

API Request

Please find below an example HTTP GET request accessing an existing document or template:

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQAIIQ

API Response

{
  "document_hash": "A4X5GeinpUtjhz",
  "requester_email": "your@email.com",
  "custom_requester_name": "",
  "custom_requester_email": "",
  "is_draft": 0,
  "is_template": 0,
  "is_completed": 0,
  "is_archived": 0,
  "is_deleted": 0,
  "is_trashed": 0,
  "is_cancelled": 0,
  "embedded": 0,
  "in_person": 0,
  "permission": "",
  "template_id": "",
  "title": "Sample Document",
  "message": "This is my general document message.",
  "use_signer_order": 1,
  "reminders": 1,
  "require_all_signers": 1,
  "redirect": "https://myredirect.com/completed",
  "redirect_decline": "https://myredirect.com/declined",
  "client": "",
  "created": 1491822481,
  "completed": 1491852481,
  "expires": 1494276966,
  "embedded_signing_enabled": 0,
  "flexible_signing": 0,
  "files": [{
    "name": "My Document File",
    "file_id": "FMA4SyCuHjrusK",
    "pages": 3
  }],
  "signers": [{
    "id": 1,
    "name": "Paul McSign",
    "email": "paul@mcsign.com",
    "role": "",
    "order": 1,
    "pin": "3874",
    "signer_authentication_sms_enabled": 1,
    "signer_authentication_phone_number": "+43123221234",
    "message": "This is my custom message to Paul.",
    "signed": 0,
    "signed_timestamp": "",
    "required": 0,
    "deliver_email": "",
    "language": "en",
    "declined": 0,
    "removed": 0,
    "bounced": 0,
    "sent": 1,
    "viewed": 0,
    "status": "waiting_for_signature"
  }, {
    "id": 2,
    "name": "Julian McSign",
    "email": "julian@mcsign.com",
    "role": "",
    "order": 2,
    "pin": "3944",
    "message": "",
    "signed": 0,
    "signed_timestamp": "",
    "required": 0,
    "deliver_email": "",
    "language": "en",
    "declined": 0,
    "removed": 0,
    "bounced": 0,
    "sent": 0,
    "viewed": 0,
    "status": "on_hold"
  }],
  "recipients": [{
    "name": "Jane McSign",
    "email": "jane@mcsign.com",
    "role": "",
    "message": "",
    "required": 0,
    "language": "en",
  }, {
    "name": "Frank McSign",
    "email": "frank@mcsign.com",
    "role": "",
    "message": "",
    "required": 0,
    "language": "en",
  }],
  "fields": [
    [{
      "merge": 0,
      "identifier": "unique_field_identifier_1",
      "name": "",
      "options": "",
      "group": "",
      "value": "",
      "type": "signature",
      "x": 120.43811219947,
      "y": 479.02760463045,
      "page": 2,
      "width": 120,
      "height": 35,
      "signer": 1,
      "validation_type": "",
      "required": 1,
      "readonly": 0,
      "text_size": "",
      "text_color": "",
      "text_style": "",
      "text_font": "",
      "files": ""
    }, {
      "merge": 0,
      "identifier": "unique_field_identifier_2",
      "name": "",
      "options": "",
      "group": "",
      "value": "",
      "type": "signature",
      "x": 363.49421193232,
      "y": 479.57257346394,
      "page": 2,
      "width": 120,
      "height": 35,
      "signer": 2,
      "validation_type": "",
      "required": 1,
      "readonly": 0,
      "text_size": "",
      "text_color": "",
      "text_style": "",
      "text_font": "",
      "files": ""
    }, {
      "merge": 0,
      "identifier": "unique_field_identifier_3",
      "name": "Full Name",
      "options": "",
      "group": "",
      "value": "",
      "type": "text",
      "x": 97.549421193232,
      "y": 123.70792520036,
      "page": 1,
      "width": 55,
      "height": 17,
      "signer": 1,
      "validation_type": "",
      "required": 1,
      "readonly": 0,
      "text_size": 10,
      "text_color": "#000000",
      "text_style": "",
      "text_font": "arial",
      "files": ""
    }, {
      "merge": 0,
      "identifier": "unique_field_identifier_4",
      "name": "Full Name",
      "options": "",
      "group": "",
      "value": "",
      "type": "text",
      "x": 276.29919857524,
      "y": 123.16295636687,
      "page": 1,
      "width": 55,
      "height": 17,
      "signer": 2,
      "validation_type": "letters_only",
      "required": 1,
      "readonly": 0,
      "text_size": 10,
      "text_color": "#000000",
      "text_style": "",
      "text_font": "arial",
      "files": ""
    }, {
      "merge": 0,
      "identifier": "unique_field_identifier_5",
      "name": "Dropdown",
      "options": [
        "Option 1",
        "Option 2",
        "Option 3"
      ],
      "group": "",
      "value": "Option 1",
      "type": "dropdown",
      "x": 440.4,
      "y": 204.2,
      "page": 2,
      "width": 92,
      "height": 23,
      "signer": 1,
      "validation_type": "",
      "required": 1,
      "readonly": 0,
      "text_size": "",
      "text_color": "",
      "text_style": "",
      "text_font": "",
      "files": ""
    }]
  ],
  "log": [{
    "event": "document_created",
    "signer": "",
    "timestamp": 1491822484
  }, {
    "event": "document_sent",
    "signer": 1,
    "timestamp": 1491822485
  }],
  "meta": {
    "some_key": "some_value",
    "another_key": "another_value"
  }
}

List Documents

A list of existing documents can be accessed by making a simple HTTP GET call. By appending the API's type parameter to the API request URL and setting it to a document status you can filter your results accordingly.

type Parameter: This parameter accepts the following status values:

  • all

  • my_action_required

  • waiting_for_others

  • completed

  • drafts

  • cancelled

Per default the result is limited to 500 items.

You may provide a lower limit via the limit parameter. If the number of total results exceeds the limit, you can access the next set of items via the page parameter (page index starts at 1): https://api.eversign.com/document?access_key=YOUR_ACCESS_KEY& business_id=1&type=all&limit=10&page=2

HTTP GET

List Documents

API Request

Please find below an example HTTP GET request accessing a list of all existing documents:

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & type = all

API Response

If a successful request is made, the Xodo Sign API will return an array containing all existing documents.

List Templates

In order to access a list of templates, please set the API's type parameter to templates, or to one of the other allowed status values.

type Parameter: This parameter accepts the following status values:

  • templates

  • templates_archived

  • template_drafts

HTTP GET

List Templates

API Request

Please find below an example HTTP GET request accessing a list of all existing documents:

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & type = templates

API Response

If a successful request is made, the Xodo Sign API will return an array containing all existing templates.

Send Reminder

A reminder can be sent on a per-signer basis only. In order to send a reminder to an individual signer, a simple HTTP POST request to the API's send_reminder endpoint is required.

The following two parameters must be contained in the HTTP POST request:

HTTP POST

Send Reminder

API Request

https://api.eversign.com/send_reminder
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
{
  "document_hash": "j6yMcaF2gQBIIS",
  "signer_id": "1"
}

API Response

If successful, the API will return the following response:

{
  "success": true,
}

Reassign Signer

Just like a signer can forward their signing responsibility to another person, it's possible to reassign this responsibility as the document owner, a business admin or business owner via the API as well. An HTTP POST request to the API's reassign endpoint is required.

The document owner and both the old and the new signer will receive an email notification.

The following parameters must be contained in the HTTP POST request:

HTTP POST

Reassign Signer

API Request

https://api.eversign.com/reassign
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
{
  "reason": "YOUR_REASON",
  "signer_id": 1,
  "document_hash": "j6yMcaF2gQBIIS",
  "new_signer_name": "Jane McSign",
  "new_signer_email": "jane@mcsign.com"
}

API Response

If successful, the API will return the following response:

{
  "success": true,
}

Delete Document / Template

A document or template can be deleted by making an HTTP DELETE call to API's document endpoint and appending the document_hash GET parameter containing the document or template hash.

Implicit business logic

  • Pending / in-process documents have to be canceled first before they can be deleted

  • Completed documents have to be trashed first before they can be deleted

  • Draft documents have to be trashed first before they can be deleted

HTTP DELETE

Delete Document /
Template

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQBIIS

API Response

If successful, the API will return the following response:

{
  "success": true,
}

Trash Document / Template

A document or template can be trashed by making an HTTP DELETE call to the API's document endpoint and appending both the document_hash GET parameter containing the document hash and the trash GET parameter and setting it to 1.

HTTP DELETE

Trash Document

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQBIIS
  & trash = 1

API Response

If successful, the API will return the following response:

{
  "success": true,
}

Cancel Document

A document can be cancelled by making an HTTP DELETE call to the API's document endpoint and appending both the document_hash GET parameter containing the document hash and the cancel GET parameter and setting it to 1.

HTTP DELETE

Cancel Document

API Request

https://api.eversign.com/document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQBIIS
  & cancel = 1

API Response

If successful, the API will return the following response:

{
  "success": true,
}

Download Original PDF

The original PDF file of a document can be downloaded by making an HTTP GET request to the API's download_raw_document endpoint and setting the document_hash HTTP GET parameter to the hash of the document you would like to download.

HTTP GET

Download Original PDF

API Request

https://api.eversign.com/download_raw_document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQBIIS

API Response

If successful, the Xodo Sign API will return the original version of the requested document as PDF.

Download Final PDF

The final PDF version of a document can be downloaded by making an HTTP GET request to the API's download_final_document endpoint and setting the document_hash HTTP GET parameter to the hash of the document you would like to download.

The following parameters can be appended in the HTTP GET request:

HTTP GET

Download Final PDF

API Request

https://api.eversign.com/download_final_document
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
  & document_hash = j6yMcaF2gQBIIS
  & audit_trail = 1

API Response

If successful, the Xodo Sign API will return the final version of the requested document as PDF.

Upload File

Document files can be uploaded to your Xodo Sign business by making an HTTP POST request containing the file content to the API's file endpoint. The API will then return a unique file_id that can be re-used when creating documents via the API.

API Response Objects:

File expiration

Files will be retained for a maximum of 30 days. If they haven't been referenced in a document's files object within this timeframe, they will be deleted. Files that are used in documents are part of that document and will not be deleted.

HTTP POST

Upload File

API Request

In order to upload a file, please send a multipart/form-data request containing the key parameter named upload and the file as value via HTTP POST request to the following URL:

https://api.eversign.com/file
  ?access_key = YOUR_ACCESS_KEY
  & business_id = 1

API Response

If successful, the API will return a response object containing an ID for the uploaded file and the number of pages.

{
  "file_id": "lZJk9QZ8ze3777",
  "total_pages": 3
}

Generate Bulk Sending CSV from Template

Bulk Sending endpoints can be used to send multiple documents based on a specific template. The Bulk Sending feature is based on providing a CSV template containing data about documents that should be created. This data needs to be in the correct form that is structured according to the template we want to use.

Look up your template

Before using a template for Bulk Sending you might want to access it to review its signer and recipient roles, fields, and other settings. To look up your template, a GET Template request is required.

HTTP GET

Generate Blank CSV
from Template

API Request

https://api.eversign.com/template/{template_hash}/bulk/csv/blank
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID

API Response

If successful, the Xodo Sign API will return the Blank CSV structure in Text format. This structure contains CSV headers specially crafted for {template_hash} used in the GET call.

Validate Bulk Sending CSV

Once the CSV file with Bulk Sending data is ready, it should be validated before the Bulk Job is executed.

This validation contains several important points:

  • Checking if the CSV is structured correctly, according to what the template expects.

  • Checking if all required fields are present.

  • Checking if all entries are in the correct format (i.e. email format).

  • Checking for hard limits.

  • Checking for the possible overages or overage restrictions.

Hard limits

At the moment, there is a hard limit of 250 created documents per single Bulk Job. In the future, as the feature evolves these limits will increase.

Validation will always occur

Validation is very important for the Bulk Sending feature. Even if you do not call this endpoint to specifically validate data, the same validation will occur automatically when you try to create a Bulk Job. Meaning, this validation endpoint is for your convenience, to improve user experience in your integration.

API Response if validation is successful

If validation is successful, the Xodo Sign API will return JSON response with validated data which is already prepared in the correct JSON format, for the Create Bulk Job endpoint.

API Response if validation is not successful

If validation is not successful, API will return JSON response with type "validation_errors". This JSON will contain "details" with an array of all validations that were not successful. Each validation has a row, validation error and description.

List of Bulk Sending validation violations

HTTP POST

Validate Bulk Sending
CSV from Template

API Request

https://api.eversign.com/template/{template_hash}/bulk/csv/validate
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID

CSV file should be attached as form element within the body of API request --form 'csv_with_bulk_data=@".../csv_file_with_values.csv"'

API Response if validation is successful

[
  [
    "sender name",
    "sender email",
    "recipient name",
    "recipient email"
  ],
  [
    "signer1",
    "signer1@test.com",
    "recipient1",
    "recipient1@test.com"
  ],
  [
    "signer2",
    "signer2@test.com",
    "recipient2",
    "recipient2@test.com"
  ],
  ...
]

API Response if validation is not successful

{
  "success": false,
  "error": {
    "code": 0,
    "type": "validation_errors"
  },
  "details": [
    {
      "row": 1,
      "validation_error": "required_entry_is_not_provided",
      "description": "Required entry for 'sender name' is not provided"
    },
    {
      "row": 2,
      "validation_error": "required_entry_is_not_provided",
      "description": "Required entry for 'sender email' is not provided"
    },
    {
      "row": 3,
      "validation_error": "required_entry_validation_failed",
      "description": "Entry 'signer3test.com' for 'sender email' is not an email"
    }
  ]
}

Create Bulk Job

Bulk Sending endpoints can be used to send multiple documents based on a specific template.

Look up your template

Before using a template for Bulk Sending you might want to access it in order to review its signer and recipient roles, fields and other settings. In order to look up your template, a GET Template request is required.

Be aware of possible additional costs

Bulk Sending feature is generally used to generate lots of documents. All of these documents are counted against your API quota, which increases the probability that your quota will be used up. When this happens, the system will check if you have overage allowed. If overages are allowed, Bulk Job will proceed and you will be additionally charged for additional API documents.

Bulk Job Status

Once Bulk Job is executed, an API response will contain a status parameter

A status parameter can have the following values:

  • DOCUMENTS_CREATED - all documents from the Bulk Job were successfully created

  • DOCUMENTS_CREATED_WITH_ERRORS - some documents from the Bulk Job were not successfully created

HTTP POST

Create Bulk Job

API Request

https://api.eversign.com/template/{template_hash}/bulk/job
  ? access_key = YOUR_ACCESS_KEY
  & business_id = 1
[
  [
    "sender name",
    "sender email",
    "recipient name",
    "recipient email"
  ],
  [
    "signer1",
    "signer1@test.com",
    "recipient1",
    "recipient1@test.com"
  ],
  [
    "signer2",
    "signer2@test.com",
    "recipient2",
    "recipient2@test.com"
  ],
  ...
]
{
  "entry_id": 33,
  "template_hash": "d5516...95ef77d",
  "business_id": 1,
  "user_id": 1,
  "document_count": 6,
  "created_at": "2021-01-01T12:00:00+00:00",
  "status": "COMPLETED"
}

Get Bulk Job by id

An existing Bulk Job can be retrieved from the server by providing its unique id.

API Response Object:

Possible values for status:

  • DOCUMENTS_CREATED

  • DOCUMENTS_CREATED_WITH_ERRORS

HTTP GET

Get Bulk Job by id

API Request

https://api.eversign.com//bulk_job/{bulkSendingJobId}
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID

API Response

A successful response will return a Bulk Job object as JSON

{
  "entry_id": 21,
  "template_hash": "be259ae9d7e98247fbad924f0bc0479e",
  "business_id": 7,
  "user_id": 5,
  "document_count": 211,
  "created_at": "2022-02-10T14:53:17+00:00",
  "status": "DOCUMENTS_CREATED"
}

Get Bulk Job Status by id

A status of a Bulk Job can be retrieved from the server by providing the job's unique id.

API Response Object:

origin_template Object

bulk_job_owner Object

Contains information about the Bulk Job owner

HTTP GET

Get Bulk Job Status
by id

API Request

https://api.eversign.com//bulk_job/{bulkSendingJobId}/status
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID

API Response

A successful response will return a Bulk Job Status as JSON

{
  "bulk_job_created_at": "2022-02-10T14:53:17+00:00",
  "completed_documents": 11,
  "cancelled_documents": 2,
  "in_progress_documents": 1,
  "document_count": 14,
  "origin_template": {
    "business_id": "139",
    "document_hash": "9ae99c2824047ab5d9ed27fbf0be7e49",
    "document_title": "Partnership_Contract_template.pdf",
    "document_creation_ts": 1644504697
  },
  "bulk_job_owner": {
    "email_address": "john.doe@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
}

Get Bulk Job Documents by id

Users can retrieve Documents of a Bulk Job from the server by providing a job id. In addition, the user may paginate the results by providing the additional query to the HTTP GET request.

limit Parameter (optional):

number (0 - 1000) of documents to fetch (default: 100)

offset Parameter (optional):

number (min. 0) of documents to skip

API Response Object

pagination Object: contains pagination data

data Array: contains document objects

HTTP GET

Get Bulk Job
Documents by id

API Request

https://api.eversign.com//bulk_job/{bulkSendingJobId}/documents
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID
  & limit = LIMIT
  & offset = OFFSET

API Response

A successful response will return Documents from a Bulk Job.

{
  "pagination": {
    "limit": 100,
    "offset": 0,
    "count": 14,
    "total": 14
  },
  "data": [
  {
    "entry_id": 39,
    "business_id": "13",
    "document_hash": "a39a04440186d77420a6639ea008e5e7",
    "api_client_id": "eversign_api",
    "user_id": "27",
    "is_draft": "0",
    "is_completed": "1",
    "is_pending_completion": "0",
    "is_template": "0",
    "is_embedded_template": "0",
    "is_iframe": "0",
    "template_permission": "",
    "require_all_signers": "0",
    "enable_reminders": "0",
    "enable_flexible_signing": "0",
    "is_archived": "0",
    "is_trashed": "0",
    "is_deleted": "0",
    "is_cancelled": "0",
    "is_expired": "0",
    "document_type": "1",
    "document_title": "Partnership_Contract_template.pdf",
    "document_subject": "",
    "document_message": "",
    "document_status": "",
    "document_creation_ts": 1644504797,
    "use_signer_order": "0",
    "document_redirect_url": "",
    "document_redirect_url_decline": "",
    "origin_template_id": "9ae99c2824047ab5d9ed27fbf0be7e49",
    "template_disable_email_validation": "0",
    "add_signature_page": "0",
    "document_expiration_ts": "1652280797",
    "document_completion_ts": "",
    "document_file_checksum": "04157c28f984a810d42d6d564719221b",
    "document_completion_attempt_ts": "",
    "document_failed_completion_count": "",
    "oauth_attribution_app_id": "",
    "oauth_attribution_charge_user_id": "",
    "general_attribution_charge_user_id": "27",
    "custom_requester_name": "",
    "custom_requester_email": "",
    "document_meta_summary": "{\"s\":[{\"n\":\"John\",\"e\":\"John.Doe@example.com\",\"u\":\"\"}],\"r\":[],\"f\":[{\"n\":\"Partnership_Contract_template.pdf\"}]}",
    "pending_vault_id": "",
    "pending_vault_id_status": "",
    "api_overage_amount": null,
    "bulk_sending_job": {
      "entry_id": 479,
      "template_hash": "9ae99c2824047ab5d9ed27fbf0be7e49",
      "business_id": 139,
      "user_id": 27,
      "document_count": 14,
      "created_at": "2022-02-10T14:53:17+00:00",
      "status": "DOCUMENTS_CREATED"
    }
  },
  {...},
}

Get Bulk Jobs list

Users can retrieve a list of their Bulk Jobs from the server. In addition, the user may paginate the results by providing the additional query to the HTTP GET request.

limit Parameter (optional):

number (0 - 1000) of documents to fetch (default: 100)

offset Parameter (optional):

number (min. 0) of documents to skip

API Response Object

pagination Object: contains pagination data

data Array: contains Bulk Job objects

HTTP GET

Get Bulk Jobs list

API Request

https://api.eversign.com//bulk_job
  ? access_key = YOUR_ACCESS_KEY
  & business_id = BUSINESS_ID
  & limit = LIMIT
  & offset = OFFSET

API Response

A successful response will return a list of Bulk Jobs for this user.

{
  "pagination": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "total": 21
  },
  "data": [
    {
      "entry_id": 47,
      "template_hash": "7e48240f0be2594fbabc2979ed97ae9d",
      "business_id": 13,
      "user_id": 27,
      "document_count": 14,
      "created_at": "2022-02-12T16:11:02+00:00",
      "status": "DOCUMENTS_CREATED",
      "document_title": "My original template 53"
    },
    {...}
  ]
}

Audit Log

An audit log of a document can be accessed using the HTTP GET call. If successful, the API will return the entire history of the document's actions as an array of objects.

API Response Objects:

HTTP GET

Audit Log

API Request

A request to the following URL should result with a list of events for a document:

https://api.eversign.com/document/{document_hash}/audit_log
  ? access_key = YOUR_ACCESS_KEY
  & business_id = YOUR_BUSINESS_ID

API Response

A successful response will contain every event performed on this document.

[
  {...},
  {
    "entry_id": 202201,
    "event_type": "document_viewed",
    "event_assoc_signer": "1",
    "event_assoc_signer_name": "John Doe",
    "event_assoc_signer_email": "John.Doe@eversign.com",
    "event_assoc_signer_additional_data": {
      "signer_authentication_sms_enabled": 1,
      "signer_authentication_phone_number": "+15550000000"
    },
    "time_stamp": "1642604310",
    "document_checksum": "1f1beb5b97c283ff1f7c3d9500aed8de",
    "combined_checksum": "6730698649a3e4e300948bc57f7a94f4",
    "client_ip": "127.0.0.1",
    "signer_ip": "",
    "merged_document_file_checksum": ""
  },
]

Errors

Whenever an API request to the Xodo Sign API fails, an error will be returned. Errors always carry "success": false, an error code, a type object and an info string.

There are different types of errors, presented and described in the table below.

Sample Error

Please find below an example error message returned by the Xodo Sign API:

{
  "success": false,
  "error": {
    "code": 103,
    "type": "invalid_api_function",
    "info": "This API Function does not exist."
  }
}