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.

POST

/api/v1/eSign/request

#

Initiates a multi-party Digital Signing (eSign) workflow.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-request

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • referenceId
    stringrequired
    Required. 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
  • documentInfo
    objectoptional
    No description.
    3 fields
    • name
      stringrequired
      Required. Display name of the document, for example Agreement.pdf. Maximum 50 characters. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • content
      stringconditional
      Conditional: required unless documentId is sent. Base64-encoded content of the PDF. Must be a valid PDF of at most 20 MB.
      nullable
    • documentId
      stringoptional
      Optional. 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
  • supportingDocuments
    array<object>optional
    Optional. Reference files signers can view but do not sign. Each item needs name, contentType and content.
    nullable
    Each item: 3 fields
    • name
      stringconditional
      Conditional: required when supportingDocuments is sent. Name of the supporting document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • contentType
      stringconditional
      Conditional: 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
    • content
      stringconditional
      Conditional: required when supportingDocuments is sent. Base64-encoded PDF, PNG or JPEG file. PDF up to 10 MB, images up to 1 MB.
      nullable
  • sequentialSigning
    booleanoptional
    Optional. 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).
  • userInfo
    array<object>required
    Required. 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
    • name
      stringrequired
      Required. Full name of the signer or reviewer. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • emailId
      stringconditional
      Conditional: required unless mobileNo is sent (always required on /reinititate). A valid email address. The signing link is sent here.
      nullable
    • userType
      stringrequired
      Required. Allowed values: Signer, Reviewer (case-sensitive). At least one entry must be a Signer.
      nullable
    • signatureType
      stringconditional
      Conditional: required when userType is Signer; not used for Reviewer. Allowed values: Digital (hardware USB token DSC), Aadhaar, Electronic (case-sensitive).
      nullable
    • electronicOptions
      objectoptional
      No description.
      5 fields
      • canDraw
        booleanoptional
        Optional. Allows the signer to draw their signature. Possible values: True/False. Default: True.
      • canType
        booleanoptional
        Optional. Allows the signer to type their signature. Possible values: True/False. Default: True.
      • canUpload
        booleanoptional
        Optional. Allows the signer to upload a signature image. Possible values: True/False. Default: True.
      • captureGPSLocation
        booleanoptional
        Optional. Captures the signer's GPS location during signing. Possible values: True/False. Default: False.
      • capturePhoto
        booleanoptional
        Optional. Captures the signer's photo during signing. Possible values: True/False. Default: False.
    • aadhaarInfo
      objectoptional
      No description.
      8 fields
      • verifyInvitee
        booleanoptional
        Optional. Defaults to false. Set true to verify the signer's identity against the details in this object before signing.
      • birthYear
        stringoptional
        Optional. 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
      • lastFourDigitOfAadhaar
        stringoptional
        Optional. Last 4 digits of the signer's Aadhaar number, as a 4-digit string. Used to verify the signer when verifyInvitee is true.
        nullable
      • gender
        stringoptional
        Optional. Gender of the signer. Allowed values: M (Male), F (Female), T (Transgender). Used to verify the signer when verifyInvitee is true.
        nullable
      • verifyName
        booleanoptional
        Optional. Defaults to false. When true, the signer's name is verified against the Aadhaar record.
      • smartNameVerify
        booleanoptional
        Optional. Defaults to false. When true, name verification tolerates minor spelling differences.
      • pincode
        stringoptional
        Optional. Pincode of the signer's address, to verify against the Aadhaar record.
        nullable
      • state
        stringoptional
        Optional. State of the signer's address, to verify against the Aadhaar record.
        nullable
    • aadhaarOptions
      objectoptional
      No description.
      4 fields
      • otp
        booleanoptional
        Optional. Enables OTP-based Aadhaar authentication. Possible values: True/False. Default: True.
      • biometricThumbScan
        booleanoptional
        Optional. Enables biometric thumb scan for Aadhaar authentication. Possible values: True/False. Default: False.
      • irisScan
        booleanoptional
        Optional. Enables iris scan for Aadhaar authentication. Possible values: True/False. Default: False.
      • face
        booleanoptional
        Optional. Enables face recognition for Aadhaar authentication. Possible values: True/False. Default: False.
    • expiryDate
      stringoptional
      Optional. 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
    • emailReminderDays
      stringoptional
      Optional. Number of days before expiryDate to send email reminders. Allowed values: 1 to 7, sent as a string (for example "3").
      nullable
    • mobileNo
      stringconditional
      Conditional: 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
    • order
      integer (int32)conditional
      Conditional: 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
    • userReferenceId
      stringrequired
      Required. Your own ID for this signer. Letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. Returned as signerRefId in status responses.
      nullable
    • signAppearance
      integer (int32)optional
      Position 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
    • pageToBeSigned
      integer (int32)optional
      Defines 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
    • pageNumber
      stringconditional
      Conditional: required when pageToBeSigned is SPECIFY. Page numbers separated by a hyphen (-), for example "1-2-3".
      nullable
    • pageCoordinates
      array<object>conditional
      Conditional: 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
      • pageNumber
        integer (int32)required
        Required. 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.
      • pdfCoordinates
        array<object>required
        Required. Signature box rectangles for this page. At least one entry.
        nullable
        Each item: 4 fields
        • x1
          number (float)required
          Required. Left position of the signature box on the page.
        • y1
          number (float)required
          Required. Top position of the signature box on the page.
        • x2
          number (float)required
          Required. Width of the signature box.
        • y2
          number (float)required
          Required. Height of the signature box.
    • signatorySealInfo
      objectoptional
      No description.
      2 fields
      • name
        stringoptional
        Optional. Organization name printed in the seal text, for example ABC Pvt Ltd.
        nullable
      • sealType
        integer (int32)optional
        Optional. Label shown below the signature: 1 = Authorised Signatory, 2 = Director, 3 = Company Seal. Any other value is rejected.
        nullable
  • descriptionForInvitee
    stringoptional
    Optional. Comments for the document which will be displayed in email for signer/reviewer.
    nullable
  • finalCopyRecipientsEmailId
    stringoptional
    Optional. Comma-separated email addresses that receive the signed document after all parties have signed.
    nullable
  • responseUrl
    stringoptional
    Optional. Webhook URL that receives the signing status callbacks. If omitted, the default webhook URL configured for this API on your account is used.
    nullable
  • returnUrl
    stringoptional
    Optional. 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
  • skipVerificationCode
    booleanoptional
    Optional. Defaults to false. When true, the signer is not asked for the verification code (OTP) when opening the signing link.
  • emailTemplateCode
    integer (int32)optional
    Optional. 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.
  • isAttachRequestSignDocument
    booleanoptional
    Optional. Defaults to false. When true, the PDF is attached to the signing invitation email.
  • senderName
    stringoptional
    Optional. Sender name shown in the invitation email.
    nullable
  • uiMode
    booleanoptional
    Optional. 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
{ "referenceId": "string", "documentInfo": { "name": "string", "content": "string", "documentId": "string" }, "supportingDocuments": [ { "name": "string", "contentType": "string", "content": "string" } ], "sequentialSigning": false, "userInfo": [ { "name": "string", "emailId": "string", "userType": "string", "signatureType": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "expiryDate": "string", "emailReminderDays": "string", "mobileNo": "string", "order": 0, "userReferenceId": "string", "signAppearance": 1, "pageToBeSigned": 1, "pageNumber": "string", "pageCoordinates": [ { "pageNumber": 0, "pdfCoordinates": [ { "x1": null, "y1": null, "x2": null, "y2": null } ] } ], "signatorySealInfo": { "name": "string", "sealType": 0 } } ], "descriptionForInvitee": "string", "finalCopyRecipientsEmailId": "string", "responseUrl": "string", "returnUrl": "string", "skipVerificationCode": false, "emailTemplateCode": 0, "isAttachRequestSignDocument": false, "senderName": "string", "uiMode": false }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    6 fields
    • documentId
      stringoptional
      No description.
      nullable
    • documentReferenceId
      stringoptional
      No description.
      nullable
    • responseTimeStamp
      stringoptional
      No description.
      nullable
    • userInfo
      array<object>optional
      No description.
      nullable
      Each item: 3 fields
      • userRefId
        stringoptional
        No description.
        nullable
      • userId
        stringoptional
        No description.
        nullable
      • esignLink
        stringoptional
        No description.
        nullable
    • uiModeURL
      stringoptional
      No description.
      nullable
    • stampDetails
      objectoptional
      SHCIL eStamp certificate details returned in the Template+SHCIL response.
      7 fields
      • eStampId
        string (uuid)optional
        No description.
        nullable
      • reconMappingId
        stringoptional
        No description.
        nullable
      • userDocumentId
        integer (int64)optional
        No description.
        nullable
      • certId
        stringoptional
        No description.
        nullable
      • urn
        stringoptional
        No description.
        nullable
      • certificateNo
        stringoptional
        No description.
        nullable
      • certificateIssuedDate
        stringoptional
        No description.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "documentId": "string", "documentReferenceId": "string", "responseTimeStamp": "string", "userInfo": [ { "userRefId": "string", "userId": "string", "esignLink": "string" } ], "uiModeURL": "string", "stampDetails": { "eStampId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "reconMappingId": "string", "userDocumentId": 0, "certId": "string", "urn": "string", "certificateNo": "string", "certificateIssuedDate": "string" } }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/request' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "referenceId": "string", "documentInfo": { "name": "string", "content": "string", "documentId": "string" }, "supportingDocuments": [ { "name": "string", "contentType": "string", "content": "string" } ], "sequentialSigning": false, "userInfo": [ { "name": "string", "emailId": "string", "userType": "string", "signatureType": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "expiryDate": "string", "emailReminderDays": "string", "mobileNo": "string", "order": 0, "userReferenceId": "string", "signAppearance": 1, "pageToBeSigned": 1, "pageNumber": "string", "pageCoordinates": [ { "pageNumber": 0, "pdfCoordinates": [ { "x1": null, "y1": null, "x2": null, "y2": null } ] } ], "signatorySealInfo": { "name": "string", "sealType": 0 } } ], "descriptionForInvitee": "string", "finalCopyRecipientsEmailId": "string", "responseUrl": "string", "returnUrl": "string", "skipVerificationCode": false, "emailTemplateCode": 0, "isAttachRequestSignDocument": false, "senderName": "string", "uiMode": false }'
POST

/api/v1/eSign/dsc-bulk-sign

#

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.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-dsc-bulk-sign

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • items
    array<object>required
    Required. 1 to 100 items per call.
    nullable
    Each item: 2 fields
    • referenceId
      stringrequired
      Required. The referenceId you supplied at initiation (/esign/request).
      nullable
    • documentId
      stringrequired
      Required. The documentId (GUID) returned in the /esign/request response.
      nullable
Sample request body
{ "items": [ { "referenceId": "string", "documentId": "string" } ] }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Per-item outcomes (PLAN.md ยง5.1) โ€” one item failing never blocks the others.
    1 field
    • results
      array<object>optional
      No description.
      nullable
      Each item: 5 fields
      • documentId
        stringoptional
        No description.
        nullable
      • documentReferenceId
        stringoptional
        No description.
        nullable
      • status
        stringoptional
        "Signed" | "Failed"
        nullable
      • reasonCode
        stringoptional
        Set when Status is "Failed" โ€” e.g. BORROWER_SIGN_NOT_COMPLETE, CERTIFICATE_EXPIRED.
        nullable
      • signedAtUtc
        string (date-time)optional
        No description.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "results": [ { "documentId": "string", "documentReferenceId": "string", "status": "string", "reasonCode": "string", "signedAtUtc": "2026-01-01T00:00:00Z" } ] }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/dsc-bulk-sign' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "items": [ { "referenceId": "string", "documentId": "string" } ] }'
POST

/api/v1/eSign/status

#

Checks the current status of an eSign request.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-status

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. Unique document identifier (GUID) returned from the eSign request API.
    nullable
  • documentReferenceId
    stringrequired
    Required. 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
{ "documentId": "string", "documentReferenceId": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    5 fields
    • documentId
      stringoptional
      No description.
      nullable
    • documentReferenceId
      stringoptional
      No description.
      nullable
    • content
      stringoptional
      No description.
      nullable
    • documentStatus
      stringoptional
      No description.
      nullable
    • signerInfo
      array<object>optional
      No description.
      nullable
      Each item: 9 fields
      • signerRefId
        stringoptional
        No description.
        nullable
      • signerId
        stringoptional
        No description.
        nullable
      • signerStatus
        stringoptional
        Pending, 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
      • invitationExpireTimeStamp
        stringoptional
        No description.
        nullable
      • signerName
        stringoptional
        No description.
        nullable
      • rejectReason
        stringoptional
        No description.
        nullable
      • esignLink
        stringoptional
        No description.
        nullable
      • aadhaarAuditInfo
        objectoptional
        No description.
        12 fields
        • name
          stringoptional
          No description.
          nullable
        • pincode
          stringoptional
          No description.
          nullable
        • state
          stringoptional
          No description.
          nullable
        • yearOfBirth
          stringoptional
          No description.
          nullable
        • gender
          stringoptional
          No description.
          nullable
        • title
          stringoptional
          No description.
          nullable
        • serialNumber
          stringoptional
          No description.
          nullable
        • issuerName
          stringoptional
          No description.
          nullable
        • issuerOrganization
          stringoptional
          No description.
          nullable
        • validityStart
          stringoptional
          No description.
          nullable
        • validityEnd
          stringoptional
          No description.
          nullable
        • message
          stringoptional
          No description.
          nullable
      • failure
        objectoptional
        No description.
        4 fields
        • code
          stringoptional
          Stable 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
        • reason
          stringoptional
          No description.
          nullable
        • providerErrorCode
          stringoptional
          The provider's own error code, unchanged, when it sent one.
          nullable
        • occurredAt
          stringoptional
          UTC, ISO 8601, when known.
          nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "documentId": "string", "documentReferenceId": "string", "content": "string", "documentStatus": "string", "signerInfo": [ { "signerRefId": "string", "signerId": "string", "signerStatus": "string", "invitationExpireTimeStamp": "string", "signerName": "string", "rejectReason": "string", "esignLink": "string", "aadhaarAuditInfo": { "name": "string", "pincode": "string", "state": "string", "yearOfBirth": "string", "gender": "string", "title": "string", "serialNumber": "string", "issuerName": "string", "issuerOrganization": "string", "validityStart": "string", "validityEnd": "string", "message": "string" }, "failure": { "code": "string", "reason": "string", "providerErrorCode": "string", "occurredAt": "string" } } ] }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/status' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string", "documentReferenceId": "string" }'
POST

/api/v1/eSign/revoke

#

Revokes an active eSign request, making the signing links invalid.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-revoke

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. 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
{ "documentId": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    stringoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": "string", "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/revoke' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string" }'
POST

/api/v1/eSign/reinititate

#

Re-initiates an eSign workflow with updated document or signer information.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-reinititate

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentInfo
    objectoptional
    No description.
    3 fields
    • documentId
      stringrequired
      Required. ID (GUID) of the existing document to re-initiate. The document must be in Revoked status.
      nullable
    • name
      stringrequired
      Required. Display name of the document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • content
      stringrequired
      Required. Base64-encoded content of the PDF. Must be a valid PDF of at most 20 MB.
      nullable
  • supportingDocuments
    array<object>optional
    Optional. Reference files signers can view but do not sign. Each item needs name, contentType and content.
    nullable
    Each item: 3 fields
    • name
      stringconditional
      Conditional: required when supportingDocuments is sent. Name of the supporting document. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • contentType
      stringconditional
      Conditional: 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
    • content
      stringconditional
      Conditional: required when supportingDocuments is sent. Base64-encoded PDF, PNG or JPEG file. PDF up to 10 MB, images up to 1 MB.
      nullable
  • sequentialSigning
    booleanoptional
    Optional. 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
  • userInfo
    array<object>required
    Required. 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
    • name
      stringrequired
      Required. Full name of the signer or reviewer. Allowed characters: letters, numbers, spaces and , @ _ . ' - ( ) [ ].
      nullable
    • emailId
      stringconditional
      Conditional: required unless mobileNo is sent (always required on /reinititate). A valid email address. The signing link is sent here.
      nullable
    • userType
      stringrequired
      Required. Allowed values: Signer, Reviewer (case-sensitive). At least one entry must be a Signer.
      nullable
    • signatureType
      stringconditional
      Conditional: required when userType is Signer; not used for Reviewer. Allowed values: Digital (hardware USB token DSC), Aadhaar, Electronic (case-sensitive).
      nullable
    • electronicOptions
      objectoptional
      No description.
      5 fields
      • canDraw
        booleanoptional
        Optional. Allows the signer to draw their signature. Possible values: True/False. Default: True.
      • canType
        booleanoptional
        Optional. Allows the signer to type their signature. Possible values: True/False. Default: True.
      • canUpload
        booleanoptional
        Optional. Allows the signer to upload a signature image. Possible values: True/False. Default: True.
      • captureGPSLocation
        booleanoptional
        Optional. Captures the signer's GPS location during signing. Possible values: True/False. Default: False.
      • capturePhoto
        booleanoptional
        Optional. Captures the signer's photo during signing. Possible values: True/False. Default: False.
    • aadhaarInfo
      objectoptional
      No description.
      8 fields
      • verifyInvitee
        booleanoptional
        Optional. Defaults to false. Set true to verify the signer's identity against the details in this object before signing.
      • birthYear
        stringoptional
        Optional. 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
      • lastFourDigitOfAadhaar
        stringoptional
        Optional. Last 4 digits of the signer's Aadhaar number, as a 4-digit string. Used to verify the signer when verifyInvitee is true.
        nullable
      • gender
        stringoptional
        Optional. Gender of the signer. Allowed values: M (Male), F (Female), T (Transgender). Used to verify the signer when verifyInvitee is true.
        nullable
      • verifyName
        booleanoptional
        Optional. Defaults to false. When true, the signer's name is verified against the Aadhaar record.
      • smartNameVerify
        booleanoptional
        Optional. Defaults to false. When true, name verification tolerates minor spelling differences.
      • pincode
        stringoptional
        Optional. Pincode of the signer's address, to verify against the Aadhaar record.
        nullable
      • state
        stringoptional
        Optional. State of the signer's address, to verify against the Aadhaar record.
        nullable
    • aadhaarOptions
      objectoptional
      No description.
      4 fields
      • otp
        booleanoptional
        Optional. Enables OTP-based Aadhaar authentication. Possible values: True/False. Default: True.
      • biometricThumbScan
        booleanoptional
        Optional. Enables biometric thumb scan for Aadhaar authentication. Possible values: True/False. Default: False.
      • irisScan
        booleanoptional
        Optional. Enables iris scan for Aadhaar authentication. Possible values: True/False. Default: False.
      • face
        booleanoptional
        Optional. Enables face recognition for Aadhaar authentication. Possible values: True/False. Default: False.
    • expiryDate
      stringoptional
      Optional. 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
    • emailReminderDays
      stringoptional
      Optional. Number of days before expiryDate to send email reminders. Allowed values: 1 to 7, sent as a string (for example "3").
      nullable
    • mobileNo
      stringconditional
      Conditional: 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
    • order
      integer (int32)conditional
      Conditional: 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
    • userReferenceId
      stringrequired
      Required. Your own ID for this signer. Letters, numbers, hyphen (-) and underscore (_) only, 1 to 64 characters. Returned as signerRefId in status responses.
      nullable
    • signAppearance
      integer (int32)optional
      Position 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
    • pageToBeSigned
      integer (int32)optional
      Defines 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
    • pageNumber
      stringconditional
      Conditional: required when pageToBeSigned is SPECIFY. Page numbers separated by a hyphen (-), for example "1-2-3".
      nullable
    • pageCoordinates
      array<object>conditional
      Conditional: 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
      • pageNumber
        integer (int32)required
        Required. 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.
      • pdfCoordinates
        array<object>required
        Required. Signature box rectangles for this page. At least one entry.
        nullable
        Each item: 4 fields
        • x1
          number (float)required
          Required. Left position of the signature box on the page.
        • y1
          number (float)required
          Required. Top position of the signature box on the page.
        • x2
          number (float)required
          Required. Width of the signature box.
        • y2
          number (float)required
          Required. Height of the signature box.
    • signatorySealInfo
      objectoptional
      No description.
      2 fields
      • name
        stringoptional
        Optional. Organization name printed in the seal text, for example ABC Pvt Ltd.
        nullable
      • sealType
        integer (int32)optional
        Optional. Label shown below the signature: 1 = Authorised Signatory, 2 = Director, 3 = Company Seal. Any other value is rejected.
        nullable
  • descriptionForInvitee
    stringoptional
    Optional. Comments for the document which will be displayed in email for signer/reviewer.
    nullable
  • finalCopyRecipientsEmailId
    stringoptional
    Optional. Comma-separated email addresses that receive the signed document after all parties have signed.
    nullable
  • responseUrl
    stringoptional
    Optional. Webhook URL that receives the signing status callbacks.
    nullable
  • returnUrl
    stringoptional
    Optional. 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
  • skipVerificationCode
    booleanoptional
    Optional. Defaults to false. When true, the signer is not asked for the verification code (OTP) when opening the signing link.
  • emailTemplateCode
    integer (int32)optional
    Optional. Custom email template for the signing invitation: 1 = Offer Letter, 2 = Employee Docs. Omit or send 0 for the default template.
  • isAttachRequestSignDocument
    booleanoptional
    Optional. Defaults to false. When true, the PDF is attached to the signing invitation email.
  • senderName
    stringoptional
    Optional. Sender name shown in the invitation email.
    nullable
Sample request body
{ "documentInfo": { "documentId": "string", "name": "string", "content": "string" }, "supportingDocuments": [ { "name": "string", "contentType": "string", "content": "string" } ], "sequentialSigning": false, "userInfo": [ { "name": "string", "emailId": "string", "userType": "string", "signatureType": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "expiryDate": "string", "emailReminderDays": "string", "mobileNo": "string", "order": 0, "userReferenceId": "string", "signAppearance": 1, "pageToBeSigned": 1, "pageNumber": "string", "pageCoordinates": [ { "pageNumber": 0, "pdfCoordinates": [ { "x1": null, "y1": null, "x2": null, "y2": null } ] } ], "signatorySealInfo": { "name": "string", "sealType": 0 } } ], "descriptionForInvitee": "string", "finalCopyRecipientsEmailId": "string", "responseUrl": "string", "returnUrl": "string", "skipVerificationCode": false, "emailTemplateCode": 0, "isAttachRequestSignDocument": false, "senderName": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    6 fields
    • documentId
      stringoptional
      No description.
      nullable
    • documentReferenceId
      stringoptional
      No description.
      nullable
    • responseTimeStamp
      stringoptional
      No description.
      nullable
    • userInfo
      array<object>optional
      No description.
      nullable
      Each item: 3 fields
      • userRefId
        stringoptional
        No description.
        nullable
      • userId
        stringoptional
        No description.
        nullable
      • esignLink
        stringoptional
        No description.
        nullable
    • uiModeURL
      stringoptional
      No description.
      nullable
    • stampDetails
      objectoptional
      SHCIL eStamp certificate details returned in the Template+SHCIL response.
      7 fields
      • eStampId
        string (uuid)optional
        No description.
        nullable
      • reconMappingId
        stringoptional
        No description.
        nullable
      • userDocumentId
        integer (int64)optional
        No description.
        nullable
      • certId
        stringoptional
        No description.
        nullable
      • urn
        stringoptional
        No description.
        nullable
      • certificateNo
        stringoptional
        No description.
        nullable
      • certificateIssuedDate
        stringoptional
        No description.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "documentId": "string", "documentReferenceId": "string", "responseTimeStamp": "string", "userInfo": [ { "userRefId": "string", "userId": "string", "esignLink": "string" } ], "uiModeURL": "string", "stampDetails": { "eStampId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "reconMappingId": "string", "userDocumentId": 0, "certId": "string", "urn": "string", "certificateNo": "string", "certificateIssuedDate": "string" } }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/reinititate' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentInfo": { "documentId": "string", "name": "string", "content": "string" }, "supportingDocuments": [ { "name": "string", "contentType": "string", "content": "string" } ], "sequentialSigning": false, "userInfo": [ { "name": "string", "emailId": "string", "userType": "string", "signatureType": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "expiryDate": "string", "emailReminderDays": "string", "mobileNo": "string", "order": 0, "userReferenceId": "string", "signAppearance": 1, "pageToBeSigned": 1, "pageNumber": "string", "pageCoordinates": [ { "pageNumber": 0, "pdfCoordinates": [ { "x1": null, "y1": null, "x2": null, "y2": null } ] } ], "signatorySealInfo": { "name": "string", "sealType": 0 } } ], "descriptionForInvitee": "string", "finalCopyRecipientsEmailId": "string", "responseUrl": "string", "returnUrl": "string", "skipVerificationCode": false, "emailTemplateCode": 0, "isAttachRequestSignDocument": false, "senderName": "string" }'
POST

/api/v1/eSign/extendExpiry

#

Extends the signing deadline for the signers of a document.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-extendexpiry

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. Unique identifier (GUID) of the document whose signing deadline should be extended. The document must be pending or expired.
    nullable
  • days
    integer (int32)required
    Required. 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
{ "documentId": "string", "days": 0 }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    stringoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": "string", "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/extendExpiry' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string", "days": 0 }'
POST

/api/v1/eSign/disable-sequential-signing

#

Switches a document from sequential to parallel signing so every remaining signer can sign at once.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-disable-sequential-signing

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. 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
{ "documentId": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Result of switching a document to parallel signing.
    6 fields
    • documentId
      stringoptional
      Document the request was made against.
      nullable
    • sequentialSigning
      booleanoptional
      Always false โ€” the call only ever switches signing to parallel.
    • documentsUpdated
      integer (int32)optional
      Documents switched, including the siblings sharing the envelope.
    • signersEnabled
      integer (int32)optional
      Signers released for signing and notified by this call. Zero when reviewers are still pending โ€” those signers are released together once the last reviewer approves.
    • awaitingReviewers
      booleanoptional
      True when reviewers are still pending, so signers were not released yet.
    • signers
      array<object>optional
      The signers released by this call.
      nullable
      Each item: 4 fields
      • signerRefId
        stringoptional
        Your own reference for this signer, as passed in UserReferenceId.
        nullable
      • signerId
        stringoptional
        SignCare identifier of the signer slot.
        nullable
      • signerName
        stringoptional
        Name the invitation was addressed to.
        nullable
      • documentId
        stringoptional
        Document the slot belongs to.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "documentId": "string", "sequentialSigning": false, "documentsUpdated": 0, "signersEnabled": 0, "awaitingReviewers": false, "signers": [ { "signerRefId": "string", "signerId": "string", "signerName": "string", "documentId": "string" } ] }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/disable-sequential-signing' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string" }'
POST

/api/v1/eSign/change-signature-type

#

Updates a pending signer: signature type (Electronic, Aadhaar, Digital), its options, name, and email/mobile.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-change-signature-type

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. Unique identifier (GUID) of the pending document the signer belongs to. The same signer is changed on every document in the envelope.
    nullable
  • userRefId
    stringrequired
    Required. 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
  • signatureType
    stringoptional
    Optional. 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
  • name
    stringoptional
    Optional. The signer's name. Required when emailId or mobileNo changes the person.
    nullable
  • emailId
    stringoptional
    Optional. 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
  • mobileNo
    stringoptional
    Optional. 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
  • electronicOptions
    objectoptional
    Electronic signing options for a signer.
    5 fields
    • canDraw
      booleanoptional
      Optional. Allows the signer to draw their signature. Default: true.
    • canType
      booleanoptional
      Optional. Allows the signer to type their signature. Default: true.
    • canUpload
      booleanoptional
      Optional. Allows the signer to upload a signature image. Default: true.
    • captureGPSLocation
      booleanoptional
      Optional. Captures the signer's GPS location during signing. Default: false.
    • capturePhoto
      booleanoptional
      Optional. Captures the signer's photo during signing. Default: false.
  • aadhaarOptions
    objectoptional
    Aadhaar authentication modes for a signer. At least one must be enabled.
    4 fields
    • otp
      booleanoptional
      Optional. OTP-based Aadhaar authentication. Default: true.
    • biometricThumbScan
      booleanoptional
      Optional. Biometric thumb scan. Default: false.
    • irisScan
      booleanoptional
      Optional. Iris scan. Default: false.
    • face
      booleanoptional
      Optional. Face authentication. Default: false.
  • aadhaarInfo
    objectoptional
    Details to verify an Aadhaar signer against their Aadhaar record.
    8 fields
    • verifyInvitee
      booleanoptional
      Optional. Set true to verify the signer against these details before signing. Default: false.
    • birthYear
      stringoptional
      Optional. Birth year as a 4-digit string (1900-2099), for example "1990".
      nullable
    • lastFourDigitOfAadhaar
      stringoptional
      Optional. Last 4 digits of the signer's Aadhaar number.
      nullable
    • gender
      stringoptional
      Optional. M (Male), F (Female) or T (Transgender).
      nullable
    • verifyName
      booleanoptional
      Optional. Verify the signer's name against the Aadhaar record. Default: false.
    • smartNameVerify
      booleanoptional
      Optional. Tolerate minor spelling differences in the name check. Default: false.
    • pincode
      stringoptional
      Optional. Pincode of the signer's address.
      nullable
    • state
      stringoptional
      Optional. State of the signer's address.
      nullable
  • reason
    stringrequired
    Required. Why the signer is being changed, 1 to 250 characters. Recorded in the audit trail.
    nullable
  • notifySigner
    booleanoptional
    Optional. 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
{ "documentId": "string", "userRefId": "string", "signatureType": "string", "name": "string", "emailId": "string", "mobileNo": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "reason": "string", "notifySigner": false }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Result of changing a signer's signature type or options.
    13 fields
    • documentId
      stringoptional
      Document the request was made against.
      nullable
    • userId
      stringoptional
      The 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
    • userRefId
      stringoptional
      Your own reference for the signer. Never changed by this call.
      nullable
    • signerName
      stringoptional
      Name of the signer after the call.
      nullable
    • previousSignatureType
      stringoptional
      The signature type before the call: "Electronic", "Aadhaar" or "Digital".
      nullable
    • signatureType
      stringoptional
      The signature type after the call.
      nullable
    • signatureTypeChanged
      booleanoptional
      True when the signature type changed.
    • optionsChanged
      booleanoptional
      True when the signature type's options changed.
    • nameChanged
      booleanoptional
      True when the signer's name changed.
    • contactChanged
      booleanoptional
      True when the email/mobile changed. When it names a different person, the previous person's links no longer work.
    • esignLink
      stringoptional
      The 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
    • documentsUpdated
      integer (int32)optional
      Documents changed, including the other documents in the envelope.
    • invitationSent
      booleanoptional
      True 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.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "documentId": "string", "userId": "string", "userRefId": "string", "signerName": "string", "previousSignatureType": "string", "signatureType": "string", "signatureTypeChanged": false, "optionsChanged": false, "nameChanged": false, "contactChanged": false, "esignLink": "string", "documentsUpdated": 0, "invitationSent": false }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
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
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/change-signature-type' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string", "userRefId": "string", "signatureType": "string", "name": "string", "emailId": "string", "mobileNo": "string", "electronicOptions": { "canDraw": false, "canType": false, "canUpload": false, "captureGPSLocation": false, "capturePhoto": false }, "aadhaarOptions": { "otp": false, "biometricThumbScan": false, "irisScan": false, "face": false }, "aadhaarInfo": { "verifyInvitee": false, "birthYear": "string", "lastFourDigitOfAadhaar": "string", "gender": "string", "verifyName": false, "smartNameVerify": false, "pincode": "string", "state": "string" }, "reason": "string", "notifySigner": false }'
POST

/api/v1/eSign/resendInvitation

#

Resends the signing invitation link to a participant.

docs.signcare.io/core/api/esign/esign-api-suite/#post-api-v1-esign-resendinvitation

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • documentId
    stringrequired
    Required. Unique identifier (GUID) of the pending document for which the invitation should be resent.
    nullable
Sample request body
{ "documentId": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    stringoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": "string", "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/eSign/resendInvitation' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "documentId": "string" }'
GET

/api/v1/eSign/audittrail/{documentId}

#

Retrieves the comprehensive audit trail for a specific document.

docs.signcare.io/core/api/esign/esign-api-suite/#get-api-v1-esign-audittrail-documentid

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-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.

Path parameters

  • documentId
    stringrequired
    No description.

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    stringoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether 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.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": "string", "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Requestsame body as 200
401Unauthorizedsame body as 200
500Internal Server Errorsame body as 200
Code samplescurl ยท Node.js ยท Python
Stage: uat-ext.signcare.io
curl -X GET 'https://uat-ext.signcare.io/api/v1/eSign/audittrail/{documentId}' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID'