Creating an e-sign document from template

Important

A POST request to the /templates/{template_id}/documents endpoint will fail if the account has exceeded the Document templates quota.

  1. Start the Python shell and configure its session.

    The following variables should be available now:

    >>> base_url  # the base URL of the API
    'https://eu2-cloud.acronis.com/api/notary/v2'
    >>> auth  # the 'Authorization' header value with the access token
    {'Authorization': 'Bearer 8770b34b74f9e4d9424eff50c38182bb4ae7f5596582ae61900b1b6a23e3ec58'}
    
  2. Define a variable named template_id, and then assign an ID of the e-sign document template to this variable:

    >>> template_id = '3922edc2-d70d-4d5d-9789-5d739a6e7bdc'
    
  3. Define a variable named template_data, and then assign an object with the name that will be used for the created e-sign document to this variable:

    >>> template_data = {
    ...     'document_name': 'template_name'
    ... }
    
  4. Pre-fill the document template fields with placeholders. The emails provided in the placeholders will be used for sending the invites to the signees:

    >>> template_data['template_fields'] = {
    ...     'Signer 1': {'signee':'john.doe@acronis.com'},
    ...     'Signer 2': {'signee':'john2.doe@acronis.com'}
    ... }
    
  5. Convert the template_data object to a JSON text:

    >>> template_data = json.dumps(template_data, indent=4)
    >>> print(template_data)
    {
        "document_name": "template_name",
        "template_fields": {
            "Signer 1": {"signee":"john.doe@acronis.com"},
            "Signer 2": {"signee":"john2.doe@acronis.com"}
        }
    }
    
  6. Send a POST request to the /templates/{template_id}/documents endpoint:

    >>> response = requests.post(
    ...     f'{base_url}/templates/{template_id}/documents',
    ...     headers={'Content-Type': 'application/json', **auth},
    ...     data=template_data,
    ... )
    
  7. Check the status code of the response:

    >>> response.status_code
    200
    

    Status code 200 means that the notary service has created the e-sign document from template, initiated the signing and sent email messages with the signature request to the signees. To check the signing status, refer to Checking the status of signing process.

    A different status code means that an error has occurred. For the details, refer to “Status and error codes”.

    Also, the response body contains an object containing the document ID and the list of signees formatted as a JSON text. When converted to an object, it will look as follows:

    >>> pprint.pprint(response.json())
    {'document_id': '2e6b838c7fb3c98d86f841661a56505e15a54b92de568f4b0417605062564256',
    'signers': [{'email': 'john.doe@acronis.com',
                'fullname': '',
                'id': 'a011a73c-3798-4de4-98fe-c1cac06c4b7e',
                'owner': False,
                'signed_at': None},
                {'email': 'john2.doe@acronis.com',
                'fullname': '',
                'id': 'a011a73c-3798-4de4-98fe-c1cac06c4b7e',
                'owner': False,
                'signed_at': None}]}
    

Full code example

 1#!/usr/bin/env python3
 2
 3import requests  # Will be used for sending requests to the API.
 4import hashlib   # Will be used for calculating hash values.
 5import os.path   # Will be used for path-related operations.
 6import pprint    # Will be used for formatting the output of JSON objects received in API responses.
 7import json      # Will be used for converting dictionaries into JSON text
 8
 9# Define variables named "LOGIN" and "PASSWORD" and then assign them with your account credentials
10LOGIN = '<your login>'        # Change login here
11PASSWORD = '<your password>'  # Change password here
12
13# Define a variable named "cloud_url" and then assign it with the URL of the cloud platform
14cloud_url = 'https://cloud.acronis.com'
15
16# Fetch the URL of the data center where your account is located by sending a GET request to the "/api/1/accounts" endpoint
17response = requests.get(
18    f'{cloud_url}/api/1/accounts',
19    params={'login': LOGIN}
20)
21response.raise_for_status()
22
23# Convert the JSON text that the response body contains to a dictionary and store the data center URL
24# in a variable that will be used in further requests
25server_url = response.json()['server_url']
26
27# Define a variable named "account_creds", and then assign the username and password to this variable
28account_creds = {
29    'username': LOGIN,
30    'password': PASSWORD
31}
32
33# Generate a token by sending a POST request to the "/api/2/idp/token" with your account credentials to the cloud platform
34response = requests.post(
35    f'{server_url}/api/2/idp/token',
36    headers={'Content-Type': 'application/x-www-form-urlencoded'},
37    data={'grant_type': 'password', **account_creds}
38)
39response.raise_for_status()
40
41# Convert the JSON text that the response body contains to a dictionary and then assign it to a variable named "token_info"
42token_info = response.json()
43
44# Define a variable named "auth" and then assign it with a dictionary with "Authorization" key containing
45# token string formatted as "Bearer <access_token>"
46auth = {
47    'Authorization': 'Bearer ' + token_info['access_token']
48}
49
50# Define a variable named "base_url", and then assign the API base URL using the data center URL
51# to this variable
52base_url = f'{server_url}/api/notary/v2'
53
54# Define a variable named "template_id" and then assign it with an ID of the e-sign document template
55template_id = '3922edc2-d70d-4d5d-9789-5d739a6e7bdc'
56
57# Define a variable named "template_data", and then assign an object with the name that will be used for the created e-sign document to this variable
58template_data = {
59  "document_name": "template_name"
60}
61
62# Pre-fill the document template fields with placeholders. The emails provided in the placeholders will be used for sending the invites to the signees
63template_data["template_fields"] = {
64    "Signer 1": {"signee":"john.doe@acronis.com"},
65    "Signer 2": {"signee":"john2.doe@acronis.com"}
66}
67
68# Convert the "template_data" dictionary to a JSON text
69template_data = json.dumps(template_data, indent=4)
70
71# Create an e-sign document from the template and send the signature requests by sending a POST request to the "/templates/{template_id}/documents" endpoint
72response = requests.post(
73    f'{base_url}/templates/{template_id}/documents',
74    headers={'Content-Type': 'application/json', **auth},
75    data=template_data,
76)
77response.raise_for_status()