Skip to main content

Sign API (1)

Download OpenAPI specification:Download

Sign by CM.com offers the ability to have end users sign PDF documents online.

Before you can start using the API, you need to be provided with credentials. You will have received these credentials, consisting of a Key and a Key Id, when you registered for Sign. If you have not yet received any credentials, you can request them via this link. This will grant you access to the sandbox environment.

The credentials provided by CM.com are confidential and should be kept secret.

Document

Upload documents

Upload document

Upload a new PDF document to be added to a dossier. Make sure to indicate the Content-Type correctly for the file parameter of the form data. The file should be no more than 10MB. The filename will be visible to the end user.

Authorizations:
JWT
Request Body schema: multipart/form-data
required
file
string <application/pdf>

The PDF document to upload.

Responses

Response samples

Content type
application/json
{
  • "id": "8d817359-7eb8-4b6e-9030-17ac286b7dc0",
  • "name": "Purchase contract",
  • "hash": "string",
  • "uploadDateTime": "2019-08-24T14:15:22Z",
  • "size": 3028,
  • "contentType": "application/pdf"
}

Dossier

Manage dossier

Create dossier

Create a new dossier to sign. To be notified of changes to the dossier, subscribe to webhook events. For the event structure see the Webhook Events section.

Authorizations:
JWT
Request Body schema: application/json
required

You need to provide one or more file id's you've uploaded previously and add the invitees and fields for the persons that need to sign or review the document(s).

A dossier owner can be specified, but this is optional.

name
required
string <= 255 characters

human readable name for this dossier

locale
string (Locale)
Enum: "de-DE" "en-US" "es-ES" "fr-FR" "hu-HU" "it-IT" "ja-JP" "nl-NL" "pl-PL" "pt-PT" "ro-RO" "sk-SK"

Locale of the language to be used in the dossier

prepare
boolean or null

Place fields using the web interface

prepareReturnUrl
string or null

Optionally redirect the user to your website after the fields are placed. The url must begin with https://

timezone
string or null

The identifier of a time zone in the IANA database. This will change the time zone of dates used in communication to the recipient and dossier owner. By default Etc/UTC is used when no value is set.

expiresIn
integer <int32> [ 60 .. 7776000 ]
Default: 2592000

The expiry in seconds since the dossier was created

reminderIn
integer or null [ 86400 .. 7776000 ]

The time in seconds after the invite was sent to an invitee, after which an automatic reminder will be sent. Reminders only work if the invite emails were sent by Sign. To cancel all reminders for an existing dossier set value to null

archive
boolean
Default: false

This determines if the dossier needs to be archived.

required
Array of objects (CreateFile) non-empty
Array of objects (CreateFile) >= 0 items
Array of objects (Owner)
Array of objects (Invitee)
template
string or null <uuid>
Default: null

Create a dossier from a template. This means that files and field positions are automatically copied from the template. You can find the template ID in the dashboard.

object

Key-value pairs for template labels. The key must match the exact value of the predefined label in the template. It will then be overwritten by the value in the request.

Responses

Request samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "archive": false,
  • "files": [
    ],
  • "attachments": [
    ],
  • "owners": [
    ],
  • "invitees": [
    ],
  • "template": "06c2e210-54a8-417f-adf2-fc767c31c929",
  • "templateLabelValues": {
    }
}

Response samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "completed": false,
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "owners": [
    ],
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ]
}

Get dossier

Retrieve a single dossier and all its related information

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Responses

Response samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "completed": false,
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "owners": [
    ],
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ]
}

Update dossier

Modify a single dossier and its related information

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Request Body schema: application/json
required
name
required
string <= 255 characters

human readable name for this dossier

locale
string (Locale)
Enum: "de-DE" "en-US" "es-ES" "fr-FR" "hu-HU" "it-IT" "ja-JP" "nl-NL" "pl-PL" "pt-PT" "ro-RO" "sk-SK"

Locale of the language to be used in the dossier

prepare
boolean or null

Place fields using the web interface

prepareReturnUrl
string or null

Optionally redirect the user to your website after the fields are placed. The url must begin with https://

timezone
string or null

The identifier of a time zone in the IANA database. This will change the time zone of dates used in communication to the recipient and dossier owner. By default Etc/UTC is used when no value is set.

expiresIn
integer <int32> [ 60 .. 7776000 ]
Default: 2592000

The expiry in seconds since the dossier was created

reminderIn
integer or null [ 86400 .. 7776000 ]

The time in seconds after the invite was sent to an invitee, after which an automatic reminder will be sent. Reminders only work if the invite emails were sent by Sign. To cancel all reminders for an existing dossier set value to null

Array of objects (ModifyDossierOwner)
Array of objects (ModifyFile) non-empty
Array of objects (ModifyInvitee)
Array of objects (ModifyFile) >= 0 items

Responses

Request samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "owners": [
    ],
  • "files": [
    ],
  • "invitees": [
    ],
  • "attachments": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "completed": false,
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "owners": [
    ],
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ]
}

Delete dossier

Remove a single dossier and its related information

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Responses

Response samples

Content type
application/json
{
  • "id": "22470767-904e-4553-9586-d7ed4f2b330e",
  • "name": "Purchase contract",
  • "state": "pending",
  • "locale": "de-DE",
  • "completed": false,
  • "prepare": false,
  • "prepareReturnUrl": "https://example.com",
  • "timezone": "Europe/Amsterdam",
  • "expiresIn": 2592000,
  • "reminderIn": 604800,
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "owners": [
    ],
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ]
}

Download signed files

Download a ZIP file containing the complete result of a dossier. The ZIP file will include the PDF files and audit report.

You can also download the PDF file(s) and audit report separately by using the type query parameter

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

query Parameters
type
string
Enum: "zip" "file" "auditReport"
Example: type=zip

Specify the download type. Defaults to zip

file
string <uuid>

When a dossiers has multiple files and download type is file you must specify which file to download.

This parameter will match the id of a file object

When there is only one document per dossier you can omit this parameter and it will automatically determine the file to download.

Responses

Response samples

Content type
application/json
{
  • "status": 0,
  • "message": "string"
}

Get field value

Retrieve the field value.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

fieldId
required
string <uuid>
Example: cb222836-fd18-4ec5-8283-63ca2cd2dc0f

a uuid string that identifies a field

Responses

Response samples

Content type
application/json
{
  • "type": "text",
  • "value": "Example"
}

Gets all field values

Returns the field values for fields of type checkbox, label, radio, text, and textarea

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Invite

Manage invites

Get all invites

List of all the invites in the dossier

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Responses

Response samples

Content type
application/json
[]

Create invites

Add invites to the dossier if allowed. In the response you will receive the id for this new invite.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

Request Body schema: application/json
required

Add invites to the dossier that needs to be signed

Array
inviteeId
string <uuid>

The ID of the invitee

channel
string or null (ChannelType)
Enum: "email" "sms" "whatsapp"

Send invite via email, SMS or WhatsApp. Please note that SMS and WhatsApp are only available when configured for your account.

If this field is not provided or set to null, the invite will not be sent automatically. Instead, the inviteUri will be included in the response, and the link must be manually provided to the invitee.

object
reminder
boolean

Marker to indicate this invite is a reminder of an earlier invite

expiresIn
integer <int32> [ 60 .. 7776000 ]
Default: 2592000

The expiry in seconds since invite was created

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
[]

Get invite

Retrieve the invite from the dossier.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

inviteId
required
string <uuid>
Example: 6f840cea-796e-4d5d-97ce-20114af5f51c

a uuid string that identifies a single invite

Responses

Response samples

Content type
application/json
{}

Delete invite

Remove a single invite from the dossier.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

inviteId
required
string <uuid>
Example: 6f840cea-796e-4d5d-97ce-20114af5f51c

a uuid string that identifies a single invite

Responses

Response samples

Content type
application/json
{}

Archive

Manage archive

Get all dossiers

Retrieve all dossiers in the archive

Authorizations:
JWT

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "perPage": 10,
  • "currentPage": 1,
  • "lastPage": 1,
  • "from": 1,
  • "to": 1,
  • "data": [
    ]
}

Delete dossier

Delete a dossier from the archive

Authorizations:
JWT
path Parameters
archiveId
required
string <uuid>
Example: a4dfcba2-cfaa-4240-8e48-5baa7a25bcac

a uuid string that identifies an archived dossier

Responses

Response samples

Content type
application/json
{
  • "status": 0,
  • "message": "string"
}

Download file

Download a file from a dossier

Authorizations:
JWT
path Parameters
archiveId
required
string <uuid>
Example: a4dfcba2-cfaa-4240-8e48-5baa7a25bcac

a uuid string that identifies an archived dossier

fileId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b331f

a uuid string that identifies a file

Responses

Response samples

Content type
application/json
{
  • "status": 0,
  • "message": "string"
}

Channels

Retrieve invite channels

Get configured channels

Retrieve all channels that can be used to send an invite.

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Invitee

Update invitee

Modify a single invitee and its related information. When the dossier is in pending state only the name, email and phoneNumber can be modified. Existing invites for the invitee are automatically invalidated if the email or phoneNumber is changed.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

inviteeId
required
string <uuid>
Example: c4b5020f-a092-4516-b890-81a635ebe470

a uuid string that identifies a single invitee

Request Body schema: application/json
required
id
required
string <uuid> (InviteeReference)

Optional. Indicates that only a particular invitee is allowed/required to use a field.

name
required
string <= 255 characters

Name of the person invited to read and/or sign the document

email
string <email> <= 255 characters

A valid email address

locale
string or null (Locale)
Enum: "de-DE" "en-US" "es-ES" "fr-FR" "hu-HU" "it-IT" "ja-JP" "nl-NL" "pl-PL" "pt-PT" "ro-RO" "sk-SK"

Locale of the language to be used in invitations.

position
integer

Set the order of signing. For example if there are two invitees set position 1 for the first invitee and position 2 for the second invitee. It is possible to set multiple invitees on the same position. Make sure there is no gap between the positions.

authenticationMethods
Array of strings
Items Enum: "otp_sms" "otp_email" "otp_whatsapp" "otp_voice"
identificationMethod
string (IdentificationMethod)
Deprecated
Enum: "idin" "iban" "otp_sms" "otp_email" "otp_whatsapp" "otp_voice" "qualified"

Additional user identification is required. When you select qualified it cannot be used with other identification methods. Please note that this is only available when configured for your account.

identificationMethods
Array of strings (IdentificationMethod)
Items Enum: "idin" "iban" "otp_sms" "otp_email" "otp_whatsapp" "otp_voice" "qualified"
notifications
Array of strings or null
Enum: "invite" "signed" "reviewed" "declined" "completed"
Array of objects (Payment)

Additional payment is required. Please note that this is only available when configured for your account.

phoneNumber
string

The phone number of the invitee in E.164 format. Required when identificationMethod is otp.

reference
string <= 255 characters

A reference to an external identifier of your invitee.

readOnly
boolean
Default: false

Indicates that this invitee needs to review the dossier, instead of signing it

state
string
Enum: "approved" "declined"

The invitee has approved or declined the dossier

redirectUrl
string or null <url>
Default: null

URL to redirect the invitee to after signing, approving or declining the dossier. If not set, the default confirmation page will be shown.

Array of objects (Field)

Responses

Request samples

Content type
application/json
{
  • "id": "c6f7eb6f-7414-4f5e-9096-85c6c5a48f84",
  • "name": "Peter Invitee",
  • "email": "[email protected]",
  • "locale": "de-DE",
  • "position": 1,
  • "authenticationMethods": [
    ],
  • "identificationMethod": "idin",
  • "identificationMethods": [
    ],
  • "notifications": [
    ],
  • "payments": [
    ],
  • "phoneNumber": "+31601234567",
  • "reference": "6c38955e-7324-41e7-97dd-0bcf55e275e2",
  • "readOnly": false,
  • "state": "approved",
  • "redirectUrl": null,
  • "fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "c6f7eb6f-7414-4f5e-9096-85c6c5a48f84",
  • "name": "Peter Invitee",
  • "email": "[email protected]",
  • "locale": "de-DE",
  • "position": 1,
  • "authenticationMethods": [
    ],
  • "identificationMethod": "idin",
  • "identificationMethods": [
    ],
  • "notifications": [
    ],
  • "payments": [
    ],
  • "phoneNumber": "+31601234567",
  • "reference": "6c38955e-7324-41e7-97dd-0bcf55e275e2",
  • "readOnly": false,
  • "state": "approved",
  • "stateComment": null,
  • "stateChanged": null,
  • "redirectUrl": null,
  • "fields": [
    ]
}

Identification

Get identifications

Retrieve the identification methods and results per invitee.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

inviteeId
required
string <uuid>
Example: c4b5020f-a092-4516-b890-81a635ebe470

a uuid string that identifies a single invitee

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Payment

Get payments

Retrieve the payment methods and statuses per invitee.

Authorizations:
JWT
path Parameters
dossierId
required
string <uuid>
Example: 22470767-904e-4553-9586-d7ed4f2b330e

a uuid string that identifies a dossier

inviteeId
required
string <uuid>
Example: c4b5020f-a092-4516-b890-81a635ebe470

a uuid string that identifies a single invitee

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Client

Manage clients. A client consists of a key and secret and provides access to the API. Please note that access must be explicitly granted in order to use the client management calls.

Create client

Create a client.

This endpoint is only available to API clients with admin access. Admin access allows an API client to manage other API clients through the /clients endpoints. Admin access is not enabled by default and must be explicitly granted by CM.com. It cannot be requested or changed through the API.

There is no dedicated endpoint to check your admin access in advance: calling this endpoint without admin access returns 403 Forbidden, while a successful call confirms you have admin access.

Authorizations:
JWT
Request Body schema: application/json
required
name
string

Client name to be used in communication to the end-user. Defaults to the account name when not set.

description
string

Client description

disabled
boolean

Indicates if client access is disabled

Responses

Request samples

Content type
application/json
{
  • "name": "Organization A",
  • "description": "API",
  • "disabled": false
}

Response samples

Content type
application/json
{
  • "kid": "fbd6a3ba-7b95-4ed1-846a-9dfac9cfb704",
  • "name": "Organization A",
  • "description": "API",
  • "admin": false,
  • "disabled": false,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "key": "fPm3MpxBBN5AKmvBQSrLxXCbE1pF6T07JjNXZwsJpUobknaqJA"
}

Get all clients

Retrieve all clients.

This endpoint is only available to API clients with admin access. Admin access allows an API client to manage other API clients through the /clients endpoints. Admin access is not enabled by default and must be explicitly granted by CM.com. It cannot be requested or changed through the API.

There is no dedicated endpoint to check your admin access in advance: calling this endpoint without admin access returns 403 Forbidden, while a successful call confirms you have admin access.

Authorizations:
JWT

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get client

Retrieve the client.

This endpoint is only available to API clients with admin access. Admin access allows an API client to manage other API clients through the /clients endpoints. Admin access is not enabled by default and must be explicitly granted by CM.com. It cannot be requested or changed through the API.

There is no dedicated endpoint to check your admin access in advance: calling this endpoint without admin access returns 403 Forbidden, while a successful call confirms you have admin access.

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Responses

Response samples

Content type
application/json
{
  • "kid": "fbd6a3ba-7b95-4ed1-846a-9dfac9cfb704",
  • "name": "Organization A",
  • "description": "API",
  • "admin": false,
  • "disabled": false,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update client

Update a client.

This endpoint is only available to API clients with admin access. Admin access allows an API client to manage other API clients through the /clients endpoints. Admin access is not enabled by default and must be explicitly granted by CM.com. It cannot be requested or changed through the API.

There is no dedicated endpoint to check your admin access in advance: calling this endpoint without admin access returns 403 Forbidden, while a successful call confirms you have admin access.

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Request Body schema: application/json
required
name
string

Client name to be used in communication to the end-user. Defaults to the account name when not set.

description
string

Client description

disabled
boolean

Indicates if client access is disabled

Responses

Request samples

Content type
application/json
{
  • "name": "Organization A",
  • "description": "API",
  • "disabled": false
}

Response samples

Content type
application/json
{
  • "kid": "fbd6a3ba-7b95-4ed1-846a-9dfac9cfb704",
  • "name": "Organization A",
  • "description": "API",
  • "admin": false,
  • "disabled": false,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Webhook

Manage webhooks

Add webhook

Add a webhook

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Request Body schema: application/json
required
url
required
string <url>

The URL must begin with https://

events
Array of strings (WebhookType)
Items Enum: "dossier.invite.created" "dossier.invite.expired" "dossier.invite.undelivered" "dossier.invite.viewed" "dossier.invitee.state.updated" "dossier.prepared" "dossier.state.updated" "dossier.invitee.reassignRequest.state.updated"

The subscribed webhook events

object

The request HTTP headers

Responses

Request samples

Content type
application/json
{
  • "events": [
    ],
  • "headers": {
    }
}

Response samples

Content type
application/json
{
  • "id": "eab04267-d849-46d1-9fe3-e7ff0b2c55cf",
  • "events": [
    ],
  • "headers": {
    },
  • "disabled": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Get all webhooks

Retrieve all webhooks

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get webhook

Retrieve a webhook

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

webhookId
required
string <uuid>
Example: b411f416-bec1-4714-91c1-a97daad86b01

a uuid string that identifies a webhook

Responses

Response samples

Content type
application/json
{
  • "id": "eab04267-d849-46d1-9fe3-e7ff0b2c55cf",
  • "events": [
    ],
  • "headers": {
    },
  • "disabled": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update webhook

Update a webhook

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

webhookId
required
string <uuid>
Example: b411f416-bec1-4714-91c1-a97daad86b01

a uuid string that identifies a webhook

Request Body schema: application/json
required
url
string <url>

The URL must begin with https://

events
Array of strings (WebhookType)
Items Enum: "dossier.invite.created" "dossier.invite.expired" "dossier.invite.undelivered" "dossier.invite.viewed" "dossier.invitee.state.updated" "dossier.prepared" "dossier.state.updated" "dossier.invitee.reassignRequest.state.updated"

The subscribed webhook events

object

The request HTTP headers

disabled
boolean

Provide with value false to re-enable automatically disabled webhooks.

Responses

Request samples

Content type
application/json
{
  • "events": [
    ],
  • "headers": {
    },
  • "disabled": false
}

Response samples

Content type
application/json
{
  • "id": "eab04267-d849-46d1-9fe3-e7ff0b2c55cf",
  • "events": [
    ],
  • "headers": {
    },
  • "disabled": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete webhook

Delete a webhook

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

webhookId
required
string <uuid>
Example: b411f416-bec1-4714-91c1-a97daad86b01

a uuid string that identifies a webhook

Responses

Response samples

Content type
application/json
{
  • "id": "eab04267-d849-46d1-9fe3-e7ff0b2c55cf",
  • "events": [
    ],
  • "headers": {
    },
  • "disabled": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Webhook Events

Events sent to your webhook URL when something happens in the lifetime of a dossier. Webhooks are subscribed to via the Webhook endpoints.

More event types might be added in the future, so implementations should strictly vary their behavior on the type attribute.

Dossier state updated Webhook

The state of the dossier is updated. For example, from pending to completed. This event is sent by default.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.state.updated"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "b041a287-bc92-4469-801e-ae1a39c08f6e",
  • "type": "dossier.state.updated",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    }
}

Dossier prepared Webhook

The prepare step has been completed: fields are added to the dossier and invites should be sent. This event is sent by default.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.prepared"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "c36f5fc9-b412-4aeb-9cbd-bdb6cdca581f",
  • "type": "dossier.prepared",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    }
}

Invite created Webhook

An invite has been created.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invite.created"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (InviteWebhook)

Basic unprivileged information of the Invite referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "523075b3-dae7-4f2e-89ba-b194d2b56c2f",
  • "type": "dossier.invite.created",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "invite": {
    }
}

Invite expired Webhook

An invite has expired.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invite.expired"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (InviteWebhook)

Basic unprivileged information of the Invite referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "115c17e0-e714-465c-a3a4-f33700a69d7b",
  • "type": "dossier.invite.expired",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "invite": {
    }
}

Invite undelivered Webhook

An invite cannot be delivered. This event is sent by default.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invite.undelivered"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (InviteWebhook)

Basic unprivileged information of the Invite referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "e5210e6e-058b-4898-9f71-16f18eb6c141",
  • "type": "dossier.invite.undelivered",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "invite": {
    }
}

Invite viewed Webhook

The invite has been viewed by the invitee.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invite.viewed"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (InviteWebhook)

Basic unprivileged information of the Invite referred to by a webhook event

required
object (InviteeWebhook)

Basic unprivileged information of the Invitee referred to by a webhook event. The state is only present when the invitee state was updated.

Responses

Request samples

Content type
application/json
{
  • "id": "e20d315d-9b37-4407-a036-22f4fdafb226",
  • "type": "dossier.invite.viewed",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "invite": {
    },
  • "invitee": {
    }
}

Invitee state updated Webhook

The invitee state is updated. For example, to approved or declined.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invitee.state.updated"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (InviteeWebhook)

Basic unprivileged information of the Invitee referred to by a webhook event. The state is only present when the invitee state was updated.

Responses

Request samples

Content type
application/json
{
  • "id": "12a1eded-01ca-4e56-9e6c-125842dca977",
  • "type": "dossier.invitee.state.updated",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "invitee": {
    }
}

Reassign request state updated Webhook

The state of the reassign request is updated. For example, from pending to approved.

Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.

Request Body schema: application/json
required
id
required
string <uuid>

ID of the webhook event

created
required
string <date-time>

The date the webhook event has been created

type
required
string

The type of the event

Value: "dossier.invitee.reassignRequest.state.updated"
required
object (DossierWebhook)

Basic unprivileged information of the Dossier referred to by a webhook event

required
object (ReassignRequestWebhook)

Basic unprivileged information of the Reassign Request referred to by a webhook event

Responses

Request samples

Content type
application/json
{
  • "id": "f5b8eb0b-e976-4dc4-88c9-069f377dd1c9",
  • "type": "dossier.invitee.reassignRequest.state.updated",
  • "created": "2026-01-01T00:00:00+00:00",
  • "dossier": {
    },
  • "reassignRequest": {
    }
}

Branding

Change the branding style that is being used in email communication

Update branding

Create or update branding

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Request Body schema: application/json
required
buttonBackgroundColor
string

The hex color code for the button background color

buttonTextColor
string

The hex color code for the button text color

themePrimaryColor
string

The hex color code for the primary color in the Sign front-end

themeSuccessColor
string

The hex color code for the success color in the Sign front-end

logo
string

Base64 encoded PNG image in Data URL format

logoEmail
string

Base64 encoded PNG image in Data URL format

Responses

Request samples

Content type
application/json
{
  • "buttonBackgroundColor": "#000000",
  • "buttonTextColor": "#ffffff",
  • "themePrimaryColor": "#0000ff",
  • "themeSuccessColor": "#00ff00",
  • "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=",
  • "logoEmail": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
}

Response samples

Content type
application/json
{
  • "buttonBackgroundColor": "#000000",
  • "buttonTextColor": "#ffffff",
  • "themePrimaryColor": "#0000ff",
  • "themeSuccessColor": "#00ff00",
  • "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=",
  • "logoEmail": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
}

Get branding

Retrieve branding

Authorizations:
JWT
path Parameters
kid
required
string <uuid>
Example: 1d1c8b3f-d33f-412c-8a57-e259d3bc5e05

a uuid string that identifies the client

Responses

Response samples

Content type
application/json
{
  • "buttonBackgroundColor": "#000000",
  • "buttonTextColor": "#ffffff",
  • "themePrimaryColor": "#0000ff",
  • "themeSuccessColor": "#00ff00",
  • "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=",
  • "logoEmail": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
}

Reassign Request

Manage reassignment requests

Get all reassign requests

Get all reassignment requests of unexpired dossiers

Authorizations:
JWT

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get reassign request

Get a reassignment request

Authorizations:
JWT
path Parameters
id
required
string
Example: 6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49

A unique uuid string that identifies a reassign request.

Responses

Response samples

Content type
application/json
{
  • "id": "6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49",
  • "state": "approved",
  • "dossier": {
    },
  • "originalInvitee": {
    },
  • "newInvitee": {
    },
  • "reason": "Reassigning to my secretary to sign in my place",
  • "declineReason": "We need you to personally sign this dossier",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}

Update reassign request

Approve or decline a reassignment request

Authorizations:
JWT
path Parameters
id
required
string
Example: 6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49

A unique uuid string that identifies a reassign request.

Request Body schema: application/json
required
state
required
string (ReassignRequestState)
Enum: "approved" "declined" "pending"

State of the reassign request. Only 'approved' and 'declined' are allowed values when updating the reassign request.

declineReason
string or null

The reason for declining the reassign request. Required when declining the reassign request.

object

Responses

Request samples

Content type
application/json
{
  • "state": "approved",
  • "declineReason": "We need you to personally sign this dossier",
  • "newInvitee": {
    }
}

Response samples

Content type
application/json
{
  • "id": "6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49",
  • "state": "approved",
  • "dossier": {
    },
  • "originalInvitee": {
    },
  • "newInvitee": {
    },
  • "reason": "Reassigning to my secretary to sign in my place",
  • "declineReason": "We need you to personally sign this dossier",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}

Template

Manage templates

Get all templates

Retrieve a paginated response of all templates.

Authorizations:
JWT
query Parameters
page
integer or null
Default: 1
Examples: page=1

The page of paginated templates to fetch. If not provided, gets the first page.

sortBy
string or null
Default: "lastUsedAt"
Enum: "lastUsedAt" "name"

The template field to sort the templates by, order depends on the 'order' parameter.

  • lastUsedAt - The date the template was last used at.
  • name - The name of the template.
order
string or null
Default: "asc"
Enum: "asc" "desc"

The order to sort the templates by, depending on the 'sortBy' parameter.

  • asc - Ascending. From A to Z of the name, or least recently used to most recently used.
  • desc - Descending. From Z to A of the name, or most recently used to least recently used.
perPage
integer or null
Default: 10
Examples: perPage=10

Number of templates to show in the response. If not provided, below 1, or above 100, will be set to 10.

search
string or null
Examples: search=HR Template

Filter the templates if their name contains the search text.

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "perPage": 10,
  • "currentPage": 1,
  • "lastPage": 1,
  • "from": 1,
  • "to": 1,
  • "data": [
    ]
}

Create template

Create a new template.

Authorizations:
JWT
Request Body schema: application/json
required
name
required
string <= 255 characters

Name of the template.

Array of objects
Array of objects
Array of objects
Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ],
  • "fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "f3ab4c4b-4276-46cc-bba6-d575696454ad",
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "fields": [
    ],
  • "lastUsedAt": "2026-01-01T00:00:00+00:00",
  • "updatedAt": "2026-01-01T00:00:00+00:00",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}

Get template

Get a specific template.

Authorizations:
JWT
path Parameters
id
required
string <uuid>
Example: 6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49

A unique uuid string that identifies a template.

Responses

Response samples

Content type
application/json
{
  • "id": "f3ab4c4b-4276-46cc-bba6-d575696454ad",
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "fields": [
    ],
  • "lastUsedAt": "2026-01-01T00:00:00+00:00",
  • "updatedAt": "2026-01-01T00:00:00+00:00",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}

Update template

Update a specific template.

Authorizations:
JWT
path Parameters
id
required
string <uuid>
Example: 6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49

A unique uuid string that identifies a template.

Request Body schema: application/json
required
name
required
string <= 255 characters

Name of the template.

Array of objects
Array of objects
Array of objects
Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "invitees": [
    ],
  • "fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "f3ab4c4b-4276-46cc-bba6-d575696454ad",
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "fields": [
    ],
  • "lastUsedAt": "2026-01-01T00:00:00+00:00",
  • "updatedAt": "2026-01-01T00:00:00+00:00",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}

Delete template

Delete a specific template.

Authorizations:
JWT
path Parameters
id
required
string <uuid>
Example: 6f8d0a9d-b85c-4c3f-9e69-5699f1e00f49

A unique uuid string that identifies a template.

Responses

Response samples

Content type
application/json
{
  • "id": "f3ab4c4b-4276-46cc-bba6-d575696454ad",
  • "name": "Contract Template",
  • "files": [
    ],
  • "attachments": [
    ],
  • "fields": [
    ],
  • "lastUsedAt": "2026-01-01T00:00:00+00:00",
  • "updatedAt": "2026-01-01T00:00:00+00:00",
  • "createdAt": "2026-01-01T00:00:00+00:00"
}