eSign API Suite
10 endpoints ยท Core API
What is it?
The eSign API Suite provides a comprehensive set of endpoints for initiating, managing, and maintaining electronic, aadhhar based and digital signing workflows in a secure and compliant manner. This suite enables organizations to send sign requests, track signing status, revoke or reinitiate signing sessions, extend document expiry, and resend invitations. Built to support modern digital documentation needs, the eSign API ensures fast, auditable, and user-friendly electronic signing processes that are legally valid under Indian IT Act and Aadhaar-based verification norms.
Benefits
Digital Compliance: Leverages Aadhaar-based eSign for legally valid document execution.
Workflow Flexibility: Supports full lifecycle operations like reinitiation, revocation, and resending sign links.
Improved TAT: Speeds up signature collection, reducing manual delays in documentation workflows.
Easy Integration: Easily fits into existing applications like CRMs, HRMS, or document management systems.
What you can do
Initiate eSign requests with Aadhaar-based authentication.
Check the signing status of documents.
Revoke, reinitiate, or extend the validity of signing links.
Resend invitations to signers who haven't completed the process.
๐ Signature Coordinate Helper: Use our anonymous PDF upload tool to visually identify and copy X/Y signature coordinates required for eSign APIs โ ๐ Open PDF Coordinate Helper
๐ฑ SignCare Helper (Aadhaar Face eSign mobile app): Companion Android app for Aadhaar Face eSign โ your signers scan the QR shown on the SignCare web app, complete face authentication, and the document is signed on-device โ ๐ Download SignCare Helper
How is the signing link delivered?
Each entry in userInfo needs an emailId, a mobileNo, or both. (On /reinititate, every entry needs an emailId.)
- Only
emailId: the signing link is sent by email. - Only
mobileNo: the signing link is sent by SMS. - Both: the signing link is sent by email and SMS. The signer can open either one. The verification code (OTP) goes to the channel of the link they opened.
The same applies when the link is sent again (resend invitation, expiry extension, or the next signer's turn in sequential signing). Expiry reminders are sent by email only.
Signing with a USB DSC token?
When signatureType is set to Digital, signing happens via a hardware USB token plugged into the signer's machine. See Supported DSC USB Tokens for the list of vendors we currently detect, and the DSC signing guide for the end-to-end setup.
Signing inside your own application?
Open each signer's eSignLink in an iframe or a popup. See Embedded Signing for the iframe allow attributes, the completion postMessage event, and how returnUrl behaves.
Initiates a multi-party Digital Signing (eSign) workflow.
This API allows you to send a document for digital signing to one or more participants.
Q. What is ReferenceId?
referenceId (required) is your unique transaction identifier used to track this workflow end-to-end in your own system. Use letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. A referenceId that was already used is rejected.
Q. What is documentInfo?
documentInfo specifies the primary document that needs to be signed.
-
name (required): The display name of the file, for example Agreement.pdf. Maximum 50 characters.
-
content (required unless documentId is sent): The entire PDF file converted to a Base64 string. Maximum 20 MB.
-
documentId (optional): Use this if the document is already uploaded or stored in the SignCare system. Must be a valid GUID.
Q. What are supportingDocuments?
supportingDocuments is an optional array of additional files (Base64) that signers can view for reference during the signing process. Each item needs name, contentType and content. Accepted formats: PDF (up to 10 MB), PNG and JPEG (up to 1 MB). Note that these documents are not signed.
Q. What does sequentialSigning control?
sequentialSigning determines the order in which signing invitations are sent.
-
true: Signers are invited one at a time. The next person is notified only after the previous one has signed. Every userInfo entry needs a unique order, and one must be 1.
-
false: All signers receive invitations at the same time and can sign in any order.
Q. Who are the userInfo?
userInfo (required) is an array of participant objects who need to sign the document. At least one must be a Signer. Each object includes:
-
name (required): Full legal name of the signer as it should appear in the logs.
-
userReferenceId (required): Your own ID for the signer. Letters, numbers, hyphen (-) and underscore (_), 1 to 64 characters.
-
emailId: The email address where the signing invitation link will be sent. Required unless mobileNo is sent.
-
mobileNo: 10-digit mobile number, digits only. Required unless emailId is sent. If both are sent, the link goes by email and SMS.
-
userType (required): Signer or Reviewer (case-sensitive).
-
signatureType: Required for a Signer. Values: Aadhaar (OTP/Biometric), Electronic (Email OTP), Digital (Hardware USB token). Case-sensitive.
-
expiryDate: Optional. Last date to sign, in MM-DD-YYYY format, in the future.
-
order: Required when sequentialSigning is true or a Reviewer is included. Sequence position (1, 2, 3...), unique across the request.
Q. What are electronicOptions?
electronicOptions allows you to enable or disable specific features for the signer during their session:
-
canDraw: Allow the signer to draw their signature on the screen.
-
canType: Allow the signer to type their name as a stylized signature.
-
canUpload: Allow the signer to upload an image of their physical signature.
-
captureGPSLocation: Captures the signer's geographic coordinates at the time of signing for the audit trail.
-
capturePhoto: Take a live photo of the signer during the session for identity verification.
Q. What is aadhaarInfo and how is it used for verification?
aadhaarInfo is used for pre-verification of the signer against their Aadhaar record before they are allowed to sign:
-
verifyInvitee: Set to true to ensure the person signing matches the invited person's details.
-
birthYear: Matches the signer's birth year (4 digits, 1900-2099).
-
lastFourDigitOfAadhaar: Matches the last 4 digits of their Aadhaar card (4 digits).
-
gender: M (Male), F (Female) or T (Transgender).
-
verifyName: Set to true if exact name matching against Aadhaar is required.
-
smartNameVerify: Enable fuzzy matching to allow minor spelling differences in names.
Q. When should I use aadhaarOptions?
aadhaarOptions configures which Aadhaar authentication methods are allowed for the signer:
-
otp: Enable Aadhaar OTP-based signing (Default: true).
-
biometricThumbScan: Enable fingerprint/biometric authentication.
-
irisScan: Enable eye/iris scan authentication.
-
face: Enable face-based authentication.
Q. How do I control where each person signs on the document?
Positioning is handled per signer using:
-
signAppearance: Position signature box in a corner. Values: 1 (Top_Left), 2 (Top_Right), 3 (Bottom_Left), 4 (Bottom_Right), 5 (PageCoordinates). Defaults to 3 (Bottom_Left). Value 5 requires pageCoordinates.
-
pageToBeSigned: Which pages to sign. Values: 1 (FIRST), 2 (LAST), 3 (EVEN), 4 (ODD), 5 (ALL), 6 (SPECIFY). Defaults to 5 (ALL).
-
pageNumber: Required if pageToBeSigned is 6 (SPECIFY). Use hyphen-separated numbers (e.g., "1-2-5").
-
pageCoordinates: Manual override for exact (X, Y) coordinates on specific pages. Use pageNumber: 0 in an entry to apply the same coordinates to every page selected by pageToBeSigned (all pages when pageToBeSigned is 5/ALL); entries with a real page number override the 0 entry for that page.
Q. What is signatorySealInfo?
signatorySealInfo adds a company seal/text around the signature box.
-
name: Name of the organization (e.g., "ABC Pvt Ltd"). Printed as "For, ABC Pvt Ltd".
-
sealType: Label below signature. Values: 1 (Authorised Signatory), 2 (Director), 3 (Company Seal).
Q. When is an eSign request charged?
Creating the request is not charged, so this response shows isBillable: false. Each signer is charged when they complete signing.
Q. What are the workflow settings like responseUrl and uiMode?
-
descriptionForInvitee: Custom text instructions displayed in the invitation email.
-
finalCopyRecipientsEmailId: Comma-separated email IDs to receive the final signed PDF automatically.
-
responseUrl: Your server webhook URL for real-time status notifications. If omitted, the default webhook URL configured for this API on your account is used.
-
returnUrl: Optional absolute https URL the signer's browser is redirected to after they sign. Other values are ignored.
-
skipVerificationCode: Set to true to bypass the unique document password (OTP) for the signer upon opening the link.
-
emailTemplateCode: Optional. 1 (Offer Letter) or 2 (Employee Docs); omit or 0 for the default template.
-
isAttachRequestSignDocument: If true, the PDF document is attached directly to the invitation email.
-
senderName: Custom 'From' name appearing in the signer's email.
-
uiMode: Set to true for "Draft Mode" where document is kept in draft so you can manually position signature boxes via UI before sending.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- referenceIdstringrequiredRequired. Your unique ID for this signing request. Letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. Must not already be used by another request.nullable
- documentInfoobjectoptionalNo description.
3 fields
- namestringrequiredRequired. Display name of the document, for example Agreement.pdf. Maximum 50 characters. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- contentstringconditionalConditional: required unless documentId is sent. Base64-encoded content of the PDF. Must be a valid PDF of at most 20 MB.nullable
- documentIdstringoptionalOptional. ID of a document already created in SignCare (for example an eStamped document) to send for signing. Must be a valid GUID. When sent, content is not needed.nullable
- supportingDocumentsarray<object>optionalOptional. Reference files signers can view but do not sign. Each item needs name, contentType and content.nullable
Each item: 3 fields
- namestringconditionalConditional: required when supportingDocuments is sent. Name of the supporting document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- contentTypestringconditionalConditional: required when supportingDocuments is sent. Content type of the file, for example application/pdf. The value is not validated; the file type is detected from the content.nullable
- contentstringconditionalConditional: required when supportingDocuments is sent. Base64-encoded PDF, PNG or JPEG file. PDF up to 10 MB, images up to 1 MB.nullable
- sequentialSigningbooleanoptionalOptional. Defaults to false. When true, signers are invited one at a time in the order set by each userInfo order (one entry must have order 1, and orders must be unique).
- userInfoarray<object>requiredRequired. Signers and reviewers with their details, signature type, and signing options. Must include at least one entry with userType Signer.nullable
Each item: 17 fields
- namestringrequiredRequired. Full name of the signer or reviewer. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- emailIdstringconditionalConditional: required unless mobileNo is sent (always required on /reinititate). A valid email address. The signing link is sent here.nullable
- userTypestringrequiredRequired. Allowed values: Signer, Reviewer (case-sensitive). At least one entry must be a Signer.nullable
- signatureTypestringconditionalConditional: required when userType is Signer; not used for Reviewer. Allowed values: Digital (hardware USB token DSC), Aadhaar, Electronic (case-sensitive).nullable
- electronicOptionsobjectoptionalNo description.
5 fields
- canDrawbooleanoptionalOptional. Allows the signer to draw their signature. Possible values: True/False. Default: True.
- canTypebooleanoptionalOptional. Allows the signer to type their signature. Possible values: True/False. Default: True.
- canUploadbooleanoptionalOptional. Allows the signer to upload a signature image. Possible values: True/False. Default: True.
- captureGPSLocationbooleanoptionalOptional. Captures the signer's GPS location during signing. Possible values: True/False. Default: False.
- capturePhotobooleanoptionalOptional. Captures the signer's photo during signing. Possible values: True/False. Default: False.
- aadhaarInfoobjectoptionalNo description.
8 fields
- verifyInviteebooleanoptionalOptional. Defaults to false. Set true to verify the signer's identity against the details in this object before signing.
- birthYearstringoptionalOptional. Birth year of the signer as a 4-digit string (1900-2099), for example "1990". Used to verify the signer when verifyInvitee is true.nullable
- lastFourDigitOfAadhaarstringoptionalOptional. Last 4 digits of the signer's Aadhaar number, as a 4-digit string. Used to verify the signer when verifyInvitee is true.nullable
- genderstringoptionalOptional. Gender of the signer. Allowed values: M (Male), F (Female), T (Transgender). Used to verify the signer when verifyInvitee is true.nullable
- verifyNamebooleanoptionalOptional. Defaults to false. When true, the signer's name is verified against the Aadhaar record.
- smartNameVerifybooleanoptionalOptional. Defaults to false. When true, name verification tolerates minor spelling differences.
- pincodestringoptionalOptional. Pincode of the signer's address, to verify against the Aadhaar record.nullable
- statestringoptionalOptional. State of the signer's address, to verify against the Aadhaar record.nullable
- aadhaarOptionsobjectoptionalNo description.
4 fields
- otpbooleanoptionalOptional. Enables OTP-based Aadhaar authentication. Possible values: True/False. Default: True.
- biometricThumbScanbooleanoptionalOptional. Enables biometric thumb scan for Aadhaar authentication. Possible values: True/False. Default: False.
- irisScanbooleanoptionalOptional. Enables iris scan for Aadhaar authentication. Possible values: True/False. Default: False.
- facebooleanoptionalOptional. Enables face recognition for Aadhaar authentication. Possible values: True/False. Default: False.
- expiryDatestringoptionalOptional. Last date the signer or reviewer can act, in MM-DD-YYYY format (for example 12-31-2030). Must be a future date. A reviewer's expiry date must not be later than a signer's.nullable
- emailReminderDaysstringoptionalOptional. Number of days before expiryDate to send email reminders. Allowed values: 1 to 7, sent as a string (for example "3").nullable
- mobileNostringconditionalConditional: required unless emailId is sent. 10-digit mobile number, digits only. The signing link is sent by SMS. If emailId is also given, the link is sent by email AND SMS.nullable
- orderinteger (int32)conditionalConditional: required when sequentialSigning is true or the request includes a Reviewer. Signing position (1, 2, 3...). Orders must be unique, one entry must be 1, and a reviewer's order must not be greater than any signer's.nullable
- userReferenceIdstringrequiredRequired. Your own ID for this signer. Letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. Returned as signerRefId in status responses.nullable
- signAppearanceinteger (int32)optionalPosition of signature on the page. Top_Left (1) = top-left corner, Top_Right (2) = top-right corner, Bottom_Left (3) = bottom-left corner, Bottom_Right (4) = bottom-right corner, PageCoordinates (5) = custom coordinates defined in PageCoordinates property.values: 1 | 2 | 3 | 4 | 5
- pageToBeSignedinteger (int32)optionalDefines which pages of the document should be signed. FIRST (1) = first page only, LAST (2) = last page only, EVEN (3) = even-numbered pages, ODD (4) = odd-numbered pages, ALL (5) = all pages (default), SPECIFY (6) = specific pages defined in PageNumber property (e.g. "1-2-3"), NONE (7) = no pages.values: 1 | 2 | 3 | 4 | 5 | 6
- pageNumberstringconditionalConditional: required when pageToBeSigned is SPECIFY. Page numbers separated by a hyphen (-), for example "1-2-3".nullable
- pageCoordinatesarray<object>conditionalConditional: required when signAppearance is 5 (PageCoordinates). Page-wise coordinates for signature box placement. Set <b>pageNumber = 0</b> on an entry to reuse the same coordinates on every page selected by pageToBeSigned (all pages when pageToBeSigned is 5/ALL) without listing each page.nullable
Each item: 2 fields
- pageNumberinteger (int32)requiredRequired. Page number to place the signature box on, starting at 1. The page must exist in the PDF. Pass <b>0</b> to apply the same coordinates to every page selected by pageToBeSigned (all pages when pageToBeSigned is 5/ALL), instead of repeating one entry per page. Entries with an explicit page number always take precedence over the 0 entry for that page.
- pdfCoordinatesarray<object>requiredRequired. Signature box rectangles for this page. At least one entry.nullable
Each item: 4 fields
- x1number (float)requiredRequired. Left position of the signature box on the page.
- y1number (float)requiredRequired. Top position of the signature box on the page.
- x2number (float)requiredRequired. Width of the signature box.
- y2number (float)requiredRequired. Height of the signature box.
- signatorySealInfoobjectoptionalNo description.
2 fields
- namestringoptionalOptional. Organization name printed in the seal text, for example ABC Pvt Ltd.nullable
- sealTypeinteger (int32)optionalOptional. Label shown below the signature: 1 = Authorised Signatory, 2 = Director, 3 = Company Seal. Any other value is rejected.nullable
- descriptionForInviteestringoptionalOptional. Comments for the document which will be displayed in email for signer/reviewer.nullable
- finalCopyRecipientsEmailIdstringoptionalOptional. Comma-separated email addresses that receive the signed document after all parties have signed.nullable
- responseUrlstringoptionalOptional. Webhook URL that receives the signing status callbacks. If omitted, the default webhook URL configured for this API on your account is used.nullable
- returnUrlstringoptionalOptional. When provided, the signer's browser is redirected here immediately after THEIR OWN signing step completes โ independent of whether other signers on the same document are still pending. This is a browser redirect, distinct from SignCareApp.ExternalAPI.Application.Models.Request.ExternalSignatureRequest.ResponseUrl (a server-to-server webhook). Must be an absolute https URL; any other value is silently ignored. Aadhaar eSign appends an `esignMsg` query parameter (empty on success); correlate via your own ReferenceId. When the signing page is embedded in an iframe, this redirect happens inside that iframe; omit it to receive a `signcare.esign` postMessage instead (see the Embedded Signing guide).nullable
- skipVerificationCodebooleanoptionalOptional. Defaults to false. When true, the signer is not asked for the verification code (OTP) when opening the signing link.
- emailTemplateCodeinteger (int32)optionalOptional. Custom email template for the signing invitation: 1 = Offer Letter, 2 = Employee Docs. Omit or send 0 for the default template. Any other value is rejected.
- isAttachRequestSignDocumentbooleanoptionalOptional. Defaults to false. When true, the PDF is attached to the signing invitation email.
- senderNamestringoptionalOptional. Sender name shown in the invitation email.nullable
- uiModebooleanoptionalOptional. Defaults to false. When true, the document is created as a draft so you can place signature boxes in the SignCare UI before it is sent to signers.
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalNo description.
6 fields
- documentIdstringoptionalNo description.nullable
- documentReferenceIdstringoptionalNo description.nullable
- responseTimeStampstringoptionalNo description.nullable
- userInfoarray<object>optionalNo description.nullable
Each item: 3 fields
- userRefIdstringoptionalNo description.nullable
- userIdstringoptionalNo description.nullable
- esignLinkstringoptionalNo description.nullable
- uiModeURLstringoptionalNo description.nullable
- stampDetailsobjectoptionalSHCIL eStamp certificate details returned in the Template+SHCIL response.
7 fields
- eStampIdstring (uuid)optionalNo description.nullable
- reconMappingIdstringoptionalNo description.nullable
- userDocumentIdinteger (int64)optionalNo description.nullable
- certIdstringoptionalNo description.nullable
- urnstringoptionalNo description.nullable
- certificateNostringoptionalNo description.nullable
- certificateIssuedDatestringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl ยท Node.js ยท Python
DSC Bulk Sign โ automated server-side completion of the pending lender DSC signer(s) on one or more documents, using your organization's stored signing certificate.
Call this after the borrower's Aadhaar eSign (and your own eNACH flow, which SignCare does not track) are complete.
Q. What is Items?
Required. An array of 1 to 100 { referenceId, documentId } pairs โ one entry per document you want the lender's DSC signer completed on. A failure on one item (e.g. the borrower hasn't finished signing yet) never blocks the others; check each entry's status in the response independently.
Q. What certificate does this use?
Your organization's signing certificate, onboarded separately via the SignCare admin portal โ never a value you pass in this request.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- itemsarray<object>requiredRequired. 1 to 100 items per call.nullable
Each item: 2 fields
- referenceIdstringrequiredRequired. The referenceId you supplied at initiation (/esign/request).nullable
- documentIdstringrequiredRequired. The documentId (GUID) returned in the /esign/request response.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalPer-item outcomes (PLAN.md ยง5.1) โ one item failing never blocks the others.
1 field
- resultsarray<object>optionalNo description.nullable
Each item: 5 fields
- documentIdstringoptionalNo description.nullable
- documentReferenceIdstringoptionalNo description.nullable
- statusstringoptional"Signed" | "Failed"nullable
- reasonCodestringoptionalSet when Status is "Failed" โ e.g. BORROWER_SIGN_NOT_COMPLETE, CERTIFICATE_EXPIRED.nullable
- signedAtUtcstring (date-time)optionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl ยท Node.js ยท Python
Checks the current status of an eSign request.
Use this API to track whether signers have opened, signed, or rejected a document.
Q. What is documentReferenceId?
Required. The referenceId you provided when initiating the signing request (the one you sent in /request). Matching is not case-sensitive.
Q. What is documentId?
Required. The unique document identifier (GUID) returned in the response of the /request API. Both fields must be sent and must belong to the same document.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique document identifier (GUID) returned from the eSign request API.nullable
- documentReferenceIdstringrequiredRequired. The referenceId you sent in the original eSign request. Must belong to the same document as documentId; matching is not case-sensitive.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalNo description.
5 fields
- documentIdstringoptionalNo description.nullable
- documentReferenceIdstringoptionalNo description.nullable
- contentstringoptionalNo description.nullable
- documentStatusstringoptionalNo description.nullable
- signerInfoarray<object>optionalNo description.nullable
Each item: 9 fields
- signerRefIdstringoptionalNo description.nullable
- signerIdstringoptionalNo description.nullable
- signerStatusstringoptionalPending, Signed, Rejected, Expired or Approved -- or Waiting for a party still queued behind an earlier order on a sequential request. A Waiting party has not been invited yet and has no esignLink; it becomes Pending when its turn comes or sequential signing is disabled.nullable
- invitationExpireTimeStampstringoptionalNo description.nullable
- signerNamestringoptionalNo description.nullable
- rejectReasonstringoptionalNo description.nullable
- esignLinkstringoptionalNo description.nullable
- aadhaarAuditInfoobjectoptionalNo description.
12 fields
- namestringoptionalNo description.nullable
- pincodestringoptionalNo description.nullable
- statestringoptionalNo description.nullable
- yearOfBirthstringoptionalNo description.nullable
- genderstringoptionalNo description.nullable
- titlestringoptionalNo description.nullable
- serialNumberstringoptionalNo description.nullable
- issuerNamestringoptionalNo description.nullable
- issuerOrganizationstringoptionalNo description.nullable
- validityStartstringoptionalNo description.nullable
- validityEndstringoptionalNo description.nullable
- messagestringoptionalNo description.nullable
- failureobjectoptionalNo description.
4 fields
- codestringoptionalStable code: IDENTITY_MISMATCH, PROVIDER_ERROR, PROVIDER_UNAVAILABLE, FACE_AUTH_FAILED or SIGNED_DOCUMENT_NOT_PRODUCED. Match on this, never on SignCareApp.ExternalAPI.Application.Models.Response.ExternalSignatureFailure.Reason.nullable
- reasonstringoptionalNo description.nullable
- providerErrorCodestringoptionalThe provider's own error code, unchanged, when it sent one.nullable
- occurredAtstringoptionalUTC, ISO 8601, when known.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl ยท Node.js ยท Python
Revokes an active eSign request, making the signing links invalid.
Use this API to cancel a signing workflow before it is fully completed by all parties.
Q. What is documentId?
Required. The unique identifier (GUID) of the document you wish to revoke. This is the only request field.
Q. When can I revoke?
Only while the document is pending and no signer has signed yet.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique document identifier (GUID) of the eSign request to revoke. Only a pending document with no completed signatures can be revoked.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- datastringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Re-initiates an eSign workflow with updated document or signer information.
This is useful when you need to fix errors in a previous request (e.g., correcting an email address) while reusing the existing document context.
Q. How does this differ from /request?
re-initiate allows you to provide a new PDF (inside documentInfo) or update the list of participants (signers) for an existing transaction.
Q. Which documents can I re-initiate?
Only documents in Revoked status. Revoke the document first, then send documentInfo.documentId (GUID), documentInfo.name and documentInfo.content (all required), plus a full userInfo list where every participant has an emailId.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentInfoobjectoptionalNo description.
3 fields
- documentIdstringrequiredRequired. ID (GUID) of the existing document to re-initiate. The document must be in Revoked status.nullable
- namestringrequiredRequired. Display name of the document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- contentstringrequiredRequired. Base64-encoded content of the PDF. Must be a valid PDF of at most 20 MB.nullable
- supportingDocumentsarray<object>optionalOptional. Reference files signers can view but do not sign. Each item needs name, contentType and content.nullable
Each item: 3 fields
- namestringconditionalConditional: required when supportingDocuments is sent. Name of the supporting document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- contentTypestringconditionalConditional: required when supportingDocuments is sent. Content type of the file, for example application/pdf. The value is not validated; the file type is detected from the content.nullable
- contentstringconditionalConditional: required when supportingDocuments is sent. Base64-encoded PDF, PNG or JPEG file. PDF up to 10 MB, images up to 1 MB.nullable
- sequentialSigningbooleanoptionalOptional. Defaults to false. When true, signers are invited one at a time in the order set by each userInfo order (one entry must have order 1, and orders must be unique).nullable
- userInfoarray<object>requiredRequired. Signers and reviewers with their details, signature type, and signing options. Must include at least one entry with userType Signer. Every entry needs an emailId.nullable
Each item: 17 fields
- namestringrequiredRequired. Full name of the signer or reviewer. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].nullable
- emailIdstringconditionalConditional: required unless mobileNo is sent (always required on /reinititate). A valid email address. The signing link is sent here.nullable
- userTypestringrequiredRequired. Allowed values: Signer, Reviewer (case-sensitive). At least one entry must be a Signer.nullable
- signatureTypestringconditionalConditional: required when userType is Signer; not used for Reviewer. Allowed values: Digital (hardware USB token DSC), Aadhaar, Electronic (case-sensitive).nullable
- electronicOptionsobjectoptionalNo description.
5 fields
- canDrawbooleanoptionalOptional. Allows the signer to draw their signature. Possible values: True/False. Default: True.
- canTypebooleanoptionalOptional. Allows the signer to type their signature. Possible values: True/False. Default: True.
- canUploadbooleanoptionalOptional. Allows the signer to upload a signature image. Possible values: True/False. Default: True.
- captureGPSLocationbooleanoptionalOptional. Captures the signer's GPS location during signing. Possible values: True/False. Default: False.
- capturePhotobooleanoptionalOptional. Captures the signer's photo during signing. Possible values: True/False. Default: False.
- aadhaarInfoobjectoptionalNo description.
8 fields
- verifyInviteebooleanoptionalOptional. Defaults to false. Set true to verify the signer's identity against the details in this object before signing.
- birthYearstringoptionalOptional. Birth year of the signer as a 4-digit string (1900-2099), for example "1990". Used to verify the signer when verifyInvitee is true.nullable
- lastFourDigitOfAadhaarstringoptionalOptional. Last 4 digits of the signer's Aadhaar number, as a 4-digit string. Used to verify the signer when verifyInvitee is true.nullable
- genderstringoptionalOptional. Gender of the signer. Allowed values: M (Male), F (Female), T (Transgender). Used to verify the signer when verifyInvitee is true.nullable
- verifyNamebooleanoptionalOptional. Defaults to false. When true, the signer's name is verified against the Aadhaar record.
- smartNameVerifybooleanoptionalOptional. Defaults to false. When true, name verification tolerates minor spelling differences.
- pincodestringoptionalOptional. Pincode of the signer's address, to verify against the Aadhaar record.nullable
- statestringoptionalOptional. State of the signer's address, to verify against the Aadhaar record.nullable
- aadhaarOptionsobjectoptionalNo description.
4 fields
- otpbooleanoptionalOptional. Enables OTP-based Aadhaar authentication. Possible values: True/False. Default: True.
- biometricThumbScanbooleanoptionalOptional. Enables biometric thumb scan for Aadhaar authentication. Possible values: True/False. Default: False.
- irisScanbooleanoptionalOptional. Enables iris scan for Aadhaar authentication. Possible values: True/False. Default: False.
- facebooleanoptionalOptional. Enables face recognition for Aadhaar authentication. Possible values: True/False. Default: False.
- expiryDatestringoptionalOptional. Last date the signer or reviewer can act, in MM-DD-YYYY format (for example 12-31-2030). Must be a future date. A reviewer's expiry date must not be later than a signer's.nullable
- emailReminderDaysstringoptionalOptional. Number of days before expiryDate to send email reminders. Allowed values: 1 to 7, sent as a string (for example "3").nullable
- mobileNostringconditionalConditional: required unless emailId is sent. 10-digit mobile number, digits only. The signing link is sent by SMS. If emailId is also given, the link is sent by email AND SMS.nullable
- orderinteger (int32)conditionalConditional: required when sequentialSigning is true or the request includes a Reviewer. Signing position (1, 2, 3...). Orders must be unique, one entry must be 1, and a reviewer's order must not be greater than any signer's.nullable
- userReferenceIdstringrequiredRequired. Your own ID for this signer. Letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. Returned as signerRefId in status responses.nullable
- signAppearanceinteger (int32)optionalPosition of signature on the page. Top_Left (1) = top-left corner, Top_Right (2) = top-right corner, Bottom_Left (3) = bottom-left corner, Bottom_Right (4) = bottom-right corner, PageCoordinates (5) = custom coordinates defined in PageCoordinates property.values: 1 | 2 | 3 | 4 | 5
- pageToBeSignedinteger (int32)optionalDefines which pages of the document should be signed. FIRST (1) = first page only, LAST (2) = last page only, EVEN (3) = even-numbered pages, ODD (4) = odd-numbered pages, ALL (5) = all pages (default), SPECIFY (6) = specific pages defined in PageNumber property (e.g. "1-2-3"), NONE (7) = no pages.values: 1 | 2 | 3 | 4 | 5 | 6
- pageNumberstringconditionalConditional: required when pageToBeSigned is SPECIFY. Page numbers separated by a hyphen (-), for example "1-2-3".nullable
- pageCoordinatesarray<object>conditionalConditional: required when signAppearance is 5 (PageCoordinates). Page-wise coordinates for signature box placement. Set <b>pageNumber = 0</b> on an entry to reuse the same coordinates on every page selected by pageToBeSigned (all pages when pageToBeSigned is 5/ALL) without listing each page.nullable
Each item: 2 fields
- pageNumberinteger (int32)requiredRequired. Page number to place the signature box on, starting at 1. The page must exist in the PDF. Pass <b>0</b> to apply the same coordinates to every page selected by pageToBeSigned (all pages when pageToBeSigned is 5/ALL), instead of repeating one entry per page. Entries with an explicit page number always take precedence over the 0 entry for that page.
- pdfCoordinatesarray<object>requiredRequired. Signature box rectangles for this page. At least one entry.nullable
Each item: 4 fields
- x1number (float)requiredRequired. Left position of the signature box on the page.
- y1number (float)requiredRequired. Top position of the signature box on the page.
- x2number (float)requiredRequired. Width of the signature box.
- y2number (float)requiredRequired. Height of the signature box.
- signatorySealInfoobjectoptionalNo description.
2 fields
- namestringoptionalOptional. Organization name printed in the seal text, for example ABC Pvt Ltd.nullable
- sealTypeinteger (int32)optionalOptional. Label shown below the signature: 1 = Authorised Signatory, 2 = Director, 3 = Company Seal. Any other value is rejected.nullable
- descriptionForInviteestringoptionalOptional. Comments for the document which will be displayed in email for signer/reviewer.nullable
- finalCopyRecipientsEmailIdstringoptionalOptional. Comma-separated email addresses that receive the signed document after all parties have signed.nullable
- responseUrlstringoptionalOptional. Webhook URL that receives the signing status callbacks.nullable
- returnUrlstringoptionalOptional. Accepted but currently ignored on re-initiate. When provided, the signer's browser is redirected here immediately after THEIR OWN signing step completes โ independent of whether other signers on the same document are still pending. This is a browser redirect, distinct from SignCareApp.ExternalAPI.Application.Models.Request.ReinititateExternalSignatureRequest.ResponseUrl (a server-to-server webhook). Must be https. Aadhaar eSign appends an `esignMsg` query parameter (empty on success); correlate via your own ReferenceId. When the signing page is embedded in an iframe, this redirect happens inside that iframe; omit it to receive a `signcare.esign` postMessage instead (see the Embedded Signing guide).nullable
- skipVerificationCodebooleanoptionalOptional. Defaults to false. When true, the signer is not asked for the verification code (OTP) when opening the signing link.
- emailTemplateCodeinteger (int32)optionalOptional. Custom email template for the signing invitation: 1 = Offer Letter, 2 = Employee Docs. Omit or send 0 for the default template.
- isAttachRequestSignDocumentbooleanoptionalOptional. Defaults to false. When true, the PDF is attached to the signing invitation email.
- senderNamestringoptionalOptional. Sender name shown in the invitation email.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalNo description.
6 fields
- documentIdstringoptionalNo description.nullable
- documentReferenceIdstringoptionalNo description.nullable
- responseTimeStampstringoptionalNo description.nullable
- userInfoarray<object>optionalNo description.nullable
Each item: 3 fields
- userRefIdstringoptionalNo description.nullable
- userIdstringoptionalNo description.nullable
- esignLinkstringoptionalNo description.nullable
- uiModeURLstringoptionalNo description.nullable
- stampDetailsobjectoptionalSHCIL eStamp certificate details returned in the Template+SHCIL response.
7 fields
- eStampIdstring (uuid)optionalNo description.nullable
- reconMappingIdstringoptionalNo description.nullable
- userDocumentIdinteger (int64)optionalNo description.nullable
- certIdstringoptionalNo description.nullable
- urnstringoptionalNo description.nullable
- certificateNostringoptionalNo description.nullable
- certificateIssuedDatestringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl ยท Node.js ยท Python
Extends the signing deadline for the signers of a document.
Use this if a signer's link has expired or they need more time to complete the process.
Q. What is documentId?
Required. The unique identifier (GUID) of the document. The document must be pending or expired.
Q. What is days?
Required. Whole number of days, greater than 0. The new deadline is that many days from now, and applies to every signer on the document.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique identifier (GUID) of the document whose signing deadline should be extended. The document must be pending or expired.nullable
- daysinteger (int32)requiredRequired. Number of days from now until the new signing deadline. Must be greater than 0. Applies to every signer on the document.
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- datastringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Switches a document from sequential to parallel signing so every remaining signer can sign at once.
Use this when a document was sent for sequential signing and waiting on the order has become the bottleneck โ the signers still outstanding are released together and invited immediately.
Q. Who gets an invitation?
Every signer still pending. Anyone who has already signed is skipped, so nobody is asked twice.
Q. What if the document has reviewers?
Reviewers keep their order. The switch is applied straight away, but the signers are released together the moment the last reviewer approves โ the review-then-sign flow is preserved.
Q. Can I switch back to sequential?
No. Invitations already delivered cannot be recalled, so this endpoint is one-way. Set sequentialSigning when you create the request if you need a signing order.
Q. Does it affect the other documents in the envelope?
Yes. Every document sharing the envelope is switched, because they share one signer list.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique identifier (GUID) of the pending document to switch to parallel signing. Every document in the same envelope is switched with it.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResult of switching a document to parallel signing.
6 fields
- documentIdstringoptionalDocument the request was made against.nullable
- sequentialSigningbooleanoptionalAlways false โ the call only ever switches signing to parallel.
- documentsUpdatedinteger (int32)optionalDocuments switched, including the siblings sharing the envelope.
- signersEnabledinteger (int32)optionalSigners released for signing and notified by this call. Zero when reviewers are still pending โ those signers are released together once the last reviewer approves.
- awaitingReviewersbooleanoptionalTrue when reviewers are still pending, so signers were not released yet.
- signersarray<object>optionalThe signers released by this call.nullable
Each item: 4 fields
- signerRefIdstringoptionalYour own reference for this signer, as passed in UserReferenceId.nullable
- signerIdstringoptionalSignCare identifier of the signer slot.nullable
- signerNamestringoptionalName the invitation was addressed to.nullable
- documentIdstringoptionalDocument the slot belongs to.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Updates a pending signer: signature type (Electronic, Aadhaar, Digital), its options, name, and email/mobile.
Use this when a signer cannot sign the way the request asked (for example, no Aadhaar-linked mobile, or no DSC token), when the wrong person or contact was invited, or to adjust how they sign โ after others may already have signed. The document does not need to be revoked and sent again: signatures already done, the signer's position and the signing order stay as they are. Change any combination in one call; send only what changes.
Q. How do I change the person?
Send emailId and/or mobileNo with the new person's full contact, and their
name. The previous person's links stop working immediately, and the new person is invited. userRefId stays the same; the response returns the new person's userId and
esignLink. Sending the same email with a different mobile (or adding/removing the mobile) only changes where SMS links go. A reviewer's name and contact can be changed the same way.
Q. How do I identify the signer?
Send userRefId: the userReferenceId you gave that signer when creating the request, as returned in the create response. It never changes, even when the person changes. Use a different userReferenceId for every signer on a document, or the signer cannot be identified.
Q. Which changes are allowed?
Any type to any type: signatureType is "Electronic", "Aadhaar" or "Digital". Send the signer's current type to update only its options: electronicOptions for Electronic, aadhaarOptions / aadhaarInfo for Aadhaar (Digital has none). Options you leave out keep their current values, or the defaults when the type changes. The signer must not have signed or rejected yet, and the document must be pending. reason (1 to 250 characters) is required and is recorded in the audit trail.
Q. Is the signer notified?
When it is already their turn, the invitation is sent by email and/or SMS. By default this happens when the person, the mobile or the type changes, and not for a name or options update; set notifySigner to override. On a sequential document where the signer's turn has not come yet, nothing is sent now and they are invited normally when it does. The existing signing link keeps working and opens the new signing page.
Q. What if the signer has the signing page open?
The call is rejected with 409 and the time after which to retry, so a signing already in progress is not interrupted.
Q. How is it billed?
The call itself is free. The signer is charged at the price of the type they finally sign with. When the type changes, the wallet is checked for the new type's price.
Q. Does it affect the other documents in the envelope?
Yes. The same signer is changed on every document in the envelope.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique identifier (GUID) of the pending document the signer belongs to. The same signer is changed on every document in the envelope.nullable
- userRefIdstringrequiredRequired. Your own reference for the signer: the userRefId returned by the create request (the userReferenceId you sent). It never changes, even when the person changes.nullable
- signatureTypestringoptionalOptional. The signature type the signer should use: "Electronic", "Aadhaar" or "Digital" ("DSC" is also accepted). Left out: the signer keeps their current type. Send the current type with new options to update only the options.nullable
- namestringoptionalOptional. The signer's name. Required when emailId or mobileNo changes the person.nullable
- emailIdstringoptionalOptional. The signer's email. emailId and mobileNo together replace the signer's contact: send the full contact you want (email, mobile, or both). Left out (both): the contact is unchanged. A different email/mobile hands the slot to that person.nullable
- mobileNostringoptionalOptional. The signer's 10-digit mobile number. See emailId. With an email, the link is sent by email and SMS; on its own, the mobile is the signer's identity and the link goes by SMS.nullable
- electronicOptionsobjectoptionalElectronic signing options for a signer.
5 fields
- canDrawbooleanoptionalOptional. Allows the signer to draw their signature. Default: true.
- canTypebooleanoptionalOptional. Allows the signer to type their signature. Default: true.
- canUploadbooleanoptionalOptional. Allows the signer to upload a signature image. Default: true.
- captureGPSLocationbooleanoptionalOptional. Captures the signer's GPS location during signing. Default: false.
- capturePhotobooleanoptionalOptional. Captures the signer's photo during signing. Default: false.
- aadhaarOptionsobjectoptionalAadhaar authentication modes for a signer. At least one must be enabled.
4 fields
- otpbooleanoptionalOptional. OTP-based Aadhaar authentication. Default: true.
- biometricThumbScanbooleanoptionalOptional. Biometric thumb scan. Default: false.
- irisScanbooleanoptionalOptional. Iris scan. Default: false.
- facebooleanoptionalOptional. Face authentication. Default: false.
- aadhaarInfoobjectoptionalDetails to verify an Aadhaar signer against their Aadhaar record.
8 fields
- verifyInviteebooleanoptionalOptional. Set true to verify the signer against these details before signing. Default: false.
- birthYearstringoptionalOptional. Birth year as a 4-digit string (1900-2099), for example "1990".nullable
- lastFourDigitOfAadhaarstringoptionalOptional. Last 4 digits of the signer's Aadhaar number.nullable
- genderstringoptionalOptional. M (Male), F (Female) or T (Transgender).nullable
- verifyNamebooleanoptionalOptional. Verify the signer's name against the Aadhaar record. Default: false.
- smartNameVerifybooleanoptionalOptional. Tolerate minor spelling differences in the name check. Default: false.
- pincodestringoptionalOptional. Pincode of the signer's address.nullable
- statestringoptionalOptional. State of the signer's address.nullable
- reasonstringrequiredRequired. Why the signer is being changed, 1 to 250 characters. Recorded in the audit trail.nullable
- notifySignerbooleanoptionalOptional. Sends the signing invitation when it is already this signer's turn. Defaults to true when the person or the signature type changes, false for a name or options update.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResult of changing a signer's signature type or options.
13 fields
- documentIdstringoptionalDocument the request was made against.nullable
- userIdstringoptionalThe signer's userId after the call, the same field the create request returns. It changes only when emailId/mobileNo hands the slot to a different person: store the new value then.nullable
- userRefIdstringoptionalYour own reference for the signer. Never changed by this call.nullable
- signerNamestringoptionalName of the signer after the call.nullable
- previousSignatureTypestringoptionalThe signature type before the call: "Electronic", "Aadhaar" or "Digital".nullable
- signatureTypestringoptionalThe signature type after the call.nullable
- signatureTypeChangedbooleanoptionalTrue when the signature type changed.
- optionsChangedbooleanoptionalTrue when the signature type's options changed.
- nameChangedbooleanoptionalTrue when the signer's name changed.
- contactChangedbooleanoptionalTrue when the email/mobile changed. When it names a different person, the previous person's links no longer work.
- esignLinkstringoptionalThe signer's signing link after the call. Null while the signer is still waiting their turn on a sequential document (the status API returns it once their turn comes).nullable
- documentsUpdatedinteger (int32)optionalDocuments changed, including the other documents in the envelope.
- invitationSentbooleanoptionalTrue when the signing invitation was sent again. False when notifySigner was false (or left out on an options-only update), or the signer's turn has not come yet on a sequential document.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
402Payment Requiredsame body as 200
403Forbiddensame body as 200
404Not Foundsame body as 200
409Conflictsame body as 200
429Too Many Requestssame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Resends the signing invitation link to a participant.
Use this if a signer has lost their email or needs a reminder to sign.
Q. Does this create a new link?
No, it resends the same active link to the signer's email or registered mobile number.
Q. What is documentId?
Required. The unique identifier (GUID) of the document. The document must be pending.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- documentIdstringrequiredRequired. Unique identifier (GUID) of the pending document for which the invitation should be resent.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- datastringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Retrieves the comprehensive audit trail for a specific document.
The audit trail provides a legally valid, step-by-step history of all document-related activities including opening, OTP generation, and final signing.
Q. What is DocumentId?
Required (path parameter). The unique document identifier (GUID) for which you want to download the trail.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
Path parameters
- documentIdstringrequiredNo description.
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- datastringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.