Log in to Adobe Sign as an admin
API access is reserved exclusively for enterprise and developer tier accounts.
REST API 6 useful links:
Support for the legacy SOAP APIs has ended as of May 2021.
All customers using the SOAP API should migrate to the REST API as soon as possible.
You cannot author the document by viewing the page on Web UI, or drag-and-drop, or assign signatory roles using transientDocumentId through API.
The transientDocuments call returns the transientDocumentID, which is valid for 7 days. You can use it only for the further API calls. It is stored on the API server and assigned this ID. Upload a file and then refer its ID in the further API calls.
You cannot directly upload a document in Agreement using the REST API.
As per the REST requirement, first create a transient document first and then use this ID in Agreement, Widget, or Library methods as the file source.
The transient document is a raw source file such as PDF, doc, docx uploaded to the Adobe servers. So, it is a convenient way to transmit your base document to the API servers and a transient document on the web.
Yes, you can post agreements using workflows in v6 using API call POST /agreements. Pass the workflowId parameter in the API call.
You can get the workflowId of a workflow using GET /workflows call.
Log in to Adobe Sign as an admin
Navigate to Account > Adobe Sign API > API Request Log
Log in to Adobe Sign Account as an admin
Navigate to: Account > Adobe Sign API > API Information
Click REST API Samples link.
To download the JavaScript SDK, see https://github.com/adobe-sign/AdobeSignJsSdk.
Starting from v6, the option "sendTroughWeb" is no longer available. The state replaces it. It is the state in which the agreement lands. The state field can only be provided in POST calls. It never gets returned in GET /agreements/{ID} and is ignored if provided in PUT /agreements/{ID} call. The eventual status of the agreement can be obtained from GET /agreements/ID.
state(string) = ['AUTHORING' or 'DRAFT' or 'IN_PROCESS'].
AUTHORING allows a user to author the documents of an agreement before sending them out. The authoring operation here refers to creating, editing, or placing form fields along with their configurations (assignee, conditions, data type, and so on.) in the agreement documents. After posting the document in Authoring state, the document is visible in Adobe Sign Manage tab Draft section.
DRAFT is temporary or a primitive stage of the final intended resource which can be updated in steps to create the final resource and is not visible in Adobe Sign Manage tab Draft section. Using Draft state, Participant set info is not required and it can be later assigned while making PUT /agreements/agreementId to complete this draft. This step can be iterated number of times until you have all the required data to create the agreement.
IN_PROCESS changes the agreement status to Out for Signature and is visible in Adobe Sign Manage tab Out for Signature section.
The sendThroughWeb allows you to send the agreement interactively. The various parameters in the “options” field in v5 POST /agreements request allow the user to configure this interactive view(Send page). All these page configuration parameters such as fileUploadOptions are moved to POST agreements/ID/views api.
So in effect, you can achieve sendThroughWeb by creating an agreement in AUTHORING state through POST /agreements API. Then, to ask for the url of the next page in desired configuration, call the POST agreements/ID/views API.
Do the following steps:
1. Go to REST API V6 documentation and select POST/agreements method.
2. Use the following request code:
{ "fileInfos": [ { "transientDocumentId": "***************************" } ], "name": "test", "participantSetsInfo": [ { "memberInfos": [ { "email": "abc@gmail.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "AUTHORING" }
3. Now, use the method post /agreements/{agreementId}/views with below request code:
{ "name": "AUTHORING" } |
The response code provides the URL for authoring fields.
One can define the callback URL in below ways:
SOAP UI (SmartBear) gets SSL connection error similar to the following one, which you get when you make API call. This error generally occurs if you are using outdated SSL or TLS protocol lower than TLS1.2
ERROR: Exception in request: javax.net.ssl.SSLException: Received fatal alert: protocol_version
ERROR: An error occurred [Received fatal alert: protocol_version], see error log for details
Add (-Dsoapui.https.protocols=SSLv3,TLSv1.2) in the VMOPTIONS file under the Bin folder.
Go to C:\Program Files\SmartBear\SoapUI-5.2.1\bin (It depends on where you have installed the SOAP UI. It can be under C:\Program Files (x86))
In the VMOPTIONS file, enable full read/write file permission.
Right click VMOPTIONS file>Properties>Security tab>Select User>Click Edit. (The User Access Control icon appears on the Edit button)>Select all the check boxes and click OK.
Repeat the same for Administrators, Systems, and all application packages.
Open the file using Notepad.
Add this protocol at the bottom “-Dsoapui.https.protocols=SSLv3,TLSv1.2” and save the changes.
Close SOAP UI and relaunch. It works with no SSL error when you make API call. (Perform test ping call to check).
Following are the steps to create Client ID and Client Secret in the adobe sign application:
Log in to Adobe Sign account.
Navigate to Account > Adobe Sign API > API Applications.
To create an application, click + icon.
Enter Name and Display Name.
Under Domain, select CUSTOMER, and click Save.
Highlight the application by single click.
Click Configure OAuth for Application.
Enter the Redirect URI.
To enable the required scopes, select the respective check boxes, and click Save.
As of June 2020, Adobe Sign no longer supports Integration Keys. Developers should instead use the OAuth process.
Log in to Adobe Sign as an account admin
Navigate to: Account > Adobe Sign API > API Information
Click the Integation Key link
If you do not see the Integration Key link, contact your Success manager to have them enable your account.
Once saved, the key can be found in: Account > Personal Preferences > Access Tokens
The name of the key and all the enabled scopes are listed.
Click the key description once to expose the action links:
Log in to Adobe Sign account.
Navigate to Account > Adobe Sign API > API Applications.
Click + icon to create an application.
Click Configure OAuth for Application.
Generate Authorization Code using the following link. The Client ID, Redirect URI & scopes must be the same as in the following URL as selected in the application (Avoid space in the followingURL and the Shard like 'NA1' is as per the Adobe Sign account belongs to):
https://secure.na1.echosign.com/public/oauth?redirect_uri=https://www.google.co.in&response_type=code&client_id=CBJCHBCAABAAo9FZgq31_5BVG_kcIXEe6gNtn-R-gdNe&scope=user_login:self+agreement_send:account
If the call is successful, pick Authorization code from the Address bar.
Download and install Postman from the https://www.getpostman.com/apps link.
Once it is downloaded and installed, click NEW to create a POST.
Enter the https://secure.na1.echosign.com/oauth/token link as per your Adobe Sign account belongs to.
Under Headers, enter Content-Type as application/x-www-form-urlencoded.
Make sure x-www-form-urlencoded is selected under Body and enter the below parameters with their corresponding values from the application created in Adobe Sign account and click SEND.
If all the information is correct, it returns the access token and the refresh token in the response:
While running OAuth Process, make sure to follow below points:
1. Correct Client ID and Redirect URI is specified.
2. Scopes provided in Authorization URL should match exactly with the scopes provided in Adobe Sign application.
3. Use the correct shard (na1, na2, au1, eu1, jp1) as per the account is being configured.
4. Remove any spaces provided in the authorization URL (if any).
5. Check the Syntax of Authorization URL:
https://secure.na1.echosign.com/public/oauth?redirect_uri=https://secure.na1.echosign.com/public/oauthDemo&
response_type=code&client_id=9MEJXY4Y4R7L2T&scope=agreement_send
Access tokens are valid only for 3600 seconds (one hour) after which they are expired.
The API request holder can use Refresh tokens in order to generate new Access tokens as needed.
Webhooks are supported in the REST API v6 and later.
If a Webhook receiver fails to respond within 72 hours, the webhook gets disabled and no notification is sent.
If the target URL for the webhook is down for any reason, Adobe Sign queue up the JSON and retry the push in a progressive cycle over 72 hours.
The undelivered events get persisted in a retry queue and a best effort is made over the next 72 hours to deliver the notifications in the order they occurred.
The strategy for retrying delivery of notifications is a doubling of time between attempts, starting with a 1-minute interval increasing to every 12 hours, resulting in 15 retries in the space of 72 hours.
To create webhook directly from Adobe Sign UI, first create webhook URL through Azure AD function apps by using below steps:
Log in through Microsoft account https://portal.azure.com/.
Register for Function Apps under the AzureAD account.
Go to AzureAD and go to Function Apps > Click + icon for Functions.
Select Webhook+API with Javascript as language and click Create Function.
Replace the Index.js file with the following code snippet:
module.exports = function (context, req) { var clientId = req.headers['x-adobesign-clientid']; // Validate that the incoming ClientID is genuine if (clientId === '************************************') { context.res = { // status: 200, /* Defaults to 200 */ // any 2XX response is acceptable body: { 'xAdobeSignClientId' : clientId, }, headers : { 'Content-Type' : 'application/json' } }; } else { context.res = { status: 400, body: "Opps!! Illegitimate Call identified" }; } context.done(); };
Click the Test button on the right corner and provide the following header:
X-AdobeSign-ClientId as ***********************
Click Save and Run.
Once you receive 200 OK response with the following header, click Get function URL
Copy the URL and go to Adobe Sign UI > Webhooks > Click + icon to create.
Enter the following information:
Once the webhook is fully defined, click Save, and the new webhook starts reacting to trigger events immediately.
The agreement asset refers to an asset through which you can create an agreement, for example, library document, widget, and agreement, itself.
To search for Agreement Asset Events, first, make a request to the API that creates agreementAssetEvents with relevant search parameters.
The Response is the first page of results along with a search Id param and next page cursor. You can use it to fetch further page results if they are available using the API, which retrieves agreementAssetEvents based on search Id.
Open the REST API Documentation for version 5.
Go to post/search/agreementAssetEvents and generate the access token with relevant scopes.
In the request code, define the start and end date as per the requirement:
{ "endDate": "2018-05-22T22:33:33", "startDate": "2017-12-22T22:33:33" }
Click Try it out. It fetches the agreement asset IDs, which can be also used as agreement IDs.
Adobe Sign accounts that use the Admin Console (Adobe One) to manage their user entitlement cannot use the Adobe Sign API to create users or manage existing users.
The Adobe One Admin Console uses a different API than the Adobe Sign API. Please see these articles for more information:
Go to https://secure.na1.echosign.com/public/docs/restapi/v5.
Under Resources and Operations, click groups.
Click GET /groups.
Click the oAuth Access-token button.
Generate the Access token.
Click the Try it out button.
You receive a response as following with the group name and Group ID:
{ "groupInfoList": [ { "groupId": "3AAABLblqZhB4o9EnlvmGB_m8CrG5O6XClTBO7vmojOOexu5r3G95LtEV2Sp7BuhNvQYSvWB7PmmwVPXnhPIiYSuHV98Cerkp", "groupName": "Default Group" }, { "groupId": "3AAABLblqZhC3dPT6za5h7r1-BOEWivCe_OcAVONhcsKa57SL9_iCwGr5v_JED1No5jE20Pcjv0mYH2J-LoY1AcmqS69vRkO7", "groupName": "test" }, ] }
Click DELETE /groups/{groupId}.
To generate Access Token, click the oAuth Access-token button.
Add groupId received in the response of the previous call that you want to delete in groupId Box.
Click Try it Out.
You receive a response as the following once Group is deleted: No content
You cannot delete a group, which has a user assigned. In the essence, you can delete only the empty Group. You receive a response as the following if there is a user in the group.
"code": "GROUP_NOT_EMPTY", "message": "The group cannot be deleted because it is not empty." } |
Click on transientDocuments and expand the POST /transientDocuments method
Click the OAuth Access-token button
If challenged, click Allow Access
You are returned to the API methods page. The Authorization value is now populated.
The response is generated.
The transientDocumentID can be found in the Response Body:
Click on agreements and expand the POST /agreements method
You are returned to the API methods page. The Authorization value is now populated.
{ "fileInfos": [ {"transientDocumentId":"PASTE YOUR TRANSIENTDOCUMENTID HERE"} ], "name": "test doc", "participantSetsInfo": [ { "memberInfos": [ { "email": "noreply@echosign.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "DRAFT" }
The response is generated.
The agreementID can be found in the Response Body:
Following are the steps to add files in FileInfo Parameter:
Use transient ID:
Go to POST/transientDocuments and upload the document to be used from your local system.
Use the transient ID generated under the File Info section in POST/Agreements:
"fileInfos": [ { "transientDocumentId": "" } ],
Use Library document ID:
Go to Dashboard. Click Add document to Library and save the template.
Under REST API Documentation, click GET /libraryDocuments and retrieve the Library ID for template being created.
Under POST/Agreements, provide the library document ID:
"libraryDocumentId": "", "libraryDocumentName": "",
Use publicly available URL:
Provide the publicly accessible URL to be used under FileInfo parameter:
{ "documentURL": { "mimeType": "", "name": "", "url": "" },
Select the Agreements> POST/agreements option.
Select the Oauth Access-Token option, and provide necessary scopes.
Once the access token is added, you can use the following Request Code:
{ "documentCreationInfo": { "recipientSetInfos": [ { "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{"email": "testemail@email.com"}] }, { "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{"email": "testemail@email.com"}] } ], "signatureFlow": "SEQUENTIAL", "name": "husband wife", "signatureType": "ESIGN", "fileInfos": [ { "transientDocumentId": "(SAMPLE VALUE)3AAABLblqZhAJ9H6e23kZAfBUbItPvIhHTEyA6eZhziEp4KSntYcULpo43OEXwuWiWa-IM1r1EExYW0044CjCkliP4WFL5yKBUDq5DYSmSxVlFypcD0at8kK-BX-Mu3T9c_3GUqgDg0ArX0MmzWT72GLR_0M4Jq--mtuqGzq-VK1s-WGR6GcbedVY7XWAf3b3h-SpE08Hc-iF3zO7jQzi9newXSl-iW2JJsb_55tggkyxkXAkj74C1WD6KkJzgblK0JU-seh6QPDd0Fv6_mfQe2EPQA31nXj50aXwD_xlUBq7mg5FeaBnZ5bzgoqIWGHkbyeD2taaFdw*"} ] } }
In POST /agreements call, for signatureflow parameter you can Pass SENDER_SIGNS_FIRST or SENDER_SIGNS_LAST value to add the Sender as First or Last Signer Respectively.
Here is an example of the call in JSON format:
{
"documentCreationInfo": {
"fileInfos": [
{ "transientDocumentId":"3AAABLblqZ-yourIDGoesHere"
}
],
"name": "Test",
"recipientSetInfos": [
{
"recipientSetMemberInfos": [
{
"email": "test@email.com"
}
],
"recipientSetRole": "SIGNER"
}
],
"signatureType": "ESIGN",
"signatureFlow": "SENDER_SIGNS_FIRST"
}
}
The Option for Send on behalf is available only in REST API V6 with Advanced sharing on.
If Send permission is not provided in sharing or if Advance Sharing is not enabled, you get a response such as following:
{"code":"PERMISSION_DENIED","message":"User provided in x-on-behalf-of-user header does not have required permission to perform this operation."}
|
For Send on behalf function, enable Advanced Account Sharing for the account so that users can give sending permissions to other users while sharing their account. For Advanced sharing, see Enabling Advanced Account Sharing.
Once User sharing is enabled, go through the following steps to Send on behalf:
Under transientDocuments, click POST /transientDocuments.
To generate token for Authorization, click the OAUTH ACCESS-TOKEN button.
In x-on-behalf-of-user, provide the email of user you want to send on behalf of in the following format: email:test@email.com
To select a File, click Choose File, and click Try it Out.
You receive a response such as following with transientDocumentId:
{"transientDocumentId":"3AAABLblqZhB9Mjo0mrIu_pSgrf5VsMaKM68_Vmn80cimaqiUAD2OxrPp2e5H8GvjfiOxj4d5B8bCPkUfvaozW3KLisp_wseGVOL8A7oNZni1DWyFi4uNoxLQu4nUO44Wh63GQv9_HEJMePust0Pk94vJ_rbS96R7ic-vl7jbOkN0b4EB5-JMqlC-Fl_Vpyz8I1EQUrM5I4nB9ztMov4ad00yiOtDw0tB-Y2t5JdzM07P-mpJmwYEl8Fq2IeDuWjcR2tV7qY7TNGX2CNyh9jt0aMyduHeYa0GABr69z8Hm76eKdtaM_1E1ggWj205fSrNcwJsnpSO278*"}
Under agreements, click POST /agreements.
To generate token for Authorization, Click the OAUTH ACCESS-TOKEN button.
In x-on-behalf-of-user, provide the email of the user as done while creating the Transient document.
In AgreementInfo, add the following code, and click Try it out.
{ "fileInfos": [ { "transientDocumentId":"3AAABLblqZhB9Mjo0mrIu_pSgrf5VsMaKM68_Vmn80cimaqiUAD2OxrPp2e5H8GvjfiOxj4d5B8bCPkUfvaozW3KLisp_wseGVOL8A7oNZni1DWyFi4uNoxLQu4nUO44Wh63GQv9_HEJMePust0Pk94vJ_rbS96R7ic-vl7jbOkN0b4EB5-JMqlC-Fl_Vpyz8I1EQUrM5I4nB9ztMov4ad00yiOtDw0tB-Y2t5JdzM07P-mpJmwYEl8Fq2IeDuWjcR2tV7qY7TNGX2CNyh9jt0aMyduHeYa0GABr69z8Hm76eKdtaM_1E1ggWj205fSrNcwJsnpSO278*" } ], "name": "Test", "participantSetsInfo": [ { "memberInfos": [ { "email": "signer@email.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "IN_PROCESS" }
You receive a response such as following with agreementId:
{ "id": "CBJCHBCAABAAUlen3l_fzlj1Kbn_wGZAhYcIgN0J7Qtq" }
Log in to Adobe Sign.
Navigate to Account>Adobe Sign API>API Information and click REST API Method Documentation.
POST /transientDocuments and upload a file and create a transient Document ID.
Copy the transient Document ID and use it in the POST /agreements method. Mention the following JSON request in the box:
{ "documentCreationInfo": { "mergeFieldInfo": null, "recipientSetInfos": [{ "signingOrder": null, "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "securityOptions": null, "email": "test1@gmail.com" }], "privateMessage": "Hello 1", "securityOptions": null }, { "signingOrder": null, "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "securityOptions": null, "email": "test2@gmail.com" }], "privateMessage": "Hello 2", "securityOptions": null } ], "signatureType": "ESIGN", "callbackInfo": null, "message": "Please review and sign this document.", "locale": "en_US", "vaultingInfo": null, "securityOptions": null, "reminderFrequency": null, "ccs": null, "postSignOptions": null, "signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "daysUntilSigningDeadline": null, "formFieldLayerTemplates": [], "name": "Adobe Sign Agreement", "formFields": null, "fileInfos": [{ "libraryDocumentName": null, "transientDocumentId": "XXXXXXXXXXXX", "documentURL": null, "libraryDocumentId": null }] } }
To execute the JSON Request, click the Try It Out button.
The correct JSON returns the response with the agreement ID.
Following are the parameters that you can pass in the code to set open password:
{ "documentCreationInfo": [{ "signatureType": "ESIGN", "recipientSetInfos": [{ "recipientSetMemberInfos": [{ "email": "abc@xyz.com" }],
"recipientSetRole": "SIGNER" }], "signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "fileInfos": [ { "libraryDocumentId": "3AAABLblqZhBsm_vH7TVzU3hRdbtWuvzfTKDvBzaKZTiehjO2eGTk5Rlu02K-0BYn8HBJVFTWOmT_BQlrofPBlrCdjiJ_JI-V" } ], "name": "Open password to view document", "securityOptions": { "openPassword": "1234", "protectOpen": true } }] }
|
To create agreement using API with state as "AUTHORING," do the following steps:
Go to Post /agreements and create Access token with the required scopes.
Use the request code as follows:
{ "fileInfos": [ { "transientDocumentId": "*********************" } ], "name": "A1", "participantSetsInfo": [ { "memberInfos": [ { "email": "abc@xyz.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "AUTHORING" }
|
The v6 has a set of authoring API’s to author an agreement. In v5, the formFields are directly consumed in POST /agreements api. However, in v6 user can create an agreement in AUTHORING state (state = AUTHORING) through v6 POST /agreements and use PUT /agreements/ID/formFields at any later point of time to add form fields to the documents of this agreement.
Following are the steps:
Go to REST API V6 documentation and select POST/agreements method.
Use the following request code:
{ "fileInfos": [ { "transientDocumentId": "***************************" } ], "name": "test", "participantSetsInfo": [ { "memberInfos": [ { "email": "abc@gmail.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "AUTHORING" }
Use the method put /agreements/{agreementId}/formFields with the following request as sample:
{ "fields": [ { "locations": [ { "height": 36, "left": 75, "pageNumber": "1", "top": 200, "width": 150 } ], "contentType": "SIGNATURE_BLOCK", "name": "sigBlock1", "inputType": "SIGNATURE", "recipientIndex":1 } ]}
It sends the agreement to mentioned recipient once the request is completed.
Log in to Adobe Sign.
Navigate to Account>Adobe Sign API>API Information and click REST API Method Documentation.
POST /transientDocuments and upload a file and create a transient Document ID.
Copy the transient Document ID and use it in the POST /agreements method. Mention the following JSON request in the box:
{ "documentCreationInfo": { "recipientSetInfos": [{ "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "email": "test1@gmail.com" }], "privateMessage": "Hello 1" }, { "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "email": "test2@gmail.com" }], "privateMessage": "Hello 2" } ], "signatureType": "ESIGN", "message": "Please review and sign this document.", "signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "name": "Demo1", "fileInfos": [{ "transientDocumentId": "XXXXXXXXXX" }], "formFields": [{ "hidden": "1", "defaultValue": "test1@gmail.com", "name": "Signer Email (Applicant-1)", "inputType": "TEXT_FIELD", "readOnly": true, "locations": { "pageNumber": 1, "top": 100, "left": 100, "width": 100, "height": 30 }, "contentType": "SIGNER_EMAIL" }, { "name": "Signature (Applicant-2)", "inputType": "SIGNATURE", "locations": { "pageNumber": 1, "top": 520, "left": 162, "width": 280, "height": 30 }, "contentType": "SIGNATURE", "required": 1, "recipientIndex": 1 }, { "name": "Signature (Applicant-3)", "inputType": "SIGNATURE", "locations": { "pageNumber": 2, "top": 312, "left": 154, "width": 280, "height": 30 }, "contentType": "SIGNATURE", "required": 1, "recipientIndex": 1 }, { "defaultValue": "017/09/2018", "displayFormatType": "DATE", "name": "Signature Date (Applicant-4)", "format": "DATE_DD_MM_YYYY", "inputType": "TEXT_FIELD", "readOnly": true, "locations": { "pageNumber": 2, "top": 260, "left": 90, "width": 80, "height": 30 }, "contentType": "DATA", "required": 1, "recipientIndex": 1 }, { "name": "Signature (Applicant-5)", "inputType": "SIGNATURE", "locations": { "pageNumber": 3, "top": 199, "left": 179, "width": 276, "height": 30 }, "contentType ": "SIGNATURE", "required": 1, "recipientIndex": 1 }, { "contentType": "SIGNATURE_DATE", "defaultValue": "06/07/2018", "displayFormatType": "DATE", "name": "Signature Date (Applicant-6)", "format": "DATE_DD_MM_YYYY", "inputType": "TEXT_FIELD", "readOnly": true, "locations": { "pageNumber": 3, "top": 188, "left": 488, "width": 76, "height": 25 }, "required": 1, "recipientIndex": 1 }, { "name": "Signature (Applicant-7)", "inputType": "SIGNATURE", "locations": { "pageNumber": 3, "top": 370, "left": 37, "width": 210, "height": 26 }, "contentType ": "SIGNATURE", "required": 1, "recipientIndex": 2 }, { "contentType ": "SIGNATURE_DATE", "defaultValue": "01/02/2018", "name": "Signature Date (Applicant-8)", "locations": { "pageNumber": 3, "top": 370, "left": 300, "width": 76, "height": 26 }, "required": 1, "recipientIndex": 2 } ] } }
To execute the JSON Request, click the Try It Out button.
The correct JSON returns the response with the agreement ID.
Log in to Adobe Sign.
Navigate to Account>Adobe Sign API>API Information and click REST API Method Documentation.
POST /transientDocuments and upload a file and create a transient Document ID.
Copy the transient Document ID and use it in the POST /agreements method. Mention the following JSON request in the box:
{ "options": { "noChrome": true, "authoringRequested": true }, "documentCreationInfo": { "recipientSetInfos": [{ "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "email": "test1@gmail.com" }], "privateMessage": "Hello 1" }, { "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "email": "test2@gmail.com" }], "privateMessage": "Hello 44" } ], "signatureType": "ESIGN", "message": "Please review and sign this document.", "locale": "en_US", "signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "formFieldLayerTemplates": [], "name": "Adobe Sign Agreement", "formFields": null, "fileInfos": [{ "libraryDocumentName": null, "transientDocumentId": "XXXXXXXXXXXX" }] } }
To execute the JSON Request, click the Try It Out button.
The correct JSON returns the response with the agreement ID.
To open the agreement in Authoring Mode, copy the URL and paste it into a browser's address bar.
Drag-and-drop the form-fields at the required location.
To send out the agreement for signature, click Send.
Use POST /agreements to create an agreement. Sends it out for signatures, and returns the agreementID in the response to the client. Below is the JSON format to send agreement using Phone authentication method.
{ "documentCreationInfo": { "mergeFieldInfo": null, "recipientSetInfos": [{ "signingOrder": null, "recipientSetRole": "SIGNER", "recipientSetMemberInfos": [{ "securityOptions": null, "email": "Signer@email.com" }],
"privateMessage": null, "securityOptions": [{ "authenticationMethod": "PHONE", "phoneInfos": [{ "phone": "1111111111", "countryCode": "+1" }] }] }],
"signatureType": "ESIGN", "callbackInfo": null, "message": "Please review and sign this document.", "locale": "en_US", "vaultingInfo": null, "securityOptions": null, "reminderFrequency": null, "ccs": null, "postSignOptions": null, "signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "daysUntilSigningDeadline": null, "formFieldLayerTemplates": [], "name": "Adobe Sign Agreement-Phone authentication testing", "formFields": null, "fileInfos": [{ "libraryDocumentName": null, "transientDocumentId": "3AAABLYourTransactionID", "documentURL": null, "libraryDocumentId": null }] },
"options": { "autoLoginUser": true, "authoringRequested": false, "noChrome": true, "sendThroughWeb": null, "sendThroughWebOptions": null, "locale": "en_US" } }
|
You can merge the data directly into the form fields by using the following methods:
"mergeFieldInfo": [ { "defaultValue": "", "fieldName": "" } ],
|
"mergeFieldInfo": [ { "defaultValue": "", "fieldName": "" } ],
|
How to send an agreement using API that has prefilled values for the specific form fields (mergefield)?
Prerequisite of this call is to first complete the "Transient Upload” step and obtain a "transientDocumentId" (using: secure.na1.echosign.com/public/docs/restapi/v5#!/transientDocuments/createTransientDocument) to use here.
Pre-requisites:
Sample request call:
Request: POST /api/rest/v5/agreements HTTP/1.1 Host: api.na1.echosign.com (or you can specify your shard name, which you can find using the getbaseURis call: https://secure.na1.echosign.com/public/docs/restapi/v5#!/base_uris/getBaseUris Access-Token: 2AAABLblqZhA_D1mluNKQP7py5vXtt-1UHl9NR25e_C3LnKTUH14IblbrXODbXGRozyr7ChBkJNM* x-user-email: sender@yourdomain.com Content-Type: application/json Cache-Control: no-cache
{ "documentCreationInfo": { "signatureType": "ESIGN", "recipientSetInfos": [ { "recipientSetMemberInfos": [ { "email": “signerEmail@domain.com" } ], "recipientSetRole": "SIGNER" } ],
"signatureFlow": "SENDER_SIGNATURE_NOT_REQUIRED", "message": "Please Sign this from us!", "fileInfos": [ { "transientDocumentId": "3AAABLblqZhD1uP3ZnkJximC0JV1S677PR5xmybSJ-SJn6OtEy2tVqFyMN4xUAbhKTSkLw2Zb6HEF4zAGsrUd2ycoB8fFHQJhrci0O6267VztmIL4nCicSqvAjO7HckATHAsovVmuYwI9_FDDgHg0ogyti62L13HQFZIQRe9iyQMvvzbmksM7ODNK_HEepEKRCeJTtis9FOlz6uRCcIMNlbX_2GU8utWT" } ], "name": "MSA Edited”, "mergeFieldInfo": [ { "fieldName": "AccountName", "defaultValue": "Sam's Garage" }, { "fieldName": "AccountNumber", "defaultValue": "8756999" }, { "fieldName": "Zip", "defaultValue": "94501" }, { "fieldName": "City", "defaultValue": "CityVille" }, { "fieldName": "State", "defaultValue": "CA" }, { "fieldName": "Street", "defaultValue": "123 Some Road" }, { "fieldName": "Title1", "defaultValue": "COO" }, { "fieldName": "Description", "defaultValue": "Some new description here" } ] }
}
The response to this call is the “agreementId” which you need to store in your system for subsequent calls(signingUrl, status, formData etc.)
Response: { "agreementId": "3AAABLblqZhCf_7xDcrOgKFwAabp1S-OFfvUdHf2wJsSMwlB95_x_WdUeab67jOkJi1IJzWuSJ0zdNNKugS1blZB4LT5vNVyJ" }
|
While running the method "post /megaSigns/{megaSignId}/views", an error is shown as "Requested view is not available for the resource in the current state."
The error is shown if the name parameter value provided is invalid in the below request code:
{
"name": " "
}
For example, if the MegaSign agreement is already "IN_PROCESS", then providing value as "AUTHORING" throws the mentioned error. Make sure the value provided is in accordance with the current state of agreement.
While running the method "put /megaSigns/{megaSignId}/state", an error is shown as "No value provided for MegaSign cancellation info."
The error is caused when the request code is missing the parameter:
"megaSignCancellationInfo": {
"comment": "",
"notifyOthers": false
}
Instead of using the "Minimal Schema" , click "Complete Model Schema" and provide the complete request code to run the API call.
To change the state of MegaSign agreement, use put /megaSigns/{megaSignId}/state and do the following steps:
To successfully register a webhook, the webhook URL responds to this verification request with a 2XX response code and moreover, it can send back the same client id value in one of the following two ways:
Adobe Sign receives the 2xx response with X-AdobeSign-ClientId. User can check whether it is configured properly in webhook or not.
The Webhook Url is not responding as per the expected behavior. For every Post notification that Adobe Sign sent, URL responds with 2XX status code and reciprocate the client ID sent in request headers(X-AdobeSign-ClientId) back in the response headers.
For complete information, see the following link:
https://www.adobe.io/apis/documentcloud/sign/docs.html#!adobedocs/adobe-sign/master/webhooks/webhook_events.md
When the URL fails to abide by this protocol, Adobe Sign considers that it did not acknowledge the request and attempt to reschedule as per the reliable policy.
If the webhook fails to respond and either the maximum retry time or the maximum retry interval is exceeded, the webhook is disabled.
Twitter™ and Facebook posts are not covered under the terms of Creative Co
To change the document already sent out for signature, use the method as PUT /agreements/{agreementId} with which you can update an existing agreement. Provide the transient ID along with the agreement ID in the following request code:
{ "documentUpdateInfo": { "fileInfos": [ { "agreementDocumentId": "", "transientDocumentId": "" } ] } }
|
Following are the instructions to update state from "AUTHORING" to "IN_PROCESS" using Put /agreements/{agreementId}/state:
Get the agreement ID retrieved using POST/Agreement method.
Use Get /agreements/{agreementId} to retrieve latest ETag.
Go to Put /agreements/{agreementId}/state and provide the following information: "state": "IN_PROCESS"
No.
There is no method in the current REST API to upload a signed copy.
The sender must upload the signed copy from the Manage page.
DELETE /agreements/ID used to allow to hide an agreement from the manage page.
Adobe has a new API PUT /agreements/ID/me/visibility to control the visibility of an agreement(in GET /agreements). In addition to the functionality provided by the DELETE /agreements/ID, the new visibility endpoint also allows a user to revert the ‘hide’ operation, that is, make the agreement visible again.
You can also follow the detailed steps as below:
The API Retention feature is not enabled by default.
To enable the DELETE/agreements operation, contact your success manager and request that API Retention be turned on for the account.
For more information on how to enable the Retention features for your account, refer to Adobe Sign - Document Retention.
Log in as an Adobe Sign admin and navigate to: https://secure.adobesign.com/public/docs/restapi/v6
The response is generated.
The agreementId can be found in the Response Body:
DELETE /agreements/{agreementId}/documents: Deletes all the documents related to an agreement. The Agreement itself remains visible on the Manage page.
You get following response if the DELETE/agreements operation is not enabled:
"code": "DYNAMIC_DOCUMENT_EXPIRATION_NOT_ENABLED",
"message": "The operation requires some account settings to be enabled. Please contact the Adobe Sign team to enable the settings."
How to download Signed document along with Audit report and supporting document through Adobe Sign REST API rather making a separate call to download Audit report using the following method.
Click GET /agreements/{agreementId}/combinedDocument.
Click the oAuth Access-token button.
Access token is generated automatically once its authorization is accepted.
Provide the agreementId.
Under attachSupportingDocuments, select true from the drop-down.
Under attachAuditReport, select true from the drop-down.
Click the Try it out! button.
It downloads the combined PDF of Signed, supporting document and Audit report.
To download bulk documents, only document export tool is available and with API you can only download documents one by one. Following is the API method for same:
https://secure.na1.adobesign.com/public/docs/restapi/v5#!/agreements/getCombinedDocument
Log in to Adobe Sign as an admin and navigate to: https://secure.na1.adobesign.com/public/docs/restapi/v6
The response is generated.
The libraryDocumentId can be found in the Response Body:
Adobe has a new API PUT/libraryDocuments/ID/me/visibility to control the visibility of an agreement(in GET /agreements). In addition to the functionality provided by the DELETE /agreements/ID, the new visibility endpoint also allows a user to revert the ‘hide’ operation, that is, make the agreement visible again.
You can follow the detailed steps as below:
Go to https://secure.echosign.com/public/docs/restapi/v5.
Click libraryDocuments.
Click the oAuth Access-token button.
Authorize Access - Token for Self, Group Or Account.
Select libraryTemplateType - Document Or Form_field_layer.
Click Try It Out.
You can receive a response as the following for all your templates. (Copy libraryDocumentId for the Library Template you want to delete).
{ "libraryDocumentList": [ { "name": "testing fields", "modifiedDate": "2017-08-04T01:06:05-07:00", "scope": "PERSONAL", "libraryDocumentId": "3AAABLblqZhAK53Dvzq88Q1Ov0TEvMAySDPpIVjF1PWgUpy0H1uYggt4iwGiRSZYlWfl9ms_AcmgZ_uZMPPN2hNT9izwaspHc", "libraryTemplateTypes": [ "DOCUMENT" ] },
Copy libraryDocumentID from the Response Body.
Go to Delete libraryDocuments.
Click the oAuth Access-token button. Authorize Access - Token for Self, Group Or Account.
Paste the libraryDocumentId in the Value field.
Click Try it Out.
The template is deleted.
You get the following Response Code: 204
Only web forms in a Draft state can be updated.
Create the widget using the post /widgets.
Get the widget Id from get/widgets.
Once created using the GET /widgets/{widgetId} method, fetch the Etag from the Response header.
Under put /widgets/{widgetId}, use the Etag from GET /widgets/{widgetId}. Under the If-Match parameter, enter widgetId and widgetInfo.
{ "fileInfos": [ { "transientDocumentId": "******" } ], "name": "Widht_Name", "status": "DRAFT", "widgetParticipantSetInfo": { "memberInfos": [ { "email": "" } ], "role": "SIGNER" } }
Make a get/agreements call with the correct x-api-user.
In the Response Body, locate the out for signature agreement you want to find the signing url for and note the agreement ID
Make a get/agreements/{agreementId}/signingUrls call, using the agreement ID you received from the get/agreements call.
Result
The output returns the email address of the signer/s and the e-sign URL.
Sign in to your account