├── .gitignore
├── LICENSE
├── OAuth
├── __pycache__
│ ├── jwt.cpython-39.pyc
│ └── utils.cpython-311.pyc
├── code_grant.php
├── jwt.php
├── jwt_auth.py
├── utils.php
└── utils.py
├── PAYMENTS_INSTALLATION.md
├── Quick_ACG
└── launcher.sh
├── README.md
├── config
├── API_ACCOUNT_ID
├── BRAND_ID
├── CLICKWRAP_ID
├── ORGANIZATION_ID
├── ds_access_token.txt
└── settings.example.txt
├── demo_documents
├── Offer_Letter_Dynamic_Table.docx
├── UserData.example.csv
├── World_Wide_Corp_Battle_Plan_Trafalgar.docx
├── World_Wide_Corp_Web_Form.pdf
├── World_Wide_Corp_fields.pdf
├── World_Wide_Corp_fields_shown.docx
├── World_Wide_Corp_lorem.pdf
├── World_Wide_Corp_salary.docx
├── added_document.html
├── doc_1.html
├── order_form.html
└── web-form-config.json
├── docs
└── stripe_skip_account_form_link.png
├── documentation
├── account_id.png
└── stripe_skip_account_form_link.png
├── eg001EmbeddedSigning.sh
├── examples
├── Admin
│ ├── eg001CreateNewUserWithActiveStatus.sh
│ ├── eg002CreateActiveCLMESignUser.sh
│ ├── eg003BulkExportUserData.sh
│ ├── eg004AddUsersViaBulkImport.sh
│ ├── eg005AuditUsers.sh
│ ├── eg006RetrieveDocuSignProfileByEmailAddress.sh
│ ├── eg007RetrieveDocuSignProfileByUserId.sh
│ ├── eg008UpdateUserProductPermissionProfile.sh
│ ├── eg009DeleteUserProductPermissionProfile.sh
│ ├── eg010DeleteUserDataFromOrganization.sh
│ ├── eg011DeleteUserDataFromAccount.sh
│ ├── eg012CloneAccount.sh
│ ├── eg013CreateAccount.sh
│ └── utils.sh
├── Click
│ ├── eg001CreateClickwraps.sh
│ ├── eg002ActivateClickwrap.sh
│ ├── eg003CreateNewClickwrapVersion.sh
│ ├── eg004GetListOfClickwraps.sh
│ ├── eg005GetClickwrapResponses.sh
│ └── eg006EmbedClickwrap.sh
├── ConnectedFields
│ ├── eg001SetConnectedFields.sh
│ └── jsonParsingUtils.py
├── IdEvidence
│ ├── eg001RetrieveEvents.sh
│ └── eg002RetrieveMedia.sh
├── Maestro
│ ├── eg001TriggerWorkflow.sh
│ └── lib
│ │ ├── startServerForEmbeddedWorkflow.php
│ │ └── utils.sh
├── Monitor
│ └── eg001GetMonitoringData.sh
├── Navigator
│ ├── eg001ListAgreements.sh
│ └── eg002GetSingleAgreement.sh
├── Notary
│ ├── eg001SignatureRequestToNotaryGroup.sh
│ ├── eg002InviteNotaryToPool.sh
│ ├── eg003Jurisdictions.sh
│ └── eg004SendWithThirdPartyNotary.sh
├── Rooms
│ ├── eg001CreateRoomWithDataController.sh
│ ├── eg002CreateRoomWithTemplateController.sh
│ ├── eg003ExportDataFromRoomController.sh
│ ├── eg004AddFormsToRoomController.sh
│ ├── eg005GetRoomsWithFiltersController.sh
│ ├── eg006CreateAnExternalFormFillSessionController.sh
│ ├── eg007CreateFormGroup.sh
│ ├── eg008AccessFormGroup.sh
│ ├── eg009AssignFormGroup.sh
│ └── lib
│ │ └── utils.sh
├── WebForms
│ ├── eg001CreateInstance.sh
│ └── lib
│ │ ├── createWebFormTemplate.sh
│ │ └── startServerForWebForms.php
├── Workspaces
│ ├── eg001CreateWorkspace.sh
│ ├── eg002AddDocumentToWorkspace.sh
│ └── eg003SendEnvelopeWithRecipientInfo.sh
└── eSignature
│ ├── eg002SigningViaEmail.sh
│ ├── eg003ListEnvelopes.sh
│ ├── eg004EnvelopeInfo.sh
│ ├── eg005EnvelopeRecipients.sh
│ ├── eg006EnvelopeDocs.sh
│ ├── eg007EnvelopeGetDoc.sh
│ ├── eg008CreateTemplate.sh
│ ├── eg009UseTemplate.sh
│ ├── eg010SendBinaryDocs.sh
│ ├── eg011EmbeddedSending.sh
│ ├── eg012EmbeddedConsole.sh
│ ├── eg013AddDocToTemplate.sh
│ ├── eg014CollectPayment.sh
│ ├── eg015EnvelopeTabData.sh
│ ├── eg016SetTabValues.sh
│ ├── eg017SetTemplateTabValues.sh
│ ├── eg018EnvelopeCustomFieldData.sh
│ ├── eg019SigningViaEmailWithAccessCode.sh
│ ├── eg020SigningViaEmailWithPhoneAuthentication.sh
│ ├── eg022SigningViaEmailWithKnowledgeBasedAuthentication.sh
│ ├── eg023SigningViaEmailWithIDVAuthentication.sh
│ ├── eg024CreatingPermissionProfiles.sh
│ ├── eg025SettingPermissionProfiles.sh
│ ├── eg026UpdatingIndividualPermission.sh
│ ├── eg027DeletingPermissions.sh
│ ├── eg028CreatingABrand.sh
│ ├── eg029ApplyingBrandEnvelope.sh
│ ├── eg030ApplyingBrandTemplate.sh
│ ├── eg031BulkSending.sh
│ ├── eg032PauseSignatureWorkflow.sh
│ ├── eg033UnpauseSignatureWorkflow.sh
│ ├── eg034UseConditionalRecipients.sh
│ ├── eg035ScheduledSending.sh
│ ├── eg036DelayedRouting.sh
│ ├── eg037SigningViaSMS.sh
│ ├── eg038ResponsiveSigning.sh
│ ├── eg039InPersonSigning.sh
│ ├── eg040SetDocumentVisibility.sh
│ ├── eg041EmbeddedSigningCFR.sh
│ ├── eg042DocumentGeneration.sh
│ ├── eg043SharedAccess.sh
│ ├── eg044FocusedView.sh
│ └── lib
│ ├── startServerForFocusedView.php
│ └── utils.sh
└── launcher.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | **/.DS_Store
3 | *.pem
4 | private.key
5 | ENVELOPE_ID
6 | TEMPLATE_ID
7 | settings.txt
8 | config/
9 | debug.log
10 | UserData.csv
11 | config/API_ACCOUNT_ID
12 | config/CLICKWRAP_ID
13 | config/ds_access_token.txt
14 | examples/ConnectedFields/__pycache__/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2018 DocuSign, Inc. (https://www.docusign.com)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/OAuth/__pycache__/jwt.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/OAuth/__pycache__/jwt.cpython-39.pyc
--------------------------------------------------------------------------------
/OAuth/__pycache__/utils.cpython-311.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/OAuth/__pycache__/utils.cpython-311.pyc
--------------------------------------------------------------------------------
/OAuth/utils.php:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | Ok. You may close this tab and return to the shell. This window closes automatically in five seconds.
34 |
35 |
36 |
37 | ';
38 |
39 |
40 | $responseErr = "HTTP/1.0 400 Bad Request\r\n"
41 | . "Content-Type: text/plain\r\n\r\n"
42 | . "Bad Request\r\n";
43 |
44 | ini_set('default_socket_timeout', 60 * 5);
45 | $server = stream_socket_server($socket, $errno, $errstr);
46 |
47 | if (!$server) {
48 | Log::err('Error starting HTTP server');
49 | return false;
50 | }
51 |
52 | do {
53 | $sock = stream_socket_accept($server);
54 |
55 | if (!$sock) {
56 | Log::err('Error accepting socket connection');
57 | exit(1);
58 | }
59 |
60 | $contentLength = 0;
61 | $headers = [];
62 | $body = null;
63 |
64 | while (false !== ($line = trim(fgets($sock)))) {
65 | if ($line === '') break;
66 | $regex = '#^Content-Length:\s*([[:digit:]]+)\s*$#i';
67 |
68 | if (preg_match($regex, $line, $matches)) {
69 | $contentLength = (int)$matches[1];
70 | }
71 |
72 | $headers[] = $line;
73 | }
74 |
75 | if ($contentLength > 0) {
76 | $body = fread($sock, $contentLength);
77 | }
78 |
79 | list($method, $url, $httpver) = explode(' ', $headers[0]);
80 |
81 | if ($method == 'GET') {
82 | $parts = parse_url($url);
83 |
84 | if (isset($parts['path']) && $parts['path'] == '/authorization-code/callback' && isset($parts['query'])) {
85 | parse_str($parts['query'], $query);
86 |
87 | if (isset($query['code']) && isset($query['state'])) {
88 | fwrite($sock, $responseOk);
89 | fclose($sock);
90 | return $query;
91 | }
92 | }
93 | }
94 |
95 | fwrite($sock, $responseErr);
96 | fclose($sock);
97 | } while (true);
98 | }
99 |
100 | function http($url, $params = false, $headers = false, $post = false)
101 | {
102 | $ch = curl_init($url);
103 |
104 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
105 | curl_setopt($ch, CURLINFO_HEADER_OUT, true);
106 | curl_setopt($ch, CURLOPT_VERBOSE, 1);
107 |
108 | if ($post) curl_setopt($ch, CURLOPT_POST, 1);
109 |
110 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
111 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
112 |
113 | if ($params) {
114 | curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
115 | }
116 |
117 | if ($headers) {
118 | curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
119 | }
120 |
121 | $resp = curl_exec($ch);
122 | return json_decode($resp);
123 | }
124 |
125 | function encodeBase64URL($data)
126 | {
127 | return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
128 | }
129 |
130 | ?>
131 |
--------------------------------------------------------------------------------
/OAuth/utils.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | from flask import Flask, render_template_string, request
4 | from multiprocessing import Process
5 |
6 | HOST = 'localhost'
7 | PORT = 8080
8 |
9 | SUCCESS_PAGE_SOURCE = """
10 |
11 |
12 |
13 |
14 |
18 |
19 |
20 |
21 | Ok. You may close this tab and return to the shell. This window closes automatically in five seconds.
22 |
23 |
24 |
25 | """
26 |
27 | ERROR_PAGE_SOURCE = """
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | Bad request.
37 |
38 |
39 |
40 | """
41 |
42 | app = Flask(__name__)
43 | app.env = "development"
44 | logging.getLogger('werkzeug').disabled = True
45 | server = Process(target=app.run, args=(HOST, PORT,))
46 |
47 |
48 | def run_server():
49 | server.run()
50 |
51 |
52 | def shutdown_server():
53 | func = request.environ.get('werkzeug.server.shutdown')
54 | if func is None:
55 | raise RuntimeError('Not running with the Werkzeug Server')
56 | func()
57 |
58 |
59 | @app.route('/shutdown')
60 | def shutdown():
61 | shutdown_server()
62 | return 'Server shutting down...'
63 |
64 |
65 | @app.route('/authorization-code/callback', methods=["GET"])
66 | def result_page():
67 | if request.args.get("code"):
68 | return render_template_string(SUCCESS_PAGE_SOURCE, host=HOST, port=PORT)
69 | else:
70 | return render_template_string(ERROR_PAGE_SOURCE)
71 |
--------------------------------------------------------------------------------
/PAYMENTS_INSTALLATION.md:
--------------------------------------------------------------------------------
1 | # Configure a payment gateway
2 |
3 | DocuSign offers built-in connections to multiple payment gateways. The payments code example uses a developer account via the Stripe gateway service.
4 |
5 |
6 | ## Create a Stripe payment gateway
7 |
8 | 1. Select the Stripe button on the [**Payments**](https://admindemo.docusign.com/authenticate?goTo=payments) page in your developer account.
9 |
10 | 1. For development, you can skip the Stripe account application by using the **Skip this account form** link at the top of the page.
11 |
12 | 
13 |
14 | An enabled Stripe payment gateway is now associated with your DocuSign developer account and is shown under **Payment Gateway**.
15 |
16 | 1. Save the **Gateway Account ID** GUID to the code example launcher configuration file.
17 |
18 |
19 | ## Additional documentation
20 | * [Managing Payment Gateways](https://support.docusign.com/en/guides/managing-payment-gateways)
21 | * [How to send a request for payment](https://developers.docusign.com/docs/esign-rest-api/how-to/request-a-payment)
22 |
--------------------------------------------------------------------------------
/Quick_ACG/launcher.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | api_version=""
5 |
6 | if [ ! -f "../config/settings.txt" ]; then
7 | echo "Error: "
8 | echo "First copy the file 'config/settings.example.txt' to 'config/settings.txt'."
9 | echo "Next, fill in your API credentials, Signer name and email to continue."
10 | echo ""
11 | exit 1
12 | fi
13 |
14 | if [ -f "../config/settings.txt" ]; then
15 | . ../config/settings.txt
16 | fi
17 |
18 | function resetToken() {
19 | rm -f ../config/ds_access_token* || true
20 | }
21 |
22 | function login() {
23 | php ../OAuth/code_grant.php "eSignature"
24 | bash ../eg001EmbeddedSigning.sh
25 | startSignature
26 |
27 | mv ds_access_token.txt $token_file_name
28 |
29 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
30 | ACCESS_TOKEN=$(cat $token_file_name)
31 |
32 | export ACCOUNT_ID
33 | export ACCESS_TOKEN
34 | }
35 |
36 | # Choose an API
37 | function startQuickACG() {
38 | echo ""
39 | echo "Authentication in progress, please wait"
40 | login
41 | }
42 |
43 | # Select the action
44 | function startSignature() {
45 | echo ""
46 | echo "Pick the next action"
47 | PS3='Pick the next action: '
48 | select CHOICE in \
49 | "Embedded_Signing" \
50 | "Exit"; do
51 | case "$CHOICE" in
52 | Embedded_Signing)
53 | bash ../eg001EmbeddedSigning.sh
54 | startSignature
55 | ;;
56 | Exit)
57 | exit 0
58 | ;;
59 | esac
60 | done
61 | }
62 |
63 | echo "Welcome to the DocuSign Bash Quick Authorization Code Grant Launcher"
64 |
65 | startQuickACG
66 |
--------------------------------------------------------------------------------
/config/API_ACCOUNT_ID:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/config/API_ACCOUNT_ID
--------------------------------------------------------------------------------
/config/BRAND_ID:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/config/BRAND_ID
--------------------------------------------------------------------------------
/config/CLICKWRAP_ID:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/config/CLICKWRAP_ID
--------------------------------------------------------------------------------
/config/ORGANIZATION_ID:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/config/ORGANIZATION_ID
--------------------------------------------------------------------------------
/config/ds_access_token.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/config/ds_access_token.txt
--------------------------------------------------------------------------------
/config/settings.example.txt:
--------------------------------------------------------------------------------
1 | export SIGNER_EMAIL="{SIGNER_EMAIL}"
2 | export SIGNER_NAME="{SIGNER_NAME}"
3 | export SIGNER_NOT_CHECKED_NAME="{SIGNER_NOT_CHECKED_NAME}"
4 | export SIGNER_NOT_CHECKED_EMAIL="{SIGNER_NOT_CHECKED_EMAIL}"
5 | export CC_EMAIL="{CC_EMAIL}"
6 | export CC_NAME="{CC_NAME}"
7 | export IMPERSONATION_USER_GUID="{IMPERSONATED_USER_ID}"
8 | export INTEGRATION_KEY_JWT="{INTEGRATION_KEY_JWT}"
9 | export INTEGRATION_KEY_AUTH_CODE="{INTEGRATION_KEY_AUTH_CODE}"
10 | export SECRET_KEY="{SECRET_KEY}"
11 | export GATEWAY_ACCOUNT_ID="{DS_PAYMENT_GATEWAY_ID}"
12 | export QUICKSTART="{QUICKSTART_VALUE}"
13 | export TARGET_ACCOUNT_ID="{TARGET_ACCOUNT_ID}"
14 |
15 |
--------------------------------------------------------------------------------
/demo_documents/Offer_Letter_Dynamic_Table.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/Offer_Letter_Dynamic_Table.docx
--------------------------------------------------------------------------------
/demo_documents/UserData.example.csv:
--------------------------------------------------------------------------------
1 | AccountID,FirstName,LastName,UserEmail,PermissionSet
2 | {account_id},First1,Last1,example1@sampleemail.example,DS Admin
3 | {account_id},First2,Last2,example2@sampleemail.example,DS Admin
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_Web_Form.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_Web_Form.pdf
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_fields.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_fields.pdf
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_fields_shown.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_fields_shown.docx
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_lorem.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_lorem.pdf
--------------------------------------------------------------------------------
/demo_documents/World_Wide_Corp_salary.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/demo_documents/World_Wide_Corp_salary.docx
--------------------------------------------------------------------------------
/demo_documents/added_document.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | World Wide Corp
9 | Order Processing Division
12 | Item: Oranges, quantity: 20 gross at market price.
13 |
14 | Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie. Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée. Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice. Donut jujubes oat cake jelly-o. Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake.
15 |
16 |
17 | Agreed: **signature_1**
18 |
19 |
20 |
--------------------------------------------------------------------------------
/demo_documents/doc_1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | World Wide Corp
9 | Order Processing Division
12 | Ordered by {USER_FULLNAME}
13 | Email: {USER_EMAIL}
14 | Copy to: {CC_NAME}, {CC_EMAIL}
15 |
16 | Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie. Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée. Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice. Donut jujubes oat cake jelly-o. Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake.
17 |
18 |
19 | Agreed: **signature_1**/
20 |
21 |
22 |
--------------------------------------------------------------------------------
/demo_documents/order_form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | World Wide Corp
9 | Order Processing Division
12 |
13 | Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie. Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée. Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice. Donut jujubes oat cake jelly-o. Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake.
14 |
15 |
16 |
17 |
18 |
19 | Item |
20 | Quantity |
21 | Each |
22 | Extended |
23 |
24 |
25 |
26 |
27 | Harmonica |
28 |
29 | /l1q/
30 | |
31 | $5 |
32 |
33 | $/l1e/
34 | |
35 |
36 |
37 | Xylophone |
38 |
39 | /l2q/
40 | |
41 | $150 |
42 |
43 | $/l2e/
44 | |
45 |
46 |
47 | Total: |
49 |
50 | $/l3t/
51 | |
52 |
53 |
54 |
55 |
56 |
57 |
58 | Agreed: /sn1/
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/stripe_skip_account_form_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/docs/stripe_skip_account_form_link.png
--------------------------------------------------------------------------------
/documentation/account_id.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/documentation/account_id.png
--------------------------------------------------------------------------------
/documentation/stripe_skip_account_form_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/docusign/code-examples-bash/ce64c9a3c86a5a461ca54d793fd584dd05a0c6f4/documentation/stripe_skip_account_form_link.png
--------------------------------------------------------------------------------
/examples/Admin/eg003BulkExportUserData.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/bulk-export-users/
3 | # How to bulk-export user data
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 |
19 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
20 |
21 | # Construct your API headers
22 | # Step 2 Start
23 | #ds-snippet-start:Admin3Step2
24 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
25 | '--header' "Accept: application/json"
26 | '--header' "Content-Type: application/json")
27 | #ds-snippet-end:Admin3Step2
28 | # Step 2 End
29 |
30 | # Construct the request body to retrieve the user list
31 | # Create a temporary file to store the JSON body
32 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
33 | response=$(mktemp /tmp/response-oa.XXXXXX)
34 | response2=$(mktemp /tmp/response-oa.XXXXXX)
35 |
36 | printf \
37 | '{
38 | "type": "organization_memberships_export"
39 | }
40 | ' >>$request_data
41 |
42 | curl --request POST ${base_path}/v2/organizations/${ORGANIZATION_ID}/exports/user_list \
43 | "${Headers[@]}" \
44 | --data-binary @${request_data} \
45 | --output ${response}
46 |
47 | # Create the bulk export request
48 | requestId=`cat $response | cut -f1 -d"," | sed 's/{//g' | sed 's/.*\"id\"://' | sed 's/\"//g'`
49 | # Step 3 Start
50 | #ds-snippet-start:Admin3Step3
51 | retryCount=0
52 | downloadUrl=''
53 | while [ $retryCount -le 5 ]; do
54 | echo ''
55 | echo 'Retrieving Bulk Action Status...'
56 | echo ''
57 | curl --request GET ${base_path}/v2/organizations/${ORGANIZATION_ID}/exports/user_list/${requestId} \
58 | "${Headers[@]}" \
59 | --output ${response}
60 |
61 | echo ''
62 | echo "Response:"
63 | echo ''
64 | cat $response
65 | echo ''
66 |
67 | #Check the status of the Bulk Action
68 | status=$(cat $response | grep status | sed 's/.*\"status\":\"//' | sed 's/\",.*//')
69 | echo "Status: $status"
70 |
71 | if [ "$status" = "completed" ]; then
72 | echo ''
73 | echo 'Bulk Request has been completed'
74 | echo ''
75 | downloadUrl=$(cat $response | grep url | sed 's/.*\"url\":\"//' | sed 's/\",.*//')
76 | echo "Download Url: $downloadUrl"
77 | let retryCount=6
78 | else
79 | echo ''
80 | echo 'Bulk Request has not been completed. Retrying in 5 seconds'
81 | echo ''
82 | sleep 5
83 | let retryCount=retryCount+1
84 | fi
85 | done
86 | #ds-snippet-end:Admin3Step3
87 | # Step 3 End
88 |
89 | # Check the request status
90 | # Step 4 Start
91 | #ds-snippet-start:Admin3Step4
92 | curl --request GET ${base_path}/v2/organizations/${ORGANIZATION_ID}/exports/user_list/${requestId} \
93 | "${Headers[@]}" \
94 | --output ${response}
95 | #ds-snippet-end:Admin3Step4
96 | # Step 4 End
97 | echo ''
98 | echo "Response:"
99 | echo ''
100 | cat $response
101 | echo ''
102 |
103 | # Download the exported user data
104 | # Step 5 Start
105 | #ds-snippet-start:Admin3Step5
106 | curl --request GET "${downloadUrl}" \
107 | "${Headers[@]}" \
108 | --output ${response2}
109 | #ds-snippet-end:Admin3Step5
110 | # Step 5 End
111 | echo ''
112 | cat $response2
113 |
114 | echo ''
115 | echo "Export data to file myfile.csv..."
116 | cat $response2 > myfile.csv
117 |
118 | # Remove the temporary files
119 | rm "$request_data"
120 | rm "$response"
121 | rm "$response2"
122 |
123 | echo ""
124 | echo "Done."
125 | echo ""
126 |
--------------------------------------------------------------------------------
/examples/Admin/eg004AddUsersViaBulkImport.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/add-users-bulk-import/
3 | # How to add users via bulk import
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Note: Substitute these values with your own
11 | # Obtain your OAuth token
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 |
19 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
20 |
21 | # Construct your API headers
22 | # Step 2 Start
23 | #ds-snippet-start:Admin4Step2
24 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
25 | '--header' "Content-Disposition: filename=myfile.csv" \
26 | '--header' "Content-Type: text/csv")
27 | #ds-snippet-end:Admin4Step2
28 | # Step 2 End
29 |
30 | # Create the bulk import request
31 | # Step 3 Start
32 | #ds-snippet-start:Admin4Step3
33 | request_data=$(mktemp /tmp/request-oa.XXXXXX)
34 |
35 | printf \
36 | 'AccountID,UserName,UserEmail,PermissionSet
37 | \"'${API_ACCOUNT_ID}'\",FirstLast1,exampleuser1@example.com,DS Viewer,
38 | \"'${API_ACCOUNT_ID}'\",FirstLast2,exampleuser2@example.com,DS Viewer
39 | ' >>$request_data
40 |
41 | # Create a temporary file to store the response
42 | response=$(mktemp /tmp/response-oa.XXXXXX)
43 |
44 | curl --request POST ${base_path}/v2/organizations/${ORGANIZATION_ID}/imports/bulk_users/add \
45 | "${Headers[@]}" \
46 | --data-binary @${request_data} \
47 | --output ${response}
48 |
49 | echo ''
50 | echo 'Response:'
51 | echo ''
52 | cat $response
53 | echo ''
54 | #ds-snippet-end:Admin4Step3
55 | # Step 3 End
56 |
57 | #Pull the first Id from the JSON response
58 | ID=$(cat $response | grep id | sed 's/.*{\"id\":\"//' | sed 's/\",.*//')
59 | importId=${ID}
60 |
61 | #Remove previous temp files
62 | rm $response
63 | rm $request_data
64 |
65 | # Check the request status
66 | echo ''
67 | echo "Waiting for 20 seconds and check the status of the request..."
68 | sleep 20
69 | # Step 4 Start
70 | #ds-snippet-start:Admin4Step4
71 | curl --request GET ${base_path}/v2/organizations/${ORGANIZATION_ID}/imports/bulk_users/${importId} \
72 | "${Headers[@]}" \
73 | --output ${response}
74 | #ds-snippet-end:Admin4Step4
75 | # Step 4 End
76 | echo 'Response:'
77 | echo ''
78 | cat $response
79 | echo ''
80 |
81 | # Remove the temporary files
82 | rm "$response"
83 |
84 | echo ""
85 | echo "Done."
86 | echo ""
87 |
--------------------------------------------------------------------------------
/examples/Admin/eg005AuditUsers.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Audit users with the Admin API
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Check that ORGANIZATION_ID has been set
10 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
11 | if [[ -z "$ORGANIZATION_ID" ]]; then
12 | echo "PROBLEM: Set ORGANIZATION_ID and add to config directory"
13 | fi
14 |
15 |
16 | # Note: Substitute these values with your own
17 | # Obtain your OAuth token
18 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
19 |
20 | # Set up variables for full code example
21 | # Note: Substitute these values with your own
22 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
23 | base_path="https://api-d.docusign.net/management"
24 |
25 | # Construct your API headers
26 | # Step 2 start
27 | #ds-snippet-start:Admin5Step2
28 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
29 | '--header' "Accept: application/json" \
30 | '--header' "Content-Type: application/json")
31 | #ds-snippet-end:Admin5Step2
32 | # Step 2 end
33 |
34 | # Step 3 start
35 | #ds-snippet-start:Admin5Step3
36 | # Calculate date parameter to get users modified in the last 10 days
37 | if date -v -10d &>/dev/null; then
38 | # Mac
39 | # modified_since=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
40 | modified_since=$(date -v -10d '+%Y-%m-%d')
41 | else
42 | # Not a Mac
43 | # modified_since=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
44 | modified_since=$(date --date='-10 days' '+%Y-%m-%d')
45 | fi
46 |
47 | response=$(mktemp /tmp/response-admin.XXXXXX)
48 |
49 | # Call the Admin API
50 | Status=$(
51 | curl -w '%{http_code}' --request GET "${base_path}/v2/organizations/${ORGANIZATION_ID}/users?account_id=${API_ACCOUNT_ID}&last_modified_since${modified_since}" \
52 | "${Headers[@]}" \
53 | --output $response
54 | )
55 | #ds-snippet-end:Admin5Step3
56 | # Step 3 end
57 |
58 | # Step 4 start
59 | #ds-snippet-start:Admin5Step4
60 | modified_users=$(cat $response)
61 | user_emails=`echo $modified_users | grep -o -P '(?<=email\":\").*?(?=\")'`
62 | array_emails=($user_emails)
63 | #ds-snippet-end:Admin5Step4
64 | # Step 4 end
65 |
66 | # Step 5 start
67 | #ds-snippet-start:Admin5Step5
68 | profiles=$(mktemp /tmp/profiles-oa.XXXXXX)
69 |
70 | echo ''
71 | echo 'User profiles:'
72 |
73 | for email in ${array_emails[@]}
74 | do
75 |
76 | Status=$(
77 | curl -w '%{http_code}' -i --request GET "${base_path}/v2/organizations/${ORGANIZATION_ID}/users/profile?email=${email}" \
78 | "${Headers[@]}" \
79 | --output ${profiles}
80 | )
81 |
82 | echo ''
83 | cat $profiles
84 | echo ''
85 |
86 | done
87 | #ds-snippet-end:Admin5Step5
88 | # Step 5 end
89 |
90 | # Remove the temporary files"
91 | rm "$profiles"
92 | rm "$response"
93 |
94 | echo ""
95 | echo "Done."
96 | echo ""
97 |
--------------------------------------------------------------------------------
/examples/Admin/eg006RetrieveDocuSignProfileByEmailAddress.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Retreives DocuSign Profile for a user given the user's email address with the Admin API
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Check that ORGANIZATION_ID has been set
10 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
11 | if [[ -z "$ORGANIZATION_ID" ]]; then
12 | echo "PROBLEM: Set ORGANIZATION_ID and add to config directory"
13 | fi
14 |
15 |
16 | # Note: Substitute these values with your own
17 | # Obtain your OAuth token
18 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
19 |
20 | # Set up variables for full code example
21 | # Note: Substitute these values with your own
22 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
23 | base_path="https://api-d.docusign.net/management"
24 |
25 | echo "Please input email address to lookup DocuSign profile:"
26 | read EMAIL_ADDRESS
27 |
28 | # Construct your API headers
29 | # Step 2 start
30 | #ds-snippet-start:Admin6Step2
31 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
32 | '--header' "Accept: application/json" \
33 | '--header' "Content-Type: application/json")
34 | #ds-snippet-end:Admin6Step2
35 | # Step 2 end
36 |
37 | # Step 3 start
38 | #ds-snippet-start:Admin6Step3
39 | # Calculate date parameter to get users modified in the last 10 days
40 | if date -v -10d &>/dev/null; then
41 | # Mac
42 | # modified_since=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
43 | modified_since=$(date -v -10d '+%Y-%m-%d')
44 | else
45 | # Not a Mac
46 | # modified_since=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
47 | modified_since=$(date --date='-10 days' '+%Y-%m-%d')
48 | fi
49 |
50 | response=$(mktemp /tmp/response-admin.XXXXXX)
51 |
52 | # Call the Admin API
53 | curl --request GET ${base_path}/v2.1/organizations/${ORGANIZATION_ID}/users/dsprofile?email=${EMAIL_ADDRESS} \
54 | "${Headers[@]}" \
55 | --output ${response}
56 | #ds-snippet-end:Admin6Step3
57 | # Step 3 end
58 |
59 | echo ""
60 | echo "Response:"
61 | cat $response
62 | echo ""
63 |
64 | # Remove the temporary file
65 | rm "$response"
66 |
--------------------------------------------------------------------------------
/examples/Admin/eg007RetrieveDocuSignProfileByUserId.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Retreives DocuSign Profile for a user given the user's email address with the Admin API
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Check that ORGANIZATION_ID has been set
10 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
11 | if [[ -z "$ORGANIZATION_ID" ]]; then
12 | echo "PROBLEM: Set ORGANIZATION_ID and add to config directory"
13 | fi
14 |
15 |
16 | # Note: Substitute these values with your own
17 | # Obtain your OAuth token
18 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
19 |
20 | # Set up variables for full code example
21 | # Note: Substitute these values with your own
22 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
23 | base_path="https://api-d.docusign.net/management"
24 |
25 | echo "Please input userId to lookup DocuSign profile:"
26 | read USER_ID
27 |
28 | # Construct your API headers
29 | # Step 2 start
30 | #ds-snippet-start:Admin7Step2
31 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
32 | '--header' "Accept: application/json" \
33 | '--header' "Content-Type: application/json")
34 | #ds-snippet-end:Admin7Step2
35 | # Step 2 end
36 |
37 | # Step 3 start
38 | #ds-snippet-start:Admin7Step3
39 | # Calculate date parameter to get users modified in the last 10 days
40 | if date -v -10d &>/dev/null; then
41 | # Mac
42 | # modified_since=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
43 | modified_since=$(date -v -10d '+%Y-%m-%d')
44 | else
45 | # Not a Mac
46 | # modified_since=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
47 | modified_since=$(date --date='-10 days' '+%Y-%m-%d')
48 | fi
49 |
50 | response=$(mktemp /tmp/response-admin.XXXXXX)
51 |
52 | # Call the Admin API
53 | curl --request GET ${base_path}/v2.1/organizations/${ORGANIZATION_ID}/users/${USER_ID}/dsprofile \
54 | "${Headers[@]}" \
55 | --output ${response}
56 |
57 | #ds-snippet-end:Admin7Step3
58 | # Step 3 end
59 |
60 | echo ""
61 | echo "Response:"
62 | cat $response
63 | echo ""
64 |
65 | # Remove the temporary file
66 | rm "$response"
67 |
--------------------------------------------------------------------------------
/examples/Admin/eg008UpdateUserProductPermissionProfile.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/create-active-user/
3 | # How to create a new user with active status
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Note: Substitute these values with your own
11 | # Obtain your OAuth token
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
19 |
20 | # Construct your API headers
21 | #ds-snippet-start:Admin8Step2
22 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
23 | '--header' "Accept: application/json"
24 | '--header' "Content-Type: application/json")
25 | #ds-snippet-end:Admin8Step2
26 |
27 | EMAIL_ADDRESS=$(cat config/ESIGN_CLM_USER_EMAIL)
28 |
29 | if [ -z "$EMAIL_ADDRESS" ]; then
30 | echo "Please run example 2: Create_Active_CLM_ESign_User before running this code example"
31 | exit 1
32 | fi
33 |
34 |
35 | # Create a temporary file to store the response
36 | response=$(mktemp /tmp/response-admin.XXXXXX)
37 | echo ""
38 | echo "Getting permission profiles..."
39 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v2.1/organizations/${ORGANIZATION_ID}/accounts/${API_ACCOUNT_ID}/products/permission_profiles \
40 | "${Headers[@]}" \
41 | --output ${response})
42 |
43 | if [[ "$Status" -gt "201" ]]; then
44 | echo ""
45 | echo "Error:"
46 | echo ""
47 | cat $response
48 | exit 1
49 | fi
50 |
51 | echo ""
52 | echo "Response:"
53 | cat $response
54 | echo ""
55 |
56 | echo ""
57 |
58 | CLM_PRODUCT_ID=$(cat $response | sed 's/}]}/\n/' | grep CLM | sed 's/.*\"product_id\"://' | sed 's/,".*//')
59 | clm_profile_names=$(cat $response | sed 's/}]}/\n/' | grep CLM | sed 's/,/\n/g' | grep permission_profile_name | sed 's/.*\"permission_profile_name\":\"//g' | sed 's/\".*//g')
60 | clm_profiles_count=$(echo "$clm_profile_names" | grep -c '^')
61 |
62 | ESIGN_PRODUCT_ID=$(cat $response | sed 's/}]}/\n/' | grep ESign | sed 's/.*\"product_id\"://' | sed 's/,".*//')
63 | esign_profile_names=$(cat $response | sed 's/}]}/\n/' | grep ESign | sed 's/,/\n/g' | grep permission_profile_name | sed 's/.*\"permission_profile_name\":\"//g' | sed 's/\".*//g')
64 | esign_profiles_count=$(echo "$esign_profile_names" | grep -c '^')
65 |
66 | echo ""
67 | echo "Update user product permission profile for the following email: $EMAIL_ADDRESS"
68 | echo ""
69 |
70 | PS3='Would you like to update the permission profile for the eSignature or CLM product? '
71 | select choice in eSignature CLM
72 | do
73 | echo $choice
74 | product=$choice
75 | break
76 | done
77 |
78 |
79 | if [ "$product" == "eSignature" ]; then
80 | PRODUCT_ID=$ESIGN_PRODUCT_ID
81 | echo ""
82 | PS3='Select an eSignature permission profile to add: '
83 | IFS=$'\n'
84 | select esign_permission_profile in $esign_profile_names; do
85 | if [ "$REPLY" -gt "0" ] && [ "$REPLY" -le "$esign_profiles_count" ]; then
86 | PERMISSION_PROFILE_ID=$(cat $response | sed 's/}]}/\n/' | grep ESign | sed 's/.*\"permission_profiles\"://' | sed 's/},/\n/g' | grep $esign_permission_profile | sed 's/.*\"permission_profile_id\":\"//g' | sed 's/\".*//g')
87 | break
88 | fi
89 | done
90 | else
91 | PRODUCT_ID=$CLM_PRODUCT_ID
92 | echo ""
93 | PS3='Select a CLM permission profile to assign to the new user: '
94 | IFS=$'\n'
95 | select clm_permission_profile in $clm_profile_names; do
96 | if [ "$REPLY" -gt "0" ] && [ "$REPLY" -le "$clm_profiles_count" ]; then
97 | PERMISSION_PROFILE_ID=$(cat $response | sed 's/}]}/\n/' | grep CLM | sed 's/.*\"permission_profiles\"://' | sed 's/},/\n/g' | grep $clm_permission_profile | sed 's/.*\"permission_profile_id\":\"//g' | sed 's/\".*//g')
98 | break
99 | fi
100 | done
101 | fi
102 |
103 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
104 | # Construct the request body
105 | #ds-snippet-start:Admin8Step3
106 | printf \
107 | '{
108 | "email": "'${EMAIL_ADDRESS}'",
109 | "product_permission_profiles": [
110 | {
111 | "product_id": '${PRODUCT_ID}',
112 | "permission_profile_id": '${PERMISSION_PROFILE_ID}',
113 | }
114 | ]
115 | }
116 | ' >>$request_data
117 | #ds-snippet-end:Admin8Step3
118 | echo $request_data
119 | Add user permission profile
120 | #ds-snippet-start:Admin8Step4
121 | curl -w '%{http_code}' -i --request POST "${base_path}/v2.1/organizations/${ORGANIZATION_ID}/accounts/${API_ACCOUNT_ID}/products/permission_profiles/users" \
122 | "${Headers[@]}" \
123 | --data-binary @${request_data} \
124 | --output ${response}
125 | #ds-snippet-end:Admin8Step4
126 | echo ""
127 | echo "Response: "
128 | echo ""
129 | cat $response
130 | echo ""
131 |
132 | # Remove the temporary files
133 | rm "$request_data"
134 | rm "$response"
135 |
136 | echo ""
137 | echo "Done."
138 | echo ""
139 |
--------------------------------------------------------------------------------
/examples/Admin/eg009DeleteUserProductPermissionProfile.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/create-active-user/
3 | # How to create a new user with active status
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Note: Substitute these values with your own
11 | # Obtain your OAuth token
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
19 |
20 | EMAIL_ADDRESS=$(cat config/ESIGN_CLM_USER_EMAIL)
21 |
22 | if [ -z "$EMAIL_ADDRESS" ]; then
23 | echo "Please run example 2: Create_Active_CLM_ESign_User before running this code example"
24 | exit 1
25 | fi
26 |
27 | # Construct your API headers
28 | #ds-snippet-start:Admin9Step2
29 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
30 | '--header' "Accept: application/json"
31 | '--header' "Content-Type: application/json")
32 | #ds-snippet-end:Admin9Step2
33 |
34 | response=$(mktemp /tmp/response-oa.XXXXXX)
35 | #ds-snippet-start:Admin9Step3
36 | curl --request GET ${base_path}/v2.1/organizations/${ORGANIZATION_ID}/accounts/${API_ACCOUNT_ID}/products/permission_profiles/users?email=${EMAIL_ADDRESS} \
37 | "${Headers[@]}" \
38 | --output ${response}
39 | #ds-snippet-end:Admin9Step3
40 | echo ""
41 | cat $response
42 | echo ""
43 |
44 | CLM_PRODUCT_ID="37f013eb-7012-4588-8028-357b39fdbd00"
45 | ESIGN_PRODUCT_ID="f6406c68-225c-4e9b-9894-64152a26fa83"
46 |
47 | echo ""
48 | echo ""
49 | echo "Delete user product permission profile for the following email: $EMAIL_ADDRESS"
50 | echo ""
51 |
52 | PS3='Which product permission profile would you like to delete? '
53 | select choice in eSignature CLM
54 | do
55 | echo $choice
56 | product=$choice
57 | break
58 | done
59 |
60 | if [ "$product" == "eSignature" ]; then
61 | PRODUCT_ID=$ESIGN_PRODUCT_ID
62 | else
63 | PRODUCT_ID=$CLM_PRODUCT_ID
64 | fi
65 |
66 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
67 | # Construct the request body
68 | #ds-snippet-start:Admin9Step4
69 | printf \
70 | '{
71 | "user_email": "'${EMAIL_ADDRESS}'",
72 | "product_ids": [
73 | "'${PRODUCT_ID}'",
74 | ]
75 | }
76 | ' >>$request_data
77 | #ds-snippet-end:Admin9Step4
78 | cat $request_data
79 |
80 | #Delete User Permission Profile
81 | #ds-snippet-start:Admin9Step5
82 | curl -w '%{http_code}' -i --request DELETE "${base_path}/v2.1/organizations/${ORGANIZATION_ID}/accounts/${API_ACCOUNT_ID}/products/users" \
83 | "${Headers[@]}" \
84 | --data-binary @${request_data} \
85 | --output ${response}
86 | #ds-snippet-end:Admin9Step5
87 | echo ""
88 | echo "Response: "
89 | echo ""
90 | cat $response
91 | echo ""
92 |
93 | # Remove the temporary files
94 | rm "$request_data"
95 | rm "$response"
96 |
97 | echo ""
98 | echo "Done."
99 | echo ""
100 |
--------------------------------------------------------------------------------
/examples/Admin/eg010DeleteUserDataFromOrganization.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # This shows an organization admin how to delete a user's data from one or more accounts.
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Note: Substitute these values with your own
10 | # Obtain your OAuth token
11 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
12 |
13 | # Set up variables for full code example
14 | # Note: Substitute these values with your own
15 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
16 | base_path="https://api-d.docusign.net/management"
17 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
18 |
19 | # Construct your API headers
20 | #ds-snippet-start:Admin10Step2
21 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
22 | '--header' "Accept: application/json"
23 | '--header' "Content-Type: application/json")
24 | #ds-snippet-end:Admin10Step2
25 |
26 | response=$(mktemp /tmp/response-oa.XXXXXX)
27 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
28 |
29 | # Get user information
30 | echo "Please input the email address of the user whose data will be deleted. Note that this email address should be associated with a user that has been closed for at least 24 hours."
31 | read EMAIL_ADDRESS
32 |
33 | curl -w '%{http_code}' -i --request GET "${base_path}/v2.1/organizations/${ORGANIZATION_ID}/users/dsprofile?email=${EMAIL_ADDRESS}" \
34 | "${Headers[@]}" \
35 | --output ${response}
36 |
37 |
38 | USER_ID=$(cat $response | sed 's/}]}/\n/' | grep users | sed 's/.*\"id\"://' | sed 's/,".*//')
39 | ACCOUNT_ID=$(cat $response | sed 's/}]}/\n/' | grep memberships | sed 's/.*\"account_id\"://' | sed 's/,".*//')
40 |
41 | # Construct the request body
42 | #ds-snippet-start:Admin10Step3
43 | printf \
44 | '{
45 | "user_id": '${USER_ID}',
46 | "memberships": [{
47 | "account_id": '${ACCOUNT_ID}',
48 | }]
49 | }
50 | ' >>$request_data
51 | #ds-snippet-end:Admin10Step3
52 |
53 | #Delete user info from an organization
54 | #ds-snippet-start:Admin10Step4
55 | curl -w '%{http_code}' -i --request POST "${base_path}/v2/data_redaction/organizations/${ORGANIZATION_ID}/user" \
56 | "${Headers[@]}" \
57 | --data-binary @${request_data} \
58 | --output ${response}
59 | #ds-snippet-end:Admin10Step4
60 |
61 | echo ""
62 | echo "Response: "
63 | echo ""
64 | cat $response
65 | echo ""
66 |
67 | # Remove the temporary files
68 | rm "$request_data"
69 | rm "$response"
70 |
71 | echo ""
72 | echo "Done."
73 | echo ""
74 |
--------------------------------------------------------------------------------
/examples/Admin/eg011DeleteUserDataFromAccount.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # This shows an account admin how to delete user data from an account
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Note: Substitute these values with your own
10 | # Obtain your OAuth token
11 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
12 |
13 | # Set up variables for full code example
14 | # Note: Substitute these values with your own
15 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
16 | base_path="https://api-d.docusign.net/management"
17 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
18 |
19 | # Construct your API headers
20 | #ds-snippet-start:Admin11Step2
21 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
22 | '--header' "Accept: application/json"
23 | '--header' "Content-Type: application/json")
24 | #ds-snippet-end:Admin11Step2
25 |
26 | response=$(mktemp /tmp/response-oa.XXXXXX)
27 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
28 |
29 | # Get user information
30 | echo "Please enter the user ID of the user whose data will be deleted. Note that this user ID should be associated with a user that has been closed for at least 24 hours."
31 | read USER_ID
32 |
33 | # Construct the request body
34 | #ds-snippet-start:Admin11Step3
35 | printf \
36 | '{
37 | "user_id": "'${USER_ID}'"
38 | }
39 | ' >>$request_data
40 | #ds-snippet-end:Admin11Step3
41 |
42 | #Delete user info from an organization
43 | #ds-snippet-start:Admin11Step4
44 | curl -w '%{http_code}' -i --request POST "${base_path}/v2/data_redaction/accounts/${API_ACCOUNT_ID}/user" \
45 | "${Headers[@]}" \
46 | --data-binary @${request_data} \
47 | --output ${response}
48 | #ds-snippet-end:Admin11Step4
49 |
50 | echo ""
51 | echo "Response: "
52 | echo ""
53 | cat $response
54 | echo ""
55 |
56 | # Remove the temporary files
57 | rm "$request_data"
58 | rm "$response"
59 |
60 | echo ""
61 | echo "Done."
62 | echo ""
63 |
--------------------------------------------------------------------------------
/examples/Admin/eg012CloneAccount.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/create-active-user/
3 | # How to create a new user with active status
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Note: Substitute these values with your own
11 | # Obtain your OAuth token
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
19 |
20 | # Construct your API headers
21 | #ds-snippet-start:Admin12Step2
22 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
23 | '--header' "Accept: application/json"
24 | '--header' "Content-Type: application/json")
25 | #ds-snippet-end:Admin12Step2
26 |
27 | # Get list of asset group accounts for an organization
28 |
29 | response=$(mktemp /tmp/response-oa.XXXXXX)
30 | request_data=$(mktemp /tmp/request_data-oa.XXXXXX)
31 |
32 | #ds-snippet-start:Admin12Step3
33 | Status=$(curl --request GET ${base_path}/v1/organizations/${ORGANIZATION_ID}/assetGroups/accounts?compliant=true \
34 | "${Headers[@]}" \
35 | --output ${response})
36 | #ds-snippet-end:Admin12Step3
37 |
38 | echo ""
39 | echo "Results from the getAssetGroupAccounts method:"
40 | cat $response
41 | echo ""
42 |
43 | # Store account names and if there are more than one accounts, let the user choose which one to clone
44 | asset_group_account_names=$(cat $response | sed 's/,/\n/g' | grep accountName | sed 's/.*\"accountName\":\"//g' | sed 's/\".*//g')
45 | accounts_count=$(echo "$asset_group_account_names" | grep -c '^')
46 |
47 | if [ "$accounts_count" -eq "1" ]; then
48 | SOURCE_ACCOUNT_ID=$(cat $response | sed 's/}]}/\n/g' | grep assetGroupAccounts | sed 's/.*\"accountId\":\"//g' | sed 's/\".*//g')
49 | else
50 | echo ""
51 | PS3='Select an account to clone : '
52 | IFS=$'\n'
53 | select account_name in $asset_group_account_names; do
54 | if [ "$REPLY" -gt "0" ] && [ "$REPLY" -le "$accounts_count" ]; then
55 | SOURCE_ACCOUNT_ID=$(cat $response | sed 's/.*\"assetGroupAccounts\"://' | sed 's/},/\n/g' | grep $account_name | sed 's/.*\"accountId\":\"//g' | sed 's/\".*//g')
56 | break
57 | fi
58 | done
59 | fi
60 |
61 | rm "$response"
62 |
63 | read -p "Please enter the name of the new account: " ACCOUNT_NAME
64 | read -p "Please enter the first name of the new account admin: " FIRST_NAME
65 | read -p "Please enter the last name of the new account admin: " LAST_NAME
66 | read -p "Please enter the email address of the new account admin: " EMAIL
67 |
68 | #ds-snippet-start:Admin12Step4
69 | # The country code value is set to "US" for the developer environment
70 | # In production, set the value to the code for the country of the target account
71 | printf \
72 | '{
73 | "sourceAccount": {
74 | "id": "'${SOURCE_ACCOUNT_ID}'"
75 | },
76 | "targetAccount": {
77 | "name": "'${ACCOUNT_NAME}'",
78 | "admin": {
79 | "firstName": "'${FIRST_NAME}'",
80 | "lastName": "'${LAST_NAME}'",
81 | "email": "'${EMAIL}'"
82 | },
83 | "countryCode": "US"
84 | }
85 | }
86 | ' >>$request_data
87 | #ds-snippet-end:Admin12Step4
88 |
89 | # Clone source account into new account
90 | response=$(mktemp /tmp/response-oa.XXXXXX)
91 | #ds-snippet-start:Admin12Step5
92 | Status=$(curl --request POST ${base_path}/v1/organizations/${ORGANIZATION_ID}/assetGroups/accountClone \
93 | "${Headers[@]}" \
94 | --data-binary @${request_data} \
95 | --output ${response})
96 | #ds-snippet-end:Admin12Step5
97 |
98 | echo "Results from the cloneAssetGroupAccount method:"
99 | cat $response
100 | echo ""
101 |
102 | # Remove the temporary files
103 | rm "$response"
104 | rm "$request_data"
105 | echo ""
106 | echo "Done."
107 |
--------------------------------------------------------------------------------
/examples/Admin/eg013CreateAccount.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/admin-api/how-to/create-active-user/
3 | # How to create a new user with active status
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Note: Substitute these values with your own
11 | # Obtain your OAuth token
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://api-d.docusign.net/management"
18 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
19 |
20 | # Construct your API headers
21 | #ds-snippet-start:Admin13Step2
22 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
23 | '--header' "Accept: application/json"
24 | '--header' "Content-Type: application/json")
25 | #ds-snippet-end:Admin13Step2
26 |
27 | #ds-snippet-start:Admin13Step3
28 | response=$(mktemp /tmp/response-oa.XXXXXX)
29 | Status=$(curl --request GET ${base_path}/v2/organizations/${ORGANIZATION_ID}/planItems \
30 | "${Headers[@]}" \
31 | --output ${response})
32 |
33 | echo "Results from the GET request:"
34 | cat $response
35 | echo ""
36 |
37 | PLAN_ID=$(cat $response | sed 's/,/\n/g' | grep plan_id | sed 's/.*\"plan_id\":\"//g' | sed 's/\".*//g')
38 | SUBSCRIPTION_ID=$(cat $response | sed 's/,/\n/g' | grep subscription_id | sed 's/.*\"subscription_id\":\"//g' | sed 's/\".*//g')
39 | #ds-snippet-end:Admin13Step3
40 |
41 | request_data=$(mktemp /tmp/request_data-oa.XXXXXX)
42 |
43 | read -p "Please enter the account name for the new account: " ACCOUNT_NAME
44 | read -p "Please enter the email address for the new account: " EMAIL_ADDRESS
45 | read -p "Please enter the first name for the new account: " FIRST_NAME
46 | read -p "Please enter the last name for the new account: " LAST_NAME
47 |
48 | #ds-snippet-start:Admin13Step4
49 | # The country code value is set to "US" for the developer environment
50 | # In production, set the value to the code for the country of the target account
51 | printf \
52 | '{
53 | "subscriptionDetails": {
54 | "id": "'${SUBSCRIPTION_ID}'",
55 | "planId": "'${PLAN_ID}'",
56 | "modules": []
57 | },
58 | "targetAccount": {
59 | "name": "'${ACCOUNT_NAME}'",
60 | "countryCode": "US",
61 | "admin": {
62 | "email": "'${EMAIL_ADDRESS}'",
63 | "firstName": "'${FIRST_NAME}'",
64 | "lastName": "'${LAST_NAME}'",
65 | "locale": "en"
66 | }
67 | }
68 | }
69 | ' >>$request_data
70 | #ds-snippet-end:Admin13Step4
71 |
72 | # Create the new account
73 | #ds-snippet-start:Admin13Step5
74 | response=$(mktemp /tmp/response-oa.XXXXXX)
75 | Status=$(curl --request POST ${base_path}/v2/organizations/${ORGANIZATION_ID}/assetGroups/accountCreate \
76 | "${Headers[@]}" \
77 | --data-binary @${request_data} \
78 | --output ${response})
79 | #ds-snippet-end:Admin13Step5
80 |
81 | echo "Results from the create account method:"
82 | cat $response
83 | echo ""
84 |
85 | # Remove the temporary files
86 | rm "$response"
87 | rm "$request_data"
88 | echo ""
89 | echo "Done."
90 |
--------------------------------------------------------------------------------
/examples/Admin/utils.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Check that we're in a bash shell
4 |
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | accessToken=$(cat config/ds_access_token.txt)
10 | response=$(mktemp /tmp/response-orgid.XXXXXX)
11 |
12 | curl --header "Authorization: Bearer ${accessToken}" \
13 | --header "Content-Type: application/json" \
14 | --request GET https://api-d.docusign.net/management/v2/organizations \
15 | --output $response
16 |
17 | organizationId=$(cat $response | sed 's/.*\"organizations\":\[{\"id\":\"//g' | sed 's/\".*//g')
18 |
19 | echo "Organization ID has been written to config/ORGANIZATION_ID"
20 | echo $organizationId > 'config/ORGANIZATION_ID'
21 |
22 | # cleanup
23 | rm "$response"
--------------------------------------------------------------------------------
/examples/Click/eg002ActivateClickwrap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/click-api/how-to/activate-clickwrap
3 | # How to activate a Clickwrap
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Setup variables for full code example
19 | VersionNumber="1"
20 |
21 | # Get a ClickwrapID
22 | if [ -f "config/CLICKWRAP_ID" ]; then
23 | clickwrap_id=$(cat config/CLICKWRAP_ID)
24 | else
25 | echo ""
26 | echo "Clickwrap ID is needed. Please run step 1 - Create Clickwrap..."
27 | exit 0
28 | fi
29 |
30 | # Step 2. Construct your API headers
31 | #ds-snippet-start:Click2Step2
32 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
33 | '--header' "Content-Type: application/json"
34 | '--header' "Accept: application/json")
35 | #ds-snippet-end:Click2Step2
36 |
37 | # Construct your Clickwrap JSON body
38 | # Create a temporary file to store the JSON body
39 | request_data=$(mktemp /tmp/request-cw.XXXXXX)
40 | #ds-snippet-start:Click2Step3
41 | printf \
42 | '{
43 | "status" : "active"
44 | }' >$request_data
45 | #ds-snippet-end:Click2Step3
46 |
47 | # a) Make a POST call to the Clickwraps endpoint to activate the Clickwrap for an account
48 | # b) Display the JSON structure of the created Clickwrap
49 |
50 | # Create a temporary file to store the response
51 | response=$(mktemp /tmp/response-cw.XXXXXX)
52 |
53 | #ds-snippet-start:Click2Step4
54 | curl --request PUT https://demo.docusign.net/clickapi/v1/accounts/${account_id}/clickwraps/${clickwrap_id}/versions/${VersionNumber} \
55 | "${Headers[@]}" \
56 | --data-binary @${request_data} \
57 | --output ${response}
58 | #ds-snippet-end:Click2Step4
59 |
60 | echo ""
61 | echo "Response:"
62 | cat $response
63 | echo ""
64 |
65 | # Remove the temporary files
66 | rm "$request_data"
67 | rm "$response"
68 |
--------------------------------------------------------------------------------
/examples/Click/eg004GetListOfClickwraps.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/click-api/how-to/retrieve-clickwraps
3 | # How to get a list of Clickwraps
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Step 2. Construct your API headers
19 | #ds-snippet-start:Click4Step2
20 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
21 | '--header' "Accept: application/json")
22 | #ds-snippet-end:Click4Step2
23 |
24 | # Step 3. Call the Click API
25 | # a) Make a GET call to the Clickwraps endpoint to retrieve all Clickwraps for an account
26 | # b) Display the JSON structure of the returned Clickwraps
27 | #Create a temporary file to store the response
28 | response=$(mktemp /tmp/response-cw.XXXXXX)
29 | #ds-snippet-start:Click4Step3
30 | curl --request GET https://demo.docusign.net/clickapi/v1/accounts/${account_id}/clickwraps \
31 | "${Headers[@]}" \
32 | --output ${response}
33 | #ds-snippet-end:Click4Step3
34 |
35 | echo ""
36 | echo "Response:"
37 | cat $response
38 | echo ""
39 |
40 | # Remove the temporary file
41 | rm "$response"
42 |
--------------------------------------------------------------------------------
/examples/Click/eg005GetClickwrapResponses.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/click-api/how-to/get-clickwrap-responses
3 | # How to get Clickwrap responses
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Get a Clickwrap ID
19 | if [ -f "config/CLICKWRAP_ID" ]; then
20 | clickwrap_id=$(cat config/CLICKWRAP_ID)
21 | else
22 | echo ""
23 | echo "Clickwrap ID is needed. Please run step 1 - Create Clickwrap..."
24 | exit 0
25 | fi
26 |
27 | # Step 2. Construct your API headers
28 | #ds-snippet-start:Click5Step2
29 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
30 | '--header' "Accept: application/json")
31 | #ds-snippet-end:Click5Step2
32 |
33 | # Step 3. Call the Click API
34 | # a) Make a GET call to the users endpoint to retrieve responses (acceptance) of a specific Clickwrap for an account
35 | # b) Display the returned JSON structure of the responses
36 | # Create a temporary file to store the response
37 | response=$(mktemp /tmp/response-cw.XXXXXX)
38 | #ds-snippet-start:Click5Step3
39 | curl --request GET https://demo.docusign.net/clickapi/v1/accounts/${account_id}/clickwraps/${clickwrap_id}/users \
40 | "${Headers[@]}" \
41 | --output ${response}
42 | #ds-snippet-end:Click5Step3
43 |
44 | echo ""
45 | echo "Response:"
46 | cat $response
47 | echo ""
48 |
49 | # Remove the temporary file
50 | rm "$response"
51 |
--------------------------------------------------------------------------------
/examples/Click/eg006EmbedClickwrap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/click-api/how-to/embed-clickwrap
3 | # Shows how to embed a clickwrap with dynamic data
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Get a Clickwrap ID
19 | if [ -f "config/CLICKWRAP_ID" ]; then
20 | clickwrap_id=$(cat config/CLICKWRAP_ID)
21 | if [ -z "$clickwrap_id" ]; then
22 |
23 | echo ""
24 | echo "Clickwrap ID required. Please run code example 1 - Create Clickwrap"
25 | exit 0
26 | fi
27 |
28 |
29 | else
30 | echo ""
31 | echo "Clickwrap ID required. Please run code example 1 - Create Clickwrap"
32 | exit 0
33 | fi
34 |
35 |
36 |
37 | # Construct your API headers
38 | #ds-snippet-start:Click6Step2
39 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
40 | '--header' "Accept: application/json"
41 | '--header' "Content-Type: application/json")
42 | #ds-snippet-end:Click6Step2
43 |
44 |
45 | # Construct the request body
46 | # Create a temporary file to store the JSON body
47 |
48 | echo "Please input a client User Id (your own unique identifier) for the clickwrap: "
49 | read client_user_id
50 | echo "Please input a full name: "
51 | read full_name
52 | echo "Please input an email address: "
53 | read email_address
54 | echo "Please input a company name: "
55 | read company_name
56 | echo "Please input a job title: "
57 | read title
58 |
59 | #ds-snippet-start:Click6Step3
60 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
61 | printf \
62 | '
63 | {
64 | "clientUserId": "'"$client_user_id"'",
65 | "documentData": {
66 | "fullName": "'"$full_name"'",
67 | "email": "'"$email_address"'",
68 | "company": "'"$company_name"'",
69 | "title": "'"$title"'",
70 | "date": "'"$(date -I)"'"
71 | }
72 | }' >$request_data
73 | #ds-snippet-end:Click6Step3
74 |
75 | # Call the Click API
76 | # a) Make a POST call to the agreements endpoint to dynamically generate
77 | # b) Display the returned JSON structure of the response
78 | # Create a temporary file to store the response
79 | #ds-snippet-start:Click6Step4
80 | response=$(mktemp /tmp/response-cw.XXXXXX)
81 |
82 | curl --request POST https://demo.docusign.net/clickapi/v1/accounts/${account_id}/clickwraps/${clickwrap_id}/agreements \
83 | "${Headers[@]}" \
84 | --data-binary @${request_data} \
85 | --output ${response}
86 | #ds-snippet-end:Click6Step4
87 |
88 | message=`cat $response | grep message | sed 's/.*\"message\":\"//'`
89 |
90 |
91 | if [[ "${message}" == *"There are no active versions for clickwrapId"* ]] ;then
92 | echo "Clickwrap must be activated. Please run code example 2 - Activate Clickwrap"
93 | exit 0
94 |
95 | elif [[ "${message}" == *"Unable to find Clickwrap with id"* ]] ;then
96 | echo "Clickwrap ID required. Please run code example 1 - Create Clickwrap"
97 | exit 0
98 |
99 | else
100 | echo ""
101 | echo "Response:"
102 | cat $response
103 | echo ""
104 |
105 |
106 | fi
107 |
108 |
109 | # Remove the temporary file
110 | rm "$response"
111 |
--------------------------------------------------------------------------------
/examples/IdEvidence/eg001RetrieveEvents.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | # Obtain your OAuth token
7 | access_token=$(cat config/ds_access_token.txt)
8 |
9 | # Set up variables for full code example
10 | account_id=$(cat config/API_ACCOUNT_ID)
11 | idv_envelope_id=$(cat config/IDV_ENVELOPE_ID)
12 |
13 | if [ -z "$idv_envelope_id" ]; then
14 | echo "An IDV Envelope ID is needed. Run eSignature example 23 'Signing via Email with IDV Authentication' and complete IDV before running this code example."
15 | exit 1
16 | fi
17 |
18 | # Construct your API headers
19 | declare -a Headers=('--header' "Authorization: Bearer ${access_token}" \
20 | '--header' "Accept: application/json, text/plain, */*" \
21 | '--header' "Content-Type: application/json;charset=UTF-8")
22 |
23 | # Retrieve recipient data
24 | #ds-snippet-start:IDEvidence1Step2
25 | uri="https://demo.docusign.net/restapi/v2.1/accounts/${account_id}/envelopes/${idv_envelope_id}/recipients"
26 | response=$(mktemp /tmp/response.XXXXXX)
27 |
28 | echo "Retrieving recipient data"
29 |
30 | status=$(curl -s -w "%{http_code}" --request GET "${uri}" \
31 | "${Headers[@]}" \
32 | --output ${response})
33 | #ds-snippet-end
34 |
35 | # If the status code returned a response greater than 201, display an error message
36 | if [[ "$status" -gt "201" ]]; then
37 | echo ""
38 | cat $response
39 | exit 0
40 | fi
41 |
42 | echo ""
43 | echo "Response:"
44 |
45 | recipientIdGuid=$(cat $response | grep -o '"recipientIdGuid":"[^"]*' | sed 's/"recipientIdGuid":"//')
46 |
47 | echo ""
48 | echo "recipientIdGuid: $recipientIdGuid"
49 | echo ""
50 |
51 | echo $recipientIdGuid >config/RECIPIENT_ID_GUID
52 |
53 | # Construct your API headers
54 | declare -a Headers=('--header' "Authorization: Bearer ${access_token}" \
55 | '--header' "Accept: application/json, text/plain, */*" \
56 | '--header' "Content-Length: 0" \
57 | '--header' "Content-Type: application/json;charset=UTF-8")
58 |
59 | # Obtain identity proof token (resource token)
60 | #ds-snippet-start:IDEvidence1Step3
61 | uri="https://demo.docusign.net/restapi/v2.1/accounts/${account_id}/envelopes/${idv_envelope_id}/recipients/${recipientIdGuid}/identity_proof_token"
62 | response=$(mktemp /tmp/response.XXXXXX)
63 |
64 | echo "Attempting to retrieve your identity proof token"
65 |
66 | status=$(curl -s -w "%{http_code}" --request POST "${uri}" \
67 | "${Headers[@]}" \
68 | --output ${response})
69 | #ds-snippet-end
70 |
71 | # If the status code returned a response greater than 201, display an error message
72 | if [[ "$status" -gt "201" ]]; then
73 | echo ""
74 | cat $response
75 | exit 0
76 | fi
77 |
78 | echo ""
79 | echo "Response:"
80 |
81 | #Obtain the resourceToken from the API response
82 | resourceToken=$(cat $response | grep -o '"resourceToken":"[^"]*' | sed 's/"resourceToken":"//')
83 |
84 | echo ""
85 | echo "resourceToken: $resourceToken"
86 | echo ""
87 |
88 | # Save the Resource Token for use by other scripts
89 | echo $resourceToken >config/RESOURCE_TOKEN
90 |
91 | # Construct your API headers
92 | #ds-snippet-start:IDEvidence1Step4
93 | declare -a Headers=('--header' "Authorization: Bearer ${resourceToken}" \
94 | '--header' "Accept: application/json, text/plain, */*" \
95 | '--header' "Content-Type: application/json;charset=UTF-8")
96 | #ds-snippet-end
97 | # Obtain identity proof token (resource token)
98 | #ds-snippet-start:IDEvidence1Step5
99 | uri="https://proof-d.docusign.net/api/v1/events/person/${recipientIdGuid}.json"
100 | response=$(mktemp /tmp/response.XXXXXX)
101 |
102 | echo "Retrieving recipient data"
103 |
104 | status=$(curl -s -w "%{http_code}" --request GET "${uri}" \
105 | "${Headers[@]}" \
106 | --output ${response})
107 | #ds-snippet-end
108 |
109 | # If the status code returned a response greater than 201, display an error message
110 | if [[ "$status" -gt "201" ]]; then
111 | echo ""
112 | cat $response
113 | exit 0
114 | fi
115 |
116 | # Obtain the Event List from the API response
117 | events=`cat $response | grep events | sed 's/.*\"events\":\"//' | sed 's/\",.*//'`
118 | echo ""
119 | echo "Response:"
120 | cat $response
121 | echo ""
122 |
123 | copy_of_id_front=$(cat $response | grep -o '"copy_of_id_front":"[^"]*' | sed 's/"copy_of_id_front":"//')
124 |
125 | echo ""
126 | echo "copy_of_id_front: $copy_of_id_front"
127 |
128 | # Save the copy_of_id_front URL for use by other scripts
129 | echo $copy_of_id_front >config/COPY_OF_ID_FRONT_URL
130 |
131 | # Remove the temporary files
132 | rm "$response"
133 |
134 | echo ""
135 | echo "Done."
136 | echo ""
137 |
--------------------------------------------------------------------------------
/examples/Maestro/lib/startServerForEmbeddedWorkflow.php:
--------------------------------------------------------------------------------
1 |
16 | The document has been embedded using Maestro Embedded Workflow.
17 |
18 |
19 |
20 |
21 |
22 |
23 | Example Workflow
24 |
32 |
33 |
34 |
37 |
38 |
40 |
41 |
44 |
45 |
46 |
47 |
48 | Continue
49 |
50 | ";
51 |
52 | ini_set('default_socket_timeout', 60 * 5);
53 | $server = stream_socket_server($socket, $errno, $errstr);
54 | if (!$server) {
55 | Log::err('Error starting HTTP server');
56 | return false;
57 | }
58 | do {
59 | $sock = stream_socket_accept($server);
60 | if (!$sock) {
61 | Log::err('Error accepting socket connection');
62 | exit(1);
63 | }
64 | $contentLength = 0;
65 | $headers = [];
66 | $body = null;
67 | while (false !== ($line = trim(fgets($sock)))) {
68 | if ($line === '') break;
69 | $regex = '#^Content-Length:\s*([[:digit:]]+)\s*$#i';
70 | if (preg_match($regex, $line, $matches)) {
71 | $contentLength = (int)$matches[1];
72 | }
73 | $headers[] = $line;
74 | }
75 | if ($contentLength > 0) {
76 | $body = fread($sock, $contentLength);
77 | }
78 | list($method, $url, $httpver) = explode(' ', $headers[0]);
79 | if ($method == 'GET') {
80 | fwrite($sock, $responseOk);
81 | fclose($sock);
82 | return;
83 | }
84 | } while (true);
85 |
86 | ?>
87 |
--------------------------------------------------------------------------------
/examples/Monitor/eg001GetMonitoringData.sh:
--------------------------------------------------------------------------------
1 | # Step 1: Obtain your OAuth token
2 | # Note: Substitute these values with your own
3 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
4 |
5 | # Construct your API headers
6 | #ds-snippet-start:Monitor1Step2
7 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
8 | '--header' "Accept: application/json"
9 | '--header' "Content-Type: application/json")
10 | #ds-snippet-end:Monitor1Step2
11 |
12 |
13 | # First call the endpoint with no cursor to get the first records.
14 | # After each call, save the cursor and use it to make the next
15 | # call from the point where the previous one left off when iterating through
16 | # the monitoring records
17 |
18 | #ds-snippet-start:Monitor1Step3
19 | if date -v -10d &>/dev/null; then
20 | # Mac
21 | cursorDate=$(date -v -1y '+%Y-%m-%d')
22 | else
23 | # Not a Mac
24 | cursorDate=$(date --date='-1 year' '+%Y-%m-%d')
25 | fi
26 |
27 | complete=false
28 | cursorValue="${cursorDate}T00:00:00Z"
29 | iterations=0
30 |
31 | while [ $complete == false ]; do
32 | ((iterations=iterations+1))
33 | # Create a temporary file to store the response
34 | response=$(mktemp /tmp/response-bs.XXXXXX)
35 | Status=$(curl -w '%{http_code}' -i --request GET "https://lens-d.docusign.net/api/v2.0/datasets/monitor/stream?cursor=${cursorValue}&limit=2000" \
36 | "${Headers[@]}" \
37 | --output ${response})
38 | # If the Status code returned is greater than 201 (OK / Accepted), display an error message
39 | # along with the API response
40 | if [[ "$Status" -gt "201" ]] ; then
41 | echo ""
42 | echo "You do not have Monitor enabled for your account, follow https://developers.docusign.com/docs/monitor-api/how-to/enable-monitor/ to get it enabled."
43 | echo ""
44 | cat $response
45 | exit 1
46 | fi
47 | # Display the data
48 | echo ""
49 | echo "Increment:"
50 | echo $iterations
51 | echo "Response:"
52 | cat $response
53 | echo ""
54 | # Get the endCursor value from the response. This lets you resume
55 | # getting records from the spot where this call left off
56 | endCursorValue=`cat $response | grep endCursor | sed 's/.*\"endCursor\":\"//' | sed 's/\",.*//'`
57 | echo "endCursorValue is:"
58 | echo $endCursorValue
59 | echo "cursorValue is:"
60 | echo $cursorValue
61 | echo ""
62 | # If the endCursor from the response is the same as the one that you already have,
63 | # it means that you have reached the end of the records
64 | if [ "$endCursorValue" == "$cursorValue" ] ; then
65 | echo 'After getting records, the cursor values are the same. This indicates that you have reached the end of your available records.'
66 | complete=$((true))
67 | else
68 | echo 'Updating the cursor value of ' ${cursorValue} ' to the new value of ' ${endCursorValue}
69 | cursorValue="${endCursorValue}"
70 | sleep 5
71 | fi
72 | #ds-snippet-end:Monitor1Step3
73 | echo ""
74 | # Remove the temporary file
75 | rm "$response"
76 | done
77 | echo ""
78 | echo ""
79 | echo "Done."
80 | echo ""
81 |
--------------------------------------------------------------------------------
/examples/Navigator/eg001ListAgreements.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | ds_access_token_path="config/ds_access_token.txt"
7 | agreements="config/AGREEMENTS.txt"
8 |
9 | # Obtain your OAuth token
10 | # Note: Substitute these values with your own
11 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
12 |
13 | # Set up variables for full code example
14 | # Note: Substitute these values with your own
15 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
16 | base_path="https://api-d.docusign.com/v1"
17 |
18 | #ds-snippet-start:Navigator1Step2
19 | #apx-snippet-start:GetAgreementsList
20 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
21 | '--header' "Accept: application/json" \
22 | '--header' "Content-Type: application/json")
23 | #ds-snippet-end:Navigator1Step2
24 |
25 | # List agreements
26 | #ds-snippet-start:Navigator1Step3
27 | response=$(mktemp /tmp/response-cw.XXXXXX)
28 | Status=$(curl -w '%{http_code}' -i --ssl-no-revoke --request GET ${base_path}/accounts/${ACCOUNT_ID}/agreements \
29 | "${Headers[@]}" \
30 | --output ${response})
31 | #apx-snippet-end:GetAgreementsList
32 | #ds-snippet-end:Navigator1Step3
33 |
34 | if [[ "$Status" -gt "399" ]] ; then
35 | echo ""
36 | echo "Listing agreements..."
37 | echo ""
38 | cat $response
39 | exit 0
40 | fi
41 |
42 | echo ""
43 | echo "Response:"
44 | cat $response
45 | echo ""
46 |
47 | # Extract id and file_name from each data object in the $response file
48 | > "$agreements" # Clear the output file at the beginning
49 | capture_id=false
50 |
51 | # Process each line in the $response file
52 | while read -r line; do
53 | # Check for "id" and capture it if found
54 | case "$line" in
55 | *'"id"':*)
56 | # Extract the id value
57 | id="${line#*\"id\": \"}"
58 | id="${id%%\",*}"
59 | capture_id=true
60 | ;;
61 | *'"file_name"':*)
62 | if $capture_id; then
63 | # Extract the file_name value
64 | file_name="${line#*\"file_name\": \"}"
65 | file_name="${file_name%%\"*}"
66 |
67 | # Write id and file_name to the output file
68 | echo "$id $file_name" >> "$agreements"
69 |
70 | # Reset the capture flag
71 | capture_id=false
72 | fi
73 | ;;
74 | esac
75 | done < "$response"
76 |
77 | # Remove the temporary files
78 | rm "$response"
79 |
--------------------------------------------------------------------------------
/examples/Navigator/eg002GetSingleAgreement.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | ds_access_token_path="config/ds_access_token.txt"
7 | agreements="config/AGREEMENTS.txt"
8 |
9 | # Obtain your OAuth token
10 | # Note: Substitute these values with your own
11 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
12 |
13 | # Set up variables for full code example
14 | # Note: Substitute these values with your own
15 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
16 | base_path="https://api-d.docusign.com/v1"
17 |
18 | # Check if agreements file exists and has content
19 | if [[ ! -s "$agreements" ]]; then
20 | echo "Please run Navigator example 1: List_Agreements first to get a list of agreements."
21 | exit 0
22 | fi
23 |
24 | #Display list of agreements
25 | # Initialize an array to hold the file_names
26 | file_names=()
27 |
28 | # Read each line from AGREEMENTS.txt and populate file_names array
29 | while IFS=' ' read -r id file_name; do
30 | file_names+=("$file_name")
31 | done < $agreements
32 |
33 | # Display the file_name options to the user for selection
34 | echo "Please select an agreement:"
35 | select chosen_name in "${file_names[@]}"; do
36 | if [[ -n "$chosen_name" ]]; then
37 | # Find the matching line and extract the corresponding id
38 | AGREEMENT_ID=$(grep -w "$chosen_name" "$agreements" | awk '{print $1}')
39 | echo "You selected: $chosen_name"
40 | echo "AGREEMENT_ID: $AGREEMENT_ID"
41 | break
42 | else
43 | echo "Invalid selection. Please try again."
44 | fi
45 | done
46 |
47 | #ds-snippet-start:Navigator2Step2
48 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
49 | '--header' "Accept: application/json" \
50 | '--header' "Content-Type: application/json")
51 | #ds-snippet-end:Navigator2Step2
52 |
53 | # Get Agreement
54 | #ds-snippet-start:Navigator2Step3
55 | #apx-snippet-start:GetAgreement
56 | response=$(mktemp /tmp/response-neg-002.XXXXXX)
57 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/accounts/${ACCOUNT_ID}/agreements/${AGREEMENT_ID} \
58 | "${Headers[@]}" \
59 | --output ${response})
60 | #apx-snippet-end:GetAgreement
61 | #ds-snippet-end:Navigator2Step3
62 |
63 |
64 | if [[ "$Status" -gt "399" ]] ; then
65 | echo ""
66 | echo "Error: "
67 | echo ""
68 | cat $response
69 | exit 0
70 | fi
71 |
72 | echo ""
73 | echo "Response:"
74 | cat $response
75 | echo ""
76 |
77 |
78 | # Remove the temporary files
79 | rm "$response"
80 |
--------------------------------------------------------------------------------
/examples/Notary/eg001SignatureRequestToNotaryGroup.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | # Obtain your OAuth token
7 | # Note: Substitute these values with your own
8 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
9 |
10 | # Set up variables for full code example
11 | # Note: Substitute these values with your own
12 | account_id=$(cat config/API_ACCOUNT_ID)
13 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
14 | base_path="https://demo.docusign.net/restapi"
15 |
16 | # Send an envelope
17 | # Get required environment variables from .\config\settings.json file
18 | if [[ $NOTARY_EMAIL == "" || NOTARY_NAME == "" || NOTARY_API_ACCOUNT_ID == "" ]] ; then
19 | echo "NOTARY_EMAIL, NOTARY_NAME, and NOTARY_API_ACCOUNT_ID are needed. Please add the NOTARY_EMAIL, NOTARY_NAME, and NOTARY_API_ACCOUNT_ID variables to the settings.txt"
20 | exit 1
21 | fi
22 |
23 | #ds-snippet-start:Notary1Step2
24 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
25 | '--header' "Accept: application/json" \
26 | '--header' "Content-Type: application/json")
27 | #ds-snippet-end
28 |
29 | # temp files:
30 | request_data=$(mktemp /tmp/request-eg-001.XXXXXX)
31 | response=$(mktemp /tmp/response-eg-001.XXXXXX)
32 | doc_base64=$(mktemp /tmp/eg-001-doc.XXXXXX)
33 |
34 | cat demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx | base64 > $doc_base64
35 |
36 | echo "Sending the envelope request to DocuSign..."
37 | echo "The envelope processing time will be about 15 seconds."
38 | echo "Response:"
39 |
40 | # Concatenate the different parts of the request
41 |
42 | #ds-snippet-start:Notary1Step3
43 | printf \
44 | '{
45 | "emailSubject": "Please sign this document set",
46 | "documents": [
47 | {
48 | "documentBase64": "' >> $request_data
49 | cat $doc_base64 >> $request_data
50 | printf '",
51 | "name": "Order acknowledgement",
52 | "fileExtension": "html",
53 | "documentId": "1",
54 | },
55 | ],
56 | "recipients": {
57 | "notaries": [
58 | {
59 | "email": "'"$NOTARY_EMAIL"'",
60 | "name": "'"$NOTARY_NAME"'",
61 | "recipientId": "1",
62 | "routingOrder": "1",
63 | "tabs": {
64 | "notarySealTabs": [
65 | {
66 | "xPosition": "300",
67 | "yPosition": "235",
68 | "documentId": "1",
69 | "pageNumber": "1",
70 | },
71 | ],
72 | "signHereTabs": [
73 | {
74 | "xPosition": "300",
75 | "yPosition": "150",
76 | "documentId": "1",
77 | "pageNumber": "1",
78 | },
79 | ]
80 | },
81 | "userId": "'"$NOTARY_API_ACCOUNT_ID"'",
82 | "notaryType": "remote",
83 | },
84 | ],
85 | "signers": [
86 | {
87 | "clientUserId": "12345",
88 | "email": "'"$SIGNER_EMAIL"'",
89 | "name": "'"$SIGNER_NAME"'",
90 | "recipientId": "2",
91 | "routingOrder": "1",
92 | "notaryId": "1",
93 | "tabs": {
94 | "signHereTabs": [
95 | {
96 | "documentId": "1",
97 | "xPosition": "200",
98 | "yPosition": "235",
99 | "pageNumber": "1",
100 | },
101 | {
102 | "stampType": "stamp",
103 | "documentId": "1",
104 | "xPosition": "200",
105 | "yPosition": "150",
106 | "pageNumber": "1",
107 | },
108 | ],
109 | },
110 | },
111 | ],
112 | },
113 | "status": "sent"
114 | }' >> $request_data
115 | #ds-snippet-end
116 |
117 | # Create and send the envelope
118 | #ds-snippet-start:Notary1Step4
119 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
120 | --header "Content-Type: application/json" \
121 | --data-binary @${request_data} \
122 | --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
123 | --output $response
124 |
125 | echo "Response: "
126 | cat $response
127 | #ds-snippet-end
128 | # pull out the envelopeId
129 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
130 |
131 | # Save the envelope id for use by other scripts
132 | echo "EnvelopeId: ${envelope_id}"
133 | echo ${envelope_id} > config/ENVELOPE_ID
134 |
135 | # cleanup
136 | rm "$request_data"
137 | rm "$response"
138 | rm "$doc_base64"
139 |
140 | echo ""
141 | echo ""
142 | echo "Done."
143 | echo ""
144 |
--------------------------------------------------------------------------------
/examples/Notary/eg002InviteNotaryToPool.sh:
--------------------------------------------------------------------------------
1 | # Invite a notary to join your pool
2 | #
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 | ORGANIZATION_ID=$(cat config/ORGANIZATION_ID)
16 | base_path="https://notary-d.docusign.net/restapi"
17 |
18 | # Create a temporary file to store the response
19 | response=$(mktemp /tmp/response-notary.XXXXXX)
20 |
21 | # Construct your API headers
22 | #ds-snippet-start:Notary2Step2
23 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
24 | '--header' "Accept: application/json" \
25 | '--header' "Content-Type: application/json")
26 | #ds-snippet-end
27 |
28 | #ds-snippet-start:Notary2Step3
29 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v1.0/organizations/${ORGANIZATION_ID}/pools \
30 | "${Headers[@]}" \
31 | --output ${response})
32 |
33 | POOL_ID=$(cat "$response" | sed -n 's/.*"poolId":"\([^"]*\)".*/\1/p')
34 | #ds-snippet-end
35 |
36 | # Create a temporary file to store the request data
37 | request_data=$(mktemp /tmp/request-notary-002.XXXXXX)
38 |
39 | echo ""
40 | read -p "Please enter a username for the new user: " NOTARY_NAME
41 | read -p "Please enter an email for the new user: " NOTARY_EMAIL
42 |
43 | #ds-snippet-start:Notary2Step4
44 | printf \
45 | '
46 | {
47 | "email" : "'"${NOTARY_EMAIL}"'",
48 | "name" : "'"${NOTARY_NAME}"'",
49 | }' >$request_data
50 | #ds-snippet-end
51 |
52 | echo ""
53 | echo "Inviting ${NOTARY_NAME} to your organization's notary pool"
54 | echo ""
55 | echo "Pool id is ${POOL_ID}"
56 | echo ""
57 |
58 | #ds-snippet-start:Notary2Step5
59 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v1.0/organizations/${ORGANIZATION_ID}/pools/${POOL_ID}/invites \
60 | "${Headers[@]}" \
61 | --data-binary @${request_data} \
62 | --output ${response})
63 | #ds-snippet-end
64 |
65 | if [[ "$Status" -gt "201" ]]; then
66 | echo ""
67 | echo "Error:"
68 | echo ""
69 | cat $response
70 | exit 1
71 | fi
72 |
73 |
74 | echo ""
75 | echo "Response:"
76 | cat $response
77 | echo ""
78 | echo "Done."
79 | echo ""
80 |
--------------------------------------------------------------------------------
/examples/Notary/eg003Jurisdictions.sh:
--------------------------------------------------------------------------------
1 | # Returns the status of whether or not jurisdictions are disabled
2 | #
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Step 1 start
9 | # Obtain your OAuth token
10 | # Note: Substitute these values with your own
11 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
12 | # Step 1 end
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 | base_path="https://notary-d.docusign.net/restapi"
18 |
19 | # Create a temporary file to store the response
20 | response=$(mktemp /tmp/response-notary.XXXXXX)
21 |
22 | echo "Sending the jurisdiction status request to DocuSign..."
23 | echo ""
24 | echo "Results:"
25 | # Step 2 start
26 | #ds-snippet-start:Notary3Step2
27 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
28 | '--header' "Accept: application/json" \
29 | '--header' "Content-Type: application/json")
30 |
31 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v1.0/accounts/${API_ACCOUNT_ID}/jurisdictions \
32 | "${Headers[@]}" \
33 | --output ${response})
34 | #ds-snippet-end
35 | # Step 2 end
36 |
37 | if [[ "$Status" -gt "201" ]]; then
38 | echo ""
39 | echo "Error:"
40 | echo ""
41 | cat $response
42 | exit 1
43 | fi
44 |
45 | echo ""
46 | echo "Response:"
47 | cat $response
48 | echo ""
49 | echo "Done."
50 | echo ""
51 |
--------------------------------------------------------------------------------
/examples/Notary/eg004SendWithThirdPartyNotary.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Use embedded signing
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | ds_access_token_path="config/ds_access_token.txt"
10 | api_account_id_path="config/API_ACCOUNT_ID"
11 | document_path="demo_documents/World_Wide_Corp_lorem.pdf"
12 |
13 | if [ ! -f $ds_access_token_path ]; then
14 | ds_access_token_path="../config/ds_access_token.txt"
15 | api_account_id_path="../config/API_ACCOUNT_ID"
16 | document_path="../demo_documents/World_Wide_Corp_lorem.pdf"
17 | fi
18 |
19 | # Step 1: Obtain your OAuth token
20 | # Note: Substitute these values with your own
21 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
22 |
23 | # Set up variables for full code example
24 | # Note: Substitute these values with your own
25 | ACCOUNT_ID=$(cat ${api_account_id_path})
26 |
27 |
28 | # Create the envelope.
29 | # The signer recipient includes a clientUserId setting
30 | #
31 | # document 1 (pdf) has tag /sn1/
32 | # The envelope will be sent to the signer.
33 |
34 | base_path="https://demo.docusign.net/restapi"
35 |
36 | # temp files:
37 | request_data=$(mktemp /tmp/request-eg-001.XXXXXX)
38 | response=$(mktemp /tmp/response-eg-001.XXXXXX)
39 | doc_base64=$(mktemp /tmp/eg-001-doc.XXXXXX)
40 |
41 | cat demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx | base64 > $doc_base64
42 |
43 | echo ""
44 | echo "Sending the envelope request to Docusign..."
45 |
46 | # Construct API headers
47 |
48 | #ds-snippet-start:Notary4Step2
49 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
50 | '--header' "Accept: application/json" \
51 | '--header' "Content-Type: application/json")
52 | #ds-snippet-end:Notary4Step2
53 |
54 | # Concatenate the different parts of the request
55 | #ds-snippet-start:Notary4Step3
56 | printf \
57 | '{
58 | "emailSubject": "Please sign this document set",
59 | "documents": [
60 | {
61 | "documentBase64": "' >> $request_data
62 | cat $doc_base64 >> $request_data
63 | printf '",
64 | "name": "Order acknowledgement",
65 | "fileExtension": "html",
66 | "documentId": "1",
67 | },
68 | ],
69 | "recipients": {
70 | "signers": [
71 | {
72 | "clientUserId": "1000",
73 | "email": "'"${SIGNER_EMAIL}"'",
74 | "name": "'"${SIGNER_NAME}"'",
75 | "recipientId": "2",
76 | "routingOrder": "1",
77 | "notaryId": "1",
78 | "tabs": {
79 | "signHereTabs": [
80 | {
81 | "documentId": "1",
82 | "xPosition": "200",
83 | "yPosition": "235",
84 | "pageNumber": "1",
85 | },
86 | {
87 | "stampType": "stamp",
88 | "documentId": "1",
89 | "xPosition": "200",
90 | "yPosition": "150",
91 | "pageNumber": "1",
92 | },
93 | ],
94 | },
95 | }
96 | ],
97 | "notaries": [
98 | {
99 | "name": "Notary",
100 | "recipientId": "1",
101 | "routingOrder": "1",
102 | "recipientSignatureProviders": [
103 | {
104 | "sealDocumentsWithTabsOnly": "false",
105 | "signatureProviderName": "ds_authority_idv"
106 | }
107 | ],
108 | "tabs": {
109 | "notarySealTabs": [
110 | {
111 | "xPosition": "300",
112 | "yPosition": "235",
113 | "documentId": "1",
114 | "pageNumber": "1",
115 | },
116 | ],
117 | "signHereTabs": [
118 | {
119 | "xPosition": "300",
120 | "yPosition": "150",
121 | "documentId": "1",
122 | "pageNumber": "1",
123 | },
124 | ]
125 | },
126 | "notaryType": "remote",
127 | "notarySourceType": "thirdparty",
128 | "notaryThirdPartyPartner": "onenotary"
129 | }
130 | ]
131 | },
132 | "status": "sent"
133 | }' >> $request_data
134 | #ds-snippet-end:Notary4Step3
135 |
136 | # Call Docusign to create the envelope
137 |
138 | #ds-snippet-start:Notary4Step4
139 | curl --data-binary @${request_data} \
140 | --request POST ${base_path}/v2.1/accounts/${ACCOUNT_ID}/envelopes \
141 | "${Headers[@]}" \
142 | --output ${response}
143 | #ds-snippet-end:Notary4Step4
144 |
145 | echo ""
146 | echo "Response:" `cat $response`
147 | echo ""
148 |
149 | # pull out the envelopeId
150 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
151 | echo "EnvelopeId: ${envelope_id}"
152 |
153 |
154 | # cleanup
155 | rm "$request_data"
156 | rm "$response"
157 | rm "$doc_base64"
158 |
159 | echo ""
160 | echo "Done."
--------------------------------------------------------------------------------
/examples/Rooms/eg001CreateRoomWithDataController.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/create-room-with-data/
3 | # Create Room With Data
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | source ./examples/Rooms/lib/utils.sh
11 |
12 | # Step 1: Obtain your OAuth token
13 | # Note: Substitute these values with your own
14 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
15 |
16 | # Set up variables for full code example
17 | # Note: Substitute these values with your own
18 | account_id=$(cat config/API_ACCOUNT_ID)
19 |
20 | base_path="https://demo.docusign.net/restapi"
21 |
22 | # Construct your API headers
23 | #ds-snippet-start:Rooms1Step2
24 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
25 | '--header' "Accept: application/json" \
26 | '--header' "Content-Type: application/json")
27 |
28 | #ds-snippet-end:Rooms1Step2
29 | # - Construct the request body for your room
30 |
31 | echo ""
32 | echo "Attempting to retrieve default role Id"
33 | echo ""
34 | response=$(mktemp /tmp/response-rmtmp.XXXXXX)
35 | Status=$(
36 | curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/roles" \
37 | "${Headers[@]}" \
38 | --output ${response}
39 | )
40 | # If the status code returned is greater than 201 (OK / Accepted), display an error message with the API response.
41 | if [[ "$Status" -gt "201" ]]; then
42 | echo ""
43 | echo "Unable to retrieve your account's role settings"
44 | echo ""
45 | cat $response
46 | exit 0
47 | fi
48 | echo ""
49 |
50 | # Retrieve the role IDs from the API response and put them in an array.
51 | roleIds=`cat $response | grep -o -P '(?<=roleId\":).*?(?=,")'`
52 | arrRoleIds=($roleIds)
53 |
54 | # Get the index of the role based on name and use that index for roleId.
55 | # Name of the role is 'Default Admin'
56 | roles=`cat $response | grep -o -P '(?<=name\":).*?(?=,)'`
57 | element="Default Admin"
58 |
59 | roleId=$(GetRoleId "$roles" "$element" "$roleIds")
60 |
61 | # Remove the temporary file
62 | rm "$response"
63 |
64 | # Retrieve a Rooms office ID
65 | # Create a temporary file to store the response
66 | request_data=$(mktemp /tmp/request-rmtmp.XXXXXX)
67 |
68 | echo ""
69 | echo "Attempting to retrieve default office ID"
70 | echo ""
71 | response=$(mktemp /tmp/response-rmtmp.XXXXXX)
72 | Status=$(
73 | curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/offices" \
74 | "${Headers[@]}" \
75 | --output ${response}
76 | )
77 | #If the status code returned is greater than 201 (OK / Accepted), display an error message with the API response.
78 | if [[ "$Status" -gt "201" ]]; then
79 | echo ""
80 | echo "Unable to retrieve your account's office ids"
81 | echo ""
82 | cat $response
83 | exit 0
84 | fi
85 | echo ""
86 | officeId=$(cat $response | grep officeId | sed 's/.*\"officeId\"://' | sed 's/,.*//')
87 | echo "officeID: $officeId"
88 |
89 | # Remove the temporary file
90 | rm "$response"
91 |
92 | # Create a temporary file to store the request body
93 | request_data=$(mktemp /tmp/request-rms-001.XXXXXX)
94 |
95 | #ds-snippet-start:Rooms1Step3
96 | printf \
97 | '
98 | {
99 | "name": "Sample Room Creation",
100 | "roleId": "'"$roleId"'",
101 | "transactionSideId": "listbuy",
102 | "officeId": "'"$officeId"'",
103 | "fieldData": {
104 | "data" : {
105 | "address1": "123 EZ Street",
106 | "address2": "unit 10",
107 | "city": "Galaxian",
108 | "state": "US-HI",
109 | "postalCode": "11112",
110 | "companyRoomStatus": "5",
111 | "comments": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
112 | }
113 | }
114 | }' >$request_data
115 | #ds-snippet-end:Rooms1Step3
116 |
117 | # Create a temporary file to store the response
118 | response=$(mktemp /tmp/response-rms.XXXXXX)
119 |
120 | # a) Call the Rooms API
121 | # b) Display the JSON response
122 | #ds-snippet-start:Rooms1Step4
123 | Status=$(
124 | curl -w '%{http_code}' -i --request POST https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/rooms \
125 | "${Headers[@]}" \
126 | --data-binary @${request_data} \
127 | --output ${response}
128 | )
129 | #ds-snippet-end:Rooms1Step4
130 |
131 | # If the status code returned is greater than 201 (OK/Accepted), display an error message with the API response
132 | if [[ "$Status" -gt "201" ]]; then
133 | echo ""
134 | echo "Posting the new room has failed."
135 | echo ""
136 | cat $response
137 | exit 0
138 | fi
139 |
140 | echo ""
141 | echo "Response:"
142 | cat $response
143 | echo ""
144 |
145 | # Save a Room ID to file
146 | roomId=$(cat $response | grep roomId | sed 's/.*\"roomId\"://' | sed 's/,.*//')
147 | echo $roomId >config/ROOM_ID
148 |
149 | # Remove the temporary files
150 | rm "$request_data"
151 | rm "$response"
152 |
--------------------------------------------------------------------------------
/examples/Rooms/eg003ExportDataFromRoomController.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/export-room-data
3 | # How to export data from a room
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Get a Room ID
19 | if [ -f "config/ROOM_ID" ]; then
20 | room_id=$(cat config/ROOM_ID)
21 | else
22 | echo " Room ID is needed. Please run step 1 or 2..."
23 | exit 0
24 | fi
25 |
26 | base_path="https://demo.docusign.net/restapi"
27 |
28 | # Construct your API headers
29 | #ds-snippet-start:Rooms3Step2
30 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
31 | '--header' "Accept: application/json"
32 | '--header' "Content-Type: application/json")
33 | #ds-snippet-end:Rooms3Step2
34 |
35 | # a) Call the Rooms API
36 | # b) Display JSON response
37 |
38 | # Create a temporary file to store the response
39 | response=$(mktemp /tmp/response-rms-001.XXXXXX)
40 |
41 | #ds-snippet-start:Rooms3Step3
42 | Status=$(curl -w '%{http_code}' -i --request GET https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/rooms/${room_id}/field_data \
43 | "${Headers[@]}" \
44 | --output ${response})
45 |
46 | if [[ "$Status" -gt "201" ]]; then
47 | echo ""
48 | echo "Unable to retrieve field_set on roomId: $room_id"
49 | echo ""
50 | cat $response
51 | exit 0
52 | fi
53 |
54 | echo ""
55 | echo "Response:"
56 | cat $response
57 | echo ""
58 |
59 | # Remove the temporary files
60 | rm "$response"
61 | #ds-snippet-end:Rooms3Step3
--------------------------------------------------------------------------------
/examples/Rooms/eg004AddFormsToRoomController.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/add-form-to-room
3 | # How to add forms to a room
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | base_path="https://demo.docusign.net/restapi"
19 | room_id=$(cat config/ROOM_ID)
20 |
21 | # Construct your API headers
22 | #ds-snippet-start:Rooms4Step2
23 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
24 | '--header' "Accept: application/json"
25 | '--header' "Content-Type: application/json")
26 | #ds-snippet-end:Rooms4Step2
27 |
28 | # Get a Room ID
29 | if [ -f "config/ROOM_ID" ]; then
30 | room_id=$(cat config/ROOM_ID)
31 | else
32 | echo "" Room ID is needed. Please run step 1 or 2...
33 | exit 0
34 | fi
35 |
36 | # Get a Library ID
37 | # Create a temporary file to store the response
38 | response=$(mktemp /tmp/response-rms.XXXXXX)
39 | Status=$(curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/form_libraries" \
40 | "${Headers[@]}" \
41 | --output ${response})
42 |
43 | cat $response
44 | form_library_id=$(cat $response | grep formsLibraryId | sed 's/.*\"formsLibraryId\"://' | sed 's/,.*//' | sed 's/\"//g')
45 |
46 | # Get a Library form ID
47 | Status=$(curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/form_libraries/${form_library_id}/forms" \
48 | "${Headers[@]}" \
49 | --output ${response})
50 |
51 | cat $response
52 | library_form_id=$(cat $response | grep libraryFormId | sed 's/.*\"libraryFormId\"://' | sed 's/,.*//' | sed 's/\"//g')
53 |
54 | # Remove the temporary file
55 | rm "$response"
56 |
57 |
58 | # Create a temporary file to store the request body and response
59 | request_data=$(mktemp /tmp/request-rms-001.XXXXXX)
60 | response=$(mktemp /tmp/response-rms.XXXXXX)
61 | # Construct the request body for adding a form
62 | #ds-snippet-start:Rooms4Step3
63 | printf \
64 | '{
65 | "formId":"'"$library_form_id"'",
66 | }' >$request_data
67 | #ds-snippet-end:Rooms4Step3
68 |
69 | # a) Call the Rooms API
70 | # b) Display the JSON response
71 | #ds-snippet-start:Rooms4Step4
72 | Status=$(curl -w '%{http_code}' -i --request POST "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/rooms/${room_id}/forms" \
73 | "${Headers[@]}" \
74 | --data-binary @${request_data} \
75 | --output ${response})
76 | #ds-snippet-end:Rooms4Step4
77 |
78 | # If the Status code returned is greater than 201 (OK/Accepted), display an error message along with the API response
79 | if [[ "$Status" -gt "201" ]]; then
80 | echo ""
81 | echo "Posting the new room has failed."
82 | echo ""
83 | cat $response
84 | exit 0
85 | fi
86 |
87 | echo ""
88 | echo "Response:"
89 | cat $response
90 | echo ""
91 |
92 | # Remove the temporary files
93 | rm "$request_data"
94 | rm "$response"
95 |
--------------------------------------------------------------------------------
/examples/Rooms/eg005GetRoomsWithFiltersController.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/get-room-with-filters/
3 | # How to get a room with filters
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # Construct your API headers
19 | #ds-snippet-start:Rooms5Step2
20 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
21 | '--header' "Accept: application/json"
22 | '--header' "Content-Type: application/json")
23 | #ds-snippet-end:Rooms5Step2
24 |
25 | # Set your filtering parameters
26 | # Calculate the past and current query parameters and use the ISO 8601 format.
27 | #ds-snippet-start:Rooms5Step3
28 | if date -v -10d &>/dev/null; then
29 | # Mac
30 | # past=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
31 | past=$(date -v -10d '+%Y-%m-%d')
32 | # Set the date 1 day forward to account for changes made today
33 | # current=`date -v +1d '+%Y-%m-%dT%H:%M:%S%z'`
34 | current=$(date -v +1d '+%Y-%m-%d')
35 | else
36 | # Not a Mac
37 | # past=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
38 | past=$(date --date='-10 days' '+%Y-%m-%d')
39 | # Set the date 1 day forward to account for changes made today
40 | # current=`date --date='+1 days' '+%Y-%m-%dT%H:%M:%S%z'`
41 | current=$(date --date='+1 days' '+%Y-%m-%d')
42 | fi
43 | #ds-snippet-end:Rooms5Step3
44 |
45 | # Call the v2 Rooms API
46 | # Create a temporary file to store the response
47 | #ds-snippet-start:Rooms5Step4
48 | response=$(mktemp /tmp/response-cw.XXXXXX)
49 | curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/rooms?fieldDataChangedStartDate=${past}&fieldDataChangedEndDate=${current}" \
50 | "${Headers[@]}" \
51 | --output ${response}
52 | #ds-snippet-end:Rooms5Step4
53 |
54 | echo ""
55 | echo "Response:"
56 | cat $response
57 | echo ""
58 |
59 | # Remove the temporary files
60 | rm "$response"
61 |
--------------------------------------------------------------------------------
/examples/Rooms/eg006CreateAnExternalFormFillSessionController.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/external-form-fill
3 | # How to create an external form fillable session
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | # 3. Obtain your accountId from demo.docusign.net -- the account id is shown in
19 | # the drop down on the upper right corner of the screen by your picture or
20 | # the default picture.
21 | account_id=$(cat config/API_ACCOUNT_ID)
22 |
23 | # Construct your API headers
24 | #ds-snippet-start:Rooms6Step2
25 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
26 | '--header' "Accept: application/json"
27 | '--header' "Content-Type: application/json")
28 | #ds-snippet-end:Rooms6Step2
29 |
30 | # Get a Room ID
31 | if [ -f "config/ROOM_ID" ]; then
32 | room_id=$(cat config/ROOM_ID)
33 | else
34 | echo "" Problem: Create a room using example 1.
35 | exit 0
36 | fi
37 |
38 | # Get a Library ID
39 | # Create a temporary file to store the response
40 | response=$(mktemp /tmp/response-rms.XXXXXX)
41 | Status=$(curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/form_libraries" \
42 | "${Headers[@]}" \
43 | --output ${response})
44 |
45 | cat $response
46 | form_library_id=$(cat $response | grep formsLibraryId | sed 's/.*\"formsLibraryId\"://' | sed 's/,.*//' | sed 's/\"//g')
47 |
48 | # Get a Library form ID
49 | Status=$(curl -w '%{http_code}' -i --request GET "https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/form_libraries/${form_library_id}/forms" \
50 | "${Headers[@]}" \
51 | --output ${response})
52 |
53 | cat $response
54 | library_form_id=$(cat $response | grep libraryFormId | sed 's/.*\"libraryFormId\"://' | sed 's/,.*//' | sed 's/\"//g')
55 |
56 | # Remove the temporary file
57 | rm "$response"
58 |
59 | # Construct your request body
60 | # Create a temporary file to store the JSON body
61 |
62 | #ds-snippet-start:Rooms6Step3
63 | request_data=$(mktemp /tmp/request-rooms.XXXXXX)
64 | printf \
65 | '{
66 | "roomId": '$room_id',
67 | "formIds": ["'$library_form_id'"],
68 | "xFrameAllowedUrl": "https://iframetester.com"
69 | }' >$request_data
70 | #ds-snippet-end:Rooms6Step3
71 |
72 | # Call the v2 Rooms API
73 | # Create a temporary file to store the response
74 | #ds-snippet-start:Rooms6Step4
75 | response=$(mktemp /tmp/response-rooms.XXXXXX)
76 |
77 | curl --request POST https://demo.rooms.docusign.com/restapi/v2/accounts/${account_id}/external_form_fill_sessions \
78 | "${Headers[@]}" \
79 | --data-binary @${request_data} \
80 | --output ${response}
81 |
82 | if grep -q FORM_NOT_IN_ROOM "$response"
83 | then
84 | echo ""
85 | echo "" Problem: Selected room does not have any forms. Add a form to a room using example 4.
86 | exit 0
87 | else
88 | echo ""
89 | echo "URL to be Embedded:"
90 | cat $response
91 | echo ""
92 | fi
93 | #ds-snippet-end:Rooms6Step4
94 |
95 | #ds-snippet-start:Rooms6Step5
96 | embed_url=`cat $response | grep url | sed 's/.*\"url\":\"//' | sed 's/\".*//'`
97 | redirect_url="https://iframetester.com/?url=${embed_url}"
98 | echo ""
99 |
100 | echo "The embedded form URL is ${redirect_url}"
101 | echo ""
102 | echo "Attempting to automatically open your browser..."
103 | #ds-snippet-end:Rooms6Step5
104 |
105 | if which xdg-open &> /dev/null ; then
106 | xdg-open "$redirect_url"
107 | elif which open &> /dev/null ; then
108 | open "$redirect_url"
109 | elif which start &> /dev/null ; then
110 | start "$redirect_url"
111 | fi
112 |
113 |
114 | # Remove the temporary files
115 | rm "$request_data"
116 | rm "$response"
117 |
--------------------------------------------------------------------------------
/examples/Rooms/eg007CreateFormGroup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/create-form-group/
3 | # How to create a form group
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 |
18 | base_path="https://demo.rooms.docusign.com"
19 |
20 | #ds-snippet-start:Rooms7Step2
21 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
22 | '--header' "Accept: application/json"
23 | '--header' "Content-Type: application/json")
24 | #ds-snippet-end:Rooms7Step2
25 |
26 | # Create a temporary file to store the response
27 | response=$(mktemp /tmp/response-rooms.XXXXXX)
28 |
29 |
30 | # Create a temporary file to store the JSON body
31 | request_data=$(mktemp /tmp/request-rooms-007.XXXXXX)
32 |
33 | #ds-snippet-start:Rooms7Step3
34 | printf \
35 | '
36 | {
37 | "name": "Sample Room Form Group",
38 | }' >$request_data
39 | #ds-snippet-end:Rooms7Step3
40 |
41 |
42 | #ds-snippet-start:Rooms7Step4
43 | Status=$(curl -w '%{http_code}' --request POST ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_groups \
44 | "${Headers[@]}" \
45 | --data-binary @${request_data} \
46 | --output ${response})
47 | #ds-snippet-end:Rooms7Step4
48 |
49 | FORM_GROUP_ID=$(cat $response | grep formGroupId | sed 's/.*formGroupId\":"//' | sed 's/\".*//')
50 |
51 | # Store FORM_GROUP_ID into the file ./config/FORM_GROUP_ID
52 | echo $FORM_GROUP_ID >./config/FORM_GROUP_ID
53 |
54 | if [[ "$Status" -gt "201" ]]; then
55 | echo ""
56 | echo "Error:"
57 | echo ""
58 | cat $response
59 | exit 1
60 | fi
61 |
62 | echo ""
63 | echo "Response:"
64 | cat $response
65 | echo ""
66 |
67 | # Remove the temporary files
68 | rm "$request_data"
69 | rm "$response"
70 |
--------------------------------------------------------------------------------
/examples/Rooms/eg008AccessFormGroup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/access-form-group/
3 | # How to grant office access to a form group
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
17 |
18 | base_path="https://demo.rooms.docusign.com"
19 |
20 | #ds-snippet-start:Rooms8Step2
21 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
22 | '--header' "Accept: application/json"
23 | '--header' "Content-Type: application/json")
24 | #ds-snippet-end:Rooms8Step2
25 |
26 |
27 | #ds-snippet-start:Rooms8Step3
28 | # Create a temporary file to store the response
29 | response=$(mktemp /tmp/response-rooms.XXXXXX)
30 | echo ""
31 | echo "Getting an Office ID..."
32 | Status=$(
33 | curl -w '%{http_code}' --request GET ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/offices \
34 | "${Headers[@]}" \
35 | --output ${response}
36 | )
37 |
38 | OFFICE_ID=$(cat $response | grep officeId | sed 's/.*\"officeId\"://' | sed 's/,".*//')
39 |
40 | if [[ "$Status" -gt "201" ]]; then
41 | echo ""
42 | echo "Error:"
43 | echo ""
44 | cat $response
45 | exit 1
46 | fi
47 |
48 | echo ""
49 | echo "Response:"
50 | cat $response
51 | echo ""
52 |
53 | request_data=$(mktemp /tmp/request-rooms-008.XXXXXX)
54 | #ds-snippet-end:Rooms8Step3
55 |
56 | # Get a form group ID from the file ./config/FORM_GROUP_ID
57 | #ds-snippet-start:Rooms8Step4
58 | if [ -f "config/FORM_GROUP_ID" ]; then
59 | FORM_GROUP_ID=$(cat config/FORM_GROUP_ID)
60 | else
61 |
62 | echo " Form group ID is needed. Please run step 7 - Create a form group..."
63 | exit 0
64 |
65 | fi
66 | #ds-snippet-end:Rooms8Step4
67 |
68 |
69 | response=$(mktemp /tmp/request-rooms-008step4req.XXXXXX)
70 | echo ""
71 | echo "Call the Rooms API..."
72 |
73 | #ds-snippet-start:Rooms8Step5
74 | Status=$(
75 | curl -w '%{http_code}' --request POST ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_groups/$FORM_GROUP_ID/grant_office_access/${OFFICE_ID} \
76 | "${Headers[@]}" \
77 | --data-binary @${request_data} \
78 | --output ${response}
79 | )
80 | #ds-snippet-end:Rooms8Step5
81 |
82 |
83 | if [[ "$Status" -ne "204" ]]; then
84 | echo ""
85 | echo "Error: Unable to grant office access to a form group"
86 | echo ""
87 | cat $response
88 | exit 1
89 | fi
90 |
91 | echo ""
92 | echo "Response status code: $Status "
93 | echo ""
94 |
95 | # Remove the temporary files
96 | rm "$request_data"
97 | rm "$response"
98 |
--------------------------------------------------------------------------------
/examples/Rooms/eg009AssignFormGroup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/rooms-api/how-to/assign-form-group/
3 | # How to assign a form to a form group
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | IFS=$'\n'
11 |
12 | # Step 1: Obtain your OAuth token
13 | # Note: Substitute these values with your own
14 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
15 |
16 | # Set up variables for full code example
17 | # Note: Substitute these values with your own
18 | API_ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
19 |
20 | base_path="https://demo.rooms.docusign.com"
21 |
22 | #ds-snippet-start:Rooms9Step2
23 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
24 | '--header' "Accept: application/json"
25 | '--header' "Content-Type: application/json")
26 | #ds-snippet-end:Rooms9Step2
27 |
28 | #ds-snippet-start:Rooms9Step3
29 | # Create a temporary file to store the response
30 | response=$(mktemp /tmp/response-rooms.XXXXXX)
31 | # Call the Rooms API to look up your forms library ID
32 | Status=$(curl -w '%{http_code}' --request GET ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_libraries "${Headers[@]}" --output ${response})
33 |
34 | if [[ "$Status" -gt "200" ]]; then
35 | echo ""
36 | echo "Error:"
37 | echo ""
38 | cat $response
39 | exit 1
40 | fi
41 |
42 | echo ""
43 | echo "Response:"
44 | cat $response
45 | echo ""
46 |
47 | declare -A form_name_to_id_map
48 | form_names=()
49 | FORM_ID=''
50 |
51 | FORMS_LIBRARY_ID=$(cat $response | grep formsLibraryId | sed 's/.*formsLibraryId\":"//' | sed 's/\".*//')
52 |
53 | # Call the Rooms API to look up a list of form IDs for the given forms library
54 | Status=$(curl -s -w '%{http_code}' --request GET ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_libraries/${FORMS_LIBRARY_ID}/forms "${Headers[@]}" --output ${response})
55 |
56 | if [[ "$Status" -gt "200" ]]; then
57 | echo ""
58 | echo "Error:"
59 | echo ""
60 | cat $response
61 | exit 1
62 | fi
63 |
64 | form_name=`cat $response | grep -o -P '(?<=name\":\").*?(?=\")'`
65 | form_ids=`cat $response | grep -o -P '(?<=libraryFormId\":).*?(?=\,)'`
66 |
67 | arr_form_ids=($form_ids)
68 | form_count=$(echo "$form_name" | grep -c '^')
69 |
70 | if [ "$form_count" -eq "1" ]; then
71 | FORM_ID=$form_ids
72 | else
73 | echo ""
74 | PS3='Select a form by the form name: '
75 | IFS=$'\n'
76 | select form in $form_name; do
77 | if [ "$REPLY" -gt "0" ] && [ "$REPLY" -le "$form_count" ]; then
78 | FORM_ID=${arr_form_ids[$REPLY-1]//\"/}
79 | break
80 | fi
81 | done
82 | fi
83 |
84 | echo ""
85 | echo "FORM_ID: " $FORM_ID
86 | echo ""
87 | #ds-snippet-end:Rooms9Step3
88 |
89 | #ds-snippet-start:Rooms9Step4
90 | # Call the Rooms API to look up a list of form group IDs
91 | Status=$(curl -w '%{http_code}' --request GET ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_groups "${Headers[@]}" --output ${response})
92 |
93 | if [[ "$Status" -gt "200" ]]; then
94 | echo ""
95 | echo "Error:"
96 | echo ""
97 | cat $response
98 | exit 1
99 | fi
100 |
101 | echo ""
102 | echo "Response:"
103 | cat $response
104 | echo ""
105 |
106 | form_group_name=`cat $response | grep -o -P '(?<=name\":\").*?(?=\")'`
107 |
108 | form_group_ids=`cat $response | grep -o -P '(?<=formGroupId\":).*?(?=\,)'`
109 |
110 | arr_form_group_ids=($form_group_ids)
111 | form_group_count=$(echo "$form_group_name" | grep -c '^')
112 |
113 | if [ -z "$form_group_name" ]; then
114 | echo ""
115 | echo "Error:"
116 | echo ""
117 | echo "Form group ID is needed. Please run step 7 - Create a form group..."
118 | exit 0
119 | elif [ "$form_count" -eq "1" ]; then
120 | FORM_GROUP_ID=$form_group_ids
121 | else
122 | echo ""
123 | PS3="Select a form group: "
124 | IFS=$'\n'
125 | select form_group in $form_group_name; do
126 | if [ "$REPLY" -gt "0" ] && [ "$REPLY" -le "$form_group_count" ]; then
127 | FORM_GROUP_ID=${arr_form_group_ids[$REPLY-1]//\"/}
128 | break
129 | fi
130 | done
131 | fi
132 | #ds-snippet-end:Rooms9Step4
133 |
134 | echo ""
135 | echo "FORM_GROUP_ID: " $FORM_GROUP_ID
136 | echo ""
137 |
138 | # Create a temporary file to store the JSON body
139 | request_data=$(mktemp /tmp/request-rooms-008.XXXXXX)
140 |
141 | #ds-snippet-start:Rooms9Step5
142 | printf \
143 | '
144 | {
145 | "formId": "'"${FORM_ID}"'",
146 | }' >>$request_data
147 | #ds-snippet-end:Rooms9Step5
148 |
149 | # Create a temporary file to store the response
150 | response=$(mktemp /tmp/response-rooms.XXXXXX)
151 | #ds-snippet-start:Rooms9Step6
152 | Status=$(curl -w '%{http_code}' --request POST ${base_path}/restapi/v2/accounts/${API_ACCOUNT_ID}/form_groups/${FORM_GROUP_ID}/assign_form "${Headers[@]}" --data-binary @${request_data} --output ${response})
153 | #ds-snippet-end:Rooms9Step6
154 |
155 | if [[ "$Status" -gt "204" ]]; then
156 | echo ""
157 | echo "Error:"
158 | echo ""
159 | cat $response
160 | exit 1
161 | fi
162 |
163 | echo ""
164 | echo "Response: No JSON response body returned when saving a form to the form group"
165 | echo ""
166 |
--------------------------------------------------------------------------------
/examples/Rooms/lib/utils.sh:
--------------------------------------------------------------------------------
1 | function GetRoleId()
2 | {
3 |
4 | index=-1
5 | adminFound=false
6 | eval "arrRoles=($1)"
7 | element=$2
8 | arrRoleIds=($3)
9 |
10 | for i in "${!arrRoles[@]}";
11 | do
12 | if [[ "${arrRoles[$i]}" = "${element}" ]];
13 | then
14 | index=$i
15 | adminFound=true
16 | break
17 | fi
18 | done
19 |
20 | if [ "$adminFound" == true ]; then
21 | roleId=${arrRoleIds[$index]}
22 | echo $roleId
23 | fi
24 | }
25 |
26 | export -f GetRoleId
27 |
--------------------------------------------------------------------------------
/examples/WebForms/eg001CreateInstance.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | ds_access_token_path="config/ds_access_token.txt"
7 |
8 | # Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | ACCOUNT_ID=$(cat config/API_ACCOUNT_ID)
15 | base_path="https://apps-d.docusign.com/api/webforms/v1.1"
16 |
17 | # Create template for the Web Form from the API
18 | bash ./examples/WebForms/lib/createWebFormTemplate.sh
19 |
20 | TEMPLATE_ID=$(cat config/WEB_FORM_TEMPLATE_ID)
21 |
22 | web_form_config=$(cat demo_documents/web-form-config.json)
23 | result=$(echo "$web_form_config" | sed "s/template-id/$TEMPLATE_ID/g")
24 | echo $result > demo_documents/web-form-config.json
25 |
26 |
27 | echo ""
28 | echo "Go to your Docusign account to create the Web Form. Go to 'Templates' in your developer account, select 'Start,' select 'Web Forms,' and choose 'Upload Web Form.' Upload the JSON config file 'web-form-config.json' found under the demo_documents folder of this project. You will need to activate the web form before proceeding. Press Continue after doing so."
29 | read choice
30 | #ds-snippet-start:WebForms1Step2
31 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
32 | '--header' "Accept: application/json" \
33 | '--header' "Content-Type: application/json")
34 | #ds-snippet-end:WebForms1Step2
35 |
36 | # List web forms in account that match the name of the web form we just created
37 | #ds-snippet-start:WebForms1Step3
38 | response=$(mktemp /tmp/response-cw.XXXXXX)
39 | Status=$(curl -w '%{http_code}' --request GET ${base_path}/accounts/${ACCOUNT_ID}/forms?search=Web%20Form%20Example%20Template \
40 | "${Headers[@]}" \
41 | --output ${response})
42 |
43 | FORM_ID=$(cat $response | sed 's/,/\n/g' | grep id | sed 's/.*\"id\":\"//g' | sed 's/\".*//g')
44 | #ds-snippet-end:WebForms1Step3
45 |
46 | request_data=$(mktemp /tmp/request-cw-001.XXXXXX)
47 | #ds-snippet-start:WebForms1Step4
48 | printf \
49 | '{
50 | "clientUserId": "1234-5678-abcd-ijkl",
51 | "formValues": {
52 | "PhoneNumber": "555-555-5555",
53 | "Yes": ["Yes"],
54 | "Company": "Tally",
55 | "JobTitle": "Programmer Writer"
56 | },
57 | "expirationOffset": 3600
58 | }' >$request_data
59 | #ds-snippet-end:WebForms1Step4
60 |
61 | response=$(mktemp /tmp/response-cw.XXXXXX)
62 | #ds-snippet-start:WebForms1Step5
63 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/accounts/${ACCOUNT_ID}/forms/${FORM_ID}/instances \
64 | "${Headers[@]}" \
65 | --data-binary @${request_data} \
66 | --output ${response})
67 | #ds-snippet-end:WebForms1Step5
68 |
69 | if [[ "$Status" -gt "399" ]] ; then
70 | echo ""
71 | echo "Creating a new instance."
72 | echo ""
73 | cat $response
74 | exit 0
75 | fi
76 |
77 | echo ""
78 | echo "Response:"
79 | cat $response
80 | echo ""
81 |
82 | FORM_URL=$(cat $response | sed 's/,/\n/g' | grep formUrl | sed 's/.*\"formUrl\":\"//g' | sed 's/\".*//g')
83 | INSTANCE_TOKEN=$(cat $response | sed 's/,/\n/g' | grep instanceToken | sed 's/.*\"instanceToken\":\"//g' | sed 's/\".*//g')
84 |
85 | host_url="http://localhost:8080"
86 | if which xdg-open &> /dev/null ; then
87 | xdg-open $host_url
88 | elif which open &> /dev/null ; then
89 | open $host_url
90 | elif which start &> /dev/null ; then
91 | start $host_url
92 | fi
93 | php ./examples/WebForms/lib/startServerForWebForms.php "$INTEGRATION_KEY_AUTH_CODE" "$FORM_URL" "$INSTANCE_TOKEN"
94 |
95 | # Remove the temporary files
96 | rm "$request_data"
97 | rm "$response"
98 |
--------------------------------------------------------------------------------
/examples/WebForms/lib/startServerForWebForms.php:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
32 |
33 |
34 |
37 |
38 |
102 |
105 | ";
106 |
107 | ini_set('default_socket_timeout', 60 * 5);
108 | $server = stream_socket_server($socket, $errno, $errstr);
109 | if (!$server) {
110 | Log::err('Error starting HTTP server');
111 | return false;
112 | }
113 | do {
114 | $sock = stream_socket_accept($server);
115 | if (!$sock) {
116 | Log::err('Error accepting socket connection');
117 | exit(1);
118 | }
119 | $contentLength = 0;
120 | $headers = [];
121 | $body = null;
122 | while (false !== ($line = trim(fgets($sock)))) {
123 | if ($line === '') break;
124 | $regex = '#^Content-Length:\s*([[:digit:]]+)\s*$#i';
125 | if (preg_match($regex, $line, $matches)) {
126 | $contentLength = (int)$matches[1];
127 | }
128 | $headers[] = $line;
129 | }
130 | if ($contentLength > 0) {
131 | $body = fread($sock, $contentLength);
132 | }
133 | list($method, $url, $httpver) = explode(' ', $headers[0]);
134 | if ($method == 'GET') {
135 | fwrite($sock, $responseOk);
136 | fclose($sock);
137 | return;
138 | }
139 | } while (true);
140 |
141 | ?>
142 |
--------------------------------------------------------------------------------
/examples/Workspaces/eg001CreateWorkspace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/workflows-api/trigger-workflow
3 | # Send an Workspace Envelope with Recipient Info
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Step 1: Obtain your OAuth token
11 | # Note: Substitute these values with your own
12 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
13 |
14 | # Set up variables for full code example
15 | # Note: Substitute these values with your own
16 | account_id=$(cat config/API_ACCOUNT_ID)
17 |
18 | #Set the Workspace API base path
19 | base_path="https://api-d.docusign.com/v1"
20 |
21 | request_data=$(mktemp /tmp/request-wseg-001.XXXXXX)
22 | response=$(mktemp /tmp/response-wseg-001.XXXXXX)
23 |
24 | #ds-snippet-start:Workflows1Step2
25 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
26 | '--header' "Accept: application/json" \
27 | '--header' "Content-Type: application/json")
28 | #ds-snippet-end:Workflows1Step2
29 |
30 | # Create the workspace definition
31 | #ds-snippet-start:Workflows1Step3
32 | printf \
33 | '{
34 | "name" : "Example workspace"
35 | }' >> $request_data
36 | #ds-snippet-end:Workflows1Step3
37 |
38 | #ds-snippet-start:Workflows1Step4
39 | Status=$(curl -s -w "%{http_code}\n" -i \
40 | --request POST ${base_path}/accounts/${account_id}/workspaces \
41 | "${Headers[@]}" \
42 | --data-binary @${request_data} \
43 | --output ${response})
44 | #ds-snippet-end:Workflows1Step4
45 |
46 | if [[ "$Status" -gt "201" ]] ; then
47 | echo ""
48 | echo "Failed to create Workspace."
49 | echo ""
50 | cat $response
51 | exit 0
52 | fi
53 |
54 | echo ""
55 | echo "Response:"
56 | cat $response
57 | echo ""
58 |
59 | # Pull out the workspace ID and save it
60 | workspace_id=`cat $response | grep workspace_id | sed 's/.*\"workspace_id\":\"//' | sed 's/".*//'`
61 | echo "Workspace created! ID: ${workspace_id}"
62 | echo ${workspace_id} > config/WORKSPACE_ID
63 |
64 | rm "$response"
65 | rm "$request_data"
--------------------------------------------------------------------------------
/examples/Workspaces/eg002AddDocumentToWorkspace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/workspaces-api
3 | # Add a document to a Workspace
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | # Check that a workspace exists
11 | workspace_id=$(cat config/WORKSPACE_ID)
12 | if [ -z "$workspace_id" ]; then
13 | echo "Please create a workspace before running this example"
14 | exit 0
15 | fi
16 |
17 | # Step 1: Obtain your OAuth token
18 | # Note: Substitute these values with your own
19 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
20 |
21 | # Set up variables for full code example
22 | # Note: Substitute these values with your own
23 | account_id=$(cat config/API_ACCOUNT_ID)
24 |
25 | # Set the Workspace API base path
26 | base_path="https://api-d.docusign.com/v1"
27 |
28 |
29 | response=$(mktemp /tmp/response-wseg-002.XXXXXX)
30 |
31 | #ds-snippet-start:Workflows2Step2
32 | declare -a Headers=(
33 | --header "Authorization: Bearer ${ACCESS_TOKEN}"
34 | --header "Accept: application/json"
35 | )
36 | #ds-snippet-end:Workflows2Step2
37 |
38 |
39 | # Upload the file path to be added to the workspace
40 | #ds-snippet-start:Workflows2Step3
41 | echo ""
42 | echo "Enter the path to the document you want to add to the workspace:"
43 | echo ""
44 | read file_path
45 |
46 | if [ ! -f "$file_path" ]; then
47 | echo "File does not exist: $file_path"
48 | exit 1
49 | fi
50 |
51 | # Enter the document name for the workspace
52 | echo ""
53 | echo "Enter the name for the document in the workspace:"
54 | echo ""
55 |
56 | read doc_name
57 | #ds-snippet-end:Workflows2Step3
58 |
59 | #ds-snippet-start:Workflows2Step4
60 | Status=$(curl -s -w "%{http_code}" -o "${response}" \
61 | --request POST "${base_path}/accounts/${account_id}/workspaces/${workspace_id}/documents" \
62 | "${Headers[@]}" \
63 | -F "file=@${file_path}" \
64 | -F "name=${doc_name}"
65 | )
66 | #ds-snippet-end:Workflows2Step4
67 |
68 |
69 | if [[ "$Status" -gt "201" ]]; then
70 | echo ""
71 | echo "Failed to add document to workspace."
72 | echo ""
73 | cat $response
74 | rm "$response"
75 | exit 0
76 | fi
77 |
78 | echo ""
79 | echo "Response:"
80 | cat $response
81 | echo ""
82 |
83 | # Pull out the document ID and save it
84 | document_id=$(cat $response | grep document_id | sed 's/.*"document_id":"//' | sed 's/".*//')
85 | echo "Document added! ID: ${document_id}"
86 | echo ${document_id} > config/DOCUMENT_ID
87 |
88 | rm "$response"
--------------------------------------------------------------------------------
/examples/Workspaces/eg003SendEnvelopeWithRecipientInfo.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://developers.docusign.com/docs/workflows-api/trigger-workflow
3 | # Send an Workspace Envelope with Recipient Info
4 | #
5 | # Check that we're in a bash shell
6 | if [[ $SHELL != *"bash"* ]]; then
7 | echo "PROBLEM: Run these scripts from within the bash shell."
8 | fi
9 |
10 | #check that a workspace exists
11 | workspace_id=$(cat config/WORKSPACE_ID)
12 | if [ -z "$workspace_id" ]; then
13 | echo "please create a workspace before running this example"
14 | exit 0
15 | fi
16 |
17 | #check that a document exists in the workspace
18 | document_id=$(cat config/DOCUMENT_ID)
19 | if [ -z "$workspace_id" ]; then
20 | echo "please create a document in the workspace before running this example"
21 | exit 0
22 | fi
23 |
24 | # Step 1: Obtain your OAuth token
25 | # Note: Substitute these values with your own
26 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
27 |
28 |
29 | # Set up variables for full code example
30 | # Note: Substitute these values with your own
31 | account_id=$(cat config/API_ACCOUNT_ID)
32 |
33 | #Set the Workspace API base path
34 | base_path="https://api-d.docusign.com/v1"
35 |
36 | request_data=$(mktemp /tmp/request-wseg-001.XXXXXX)
37 | response=$(mktemp /tmp/response-wseg-001.XXXXXX)
38 |
39 | #ds-snippet-start:Workflows3Step2
40 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
41 | '--header' "Accept: application/json" \
42 | '--header' "Content-Type: application/json")
43 | #ds-snippet-end:Workflows3Step2
44 |
45 | # Create the workspace envelope definition
46 | #ds-snippet-start:Workflows3Step3
47 | printf \
48 | '{
49 | "envelope_name": "Example Workspace Envelope",
50 | "document_ids": ["'"${document_id}"'"]
51 | }' >> $request_data
52 | #ds-snippet-end:Workflows3Step3
53 |
54 | #ds-snippet-start:Workflows3Step4
55 | Status=$(curl -s -w "%{http_code}\n" -i \
56 | --request POST ${base_path}/accounts/${account_id}/workspaces/${workspace_id}/envelopes \
57 | "${Headers[@]}" \
58 | --data-binary @${request_data} \
59 | --output ${response})
60 | #ds-snippet-end:Workflows3Step4
61 |
62 | if [[ "$Status" -gt "201" ]] ; then
63 | echo ""
64 | echo "Failed to send envelope."
65 | echo ""
66 | cat $response
67 | exit 0
68 | fi
69 |
70 | echo ""
71 | echo "Response:"
72 | cat $response
73 | echo ""
74 |
75 | # pull out the envelope_id
76 | envelope_id=`cat $response | grep envelope_id | sed 's/.*\"envelope_id\":\"//' | sed 's/".*//'`
77 | echo "Envelope created! ID: ${envelope_id}"
78 |
79 | rm "$response"
80 | rm "$request_data"
81 | request_data=$(mktemp /tmp/request2-wseg-001.XXXXXX)
82 | response=$(mktemp /tmp/response2-wseg-001.XXXXXX)
83 |
84 | #Set the eSignature REST API base path
85 | base_path="https://demo.docusign.net/restapi"
86 |
87 | #ds-snippet-start:Workflows3Step5
88 | printf \
89 | '{
90 | "emailSubject": "Please sign this document",
91 | "recipients": {
92 | "signers": [
93 | {
94 | "email": "'"${SIGNER_EMAIL}"'",
95 | "name": "'"${SIGNER_NAME}"'",
96 | "recipientId": "1",
97 | "routingOrder": "1",
98 | "tabs": {
99 | "signHereTabs": [
100 | {
101 | "anchorString": "/sn1/",
102 | "anchorUnits": "pixels",
103 | "anchorXOffset": "20",
104 | "anchorYOffset": "10"
105 | }
106 | ]
107 | }
108 | }
109 | ]
110 | },
111 | "status": "sent"
112 | }' >> $request_data
113 | #ds-snippet-end:Workflows3Step5
114 |
115 | #ds-snippet-start:Workflows3Step6
116 | Status=$(curl -s -o "${response}" -w "%{http_code}" \
117 | --request PUT "${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}" \
118 | "${Headers[@]}" \
119 | --data-binary @"${request_data}")
120 | #ds-snippet-end:Workflows3Step6
121 |
122 | if [[ "$Status" -gt "201" ]] ; then
123 | echo ""
124 | echo "Failed to send envelope."
125 | echo ""
126 | cat $response
127 | exit 0
128 | fi
129 |
130 | echo ""
131 | echo "Response:"
132 | cat $response
133 | echo ""
134 | echo ""
135 | echo "Envelope Sent!"
136 | echo ""
137 |
138 | rm "$response"
139 | rm "$request_data"
--------------------------------------------------------------------------------
/examples/eSignature/eg002SigningViaEmail.sh:
--------------------------------------------------------------------------------
1 | # Send an envelope with three documents
2 | #
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Check for a valid cc email and prompt the user if
9 | # CC_EMAIL and CC_NAME haven't been set in the config file.
10 | source ./examples/eSignature/lib/utils.sh
11 | CheckForValidCCEmail
12 |
13 | # Obtain your OAuth token
14 | # Note: Substitute these values with your own
15 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
16 |
17 | # Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 | base_path="https://demo.docusign.net/restapi"
22 |
23 | # document 1 (html) has tag **signature_1**
24 | # document 2 (docx) has tag /sn1/
25 | # document 3 (pdf) has tag /sn1/
26 | #
27 | # The envelope has two recipients.
28 | # recipient 1 - signer
29 | # recipient 2 - cc
30 | # The envelope will be sent first to the signer.
31 | # After it is signed, a copy is sent to the cc person.
32 |
33 | # temp files:
34 | request_data=$(mktemp /tmp/request-eg-002.XXXXXX)
35 | response=$(mktemp /tmp/response-eg-002.XXXXXX)
36 | doc1_base64=$(mktemp /tmp/eg-002-doc1.XXXXXX)
37 | doc2_base64=$(mktemp /tmp/eg-002-doc2.XXXXXX)
38 | doc3_base64=$(mktemp /tmp/eg-002-doc3.XXXXXX)
39 |
40 | # Fetch docs and encode
41 | cat demo_documents/doc_1.html | base64 > $doc1_base64
42 | cat demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx | base64 > $doc2_base64
43 | cat demo_documents/World_Wide_Corp_lorem.pdf | base64 > $doc3_base64
44 |
45 | echo ""
46 | echo "Sending the envelope request to DocuSign..."
47 | echo "The envelope has three documents. Processing time will be about 15 seconds."
48 | echo "Results:"
49 | echo ""
50 |
51 | # Concatenate the different parts of the request
52 | #ds-snippet-start:eSign2Step2
53 | printf \
54 | '{
55 | "emailSubject": "Please sign this document set",
56 | "documents": [
57 | {
58 | "documentBase64": "' > $request_data
59 | cat $doc1_base64 >> $request_data
60 | printf '",
61 | "name": "Order acknowledgement",
62 | "fileExtension": "html",
63 | "documentId": "1"
64 | },
65 | {
66 | "documentBase64": "' >> $request_data
67 | cat $doc2_base64 >> $request_data
68 | printf '",
69 | "name": "Battle Plan",
70 | "fileExtension": "docx",
71 | "documentId": "2"
72 | },
73 | {
74 | "documentBase64": "' >> $request_data
75 | cat $doc3_base64 >> $request_data
76 | printf '",
77 | "name": "Lorem Ipsum",
78 | "fileExtension": "pdf",
79 | "documentId": "3"
80 | }
81 | ],
82 | "recipients": {
83 | "carbonCopies": [
84 | {
85 | "email": "'"${CC_EMAIL}"'",
86 | "name": "'"${CC_NAME}"'",
87 | "recipientId": "2",
88 | "routingOrder": "2"
89 | }
90 | ],
91 | "signers": [
92 | {
93 | "email": "'"${SIGNER_EMAIL}"'",
94 | "name": "'"${SIGNER_NAME}"'",
95 | "recipientId": "1",
96 | "routingOrder": "1",
97 | "tabs": {
98 | "signHereTabs": [
99 | {
100 | "anchorString": "**signature_1**",
101 | "anchorUnits": "pixels",
102 | "anchorXOffset": "20",
103 | "anchorYOffset": "10"
104 | },
105 | {
106 | "anchorString": "/sn1/",
107 | "anchorUnits": "pixels",
108 | "anchorXOffset": "20",
109 | "anchorYOffset": "10"
110 | }
111 | ]
112 | }
113 | }
114 | ]
115 | },
116 | "status": "sent"
117 | }' >> $request_data
118 | #ds-snippet-end:eSign2Step2
119 |
120 | #ds-snippet-start:eSign2Step3
121 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
122 | --header "Content-Type: application/json" \
123 | --data-binary @${request_data} \
124 | --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
125 | --output $response
126 | #ds-snippet-end:eSign2Step3
127 |
128 | echo ""
129 | echo "Response:"
130 | cat $response
131 | echo ""
132 |
133 | # pull out the envelopeId
134 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
135 |
136 | # Save the envelope id for use by other scripts
137 | echo "EnvelopeId: ${envelope_id}"
138 | echo ${envelope_id} > config/ENVELOPE_ID
139 |
140 | # cleanup
141 | rm "$request_data"
142 | rm "$response"
143 | rm "$doc1_base64"
144 | rm "$doc2_base64"
145 | rm "$doc3_base64"
146 |
147 | echo ""
148 | echo ""
149 | echo "Done."
150 | echo ""
151 |
--------------------------------------------------------------------------------
/examples/eSignature/eg003ListEnvelopes.sh:
--------------------------------------------------------------------------------
1 | # List envelopes and their status
2 | # List changes for the last 10 days
3 |
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Step 1: Obtain your OAuth token
10 | # Note: Substitute these values with your own
11 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
12 |
13 | # Set up variables for full code example
14 | # Note: Substitute these values with your own
15 | account_id=$(cat config/API_ACCOUNT_ID)
16 |
17 | base_path="https://demo.docusign.net/restapi"
18 |
19 |
20 | echo ""
21 | echo "Sending the list envelope status request to DocuSign..."
22 | echo "Results:"
23 | echo ""
24 |
25 | #ds-snippet-start:eSign3Step2
26 | # Calculate the from_date query parameter and use the ISO 8601 format.
27 | # Example:
28 | # from_date=2018-09-30T07:43:12+03:00
29 | # For a Mac, 10 days in the past:
30 | if date -v -10d &> /dev/null ; then
31 | # Mac
32 | from_date=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
33 | else
34 | # Not a Mac
35 | from_date=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
36 | fi
37 |
38 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
39 | --header "Content-Type: application/json" \
40 | --get \
41 | --data-urlencode "from_date=${from_date}" \
42 | --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes
43 | #ds-snippet-end:eSign3Step2
44 |
45 | echo ""
46 | echo ""
47 | echo "Done."
48 | echo ""
49 |
50 |
--------------------------------------------------------------------------------
/examples/eSignature/eg004EnvelopeInfo.sh:
--------------------------------------------------------------------------------
1 | # Get the envelope's details
2 | #
3 | # This script uses the envelope id stored in config/ENVELOPE_ID.
4 | # config/ENVELOPE_ID will be populated by running example eg002SigningViaEmail.sh
5 | # or can be entered manually.
6 |
7 | # Check that we're in a bash shell
8 | if [[ $SHELL != *"bash"* ]]; then
9 | echo "PROBLEM: Run these scripts from within the bash shell."
10 | fi
11 |
12 | # Step 1: Obtain your OAuth token
13 | # Note: Substitute these values with your own
14 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
15 |
16 | # Set up variables for full code example
17 | # Note: Substitute these values with your own
18 | account_id=$(cat config/API_ACCOUNT_ID)
19 |
20 | base_path="https://demo.docusign.net/restapi"
21 |
22 | # Check that we have an envelope id
23 | if [ ! -f config/ENVELOPE_ID ]; then
24 | echo ""
25 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg002SigningViaEmail.sh"
26 | echo ""
27 | exit 0
28 | fi
29 | envelope_id=`cat config/ENVELOPE_ID`
30 |
31 |
32 | echo ""
33 | echo "Sending the Envelopes::get request to DocuSign..."
34 | echo "Results:"
35 | echo ""
36 |
37 | #ds-snippet-start:eSign4Step2
38 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
39 | --header "Content-Type: application/json" \
40 | --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}
41 | #ds-snippet-end:eSign4Step2
42 |
43 | echo ""
44 | echo ""
45 | echo "Done."
46 | echo ""
47 |
48 |
--------------------------------------------------------------------------------
/examples/eSignature/eg005EnvelopeRecipients.sh:
--------------------------------------------------------------------------------
1 |
2 | # Get the envelope recipients' details
3 | #
4 | # This script uses the envelope id stored in config/ENVELOPE_ID.
5 | # config/ENVELOPE_ID will be populated by running example eg002SigningViaEmail.sh
6 | # or can be entered manually.
7 |
8 | # Check that we're in a bash shell
9 | if [[ $SHELL != *"bash"* ]]; then
10 | echo "PROBLEM: Run these scripts from within the bash shell."
11 | fi
12 |
13 | # Step 1: Obtain your OAuth token
14 | # Note: Substitute these values with your own
15 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
16 |
17 | # Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 | base_path="https://demo.docusign.net/restapi"
22 |
23 | # Check that we have an envelope id
24 | if [ ! -f config/ENVELOPE_ID ]; then
25 | echo ""
26 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg002SigningViaEmail.sh"
27 | echo ""
28 | exit 0
29 | fi
30 | envelope_id=`cat config/ENVELOPE_ID`
31 |
32 | echo ""
33 | echo "Sending the EnvelopeRecipients::list request to DocuSign..."
34 | echo "Results:"
35 | echo ""
36 |
37 | #ds-snippet-start:eSign5Step2
38 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
39 | --header "Content-Type: application/json" \
40 | --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}/recipients
41 | #ds-snippet-end:eSign5Step2
42 |
43 | echo ""
44 | echo ""
45 | echo "Done."
46 | echo ""
47 |
48 |
--------------------------------------------------------------------------------
/examples/eSignature/eg006EnvelopeDocs.sh:
--------------------------------------------------------------------------------
1 | # List the envelope's documents
2 | #
3 | # This script uses the envelope id stored in config/ENVELOPE_ID.
4 | # config/ENVELOPE_ID will be populated by running example eg002SigningViaEmail.sh
5 | # or can be entered manually.
6 |
7 | # Check that we're in a bash shell
8 | if [[ $SHELL != *"bash"* ]]; then
9 | echo "PROBLEM: Run these scripts from within the bash shell."
10 | fi
11 |
12 | # Obtain your OAuth token
13 | # Note: Substitute these values with your own
14 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
15 |
16 | # Construct your API headers.
17 | #ds-snippet-start:eSign6Step2
18 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
19 | '--header' "Content-Type: application/json")
20 | #ds-snippet-end:eSign6Step2
21 |
22 | # Set up variables for full code example
23 | # Note: Substitute these values with your own
24 | account_id=$(cat config/API_ACCOUNT_ID)
25 |
26 | base_path="https://demo.docusign.net/restapi"
27 |
28 | # Check that we have an envelope id
29 | if [ ! -f config/ENVELOPE_ID ]; then
30 | echo ""
31 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg002SigningViaEmail.sh"
32 | echo ""
33 | exit 0
34 | fi
35 | envelope_id=`cat config/ENVELOPE_ID`
36 |
37 | # Call the eSignature API
38 | # Display the JSON response
39 | # Create a temporary file to store the response
40 |
41 | response=$(mktemp /tmp/response-perm.XXXXXX)
42 |
43 | #ds-snippet-start:eSign6Step3
44 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}/documents \
45 | "${Headers[@]}" \
46 | --output ${response})
47 | #ds-snippet-end:eSign6Step3
48 | echo ""
49 | echo "Sending the EnvelopeDocuments::list request to DocuSign..."
50 | echo "Results:"
51 | echo ""
52 | cat $response
53 | echo ""
54 | echo ""
55 | echo "Done."
56 | echo ""
57 |
58 | # Remove the temporary file
59 | rm "$response"
60 |
61 |
--------------------------------------------------------------------------------
/examples/eSignature/eg007EnvelopeGetDoc.sh:
--------------------------------------------------------------------------------
1 | # Download a document from an envelope
2 | #
3 | # This script uses the envelope id stored in config/ENVELOPE_ID.
4 | # config/ENVELOPE_ID will be populated by running example eg002SigningViaEmail.sh
5 | # or can be entered manually.
6 |
7 | # Check that we're in a bash shell
8 | if [[ $SHELL != *"bash"* ]]; then
9 | echo "PROBLEM: Run these scripts from within the bash shell."
10 | fi
11 |
12 | # Obtain your OAuth token
13 | # Note: Substitute these values with your own
14 | # Step 1 start
15 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
16 |
17 | # Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 | output_file="envelope_document."
22 |
23 | base_path="https://demo.docusign.net/restapi"
24 | # Step 1 end
25 |
26 | #ds-snippet-start:eSign7Step2
27 | # Construct your API headers
28 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
29 | '--header' "Accept: application/json" \
30 | '--header' "Content-Type: application/json")
31 | #ds-snippet-end:eSign7Step2
32 | # Check that we have an envelope id
33 | if [ ! -f config/ENVELOPE_ID ]; then
34 | echo ""
35 | echo "PROBLEM: An envelope id is needed. Fix: execute code example 2 - Signing_Via_Email"
36 | echo ""
37 | exit 0
38 | fi
39 | envelope_id=`cat config/ENVELOPE_ID`
40 |
41 | doc_choice=1
42 | output_file_extension=pdf
43 | echo "Select a document or document set to download:"
44 | PS3='Please make a selection: '
45 | options=("Document 1" "Document 2" "Document 3" "Certificate of Completion" "Documents combined together" "ZIP file" "PDF Portfolio" )
46 | select opt in "${options[@]}"
47 | do
48 | case $opt in
49 | "Certificate of Completion")
50 | doc_choice=certificate
51 | break
52 | ;;
53 | "Documents combined together")
54 | doc_choice=combined
55 | break
56 | ;;
57 | "ZIP file")
58 | doc_choice=archive
59 | output_file_extension=zip
60 | break
61 | ;;
62 | "PDF Portfolio")
63 | doc_choice=portfolio
64 | output_file_extension=pdf
65 | break
66 | ;;
67 | "Document 1")
68 | doc_choice=1
69 | break
70 | ;;
71 | "Document 2")
72 | doc_choice=2
73 | break
74 | ;;
75 | "Document 3")
76 | doc_choice=3
77 | break
78 | ;;
79 | esac
80 | done
81 |
82 | echo ""
83 | echo "Sending the EnvelopeDocuments::get request to DocuSign..."
84 | echo ""
85 |
86 | #ds-snippet-start:eSign7Step3
87 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}/documents/${doc_choice} \
88 | "${Headers[@]}" \
89 | --output ${output_file}${output_file_extension})
90 | #ds-snippet-end:eSign7Step3
91 |
92 | echo ""
93 | echo "The document(s) are stored in file ${output_file}${output_file_extension}"
94 | echo ""
95 | echo "Done."
96 | echo ""
97 |
98 |
--------------------------------------------------------------------------------
/examples/eSignature/eg009UseTemplate.sh:
--------------------------------------------------------------------------------
1 | # Send a signing request via email using a DocuSign template
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Check for a valid cc email and prompt the user if
9 | #CC_EMAIL and CC_NAME haven't been set in the config file.
10 | source ./examples/eSignature/lib/utils.sh
11 | CheckForValidCCEmail
12 |
13 | # Step 1: Obtain your OAuth token
14 | # Note: Substitute these values with your own
15 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
16 |
17 | # Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 |
22 | # Check that we have a template id
23 | if [ ! -f config/TEMPLATE_ID ]; then
24 | echo ""
25 | echo "PROBLEM: An template id is needed. Fix: execute script eg008CreateTemplate.sh"
26 | echo ""
27 | exit 0
28 | fi
29 | template_id=`cat config/TEMPLATE_ID`
30 |
31 | base_path="https://demo.docusign.net/restapi"
32 | # Step 1. Create the envelope request.
33 | # temp files:
34 | #ds-snippet-start:eSign9Step2
35 | request_data=$(mktemp /tmp/request-eg-009.XXXXXX)
36 |
37 | printf \
38 | '{
39 | "templateId": "'"${template_id}"'",
40 | "templateRoles": [
41 | {
42 | "email": "'"${SIGNER_EMAIL}"'",
43 | "name": "'"${SIGNER_NAME}"'",
44 | "roleName": "signer"
45 | },
46 | {
47 | "email": "'"${CC_EMAIL}"'",
48 | "name": "'"${CC_NAME}"'",
49 | "roleName": "cc"
50 | }
51 | ],
52 | "status": "sent"
53 | }' >> $request_data
54 | #ds-snippet-end:eSign9Step2
55 |
56 |
57 | #ds-snippet-start:eSign9Step3
58 | response=$(mktemp /tmp/response-eg-009.XXXXXX)
59 |
60 | echo ""
61 | echo "Sending the envelope request to DocuSign..."
62 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
63 | --header "Content-Type: application/json" \
64 | --data-binary @${request_data} \
65 | --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
66 | --output ${response}
67 | #ds-snippet-end:eSign9Step3
68 |
69 | echo ""
70 | echo "Response:"
71 | cat $response
72 | rm $response
73 | rm $request_data
74 | echo ""
75 | echo ""
76 | echo "Done."
77 | echo ""
78 |
--------------------------------------------------------------------------------
/examples/eSignature/eg012EmbeddedConsole.sh:
--------------------------------------------------------------------------------
1 | # Redirect to the DocuSign console web tool
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Step 1: Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 |
16 | base_path="https://demo.docusign.net/restapi"
17 |
18 | # Check that we have an envelope id
19 | if [ ! -f config/ENVELOPE_ID ]; then
20 | echo ""
21 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg002SigningViaEmail.sh"
22 | echo ""
23 | exit 0
24 | fi
25 | envelope_id=`cat config/ENVELOPE_ID`
26 |
27 | # The returnUrl is normally your own web app. DocuSign will redirect
28 | # the signer to returnUrl when the embedded signing completes.
29 | # For this example, we'll use http://httpbin.org/get to show the
30 | # query parameters passed back from DocuSign
31 |
32 | # The web tool console can be opened in either of two views:
33 | echo ""
34 | PS3='Select the console view: '
35 | options=("Front page" "Envelope view")
36 | select opt in "${options[@]}"
37 | do
38 | case $opt in
39 | "Front page")
40 | json='{"returnUrl": "http://httpbin.org/get"}'
41 | break
42 | ;;
43 | "Envelope view")
44 | json="{\"returnUrl\": \"http://httpbin.org/get\",
45 | \"envelopeId\": \"${envelope_id}\"}"
46 | break
47 | ;;
48 | esac
49 | done
50 |
51 | echo ""
52 | echo "Requesting the console view url"
53 | echo ""
54 |
55 | response=$(mktemp /tmp/response-eg-012.XXXXXX)
56 | #ds-snippet-start:eSign12Step2
57 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
58 | --header "Content-Type: application/json" \
59 | --data-binary "${json}" \
60 | --request POST ${base_path}/v2.1/accounts/${account_id}/views/console \
61 | --output $response
62 |
63 | echo ""
64 | echo "Results:"
65 | echo ""
66 | cat $response
67 | console_url=`cat $response | grep url | sed 's/.*\"url\": \"//' | sed 's/\".*//'`
68 | #ds-snippet-end:eSign12Step2
69 | echo ""
70 | printf "The console URL is ${console_url}\n"
71 | printf "It is only valid for five minutes. Attempting to automatically open your browser...\n"
72 | if which xdg-open &> /dev/null ; then
73 | xdg-open "$console_url"
74 | elif which open &> /dev/null ; then
75 | open "$console_url"
76 | elif which start &> /dev/null ; then
77 | start "$console_url"
78 | fi
79 |
80 | # cleanup
81 | rm "$response"
82 |
83 | echo ""
84 | echo "Done."
85 | echo ""
--------------------------------------------------------------------------------
/examples/eSignature/eg015EnvelopeTabData.sh:
--------------------------------------------------------------------------------
1 | # Retreive Envelope Tab Data
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Step 1: Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 |
16 | base_path="https://demo.docusign.net/restapi"
17 |
18 | # Check that we have an envelope ID
19 | if [ ! -f config/ENVELOPE_ID ]; then
20 | echo ""
21 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg001EmbeddedSigning.sh"
22 | echo ""
23 | exit 0
24 | fi
25 | envelope_id=`cat config/ENVELOPE_ID`
26 |
27 | #Create your authorization headers
28 | #ds-snippet-start:eSign15Step2
29 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
30 | '--header' "Accept: application/json" \
31 | '--header' "Content-Type: application/json")
32 | #ds-snippet-end:eSign15Step2
33 |
34 | # a) Make a GET call to the form_data endpoint to retrieve your envelope tab values
35 | # b) Display the JSON response
36 | #ds-snippet-start:eSign15Step3
37 | response=$(mktemp /tmp/response-rst.XXXXXX)
38 |
39 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}/form_data \
40 | "${Headers[@]}" \
41 | --output ${response})
42 | #ds-snippet-end:eSign15Step3
43 |
44 | if [[ "$Status" -gt "201" ]] ; then
45 | echo ""
46 | echo "Retrieving envelope form data has failed."
47 | echo ""
48 | cat $response
49 | exit 0
50 | fi
51 |
52 | echo ""
53 | echo "Response:"
54 | cat $response
55 | echo ""
56 |
57 | # Remove the temporary files
58 | rm "$response"
59 |
--------------------------------------------------------------------------------
/examples/eSignature/eg018EnvelopeCustomFieldData.sh:
--------------------------------------------------------------------------------
1 | # Get the envelope's custom field data
2 | # This script uses the envelope ID stored in ../envelope_id.
3 | # The envelope_id file is created by example eg016SetTabValues.sh or
4 | # can be manually created.
5 |
6 | # Check that we're in a bash shell
7 | if [[ $SHELL != *"bash"* ]]; then
8 | echo "PROBLEM: Run these scripts from within the bash shell."
9 | fi
10 |
11 | # Obtain your OAuth token
12 | # Note: Substitute these values with your own
13 | # Step 1 start
14 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
15 | # Step 1 end
16 |
17 | #Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 | base_path="https://demo.docusign.net/restapi"
22 |
23 | # Construct your API headers
24 | #ds-snippet-start:eSign18Step2
25 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
26 | '--header' "Accept: application/json" \
27 | '--header' "Content-Type: application/json")
28 | #ds-snippet-end:eSign18Step2
29 |
30 | # Check that we have an template ID
31 | if [ ! -f config/ENVELOPE_ID ]; then
32 | echo ""
33 | echo "PROBLEM: An envelope id is needed. Fix: execute script eg016SetTabValues.sh"
34 | echo ""
35 | exit 0
36 | fi
37 | envelope_id=`cat config/ENVELOPE_ID`
38 |
39 | echo ""
40 | echo "Sending the EnvelopeCustomFields::list request to DocuSign..."
41 |
42 | # Send a GET request to the Envelopes endpoint
43 | #ds-snippet-start:eSign18Step3
44 | response=$(mktemp /tmp/response-eg-018.XXXXXX)
45 | Status=$(curl -w '%{http_code}' -i --request GET ${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}/custom_fields \
46 | "${Headers[@]}" \
47 | --output ${response})
48 | #ds-snippet-end:eSign18Step3
49 |
50 | echo "Results:"
51 | echo ""
52 |
53 | cat $response
54 | echo ""
55 | echo ""
56 | echo "Done."
57 | echo ""
58 |
--------------------------------------------------------------------------------
/examples/eSignature/eg019SigningViaEmailWithAccessCode.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 |
7 |
8 | # Step 1: Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | #Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 |
16 | base_path="https://demo.docusign.net/restapi"
17 |
18 | #ds-snippet-start:eSign19Step2
19 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
20 | '--header' "Accept: application/json" \
21 | '--header' "Content-Type: application/json")
22 | #ds-snippet-end:eSign19Step2
23 |
24 | doc_base64=$(mktemp /tmp/eg-002-doc3.XXXXXX)
25 |
26 | # Fetch docs and encode
27 | cat demo_documents/World_Wide_Corp_lorem.pdf | base64 > $doc_base64
28 |
29 | read -p "Please enter a signer email address (must be different from the developer account email address): " SIGNER_EMAIL
30 | read -p "Please enter a signer name: " SIGNER_NAME
31 |
32 | read -p "Please enter an access code for recipient authentication [Example: nj91@c]: " ACCESS_CODE
33 | ACCESS_CODE=${ACCESS_CODE:-"nj91@c"}
34 | request_data=$(mktemp /tmp/request-ds.XXXXXX)
35 |
36 | # Create a temporary file to store the JSON body
37 | #ds-snippet-start:eSign19Step3
38 | printf \
39 | '{
40 | "documents": [
41 | {
42 | "documentBase64": "' >> $request_data
43 | cat $doc_base64 >> $request_data
44 | printf '",
45 | "name": "Lorem Ipsum",
46 | "fileExtension": "pdf",
47 | "documentId": "1"
48 | }
49 | ],
50 | "emailBlurb": "Sample text for email body",
51 | "emailSubject": "Please Sign",
52 | "envelopeIdStamping": "true",
53 | "recipients": {
54 | "signers": [{
55 | "name": "'"${SIGNER_NAME}"'",
56 | "email": "'"${SIGNER_EMAIL}"'",
57 | "roleName": "",
58 | "note": "",
59 | "routingOrder": 1,
60 | "status": "created",
61 | "tabs": {
62 | "signHereTabs": [{
63 | "documentId": "1",
64 | "name": "SignHereTab",
65 | "pageNumber": "1",
66 | "recipientId": "1",
67 | "tabLabel": "SignHereTab",
68 | "xPosition": "200",
69 | "yPosition": "160"
70 | }]
71 | },
72 | "templateAccessCodeRequired": null,
73 | "deliveryMethod": "email",
74 | "recipientId": "1",
75 | "accessCode": "'"${ACCESS_CODE}"'",
76 | "smsAuthentication": null,
77 | "idCheckConfigurationName": "",
78 | "requireIdLookup": false
79 | }]
80 | },
81 | "status": "Sent"
82 | }
83 | ' >> $request_data
84 | #ds-snippet-end:eSign19Step3
85 |
86 | echo "Access code for this example is ${ACCESS_CODE}"
87 | echo ""
88 | # Step 4: a) Make a POST call to the createEnvelopes endpoint to create a new envelope.
89 | # b) Display the JSON structure of the created envelope
90 | echo ""
91 | echo "Request:"
92 | echo ""
93 | cat $request_data
94 | # Create a temporary file to store the response
95 | response=$(mktemp /tmp/response-cw.XXXXXX)
96 | #ds-snippet-start:eSign19Step4
97 | curl --request POST "https://demo.docusign.net/restapi/v2.1/accounts/${account_id}/envelopes" \
98 | "${Headers[@]}" \
99 | --data-binary @${request_data} \
100 | --output ${response}
101 | #ds-snippet-end:eSign19Step4
102 |
103 | echo ""
104 | echo "Response:"
105 | cat $response
106 | echo ""
107 | # Remove the temporary files
108 | rm "$request_data"
109 | rm "$response"
110 |
--------------------------------------------------------------------------------
/examples/eSignature/eg022SigningViaEmailWithKnowledgeBasedAuthentication.sh:
--------------------------------------------------------------------------------
1 | # Check that we're in a bash shell
2 | if [[ $SHELL != *"bash"* ]]; then
3 | echo "PROBLEM: Run these scripts from within the bash shell."
4 | fi
5 |
6 | # Step 1: Obtain your OAuth token
7 | # Note: Substitute these values with your own
8 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
9 |
10 | #Set up variables for full code example
11 | # Note: Substitute these values with your own
12 | account_id=$(cat config/API_ACCOUNT_ID)
13 |
14 | base_path="https://demo.docusign.net/restapi"
15 |
16 | # Step 2: Construct your API headers
17 | #ds-snippet-start:eSign22Step2
18 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
19 | '--header' "Accept: application/json" \
20 | '--header' "Content-Type: application/json")
21 |
22 | #ds-snippet-end:eSign22Step2
23 | # Step 3: Construct your envelope JSON body
24 | # Create a temporary file to store the JSON body
25 | is_data_correct=true
26 | while $is_data_correct; do
27 | read -p "Please enter name for the signer: " RECIPIENT_NAME
28 | read -p "Please enter email address for the signer: " RECIPIENT_EMAIL
29 |
30 | if [[ "$RECIPIENT_EMAIL" = "$SIGNER_EMAIL" ]]; then
31 | echo ""
32 | echo "For recipient authentication you must specify a different recipient from the account owner (sender) in order to ensure recipient authentication is performed"
33 | echo ""
34 | else
35 | is_data_correct=false
36 | fi
37 | done
38 |
39 | doc_base64=$(mktemp /tmp/eg-019-doc1.XXXXXX)
40 | cat demo_documents/World_Wide_Corp_Battle_Plan_Trafalgar.docx | base64 > $doc_base64
41 |
42 | request_data=$(mktemp /tmp/request-cw.XXXXXX)
43 | #ds-snippet-start:eSign22Step3
44 | printf \
45 | '{
46 | "documents": [{
47 | "documentBase64":"' > $request_data
48 | cat $doc_base64 >> $request_data
49 | printf '",
50 | "documentId": "1",
51 | "fileExtension": "docx",
52 | "name": "Lorem"
53 | }],
54 | "emailBlurb": "Sample text for email body",
55 | "emailSubject": "Please Sign",
56 | "envelopeIdStamping": "true",
57 | "recipients": {
58 | "signers": [{
59 | "deliveryMethod": "Email",
60 | "name": "'"${RECIPIENT_NAME}"'",
61 | "email": "'"${RECIPIENT_EMAIL}"'",
62 | "idCheckConfigurationName": "ID Check",
63 | "recipientId": "1",
64 | "requireIdLookup": "true",
65 | "routingOrder": "1",
66 | "status": "Created",
67 | "tabs": {
68 | "signHereTabs": [{
69 | "documentId": "1",
70 | "name": "SignHereTab",
71 | "pageNumber": "1",
72 | "recipientId": "1",
73 | "tabLabel": "SignHereTab",
74 | "xPosition": "75",
75 | "yPosition": "572"
76 | }]
77 | }
78 | }]
79 | },
80 | "status": "Sent"
81 | }' >> $request_data
82 | #ds-snippet-end:eSign22Step3
83 |
84 | # Step 4: a) Make a POST call to the createEnvelopes endpoint to create a new envelope.
85 | # b) Display the JSON structure of the created envelope
86 | echo ""
87 | echo "Request:"
88 | echo ""
89 | cat $request_data
90 | # Create a temporary file to store the response
91 | response=$(mktemp /tmp/response-cw.XXXXXX)
92 | #ds-snippet-start:eSign22Step4
93 | curl --request POST "https://demo.docusign.net/restapi/v2.1/accounts/${account_id}/envelopes" \
94 | "${Headers[@]}" \
95 | --data-binary @${request_data} \
96 | --output ${response}
97 | #ds-snippet-end:eSign22Step4
98 |
99 | echo ""
100 | echo "Response:"
101 | cat $response
102 | # Remove the temporary files
103 | rm "$request_data"
104 | rm "$response"
105 |
106 | echo ""
107 | echo ""
108 | echo "Done."
109 | echo ""
110 |
111 |
--------------------------------------------------------------------------------
/examples/eSignature/eg024CreatingPermissionProfiles.sh:
--------------------------------------------------------------------------------
1 | # Create Permission Profile
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 |
9 |
10 | read -p "Please enter a new permission profile name: " PROFILE_NAME
11 | PROFILE_NAME=${PROFILE_NAME:-"Bash_Perms_"$(date +%Y-%m-%d-%H:%M)}
12 | export PROFILE_NAME
13 |
14 |
15 | # Step 1: Obtain your OAuth token
16 | # Note: Substitute these values with your own
17 | # Set up variables for full code example
18 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
19 | account_id=$(cat config/API_ACCOUNT_ID)
20 |
21 | # Step 2: Construct your API headers
22 | #ds-snippet-start:eSign24Step2
23 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
24 | '--header' "Accept: application/json" \
25 | '--header' "Content-Type: application/json")
26 | #ds-snippet-end:eSign24Step2
27 |
28 | # Step 3: Construct the request body
29 | # Create a temporary file to store the request body
30 | base_path="https://demo.docusign.net/restapi"
31 | request_data=$(mktemp /tmp/request-perm-001.XXXXXX)
32 | #ds-snippet-start:eSign24Step3
33 | printf \
34 | '{
35 | "permissionProfileName": "'"${PROFILE_NAME}"'",
36 | "settings" : {
37 | "useNewDocuSignExperienceInterface":0,
38 | "allowBulkSending":"true",
39 | "allowEnvelopeSending":"true",
40 | "allowSignerAttachments":"true",
41 | "allowTaggingInSendAndCorrect":"true",
42 | "allowWetSigningOverride":"true",
43 | "allowedAddressBookAccess":"personalAndShared",
44 | "allowedTemplateAccess":"share",
45 | "enableRecipientViewingNotifications":"true",
46 | "enableSequentialSigningInterface":"true",
47 | "receiveCompletedSelfSignedDocumentsAsEmailLinks":"false",
48 | "signingUiVersion":"v2",
49 | "useNewSendingInterface":"true",
50 | "allowApiAccess":"true",
51 | "allowApiAccessToAccount":"true",
52 | "allowApiSendingOnBehalfOfOthers":"true",
53 | "allowApiSequentialSigning":"true",
54 | "enableApiRequestLogging":"true",
55 | "allowDocuSignDesktopClient":"false",
56 | "allowSendersToSetRecipientEmailLanguage":"true",
57 | "allowVaulting":"false",
58 | "allowedToBeEnvelopeTransferRecipient":"true",
59 | "enableTransactionPointIntegration":"false",
60 | "powerFormRole":"admin",
61 | "vaultingMode":"none"
62 | }
63 | }' >> $request_data
64 | #ds-snippet-end:eSign24Step3
65 |
66 | # Step 4: a) Call the eSignature API
67 | # b) Display the JSON response
68 | # Create a temporary file to store the response
69 | response=$(mktemp /tmp/response-perm.XXXXXX)
70 |
71 | #ds-snippet-start:eSign24Step4
72 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v2.1/accounts/${account_id}/permission_profiles \
73 | "${Headers[@]}" \
74 | --data-binary @${request_data} \
75 | --output ${response})
76 | #ds-snippet-end:eSign24Step4
77 |
78 | # If the Status code returned is greater than 399, display an error message along with the API response
79 | if [[ "$Status" -gt "399" ]] ; then
80 | echo ""
81 | echo "Unable to create a new permissions profile."
82 | echo ""
83 | cat $response
84 | exit 0
85 | fi
86 |
87 | echo ""
88 | echo "Response:"
89 | cat $response
90 | echo ""
91 |
92 |
93 | # Retrieve the profile ID from the API response.
94 | profileID=`cat $response | grep permissionProfileId | sed 's/.*\"permissionProfileId\":\"//' | sed 's/\",.*//'`
95 | # Save the envelope id for use by other scripts
96 | echo "Permission Profile ID: ${profileID}"
97 | echo ${profileID} > config/PROFILE_ID
98 | echo ${PROFILE_NAME} > config/PROFILE_NAME
99 |
100 | # Remove the temporary files
101 | rm "$request_data"
102 | rm "$response"
103 | echo ""
104 | echo ""
105 | echo "Done."
106 | echo ""
107 |
108 |
--------------------------------------------------------------------------------
/examples/eSignature/eg026UpdatingIndividualPermission.sh:
--------------------------------------------------------------------------------
1 | # Updating Individual Permissions
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Check that we have a profile id
9 | if [ ! -f config/PROFILE_ID ]; then
10 | echo ""
11 | echo "PROBLEM: Permission profile Id is needed. To fix: execute script eg024CreateingPermissionProfiles.sh"
12 | echo ""
13 | exit -1
14 | fi
15 |
16 |
17 | # Step 1: Obtain your OAuth token
18 | # Note: Substitute these values with your own
19 | # Set up variables for full code example
20 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
21 | account_id=$(cat config/API_ACCOUNT_ID)
22 | permission_profile_id=`cat config/PROFILE_ID`
23 | profile_name=`cat config/PROFILE_NAME`
24 | base_path="https://demo.docusign.net/restapi"
25 |
26 | #ds-snippet-start:eSign26Step2
27 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
28 | '--header' "Accept: application/json" \
29 | '--header' "Content-Type: application/json")
30 | #ds-snippet-end:eSign26Step2
31 |
32 | #ds-snippet-start:eSign26Step3
33 | # Create a temporary file to store the request body
34 | request_data=$(mktemp /tmp/request-perm-001.XXXXXX)
35 | printf \
36 | '{
37 |
38 | "permissionProfileName": "'"${profile_name} - updated $(date +%Y-%m-%d-%H:%M:%S) "'",
39 | "settings" : {
40 | "useNewDocuSignExperienceInterface":0,
41 | "allowBulkSending":"true",
42 | "allowEnvelopeSending":"true",
43 | "allowSignerAttachments":"true",
44 | "allowTaggingInSendAndCorrect":"true",
45 | "allowWetSigningOverride":"true",
46 | "allowedAddressBookAccess":"personalAndShared",
47 | "allowedTemplateAccess":"share",
48 | "enableRecipientViewingNotifications":"true",
49 | "enableSequentialSigningInterface":"true",
50 | "receiveCompletedSelfSignedDocumentsAsEmailLinks":"false",
51 | "signingUiVersion":"v2",
52 | "useNewSendingInterface":"true",
53 | "allowApiAccess":"true",
54 | "allowApiAccessToAccount":"true",
55 | "allowApiSendingOnBehalfOfOthers":"true",
56 | "allowApiSequentialSigning":"true",
57 | "enableApiRequestLogging":"true",
58 | "allowDocuSignDesktopClient":"false",
59 | "allowSendersToSetRecipientEmailLanguage":"true",
60 | "allowVaulting":"false",
61 | "allowedToBeEnvelopeTransferRecipient":"true",
62 | "enableTransactionPointIntegration":"false",
63 | "powerFormRole":"admin",
64 | "vaultingMode":"none"
65 | }
66 | }' >> $request_data
67 | #ds-snippet-end:eSign26Step3
68 |
69 | #ds-snippet-start:eSign26Step4
70 | response=$(mktemp /tmp/response-perm.XXXXXX)
71 |
72 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v2.1/accounts/${account_id}/permission_profiles/${permission_profile_id} \
73 | "${Headers[@]}" \
74 | --data-binary @${request_data} \
75 | --output ${response})
76 |
77 | #ds-snippet-end:eSign26Step4
78 |
79 | # If the Status code returned is greater than 399, display an error message along with the API response
80 | if [[ "$Status" -gt "399" ]] ; then
81 | echo ""
82 | echo "Updating Individual Permission Settings failed."
83 | echo ""
84 | cat $response
85 | exit 0
86 | fi
87 |
88 | echo ""
89 | echo "Response:"
90 | cat $response
91 | echo ""
92 |
93 | # Remove the temporary files
94 | rm "$request_data"
95 | rm "$response"
96 | echo ""
97 | echo ""
98 | echo "Done."
99 | echo ""
100 |
101 |
--------------------------------------------------------------------------------
/examples/eSignature/eg027DeletingPermissions.sh:
--------------------------------------------------------------------------------
1 | # Delete a permission profile
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 |
9 | # Check that we have a profile id
10 | if [ ! -f config/PROFILE_ID ]; then
11 | echo ""
12 | echo "PROBLEM: Permission profile Id is needed. To fix: execute script eg024CreateingPermissionProfiles.sh"
13 | echo ""
14 | exit -1
15 | fi
16 |
17 | # Step 1: Obtain your OAuth token
18 | # Note: Substitute these values with your own
19 | # Set up variables for full code example
20 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
21 | account_id=$(cat config/API_ACCOUNT_ID)
22 | permission_profile_id=`cat config/PROFILE_ID`
23 | base_path="https://demo.docusign.net/restapi"
24 |
25 | #Step 2: Construct your API headers
26 | #ds-snippet-start:eSign27Step2
27 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
28 | '--header' "Accept: application/json" \
29 | '--header' "Content-Type: application/json")
30 | #ds-snippet-end:eSign27Step2
31 |
32 | # Step 3: a) Call the eSignature API
33 | # b) Display the JSON response
34 | # Create a temporary file to store the response
35 | response=$(mktemp /tmp/response-perm.XXXXXX)
36 |
37 | #ds-snippet-start:eSign27Step3
38 | Status=$(curl -w '%{http_code}' -i --request DELETE ${base_path}/v2.1/accounts/${account_id}/permission_profiles/${permission_profile_id} \
39 | "${Headers[@]}" \
40 | --output ${response})
41 | #ds-snippet-end:eSign27Step3
42 |
43 | # If the Status code returned is greater than 399, display an error message along with the API response
44 | if [[ "$Status" -gt "399" ]] ; then
45 | echo ""
46 | echo "Unable to delete the permission profile."
47 | echo ""
48 | cat $response
49 | exit 0
50 | fi
51 |
52 | echo ""
53 | echo "Response:"
54 | cat $response
55 | echo ""
56 |
57 | # Remove the temporary files
58 | rm "$request_data"
59 | rm "$response"
60 | echo ""
61 | echo ""
62 | echo "Done."
63 | echo ""
64 |
65 |
--------------------------------------------------------------------------------
/examples/eSignature/eg028CreatingABrand.sh:
--------------------------------------------------------------------------------
1 | # Creating a brand
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | read -p "Please enter a new brand name [Sample Bash Corp. {date}]: " BRAND
9 | BRAND=${BRAND:-"Sample Bash Corp. "$(date +%Y-%m-%d-%H:%M)}
10 | export BRAND
11 |
12 |
13 |
14 | # Step 1: Obtain your OAuth token
15 | # Note: Substitute these values with your own
16 | # Set up variables for full code example
17 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
18 | account_id=$(cat config/API_ACCOUNT_ID)
19 | base_path="https://demo.docusign.net/restapi"
20 |
21 | # Step 2: Construct your API headers
22 | #ds-snippet-start:eSign28Step2
23 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
24 | '--header' "Accept: application/json" \
25 | '--header' "Content-Type: application/json")
26 | #ds-snippet-end:eSign28Step2
27 |
28 | # Step 3: Construct the request body
29 | # Create a temporary file to store the request body
30 | request_data=$(mktemp /tmp/request-brand-001.XXXXXX)
31 | #ds-snippet-start:eSign28Step3
32 | printf \
33 | '{
34 |
35 | "brandName": "'"${BRAND}"'",
36 | "defaultBrandLanguage": "en"
37 |
38 | }' >> $request_data
39 | #ds-snippet-end:eSign28Step3
40 |
41 | # Step 4: a) Call the eSignature API
42 | # b) Display the JSON response
43 | # Create a temporary file to store the response
44 | response=$(mktemp /tmp/response-brand.XXXXXX)
45 |
46 | #ds-snippet-start:eSign28Step4
47 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v2.1/accounts/${account_id}/brands \
48 | "${Headers[@]}" \
49 | --data-binary @${request_data} \
50 | --output ${response})
51 | #ds-snippet-end:eSign28Step4
52 |
53 | # If the Status code returned is greater than 399, display an error message along with the API response
54 | if [[ "$Status" -gt "399" ]] ; then
55 | echo ""
56 | echo "Creating a new brand has failed."
57 | echo ""
58 | cat $response
59 | exit 0
60 | fi
61 |
62 |
63 | # Retrieve the profile ID from the API response.
64 | brandId=`cat $response | grep brandId | sed 's/.*\"brandId\":\"//' | sed 's/\",.*//'`
65 | # Save the envelope id for use by other scripts
66 | echo "brand Id: ${brandId}"
67 | echo ${brandId} > config/BRAND_ID
68 |
69 |
70 | echo ""
71 | echo "Response:"
72 | cat $response
73 | echo ""
74 |
75 | # Remove the temporary files
76 | rm "$request_data"
77 | rm "$response"
78 |
79 | echo ""
80 | echo ""
81 | echo "Done."
82 | echo ""
83 |
84 |
--------------------------------------------------------------------------------
/examples/eSignature/eg029ApplyingBrandEnvelope.sh:
--------------------------------------------------------------------------------
1 | # Applying a Brand to an envelope
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Check that we have a brand id
9 | if [ ! -f config/BRAND_ID ]; then
10 | echo ""
11 | echo "PROBLEM: Brand Id is needed. To fix: execute script eg028CreateingABrand.sh"
12 | echo ""
13 | exit -1
14 | fi
15 | brand_id=`cat config/BRAND_ID`
16 |
17 |
18 | # Step 1: Obtain your OAuth token
19 | # Note: Substitute these values with your own
20 | # Set up variables for full code example
21 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
22 | account_id=$(cat config/API_ACCOUNT_ID)
23 | brand_id=$brand_id
24 | base_path="https://demo.docusign.net/restapi"
25 |
26 | #Step 2: Construct your API headers
27 | #ds-snippet-start:eSign29Step2
28 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}" \
29 | '--header' "Accept: application/json" \
30 | '--header' "Content-Type: application/json")
31 |
32 | #ds-snippet-end:eSign29Step2
33 |
34 | # Step 3: Construct the request body
35 | # Create a temporary file to store the request body
36 | #ds-snippet-start:eSign29Step3
37 | request_data=$(mktemp /tmp/request-brand-001.XXXXXX)
38 | printf \
39 | '{
40 | "documents": [{
41 | "documentBase64": "DQoNCg0KCQkJCXRleHQgZG9jDQoNCg0KDQoNCg0KUk0gIwlSTSAjCVJNICMNCg0KDQoNClxzMVwNCg0KLy9hbmNoMSANCgkvL2FuY2gyDQoJCS8vYW5jaDM=",
42 | "documentId": "1",
43 | "fileExtension": "txt",
44 | "name": "NDA"
45 | }],
46 | "emailBlurb": "Sample text for email body",
47 | "emailSubject": "Please Sign",
48 | "envelopeIdStamping": "true",
49 | "recipients": {
50 | "signers": [{
51 | "name": "'"${SIGNER_NAME}"'",
52 | "email": "'"${SIGNER_EMAIL}"'",
53 | "roleName": "signer",
54 | "note": "",
55 | "routingOrder": 1,
56 | "status": "sent",
57 | "tabs": {
58 | "signHereTabs": [{
59 | "documentId": "1",
60 | "name": "SignHereTab",
61 | "pageNumber": "1",
62 | "recipientId": "1",
63 | "tabLabel": "SignHereTab",
64 | "xPosition": "75",
65 | "yPosition": "572"
66 | }]
67 | },
68 | "deliveryMethod": "email",
69 | "recipientId": "1",
70 | }],
71 | },
72 | "brandId": "'$brand_id'",
73 | "status": "Sent"
74 | }' >> $request_data
75 | #ds-snippet-end:eSign29Step3
76 |
77 | # Step 4: a) Call the eSignature API
78 | # b) Display the JSON response
79 | # Create a temporary file to store the response
80 | response=$(mktemp /tmp/response-brand.XXXXXX)
81 | #ds-snippet-start:eSign29Step4
82 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
83 | "${Headers[@]}" \
84 | --data-binary @${request_data} \
85 | --output ${response})
86 | #ds-snippet-end:eSign29Step4
87 | # If the Status code returned is greater than 399, display an error message along with the API response
88 | if [[ "$Status" -gt "399" ]] ; then
89 | echo ""
90 | echo "Creating a new envelope has failed."
91 | echo ""
92 | cat $response
93 | exit 0
94 | fi
95 | echo ""
96 | echo "Response:"
97 | cat $response
98 | echo ""
99 | # Remove the temporary files
100 | rm "$request_data"
101 | rm "$response"
102 |
103 | echo ""
104 | echo ""
105 | echo "Done."
106 | echo ""
107 |
108 |
--------------------------------------------------------------------------------
/examples/eSignature/eg030ApplyingBrandTemplate.sh:
--------------------------------------------------------------------------------
1 | # Applying a Brand to a template
2 |
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Check for a valid cc email and prompt the user if
9 | #CC_EMAIL and CC_NAME haven't been set in the config file.
10 | source ./examples/eSignature/lib/utils.sh
11 | CheckForValidCCEmail
12 |
13 | # Check that we have a template id
14 | if [ ! -f config/TEMPLATE_ID ]; then
15 | echo ""
16 | echo "PROBLEM: Template Id needed. To fix: execute script eg008CreateTemplate.sh"
17 | echo ""
18 | exit 0
19 | fi
20 | template_id=`cat config/TEMPLATE_ID`
21 |
22 | # Check that we have a brand id
23 | if [ ! -f config/BRAND_ID ]; then
24 | echo ""
25 | echo "PROBLEM: Brand Id is needed. To fix: execute script eg028CreateingABrand.sh"
26 | echo ""
27 | exit 0
28 | fi
29 | brand_id=`cat config/BRAND_ID`
30 |
31 |
32 |
33 | # Step 1: Obtain your OAuth token
34 | # Note: Substitute these values with your own
35 | # Set up variables for full code example
36 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
37 | account_id=$(cat config/API_ACCOUNT_ID)
38 | brand_id=$brand_id
39 | template_id=$template_id
40 | base_path="https://demo.docusign.net/restapi"
41 |
42 | #Step 2: Construct your API headers
43 | #ds-snippet-start:eSign30Step2
44 | declare -a Headers=('--header' "Authorization: Bearer $ACCESS_TOKEN" \
45 | '--header' "Accept: application/json" \
46 | '--header' "Content-Type: application/json")
47 | #ds-snippet-end:eSign30Step2
48 |
49 | # Step 3: Construct the request body
50 | # Create a temporary file to store the request body
51 | request_data=$(mktemp /tmp/request-brand-001.XXXXXX)
52 | #ds-snippet-start:eSign30Step3
53 | printf \
54 | '{
55 | "templateId": "'$template_id'",
56 | "brandId": "'$brand_id'",
57 | "templateRoles": [
58 | {
59 | "email": "'"${SIGNER_EMAIL}"'",
60 | "name": "'"${SIGNER_NAME}"'",
61 | "roleName": "signer"
62 | },
63 | {
64 | "email": "'"${CC_EMAIL}"'",
65 | "name": "'"${CC_NAME}"'",
66 | "roleName": "cc"
67 | }
68 | ],
69 | "status": "sent"
70 | }' >> $request_data
71 | #ds-snippet-end:eSign30Step3
72 |
73 | # Step 4: a) Call the eSignature API
74 | # b) Display the JSON response
75 | # Create a temporary file to store the response
76 | response=$(mktemp /tmp/response-brand.XXXXXX)
77 | #ds-snippet-start:eSign30Step4
78 | Status=$(curl -w '%{http_code}' -i --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
79 | "${Headers[@]}" \
80 | --data-binary @${request_data} \
81 | --output ${response})
82 | #ds-snippet-end:eSign30Step4
83 | # If the Status code returned is greater than 399, display an error message along with the API response
84 | if [[ "$Status" -gt "399" ]] ; then
85 | echo ""
86 | echo "Creating a new envelope has failed."
87 | echo ""
88 | cat $response
89 | exit 0
90 | fi
91 | echo ""
92 | echo "Response:"
93 | cat $response
94 | echo ""
95 | # Remove the temporary files
96 | rm "$request_data"
97 | rm "$response"
98 | echo ""
99 | echo ""
100 | echo "Done."
101 | echo ""
102 |
103 |
--------------------------------------------------------------------------------
/examples/eSignature/eg032PauseSignatureWorkflow.sh:
--------------------------------------------------------------------------------
1 | # How to pause a signature workflow
2 | # https://developers.docusign.com/docs/esign-rest-api/how-to/pause-workflow/
3 |
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Check for a valid cc email and prompt the user if
10 | #CC_EMAIL and CC_NAME haven't been set in the config file.
11 | source ./examples/eSignature/lib/utils.sh
12 | CheckForValidCCEmail
13 |
14 | # Step 1: Obtain your OAuth token
15 | # Note: Substitute these values with your own
16 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
17 | account_id=$(cat config/API_ACCOUNT_ID)
18 | base_path="https://demo.docusign.net/restapi"
19 |
20 | # Get values form the settings.txt config file
21 | SIGNER1_EMAIL=$SIGNER_EMAIL
22 | SIGNER1_NAME=$SIGNER_NAME
23 | SIGNER2_EMAIL=$CC_EMAIL
24 | SIGNER2_NAME=$CC_NAME
25 |
26 | # Step 2: Construct your API headers
27 | # Construct your API headers
28 | #ds-snippet-start:eSign32Step2
29 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
30 | '--header' "Accept: application/json"
31 | '--header' "Content-Type: application/json")
32 | #ds-snippet-end:eSign32Step2
33 |
34 | # Step 3. Construct the request body
35 | # Create a temporary files to store the JSON body and response
36 | request_data=$(mktemp /tmp/request-bs.XXXXXX)
37 | response=$(mktemp /tmp/response-bs.XXXXXX)
38 | # Create the request body
39 | #ds-snippet-start:eSign32Step3
40 | printf \
41 | '{
42 | "documents": [
43 | {
44 | "documentBase64": "DQoNCg0KDQoJCVdlbGNvbWUgdG8gdGhlIERvY3VTaWduIFJlY3J1aXRpbmcgRXZlbnQNCgkJDQoJCQ0KCQlQbGVhc2UgU2lnbiBpbiENCgkJDQoJCQ0KCQk=",
45 | "documentId": "1",
46 | "fileExtension": "txt",
47 | "name": "Welcome"
48 | }
49 | ],
50 | "emailSubject": "EnvelopeWorkflowTest",
51 | "workflow":
52 | {
53 | "workflowSteps":
54 | [
55 | {
56 | "action": "pause_before",
57 | "triggerOnItem": "routing_order",
58 | "itemId": "2"
59 | }
60 | ]
61 | },
62 | "recipients": {
63 | "signers": [
64 | {
65 | "email": "'"${SIGNER1_EMAIL}"'",
66 | "name": "'"${SIGNER1_NAME}"'",
67 | "recipientId": "1",
68 | "routingOrder": "1",
69 | "tabs": {
70 | "signHereTabs": [
71 | {
72 | "documentId": "1",
73 | "pageNumber": "1",
74 | "tabLabel": "Sign Here",
75 | "xPosition": "200",
76 | "yPosition": "200"
77 | }
78 | ]
79 | }
80 | },
81 | {
82 | "email": "'"${SIGNER2_EMAIL}"'",
83 | "name": "'"${SIGNER2_NAME}"'",
84 | "recipientId": "2",
85 | "routingOrder": "2",
86 | "tabs": {
87 | "signHereTabs": [
88 | {
89 | "documentId": "1",
90 | "pageNumber": "1",
91 | "tabLabel": "Sign Here",
92 | "xPosition": "300",
93 | "yPosition": "200"
94 | }
95 | ]
96 | }
97 | }
98 | ]
99 | },
100 | "status": "Sent"
101 | }
102 | ' >>$request_data
103 | #ds-snippet-end:eSign32Step3
104 |
105 | # Step 4. Call the eSignature API
106 | #ds-snippet-start:eSign32Step4
107 | Status=$(curl --request POST "${base_path}/v2.1/accounts/${account_id}/envelopes" \
108 | "${Headers[@]}" \
109 | --data-binary @${request_data} \
110 | --output ${response})
111 | #ds-snippet-end:eSign32Step4
112 |
113 | if [[ "$Status" -gt "201" ]]; then
114 | echo ""
115 | echo "The call of the eSignature API has failed"
116 | echo ""
117 | cat $response
118 | exit 0
119 | fi
120 |
121 | echo ""
122 | echo "Request:"
123 | cat $request_data
124 | echo ""
125 |
126 | # Obtain the Envelope ID from the JSON response
127 | envelope_id=$(cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//')
128 | echo "Envelope Id: $envelope_id"
129 | echo ""
130 |
131 | # Store the envelope_id into the config file
132 | echo $envelope_id >config/ENVELOPE_ID
133 |
134 | # Remove the temporary files
135 | rm "$response"
136 | rm "$request_data"
137 |
--------------------------------------------------------------------------------
/examples/eSignature/eg033UnpauseSignatureWorkflow.sh:
--------------------------------------------------------------------------------
1 | # How to unpause a signature workflow
2 | # https://developers.docusign.com/docs/esign-rest-api/how-to/unpause-workflow/
3 |
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | # Check that we have an Envelope ID
10 | if [ ! -f config/ENVELOPE_ID ]; then
11 | echo ""
12 | echo "PROBLEM: Envelope Id is needed. To fix: execute script eg032PauseSignatureWorkflow.sh"
13 | echo ""
14 | exit 0
15 | fi
16 | envelope_id=$(cat config/ENVELOPE_ID)
17 |
18 | # Step 1: Create your API Headers
19 | # Note: These values are not valid, but are shown for example purposes only!
20 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
21 | account_id=$(cat config/API_ACCOUNT_ID)
22 | base_path="https://demo.docusign.net/restapi"
23 |
24 | # Step 2: Construct your API headers
25 | # Construct your API headers
26 | #ds-snippet-start:eSign33Step2
27 | declare -a Headers=('--header' "Authorization: Bearer $ACCESS_TOKEN"
28 | '--header' "Accept: application/json"
29 | '--header' "Content-Type: application/json")
30 | #ds-snippet-end:eSign33Step2
31 |
32 | # Create a temporary files to store the JSON body and response
33 | request_data=$(mktemp /tmp/request-bs.XXXXXX)
34 | response=$(mktemp /tmp/response-bs.XXXXXX)
35 |
36 | # Step 3.Construct the JSON body for your envelope
37 | #ds-snippet-start:eSign33Step3
38 | printf \
39 | '{
40 | "workflow":
41 | {
42 | "workflowStatus": "in_progress"
43 | }
44 | }' >>$request_data
45 | #ds-snippet-end:eSign33Step3
46 |
47 | # Step 4. Call the eSignature API
48 | #ds-snippet-start:eSign33Step4
49 | Status=$(curl --request PUT "${base_path}/v2.1/accounts/${account_id}/envelopes/${envelope_id}?resend_envelope=true" \
50 | "${Headers[@]}" \
51 | --data-binary @${request_data} \
52 | --output ${response})
53 | #ds-snippet-end:eSign33Step4
54 |
55 | if [[ "$Status" -gt "201" ]]; then
56 | echo ""
57 | echo "The call of the eSignature API has failed"
58 | echo ""
59 | cat $response
60 | exit 0
61 | fi
62 |
63 | echo ""
64 | echo "Request:"
65 | cat $request_data
66 | echo ""
67 |
68 | # Check the response
69 | echo ""
70 | echo $(cat $response)
71 | echo ""
72 |
73 | # Remove the temporary files
74 | rm "$response"
75 | rm "$request_data"
76 |
--------------------------------------------------------------------------------
/examples/eSignature/eg035ScheduledSending.sh:
--------------------------------------------------------------------------------
1 | # Send an envelope with three documents
2 | #
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Step 1: Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 |
16 | base_path="https://demo.docusign.net/restapi"
17 |
18 | # ***DS.snippet.0.start
19 | # document 1 (pdf) has tag /sn1/
20 |
21 | # temp files:
22 | request_data=$(mktemp /tmp/request-eg-002.XXXXXX)
23 | response=$(mktemp /tmp/response-eg-002.XXXXXX)
24 | doc1_base64=$(mktemp /tmp/eg-002-doc1.XXXXXX)
25 |
26 | # Fetch docs and encode
27 | cat demo_documents/World_Wide_Corp_lorem.pdf | base64 > $doc1_base64
28 |
29 | read -p "Please enter the future date for when you want to schedule this envelope as YYYY-MM-DD: " INPUT_DATE
30 | TIME="T00:00:00.000Z"
31 | # Add time and date together for proper formatting
32 | SCHEDULED_DATE="$INPUT_DATE$TIME"
33 |
34 | echo ""
35 | echo "Sending the envelope request to DocuSign..."
36 | echo "The envelope has three documents. Processing time will be about 15 seconds."
37 | echo "Results:"
38 | echo ""
39 |
40 | # Concatenate the different parts of the request
41 | #ds-snippet-start:eSign35Step2
42 | printf \
43 | '{
44 | "emailSubject": "Please sign this document set",
45 | "documents": [
46 | {
47 | "documentBase64": "' >> $request_data
48 | cat $doc1_base64 >> $request_data
49 | printf '",
50 | "name": "Lorem Ipsum",
51 | "fileExtension": "pdf",
52 | "documentId": "1"
53 | }
54 | ],
55 | "workflow": {
56 | "scheduledSending": {
57 | "rules": [{
58 | "resumeDate": "'"${SCHEDULED_DATE}"'"
59 | }]
60 | }
61 | },
62 | "recipients": {
63 | "signers": [
64 | {
65 | "email": "'"${SIGNER_EMAIL}"'",
66 | "name": "'"${SIGNER_NAME}"'",
67 | "recipientId": "1",
68 | "routingOrder": "1",
69 | "tabs": {
70 | "signHereTabs": [
71 | {
72 | "anchorString": "/sn1/",
73 | "anchorUnits": "pixels",
74 | "anchorXOffset": "20",
75 | "anchorYOffset": "10"
76 | }
77 | ]
78 | }
79 | }
80 | ]
81 | },
82 | "status": "sent"
83 | }' >> $request_data
84 | #ds-snippet-end:eSign35Step2
85 |
86 | #ds-snippet-start:eSign35Step3
87 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
88 | --header "Content-Type: application/json" \
89 | --data-binary @${request_data} \
90 | --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
91 | --output $response
92 |
93 | #ds-snippet-end:eSign35Step3
94 |
95 | echo ""
96 | echo "Response:"
97 | cat $response
98 | echo ""
99 |
100 | # pull out the envelopeId
101 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
102 | # ***DS.snippet.0.end
103 | # Save the envelope id for use by other scripts
104 | echo "EnvelopeId: ${envelope_id}"
105 | echo ${envelope_id} > config/ENVELOPE_ID
106 |
107 | # cleanup
108 | rm "$request_data"
109 | rm "$response"
110 | rm "$doc1_base64"
111 |
112 | echo ""
113 | echo ""
114 | echo "Done."
115 | echo ""
116 |
--------------------------------------------------------------------------------
/examples/eSignature/eg036DelayedRouting.sh:
--------------------------------------------------------------------------------
1 | # Send an envelope with three documents
2 | #
3 | # Check that we're in a bash shell
4 | if [[ $SHELL != *"bash"* ]]; then
5 | echo "PROBLEM: Run these scripts from within the bash shell."
6 | fi
7 |
8 | # Obtain your OAuth token
9 | # Note: Substitute these values with your own
10 | ACCESS_TOKEN=$(cat config/ds_access_token.txt)
11 |
12 | # Set up variables for full code example
13 | # Note: Substitute these values with your own
14 | account_id=$(cat config/API_ACCOUNT_ID)
15 |
16 | base_path="https://demo.docusign.net/restapi"
17 |
18 | # document 1 (pdf) has tag /sn1/
19 | #
20 | # The envelope has two recipients.
21 | # recipient 1 - signer
22 | # recipient 2 - signer
23 | # The envelope will be sent first to the signer.
24 | # There will be a one day delay before it is sent to the second signer.
25 |
26 | # temp files:
27 | request_data=$(mktemp /tmp/request-eg-002.XXXXXX)
28 | response=$(mktemp /tmp/response-eg-002.XXXXXX)
29 | doc1_base64=$(mktemp /tmp/eg-002-doc1.XXXXXX)
30 |
31 | # Fetch docs and encode
32 | cat demo_documents/World_Wide_Corp_lorem.pdf | base64 > $doc1_base64
33 |
34 | # Get the email and name for the second signer
35 | read -p "Enter an email address for the second signer recipient different from the first signer: " SIGNER_EMAIL2
36 | read -p "Enter a name for the second signer recipient: " SIGNER_NAME2
37 |
38 | read -p "Please enter the delay (in hours): " DELAY_HOURS
39 |
40 | DELAY_DAYS="0."
41 | DELAY_MINUTES_SECONDS="00:00"
42 | DELAY="$DELAY_DAYS$DELAY_HOURS:$DELAY_MINUTES_SECONDS"
43 |
44 | echo ""
45 | echo "Sending the envelope request to DocuSign..."
46 | echo "The envelope has three documents. Processing time will be about 15 seconds."
47 | echo "Results:"
48 | echo ""
49 |
50 | # Concatenate the different parts of the request
51 | #ds-snippet-start:eSign36Step2
52 | printf \
53 | '{
54 | "emailSubject": "Please sign this document set",
55 | "documents": [
56 | {
57 | "documentBase64": "' >> $request_data
58 | cat $doc1_base64 >> $request_data
59 | printf '",
60 | "name": "Lorem Ipsum",
61 | "fileExtension": "pdf",
62 | "documentId": "1"
63 | }
64 | ],
65 | "workflow": {
66 | "workflowSteps": [{
67 | "action": "pause_before",
68 | "triggerOnItem": "routing_order",
69 | "itemId": 2,
70 | "delayedRouting": {
71 | "rules": [{
72 | "delay": "'"${DELAY}"'"
73 | }]
74 | }
75 | }]
76 | },
77 | "recipients": {
78 | "signers": [
79 | {
80 | "email": "'"${SIGNER_EMAIL}"'",
81 | "name": "'"${SIGNER_NAME}"'",
82 | "recipientId": "1",
83 | "routingOrder": "1",
84 | "tabs": {
85 | "signHereTabs": [
86 | {
87 | "anchorString": "/sn1/",
88 | "anchorUnits": "pixels",
89 | "anchorXOffset": "20",
90 | "anchorYOffset": "10"
91 | }
92 | ]
93 | }
94 | },
95 | {
96 | "email": "'"${SIGNER_EMAIL2}"'",
97 | "name": "'"${SIGNER_NAME2}"'",
98 | "recipientId": "2",
99 | "routingOrder": "2",
100 | "tabs": {
101 | "signHereTabs": [
102 | {
103 | "xPosition": "400",
104 | "yPosition": "172",
105 | "documentId": "1",
106 | "pageNumber": "1"
107 | }
108 | ]
109 | }
110 |
111 | }
112 | ]
113 | },
114 | "status": "sent"
115 | }' >> $request_data
116 | #ds-snippet-end:eSign36Step2
117 |
118 | #ds-snippet-start:eSign36Step3
119 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
120 | --header "Content-Type: application/json" \
121 | --data-binary @${request_data} \
122 | --request POST ${base_path}/v2.1/accounts/${account_id}/envelopes \
123 | --output $response
124 | #ds-snippet-end:eSign36Step3
125 |
126 | echo ""
127 | echo "Response:"
128 | cat $response
129 | echo ""
130 |
131 | # pull out the envelopeId
132 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
133 | # Save the envelope id for use by other scripts
134 | echo "EnvelopeId: ${envelope_id}"
135 | echo ${envelope_id} > config/ENVELOPE_ID
136 |
137 | # cleanup
138 | rm "$request_data"
139 | rm "$response"
140 | rm "$doc1_base64"
141 |
142 | echo ""
143 | echo ""
144 | echo "Done."
145 | echo ""
146 |
--------------------------------------------------------------------------------
/examples/eSignature/eg043SharedAccess.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Shared access
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | ds_access_token_path="config/ds_access_token.txt"
10 | api_account_id_path="config/API_ACCOUNT_ID"
11 |
12 | if [ ! -f $ds_access_token_path ]; then
13 | ds_access_token_path="../config/ds_access_token.txt"
14 | api_account_id_path="../config/API_ACCOUNT_ID"
15 | fi
16 |
17 | # Step 1: Obtain your OAuth token
18 | # Note: Substitute these values with your own
19 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
20 |
21 | # Set up variables for full code example
22 | # Note: Substitute these values with your own
23 | ACCOUNT_ID=$(cat ${api_account_id_path})
24 |
25 |
26 | base_path="https://demo.docusign.net/restapi"
27 |
28 | # Construct your API headers
29 | #ds-snippet-start:eSign43Step2
30 | declare -a Headers=('--header' "Authorization: Bearer ${ACCESS_TOKEN}"
31 | '--header' "Accept: application/json"
32 | '--header' "Content-Type: application/json")
33 | #ds-snippet-end:eSign43Step2
34 |
35 | # temp files:
36 | request_data=$(mktemp /tmp/request-bs.XXXXXX)
37 | response=$(mktemp /tmp/response-bs.XXXXXX)
38 |
39 | Status=$(curl --request GET https://account-d.docusign.com/oauth/userinfo \
40 | "${Headers[@]}" \
41 | --data-binary @${request_data} \
42 | --output ${response})
43 |
44 | IMPERSONATION_USER_GUID=`cat $response | grep sub | sed 's/.*\"sub\":\"//' | sed 's/\",.*//'`
45 | echo ""
46 | cat $IMPERSONATION_USER_GUID
47 |
48 | rm "$request_data"
49 | rm "$response"
50 |
51 | request_data=$(mktemp /tmp/request-bs.XXXXXX)
52 | response=$(mktemp /tmp/response-bs.XXXXXX)
53 | echo "Please enter the name of the new agent: "
54 | read AGENT_NAME
55 | echo "Please enter the email address of the new agent: "
56 | read AGENT_EMAIL
57 | echo "Please input an activation code for the new agent. Save this code. You'll need it when activating the new agent."
58 | read ACTIVATION
59 |
60 | # Create a new agent in the account
61 | #ds-snippet-start:eSign43Step3
62 | printf \
63 | '{
64 | "newUsers": [
65 | {
66 | "activationAccessCode": "'"${ACTIVATION}"'",
67 | "userName": "'"${AGENT_NAME}"'",
68 | "email": "'"${AGENT_EMAIL}"'"
69 | }
70 | ]
71 | }' >> $request_data
72 |
73 | Status=$(curl --request POST ${base_path}/v2.1/accounts/${ACCOUNT_ID}/users \
74 | "${Headers[@]}" \
75 | --data-binary @${request_data} \
76 | --output ${response})
77 |
78 | echo ""
79 | echo "Response: "
80 | cat $response
81 | echo ""
82 |
83 | AGENT_USER_ID=`cat $response | grep userId | sed 's/.*\"userId\":\"//' | sed 's/\",.*//'`
84 | #ds-snippet-end:eSign43Step3
85 |
86 | echo ""
87 | echo "Agent has been created. Please go to the agent's email to activate the agent, and press 1 to continue the example: "
88 | read choice
89 |
90 | if [ "$choice" != "1" ]; then
91 | echo "Closing the example... "
92 | exit 0
93 |
94 | else
95 | rm "$request_data"
96 | rm "$response"
97 |
98 | # Sharing the envelope with the agent
99 |
100 | request_data=$(mktemp /tmp/request-bs.XXXXXX)
101 | response=$(mktemp /tmp/response-bs.XXXXXX)
102 |
103 | # Construct the request body
104 | #ds-snippet-start:eSign43Step4
105 | printf \
106 | '{
107 | "agentUser":
108 | {
109 | "userId": "'"${AGENT_USER_ID}"'",
110 | "accountId": "'"${ACCOUNT_ID}"'"
111 | },
112 | "permission": "manage"
113 | }' >> $request_data
114 |
115 | Status=$(curl --request POST ${base_path}/v2.1/accounts/${ACCOUNT_ID}/users/${IMPERSONATION_USER_GUID}/authorization \
116 | "${Headers[@]}" \
117 | --data-binary @${request_data} \
118 | --output ${response})
119 | #ds-snippet-end:eSign43Step4
120 |
121 | echo ""
122 | cat $response
123 | echo ""
124 | rm "$request_data"
125 | rm "$response"
126 |
127 | # Principal is told to log out and log in as the new agent
128 | echo ""
129 | echo "Please go to the principal's developer account at admindemo.docusign.com and log out, then come back to this terminal. Press 1 to continue: "
130 | read choice
131 |
132 | if [ "$choice" != "1" ]; then
133 | echo "Closing the example... "
134 | exit 0
135 |
136 | else
137 | source ./examples/eSignature/lib/utils.sh
138 | SharedAccessLogin
139 |
140 | # Make the API call to check the envelope
141 |
142 | #ds-snippet-start:eSign43Step5
143 | response=$(mktemp /tmp/response-bs.XXXXXX)
144 |
145 | if date -v -10d &> /dev/null ; then
146 | # Mac
147 | from_date=`date -v -10d '+%Y-%m-%dT%H:%M:%S%z'`
148 | else
149 | # Not a Mac
150 | from_date=`date --date='-10 days' '+%Y-%m-%dT%H:%M:%S%z'`
151 |
152 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
153 | --header "X-DocuSign-Act-On-Behalf: ${IMPERSONATION_USER_GUID}" \
154 | --header "Content-Type: application/json" \
155 | --get \
156 | --output $response \
157 | --data-urlencode "from_date=${from_date}" \
158 | --request GET ${base_path}/v2.1/accounts/${ACCOUNT_ID}/envelopes/
159 | #ds-snippet-end:eSign43Step5
160 |
161 | echo ""
162 |
163 | if [[ -z "$response" ]]; then
164 | echo "Response body is empty because there are no envelopes in the account. Please run example 2 and re-run this example."
165 | else
166 | echo ""
167 | cat $response
168 |
169 | # cleanup
170 | rm "$response"
171 |
172 | echo ""
173 | echo "Done."
174 |
175 | fi
176 | fi
177 | fi
178 | fi
--------------------------------------------------------------------------------
/examples/eSignature/eg044FocusedView.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Focused view
3 | #
4 | # Check that we're in a bash shell
5 | if [[ $SHELL != *"bash"* ]]; then
6 | echo "PROBLEM: Run these scripts from within the bash shell."
7 | fi
8 |
9 | ds_access_token_path="config/ds_access_token.txt"
10 | api_account_id_path="config/API_ACCOUNT_ID"
11 | document_path="demo_documents/World_Wide_Corp_lorem.pdf"
12 |
13 | # Obtain your OAuth token
14 | # Note: Substitute these values with your own
15 | ACCESS_TOKEN=$(cat ${ds_access_token_path})
16 |
17 | # Set up variables for full code example
18 | # Note: Substitute these values with your own
19 | ACCOUNT_ID=$(cat ${api_account_id_path})
20 |
21 |
22 | # Create the envelope.
23 | # The signer recipient includes a clientUserId setting
24 | #
25 | # document 1 (pdf) has tag /sn1/
26 | # The envelope will be sent to the signer.
27 |
28 | base_path="https://demo.docusign.net/restapi"
29 |
30 | # temp files:
31 | request_data=$(mktemp /tmp/request-eg-001.XXXXXX)
32 | response=$(mktemp /tmp/response-eg-001.XXXXXX)
33 | doc1_base64=$(mktemp /tmp/eg-001-doc1.XXXXXX)
34 |
35 | # Fetch doc and encode
36 | cat $document_path | base64 > $doc1_base64
37 |
38 | echo ""
39 | echo "Sending the envelope request to DocuSign..."
40 |
41 | # Concatenate the different parts of the request
42 | #ds-snippet-start:eSign44Step2
43 | printf \
44 | '{
45 | "emailSubject": "Please sign this document set",
46 | "documents": [
47 | {
48 | "documentBase64": "' > $request_data
49 | cat $doc1_base64 >> $request_data
50 | printf '",
51 | "name": "Lorem Ipsum",
52 | "fileExtension": "pdf",
53 | "documentId": "1"
54 | }
55 | ],
56 | "recipients": {
57 | "signers": [
58 | {
59 | "email": "'"${SIGNER_EMAIL}"'",
60 | "name": "'"${SIGNER_NAME}"'",
61 | "recipientId": "1",
62 | "routingOrder": "1",
63 | "clientUserId": "1000",
64 | "tabs": {
65 | "signHereTabs": [
66 | {
67 | "anchorString": "/sn1/",
68 | "anchorUnits": "pixels",
69 | "anchorXOffset": "20",
70 | "anchorYOffset": "10"
71 | }
72 | ]
73 | }
74 | }
75 | ]
76 | },
77 | "status": "sent"
78 | }' >> $request_data
79 | #ds-snippet-end:eSign44Step2
80 |
81 | # Call DocuSign to create the envelope
82 |
83 | #ds-snippet-start:eSign44Step3
84 | curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
85 | --header "Content-Type: application/json" \
86 | --data-binary @${request_data} \
87 | --request POST ${base_path}/v2.1/accounts/${ACCOUNT_ID}/envelopes \
88 | --output ${response}
89 | #ds-snippet-end:eSign44Step3
90 |
91 | echo ""
92 | echo "Response:" `cat $response`
93 | echo ""
94 |
95 | # Pull out the envelopeId
96 | envelope_id=`cat $response | grep envelopeId | sed 's/.*\"envelopeId\":\"//' | sed 's/\",.*//'`
97 | echo "EnvelopeId: ${envelope_id}"
98 |
99 | # Create a recipient view (an embedded signing view)
100 | # that the signer will directly open in their browser to sign.
101 | #
102 | # The returnUrl is normally your own web app. DocuSign will redirect
103 | # the signer to returnUrl when the DocuSign signing completes.
104 | # For this example, we'll use http://httpbin.org/get to show the
105 | # query parameters passed back from DocuSign
106 |
107 | # temp files:
108 | request_data=$(mktemp /tmp/request-eg-001.XXXXXX)
109 | response=$(mktemp /tmp/response-eg-001.XXXXXX)
110 |
111 | #ds-snippet-start:eSign44Step4
112 | printf \
113 | '{
114 | "returnUrl": "http://httpbin.org/get",
115 | "authenticationMethod": "none",
116 | "email": "'"${SIGNER_EMAIL}"'",
117 | "userName": "'"${SIGNER_NAME}"'",
118 | "clientUserId": 1000,
119 | "frameAncestors": ["http://localhost:8080", "https://apps-d.docusign.com"],
120 | "messageOrigins": ["https://apps-d.docusign.com"],
121 | }' >> $request_data
122 | #ds-snippet-end:eSign44Step4
123 |
124 | # Create the recipient view and call the API to initiate the signing
125 |
126 | echo ""
127 | echo "Requesting the url for the embedded signing..."
128 | echo ""
129 |
130 | #ds-snippet-start:eSign44Step5
131 | Status=$(curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
132 | --header "Content-Type: application/json" \
133 | --data-binary @${request_data} \
134 | --request POST ${base_path}/v2.1/accounts/${ACCOUNT_ID}/envelopes/${envelope_id}/views/recipient \
135 | --output ${response})
136 | #ds-snippet-end:eSign44Step5
137 |
138 | if [[ "$Status" -gt "201" ]] ; then
139 | echo ""
140 | echo "Signing request failed."
141 | echo ""
142 | cat $response
143 | exit 0
144 | fi
145 |
146 | signing_url=`cat $response | grep url | sed 's/.*\"url\":\"//' | sed 's/\".*//'`
147 | # ***DS.snippet.0.end
148 |
149 | host_url="http://localhost:8080"
150 | if which xdg-open &> /dev/null ; then
151 | xdg-open $host_url
152 | elif which open &> /dev/null ; then
153 | open $host_url
154 | elif which start &> /dev/null ; then
155 | start $host_url
156 | fi
157 | php ./examples/eSignature/lib/startServerForFocusedView.php "$INTEGRATION_KEY_AUTH_CODE" "$signing_url"
158 |
159 | # cleanup
160 | rm "$request_data"
161 | rm "$response"
162 | rm "$doc1_base64"
163 |
164 | echo ""
165 | echo "Done."
--------------------------------------------------------------------------------
/examples/eSignature/lib/startServerForFocusedView.php:
--------------------------------------------------------------------------------
1 |
19 |
20 | The document has been embedded with focused view.
21 |
22 |
23 |
24 |
25 |
26 |
27 | Signing
28 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Continue
48 |
49 |
50 |
91 |
92 | ";
95 |
96 | ini_set('default_socket_timeout', 60 * 5);
97 | $server = stream_socket_server($socket, $errno, $errstr);
98 | if (!$server) {
99 | Log::err('Error starting HTTP server');
100 | return false;
101 | }
102 | do {
103 | $sock = stream_socket_accept($server);
104 | if (!$sock) {
105 | Log::err('Error accepting socket connection');
106 | exit(1);
107 | }
108 | $contentLength = 0;
109 | $headers = [];
110 | $body = null;
111 | while (false !== ($line = trim(fgets($sock)))) {
112 | if ($line === '') break;
113 | $regex = '#^Content-Length:\s*([[:digit:]]+)\s*$#i';
114 | if (preg_match($regex, $line, $matches)) {
115 | $contentLength = (int)$matches[1];
116 | }
117 | $headers[] = $line;
118 | }
119 | if ($contentLength > 0) {
120 | $body = fread($sock, $contentLength);
121 | }
122 | list($method, $url, $httpver) = explode(' ', $headers[0]);
123 | if ($method == 'GET') {
124 | fwrite($sock, $responseOk);
125 | fclose($sock);
126 | return;
127 | }
128 | } while (true);
129 |
130 | ?>
131 |
--------------------------------------------------------------------------------