> **Source:** https://knowledge.leegality.com/document-execution/api/create-pack-sync > **Site:** Leegality Knowledge Base — https://knowledge.leegality.com > **About:** Leegality is a document execution platform covering eSigning, stamps, NeSL, workflows, and REST API integration. > **Navigation:** Every article on this site has a plain-text version at `.txt` (this format). To get an index of all articles with their `.txt` links, read: https://knowledge.leegality.com/llms.txt > **AI Guide:** For instructions on how to navigate this knowledge base as an AI agent, read: https://knowledge.leegality.com/ai-readable.txt --- # POST /v4/pack/sync — Send Pack for eSigning (Sync) :::info[Sandbox endpoint] **Authentication:** `X-Auth-Token` header required on every request. ## Request URL ``` POST https://app1.leegality.com/api/v4/pack/sync ``` **Environments:** - Production: `https://app1.leegality.com/api/v4/pack/sync` - Sandbox: `https://sandbox.leegality.com/api/v4/pack/sync` --- ## Request Body **Content-Type:** `application/json` Request body for the synchronous send-pack API. Same structure as the async **Send Pack for eSigning (Async)** request, except each file is provided directly as **base64-encoded content** in a `file` field (instead of a pre-uploaded `mediaId`). | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `workflowId` | string | Yes | ID of the published Workflow to execute. The pack is created and sent according to this Workflow's configuration. The dashboard shows a short form of this ID (for example, `70843c25`); to get the full value, [download the workflow's API payload](https://knowledge.leegality.com/document-execution/api/download-v4-api-payload) from the dashboard. **Required.** | `70843c25-8d80-40ac-ab6b-edba12abd495` | | `pack` | object | Yes | Pack-level details: metadata, custom fields, and `signingOrder`. The pack is the top-level container for all primary documents sent together in one run. **Required.** See **pack** below. | — | | `documents` | array\ | Yes | Primary documents in the pack, each with its sub-documents, stamps, and attachments. Each primary document is signed independently. **Required.** See **documents** below. | — | | `invitees` | array\ | Yes | Configure invitee details. See **invitees** below. | — | | `cc` | array\ | No | CC recipients — a top-level sibling of `invitees`. CC recipients receive notifications but do not sign or review. See **cc** below. | — | | `coordinates` | array\ | No | Signature placement. **Optional** — the backend resolves placement from the workflow config when omitted. Each entry positions one invitee's signature appearance(s). See **coordinates** below. | — | #### pack Pack-level details: metadata, custom fields, and `signingOrder`. The pack is the top-level container for all primary documents sent together in one run. **Required.** | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `packName` | string | Yes | Display name for the pack, shown to invitees and in the dashboard. **Required.** - Max 255 characters. - Allowed characters: letters, digits, spaces, and `+ @ \| - : ( ) , _ . [ ] & /`. | `Home Loan Agreement - Rajesh Kumar` | | `packIrn` | string | No | Your Internal Reference Number for the pack (for compliance/reconciliation against your own records). | `IRN-2026-001234` | | `urn` | string | No | Your Unique Reference Number for the pack. Must be unique within your account — you can't create two packs with the same URN. | `21312313131` | | `packFolderId` | string | No | ID of the folder where you want to keep the pack. You'll find it in your Leegality Dashboard's Folder section on the left. | `K4wFolder` | | `deleteOnComplete` | boolean | No | Set to `true` to automatically delete the pack's documents from Leegality once the pack is completed. | `false` | | `sftpProfileId` | string | No | ID (UUID) of a pre-configured SFTP profile to which signed files are delivered on completion. | `07aba168-b55b-4889-bddf-9012fa853e61` | | `brandingProfileId` | string | No | ID of a branding profile that controls the look and feel (logo, colours) of the signing journey. | `branding-001` | | `lecf_loanId` | string | No | Custom field at pack level. `lecf_`-prefixed fields are available **only if the corresponding custom fields have been added to the Workflow** (they cannot be added at runtime). Example shown is a loan ID. | `LOAN-2026-5678` | | `lecf_branchCode` | string | No | Custom field at pack level. `lecf_`-prefixed fields are available **only if the corresponding custom fields have been added to the Workflow**. Example shown is a branch code. | `MUM-001` | | `signingOrder` | object | No | Signing-order settings. Must live **inside** `pack`. See **signingOrder** below. | — | ##### signingOrder Signing-order settings. Must live **inside** `pack`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `setSigningOrder` | boolean | Yes | Whether signing order is enforced. When `true`, level ordering (`level`) is enforced; when `false`, all invitees are active in parallel. **Required** within `signingOrder`. | `true` | | `preventChangesToSigningOrder` | boolean | No | Set to `true` to lock the signing order so it cannot be changed after sending (also blocks out-of-order activation). Default: `false`. | `false` | | `setAdvanceSigningOrder` | boolean | No | Set to `true` to enable advanced signing order. | `false` | #### documents | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this document. Leegality generates it if the document is already configured in the workflow. If the workflow creator allows adding documents and you add one while sending, generate a new UUID v4 yourself. Other items refer to this document by `documentUuid`. | `711abfff-2057-48ac-909e-519f3f7415a4` | | `documentName` | string | Yes | Display name of the primary document. **Required.** | `Loan Agreement` | | `irn` | string | No | Document-level Internal Reference Number. | `DOC-IRN-001` | | `documentFolderId` | string | No | ID of the folder where you want to keep this document. You'll find it in your Leegality Dashboard's Folder section on the left. | `K4wKEBB` | | `subDocuments` | array\ | Yes | Sub-documents that make up this primary document. Each is an individual file (or a template) combined into the single primary document the invitee signs. **Required.** To leave a sub-document out of the pack, don't add its object to this array. See **subDocuments** below. | — | | `stamps` | object | No | Document-level stamp configuration (stamps applied at the primary-document scope). Turned on by the master `enableStamp` flag, with each subtype turned on by its own `enable…` flag. See **stamps** below. | — | | `referenceAttachment` | object | No | Reference attachments shown to invitees alongside the document for context (not signed). See **referenceAttachment** below. | — | | `lecf_documentCategory` | string | No | Custom field at document level. `lecf_`-prefixed fields are available **only if the corresponding custom fields have been added to the Workflow**. Example shown is a document category. | `CONTRACT` | ##### subDocuments | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this sub-document. Leegality generates it if the sub-document is already configured in the workflow. If the workflow creator allows adding sub-documents and you add one while sending, generate a new UUID v4 yourself. Other items refer to this sub-document by `subDocumentUuid`. | `795df69d-12c9-4959-be9a-9a73a2e1dd30` | | `templateId` | string | No | ID of the template to use for this sub-document. **Required when the sub-document is a template** (instead of `mediaId`). | `tpl_mapping_abc123` | | `templateVersion` | string | No | Version of the template to use, for example `1.0`. Applies when the sub-document is a template. | `1.0` | | `allowFirstInviteeToFill` | boolean | No | Set to `true` to let the first invitee fill the template fields during signing instead of pre-filling them via the API. | `true` | | `templateFieldValues` | array\ | No | Values used to pre-fill the template's fields. Each entry is `{ fieldId, fieldValue, fieldName }`. Applies when the sub-document is a template. See **templateFieldValues** below. | — | | `enableRevenueStamp` | boolean | No | Set to `true` to apply a revenue stamp (provide `revenueStamp`). When `false`, any `revenueStamp` sent in the request is ignored. When `true`, a valid `revenueStamp` is required. | `true` | | `revenueStamp` | object | No | Revenue stamp configuration. Active when `enableRevenueStamp = true`. Can be used together with `stampSeries` or `stampGroup`, but not with `stampUpload`. See **revenueStamp** below. | — | | `enableStampSeries` | boolean | No | Set to `true` to stamp from a stamp series (provide the `stampSeries` array). When `false`, any `stampSeries` sent in the request is ignored. When `true`, a valid `stampSeries` is required. | `true` | | `stampSeries` | array\ | No | Attach stamps from one or more stamp series. Active when `enableStampSeries = true`. Each entry takes a stamp series number (`stampSeriesId`) and how many stamps to use from it (`stampQuantities`). Works together with `stampGroup`, but not with `stampUpload`. See **stampSeries** below. | — | | `enableStampUpload` | boolean | No | Set to `true` to use an uploaded stamp paper (provide `stampUpload`). When `false`, any `stampUpload` sent in the request is ignored. When `true`, a valid `stampUpload` is required. | `true` | | `stampUpload` | object | No | Uploaded stamp-paper configuration. Active when `enableStampUpload = true`. Cannot be used with any other stamp type. When `stampUpload` is provided, `stampUploadedFile` and its `file` are required. See **stampUpload** below. | — | | `enableStampGroup` | boolean | No | Set to `true` to stamp from a stamp group (provide `stampGroup`). When `false`, any `stampGroup` sent in the request is ignored. When `true`, a valid `stampGroup` is required. | `true` | | `stampGroup` | object | No | eStamp from a stamp group. Active when `enableStampGroup = true`. Can be used together with `stampSeries`, but not with `stampUpload`. See **stampGroup** below. | — | | `file` | string | No | A media ID (from the [Upload media API](https://knowledge.leegality.com/document-execution/api/upload-media)) or the file's base64-encoded content. Allowed format: PDF. **Required for non-template sub-documents.** | `JVBERi0xLjQKJeLjz9MK…(base64-encoded file)` | ###### templateFieldValues | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `fieldId` | string | No | ID of the template field to fill. The server identifies the field by `fieldId`. | `f1a23456-78bc-4def-9012-3456789abcde` | | `fieldValue` | string | No | Value to insert into the template field. For a `file`-type field, pass a `mediaId` (from the [Upload media API](https://knowledge.leegality.com/document-execution/api/upload-media), uploaded with `mediaType: TEMPLATE_FILE_TYPE_FIELD`) or the file's base64-encoded content. | `Rajesh Kumar` | | `fieldName` | string | No | Human-readable field name. **Informational only** — the server identifies the field by `fieldId`; `fieldName` is not used for processing. | `borrower name` | ###### revenueStamp Revenue stamp configuration. Active when `enableRevenueStamp = true`. Can be used together with `stampSeries` or `stampGroup`, but not with `stampUpload`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `revenueStampQuantity` | integer | No | Number of revenue stamps to attach. | `1` | | `revenueStampId` | string | No | ID of the revenue stamp to use. | `10` | ###### stampSeries | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this stamp-series entry. Leegality generates it if the stamp-series entry is already configured in the workflow. If the workflow creator allows adding stamp-series entries and you add one while sending, generate a new UUID v4 yourself. Required whenever a `stampSeries` entry is included. | `0a1b2c3d-4e5f-4abc-8def-0123456789ab` | | `stampSeriesId` | string | No | Stamp Series Number. | `01` | | `stampQuantities` | integer | No | Number of stamps you want to attach. | `1` | ###### stampUpload Uploaded stamp-paper configuration. Active when `enableStampUpload = true`. Cannot be used with any other stamp type. When `stampUpload` is provided, `stampUploadedFile` and its `file` are required. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `stampUploadState` | string | No | State code the stamp paper was purchased in (for example, `PB`). | `PB` | | `stampUploadedFile` | object | No | The uploaded stamp-paper file. See **stampUploadedFile** below. | — | | `stampUploadDenomination` | integer | No | Face value (denomination) of the uploaded stamp paper. | `100` | | `stampUploadFirstPartyName` | string | No | First party name printed on the stamp paper. | `John Doe` | | `stampUploadSecondPartyName` | string | No | Second party name printed on the stamp paper. | `Jane Smith` | | `stampUploadSerialNumber` | string | No | Serial number of the uploaded stamp paper. | `123` | ###### stampUploadedFile The uploaded stamp-paper file. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `file` | string | No | A media ID (from the [Upload media API](https://knowledge.leegality.com/document-execution/api/upload-media)) or the file's base64-encoded content. Allowed format: PDF. | `JVBERi0xLjQKJeLjz9MK…(base64-encoded file)` | ###### stampGroup eStamp from a stamp group. Active when `enableStampGroup = true`. Can be used together with `stampSeries`, but not with `stampUpload`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `stampGroupId` | string | No | ID of the stamp group to use. | `PB01` | | `stampGroupAmount` | integer | No | Stamp duty amount you want to attach. | `1` | ##### stamps Document-level stamp configuration (stamps applied at the primary-document scope). Turned on by the master `enableStamp` flag, with each subtype turned on by its own `enable…` flag. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableStamp` | boolean | No | Set to `true` to enable stamping for this document; controls both document-level and sub-document-level stamps. A subtype is applied only when its own `enable…` flag is also `true` with valid config. A document can use **either** document-level stamping **or** sub-document-level stamping — both cannot be enabled together. When `false`, no stamps are applied to this document; any stamp config sent is ignored. When `true`, at least one stamp subtype must be enabled with valid config. | `true` | | `enableRevenueStamp` | boolean | No | Set to `true` to apply a revenue stamp (provide `revenueStamp`). When `false`, any `revenueStamp` sent in the request is ignored. When `true`, a valid `revenueStamp` is required. | `true` | | `revenueStamp` | object | No | Revenue stamp configuration. Active when `enableRevenueStamp = true`. Can be used together with `stampSeries` or `stampGroup`, but not with `stampUpload`. See **revenueStamp** below. | — | | `enableStampSeries` | boolean | No | Set to `true` to stamp from a stamp series (provide the `stampSeries` array). When `false`, any `stampSeries` sent in the request is ignored. When `true`, a valid `stampSeries` is required. | `true` | | `stampSeries` | array\ | No | Attach stamps from one or more stamp series. Active when `enableStampSeries = true`. Each entry takes a stamp series number (`stampSeriesId`) and how many stamps to use from it (`stampQuantities`). Works together with `stampGroup`, but not with `stampUpload`. See **stampSeries** below. | — | | `enableStampGroup` | boolean | No | Set to `true` to stamp from a stamp group (provide `stampGroup`). When `false`, any `stampGroup` sent in the request is ignored. When `true`, a valid `stampGroup` is required. | `true` | | `stampGroup` | object | No | eStamp from a stamp group. Active when `enableStampGroup = true`. Can be used together with `stampSeries`, but not with `stampUpload`. See **stampGroup** below. | — | | `enableStampUpload` | boolean | No | Set to `true` to use an uploaded stamp paper (provide `stampUpload`). When `false`, any `stampUpload` sent in the request is ignored. When `true`, a valid `stampUpload` is required. | `true` | | `stampUpload` | object | No | Uploaded stamp-paper configuration. Active when `enableStampUpload = true`. Cannot be used with any other stamp type. When `stampUpload` is provided, `stampUploadedFile` and its `file` are required. See **stampUpload** below. | — | ###### revenueStamp Revenue stamp configuration. Active when `enableRevenueStamp = true`. Can be used together with `stampSeries` or `stampGroup`, but not with `stampUpload`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `revenueStampQuantity` | integer | No | Number of revenue stamps to attach. | `1` | | `revenueStampId` | string | No | ID of the revenue stamp to use. | `10` | ###### stampSeries | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this stamp-series entry. Leegality generates it if the stamp-series entry is already configured in the workflow. If the workflow creator allows adding stamp-series entries and you add one while sending, generate a new UUID v4 yourself. Required whenever a `stampSeries` entry is included. | `1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5e` | | `stampSeriesId` | string | No | Stamp Series Number. | `01` | | `stampQuantities` | integer | No | Number of stamps you want to attach. | `1` | ###### stampGroup eStamp from a stamp group. Active when `enableStampGroup = true`. Can be used together with `stampSeries`, but not with `stampUpload`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `stampGroupId` | string | No | ID of the stamp group to use. | `PB01` | | `stampGroupAmount` | integer | No | Stamp duty amount you want to attach. | `10` | ###### stampUpload Uploaded stamp-paper configuration. Active when `enableStampUpload = true`. Cannot be used with any other stamp type. When `stampUpload` is provided, `stampUploadedFile` and its `file` are required. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `stampUploadSerialNumber` | string | No | Serial number of the uploaded stamp paper. | `SERIAL001` | | `stampUploadFirstPartyName` | string | No | First party name printed on the stamp paper. | `Alice` | | `stampUploadDenomination` | integer | No | Face value (denomination) of the uploaded stamp paper. | `100` | | `stampUploadedFile` | object | No | The uploaded stamp-paper file. See **stampUploadedFile** below. | — | | `stampUploadState` | string | No | State code the stamp paper was purchased in (for example, `PB`). | `PB` | | `stampUploadSecondPartyName` | string | No | Second party name printed on the stamp paper. | `Bob` | ###### stampUploadedFile The uploaded stamp-paper file. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `file` | string | No | A media ID (from the [Upload media API](https://knowledge.leegality.com/document-execution/api/upload-media)) or the file's base64-encoded content. Allowed format: PDF. | `JVBERi0xLjQKJeLjz9MK…(base64-encoded file)` | ##### referenceAttachment Reference attachments shown to invitees alongside the document for context (not signed). | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableReferenceAttachment` | boolean | No | Set to `true` to attach reference files (provide `referenceAttachmentFiles`). When `false`, any `referenceAttachmentFiles` sent in the request is ignored. When `true`, a valid `referenceAttachmentFiles` is required. | `true` | | `referenceAttachmentFiles` | array\ | No | Files to attach for reference. Each entry is `{ uuid, mediaId, fileName }`. See **referenceAttachmentFiles** below. | — | ###### referenceAttachmentFiles | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this reference attachment. Leegality generates it if the reference attachment is already configured in the workflow. If the workflow creator allows adding reference attachments and you add one while sending, generate a new UUID v4 yourself. | `23c96e97-813a-4a6c-9c37-e939f54d597d` | | `file` | string | Yes | A media ID (from the [Upload media API](https://knowledge.leegality.com/document-execution/api/upload-media)) or the file's base64-encoded content. Allowed formats: PDF, PNG, JPEG, JPG. | `JVBERi0xLjQKJeLjz9MK…(base64-encoded file)` | #### invitees | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this invitee. Leegality generates it if the invitee is already configured in the workflow. If the workflow creator allows adding invitees and you add one while sending, generate a new UUID v4 yourself. Other items refer to this invitee by `inviteeUuid`. | `8bc21487-b200-4130-8240-a5f1715244dc` | | `type` | string | Yes | Type of invitee. One of `signer`, `reviewer`, `groupSigner`, `groupReviewer`. Only `signer` and `groupSigner` receive sign coordinates; reviewers and group reviewers never do. **Required.** | `signer` | | `level` | integer | Yes | Signing-order level (1 = first). Enforced only when `pack.signingOrder.setSigningOrder = true`; invitees at the same level act in parallel, and the next level unlocks when the current level is satisfied. **Required.** | `1` | | `groupName` | string | No | Name of the invitee group. **Required for `groupSigner` / `groupReviewer`**; leave empty for an individual invitee. | `` | | `groupThreshold` | integer | No | Minimum number of group members that must complete the action for the group's part to be satisfied. **Required for `groupSigner` / `groupReviewer`.** | `2` | | `inviteeDetails` | array\ | Yes | The person(s) for this invitee. A single entry for an individual; multiple entries for `groupSigner` / `groupReviewer`. **Required.** See **inviteeDetails** below. | — | | `inviteeSettings` | object | No | Per-person (invitee-level) settings: security, interaction options, notifications, contact book, certificate verification, and reviewer settings. These apply to the person regardless of which documents they sign. See **inviteeSettings** below. | — | | `combinations` | array\ | Yes | Document assignments for this invitee. Each combination assigns one or more documents (with a role) and defines the eSign/experience settings for that document group. Always an array, even for a single combination. **Required.** See **combinations** below. | — | | `lecf_customerId` | string | No | Custom field at invitee level. `lecf_`-prefixed fields are available **only if the corresponding custom fields have been added to the Workflow**. Example shown is a customer ID. | `CUST-8842` | ##### inviteeDetails | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this recipient. Leegality generates it if the recipient is already configured in the workflow. If the workflow creator allows adding recipients and you add one while sending, generate a new UUID v4 yourself. | `1aa11111-1111-4111-8111-111111111111` | | `inviteeName` | string | Yes | Full name of the person. **Required.** | `Rajesh Kumar` | | `inviteeLabel` | string | No | A label for this invitee. | `borrower` | | `inviteeEmail` | string | No | Email address. **Required if email notifications are enabled.** | `rajesh@example.com` | | `inviteePhone` | string | No | The invitee's 10-digit phone number. **Required if SMS/WhatsApp notifications are enabled.** | `9820000001` | | `enableWhatsAppMandatoryNotifications` | boolean | No | Set to `true` to send mandatory notifications to this invitee over WhatsApp only. | `false` | | `lecf_employeeCode` | string | No | Custom field at the invitee-details (per-person) level. `lecf_`-prefixed fields are available **only if the corresponding custom fields have been added to the Workflow**. Example shown is an employee code. | `EMP-00921` | ##### inviteeSettings Per-person (invitee-level) settings: security, interaction options, notifications, contact book, certificate verification, and reviewer settings. These apply to the person regardless of which documents they sign. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `securityOptions` | object | No | Security controls applied to the invitee: authentication, GPS, face capture/match, OTP download link, and contact masking. See **securityOptions** below. | — | | `manageInviteInteractions` | object | No | How the invitee interacts with the signing journey: supporting documents, base/redirect URLs, rejection, custom message, and local language. See **manageInviteInteractions** below. | — | | `notifications` | object | No | Notification channel preferences for this invitee. See **notifications** below. | — | | `contactBook` | object | No | Whether to save this invitee to your account's contact book. See **contactBook** below. | — | | `certificateVerification` | object | No | Certificate-verification config performed against the invitee: Aadhaar, cloud-DSC, and DSC checks. Each enabled check must match for the signature to be accepted. See **certificateVerification** below. | — | | `reviewer` | object | No | Settings that apply when the invitee is a reviewer. See **reviewer** below. | — | ###### securityOptions Security controls applied to the invitee: authentication, GPS, face capture/match, OTP download link, and contact masking. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `oneFactorAuthentication` | boolean | No | Set to `true` to require single-factor authentication before the invitee can access the document. | `false` | | `twoFactorAuthentication` | boolean | No | Set to `true` to require two-factor authentication before the invitee can access the document. | `true` | | `gps` | object | No | Configure geofencing details. See **gps** below. | — | | `faceCapture` | object | No | Configure face capture and liveliness details. See **faceCapture** below. | — | | `docDownloadLinkWithOtp` | boolean | No | Set to `true` to protect the signed-document download link with an OTP. | `false` | | `maskContactDetails` | boolean | No | Set to `true` to mask the invitee's contact details. | `false` | ###### gps Configure geofencing details. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enabled` | boolean | No | Set to `true` to capture the signer's location during signing. When `false`, leave the other `gps` fields empty. | `true` | | `accuracyBasedRestriction` | boolean | No | Set to `true` to block signing when the device's location accuracy is worse than `accuracyThreshold`. | `true` | | `accuracyThreshold` | integer | No | Maximum acceptable location-accuracy value (metres). Applies when `accuracyBasedRestriction` is `true`. | `12` | | `locationBasedRestriction` | boolean | No | Set to `true` to restrict signing to within `permissibleRadius` of the point defined by `latitude`/`longitude`. | `true` | | `latitude` | number | No | Latitude of the allowed signing location. Applies when `locationBasedRestriction` / `enableLatLngRadius` is `true`. | `23.34` | | `longitude` | number | No | Longitude of the allowed signing location. Applies when `locationBasedRestriction` / `enableLatLngRadius` is `true`. | `72.88` | | `permissibleRadius` | integer | No | Radius (metres) around the allowed location within which signing is permitted. | `100` | | `restrictToIndia` | boolean | No | Set to `true` to allow signing only from within India. | `true` | | `enableLatLngRadius` | boolean | No | Set to `true` to enable the latitude/longitude/radius restriction. | `true` | ###### faceCapture Configure face capture and liveliness details. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enabled` | boolean | No | Set to `true` to enable face capture in the signing journey. When `false`, leave all other `faceCapture` fields empty. | `true` | | `liveliness` | boolean | No | Set to `true` to require a liveliness check during face capture. | `true` | | `smartUserLiveliness` | string | No | Set to `smart` to turn on the AI-based smart user liveliness check during face capture. Allowed: `smart`. | `smart` | | `smartUserLivelinessRetryAttempts` | integer | No | Number of retry attempts allowed for the smart liveliness check. | `3` | | `match` | boolean | No | Set to `true` to match the captured face against the reference image(s) in `faceMatch`. | `true` | | `faceMatchRetryAttempts` | integer | No | Number of retry attempts allowed for the face-match check (set at the `faceCapture` level). | `2` | | `faceMatch` | array\ | No | Reference image(s) the captured face is matched against. Each entry carries its own `uuid` and a nested `faceMatchImage`. See **faceMatch** below. | — | ###### faceMatch | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this face-match entry. Leegality generates it if the face-match entry is already configured in the workflow. If the workflow creator allows adding face-match entries and you add one while sending, generate a new UUID v4 yourself. This is the face-match entry's own ID, not the image's `mediaId`. | `3a333333-3333-4333-8333-333333333333` | | `faceMatchImage` | object | No | The reference face image the rule matches against. | — | ###### manageInviteInteractions How the invitee interacts with the signing journey: supporting documents, base/redirect URLs, rejection, custom message, and local language. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableSupportingDocs` | boolean | No | Set to `true` to require supporting documents (provide `supportingDocumentConfig`). When `false`, any `supportingDocumentConfig` sent in the request is ignored. When `true`, a valid `supportingDocumentConfig` is required. | `true` | | `supportingDocumentConfig` | object | No | Supporting documents the invitee must upload. Active when `enableSupportingDocs = true`. See **supportingDocumentConfig** below. | — | | `baseUrl` | string | No | Base URL for the signing journey. | `https://client.example.com/sign` | | `redirectUrl` | string | No | URL the invitee is redirected to after completing signing. | `https://client.example.com/sign/complete` | | `enableRejection` | boolean | No | Set to `true` to allow the invitee to reject the document. | `true` | | `enforceRejectionMessage` | boolean | No | Set to `true` to require the invitee to enter a message when rejecting. Send it only alongside `enableRejection` set to `true`. | `false` | | `enableCustomMessage` | boolean | No | Set to `true` to show a custom message (provide `customMessageInput`). When `false`, any `customMessageInput` sent in the request is ignored. When `true`, a valid `customMessageInput` is required. | `true` | | `customMessageInput` | string | No | Custom message shown to the invitee. Active when `enableCustomMessage = true`. | `Please review and sign the loan agreement.` | | `enableLocalLanguage` | boolean | No | Set to `true` to offer the signing journey in a local language (provide `languageDefaultVsSignerSelect` and `localLanguageChooseDefault`). When `false`, the `languageDefaultVsSignerSelect` and `localLanguageChooseDefault` values sent are ignored. When `true`, `languageDefaultVsSignerSelect` and `localLanguageChooseDefault` are required. | `true` | | `languageDefaultVsSignerSelect` | string | No | Whether the language is fixed by you (`default`) or chosen by the signer (`signer-select`). Present when `enableLocalLanguage = true`. | `default` | | `localLanguageChooseDefault` | string | No | Default local-language code (for example, `hi`) when `languageDefaultVsSignerSelect = default`. | `hi` | ###### supportingDocumentConfig Supporting documents the invitee must upload. Active when `enableSupportingDocs = true`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `supportingDocuments` | array\ | No | List of supporting documents requested. Each entry is `{ uuid, supportingDocName, supportingDocFormat, supportingDocSize }`. See **supportingDocuments** below. | — | | `allowViewingSupportingDocs` | boolean | No | Set to `true` to let the pack's other invitees view the supporting documents this invitee uploads. Applies when you request supporting documents from this invitee. | `true` | ###### supportingDocuments | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this supporting-document requirement. Leegality generates it if the supporting-document requirement is already configured in the workflow. If the workflow creator allows adding supporting-document requirements and you add one while sending, generate a new UUID v4 yourself. | `2a222222-2222-4222-8222-222222222222` | | `supportingDocName` | string | No | Name of the supporting document requested (for example, `ID Proof`). | `ID Proof` | | `supportingDocFormat` | string | No | Allowed file format for the supporting document (for example, `PDF`). | `PDF` | | `supportingDocSize` | integer | No | Declared size of the supporting document (bytes). | `2048` | ###### notifications Notification channel preferences for this invitee. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableSmsNotifications` | boolean | No | Set to `true` to send SMS notifications to the invitee. | `true` | | `enableEmailNotifications` | boolean | No | Set to `true` to send email notifications to the invitee. | `true` | | `enableWhatsAppNotifications` | boolean | No | Set to `true` to send WhatsApp notifications to the invitee. | `false` | ###### contactBook Whether to save this invitee to your account's contact book. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `addInviteeToContactBook` | boolean | No | Set to `true` to add the invitee to the [contact book](https://knowledge.leegality.com/document-execution/contact-book) for reuse. | `true` | | `inviteeLabel` | string | No | Label to tag the contact with (for example, `borrower`). | `borrower` | ###### certificateVerification Certificate-verification config performed against the invitee: Aadhaar, cloud-DSC, and DSC checks. Each enabled check must match for the signature to be accepted. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `aadhaarVerifyCertificateDetails` | array\ | No | Aadhaar eSign certificate checks (array of verify rules). See **aadhaarVerifyCertificateDetails** below. | — | | `cloudDscVerifyCertificateDetails` | array\ | No | Cloud-DSC certificate checks (array of verify rules). See **cloudDscVerifyCertificateDetails** below. | — | | `dscVerifyCertificateDetails` | array\ | No | DSC (Digital Signature Certificate) checks (array of verify rules). See **dscVerifyCertificateDetails** below. | — | ###### aadhaarVerifyCertificateDetails | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `aadhaarVerifyName` | boolean | No | Set to `true` to verify the signer's name against the Aadhaar record. | `false` | | `aadhaarSmartNameVerify` | boolean | No | Set to `true` to allow AI-based Smart name verification. | `false` | | `aadhaarVerifyYob` | string | No | Enter the year of birth that will be verified against the Aadhaar record (for example, `1997`). | `1997` | | `aadhaarVerifyState` | string | No | Enter the state that will be verified against the Aadhaar record. | `bihar` | | `aadhaarVerifyTitle` | string | No | Enter the last 4 digits of the signer's Aadhaar number that will be verified. | `3046` | | `aadhaarVerifyPincode` | integer | No | Enter the 6-digit pincode that will be verified against the Aadhaar record. | `845446` | | `aadhaarVerifyGender` | string | No | Enter the gender that will be verified against the Aadhaar record (`M` or `F`). | `M` | ###### cloudDscVerifyCertificateDetails | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `cloudDscVerifyName` | boolean | No | Set to `true` to verify the signer's name against the cloud DSC. | `true` | | `cloudDscSmartNameVerify` | boolean | No | Set to `true` to allow AI-based Smart name verification. | `false` | | `cloudDscVerifyState` | string | No | Enter the state that will be verified against the cloud DSC. | `Maharashtra` | | `cloudDscVerifyPincode` | integer | No | Enter the pincode that will be verified against the cloud DSC. | `400001` | ###### dscVerifyCertificateDetails | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `dscVerifyName` | boolean | No | Set to `true` to verify the signer's name against the DSC. | `false` | | `dscSmartNameVerify` | boolean | No | Set to `true` to allow AI-based Smart name verification. | `false` | | `dscVerifyPincode` | integer | No | Enter the pincode that will be verified against the DSC. | `845449` | | `dscVerifyState` | string | No | Enter the state that will be verified against the DSC. | `bihar` | ###### reviewer Settings that apply when the invitee is a reviewer. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableAuditTrail` | boolean | No | Set to `true` to include the reviewer's actions in the audit trail. | `true` | | `enableOtpForReview` | boolean | No | Set to `true` to require the reviewer to enter an OTP before reviewing. | `false` | ##### combinations | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this combination. Leegality generates it if the combination is already configured in the workflow. If the workflow creator allows adding combinations and you add one while sending, generate a new UUID v4 yourself. Other items refer to this combination by `combinationUuid`. | `29bdb6fd-99a9-4501-b74b-d482d7ad5062` | | `assignedDocuments` | array\ | Yes | Documents assigned to the invitee in this combination. **Required.** See **assignedDocuments** below. | — | | `combinationSettings` | object | Yes | Per-combination (document-group scope) settings: eSign types, prioritisation, appearance, webhooks, consent, expiry, and payment. **Required.** See **combinationSettings** below. | — | ###### assignedDocuments | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this assigned-document entry. Leegality generates it if the assigned-document entry is already configured in the workflow. If the workflow creator allows adding assigned-document entries and you add one while sending, generate a new UUID v4 yourself. | `cd7c1c46-af20-4452-9f6c-ca507705a8b9` | | `documentUuid` | string | Yes | Reference to a document. Must match the `uuid` of a document (`documents[]`) included in this same request. **Required.** | `711abfff-2057-48ac-909e-519f3f7415a4` | | `role` | string | Yes | Role the invitee plays on the assigned document. One of `signer`, `reviewer`. **Required.** | `signer` | ###### combinationSettings Per-combination (document-group scope) settings: eSign types, prioritisation, appearance, webhooks, consent, expiry, and payment. **Required.** | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `esignTypes` | object | No | Available eSign methods for this combination. Each type has its own `enable…` flag; a type is active only when that flag is `true`. **Required.** See **esignTypes** below. | — | | `eSignPrioritisation` | object | No | Priority order and retry policy across eSign methods, so signing can fall back from one method to the next. See **eSignPrioritisation** below. | — | | `signatureAppearance` | object | No | How the signature block looks on the document. See **signatureAppearance** below. | — | | `webhooks` | object | No | Per-combination webhook configuration. Omitting `webhooks` means no webhooks fire for this combination. See **webhooks** below. | — | | `customConsent` | object | No | Custom consent settings. See **customConsent** below. | — | | `expiry` | object | No | Invitation expiry settings. See **expiry** below. | — | | `paymentCollect` | object | No | Payment collection settings. Active when `enablePaymentCollect = true`. See **paymentCollect** below. | — | ###### esignTypes Available eSign methods for this combination. Each type has its own `enable…` flag; a type is active only when that flag is `true`. **Required.** | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `aadharEsign` | object | No | Aadhaar-based eSign. See **aadharEsign** below. | — | | `automatedEsign` | object | No | Automated (system) eSign using a pre-configured signing profile. See **automatedEsign** below. | — | | `quickSign` | object | No | Quick eSign (electronic signature, without PKI). See **quickSign** below. | — | | `visualSign` | object | No | Visual eSign (electronic signature with a visible appearance). See **visualSign** below. | — | | `virtualEsign` | object | No | Virtual eSign. See **virtualEsign** below. | — | | `dscToken` | object | No | DSC token-based signing (hardware Digital Signature Certificate). See **dscToken** below. | — | | `docSign` | object | No | DocSigner-based signing. See **docSign** below. | — | | `cloudDsc` | object | No | Cloud DSC-based signing. See **cloudDsc** below. | — | ###### aadharEsign Aadhaar-based eSign. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `aadharEsignEnabled` | boolean | No | Set to `true` to allow Aadhaar eSign, then configure `aadhaarEsignConfig`. When `false`, any `aadhaarEsignConfig` sent in the request is ignored. When `true`, a valid `aadhaarEsignConfig` is required. | `true` | | `aadhaarEsignConfig` | object | No | Aadhaar eSign options. | — | ###### automatedEsign Automated (system) eSign using a pre-configured signing profile. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableAutomatedSign` | boolean | No | Set to `true` to allow automated signing, then configure `automatedSignConfig`. When `false`, any `automatedSignConfig` sent in the request is ignored. When `true`, a valid `automatedSignConfig` is required. | `true` | | `automatedSignConfig` | object | No | Automated signing options. | — | ###### quickSign Quick eSign (electronic signature, without PKI). | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableQuickSign` | boolean | No | Set to `true` to allow Quick eSign, then configure `quickSignConfig`. When `false`, any `quickSignConfig` sent in the request is ignored. When `true`, a valid `quickSignConfig` is required. | `true` | | `quickSignConfig` | object | No | Quick eSign options. | — | ###### visualSign Visual eSign (electronic signature with a visible appearance). | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableVisualSign` | boolean | No | Set to `true` to allow Visual eSign, then configure `visualSignConfig`. When `false`, any `visualSignConfig` sent in the request is ignored. When `true`, a valid `visualSignConfig` is required. | `true` | | `visualSignConfig` | object | No | Visual eSign options. | — | ###### virtualEsign Virtual eSign. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `virtualEsignEnabled` | boolean | No | Set to `true` to allow Virtual eSign, then configure `virtualEsignConfig`. When `false`, any `virtualEsignConfig` sent in the request is ignored. When `true`, a valid `virtualEsignConfig` is required. | `true` | | `virtualEsignConfig` | object | No | Virtual eSign options. | — | ###### dscToken DSC token-based signing (hardware Digital Signature Certificate). | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableDscToken` | boolean | No | Set to `true` to allow signing with a DSC token. | `true` | ###### docSign DocSigner-based signing. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableDocSigner` | boolean | No | Set to `true` to allow signing via DocSigner. | `true` | ###### cloudDsc Cloud DSC-based signing. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableCloudDsc` | boolean | No | Set to `true` to allow signing with a cloud DSC. | `true` | ###### eSignPrioritisation Priority order and retry policy across eSign methods, so signing can fall back from one method to the next. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `orderLevelRetryCount` | boolean | No | Set to `true` to apply retry counts at the priority-order level (shared across priority types). | `true` | | `enableAadhaarPriority` | boolean | No | Functional toggle that drives whether Aadhaar-priority logic runs at sign time. When `true`, configure `aadhaarPriorityConfig`. When `false`, any `aadhaarPriorityConfig` sent in the request is ignored. When `true`, a valid `aadhaarPriorityConfig` is required. | `true` | | `aadhaarPriorityConfig` | object | No | Retry attempts and ordering for each Aadhaar authentication mode. See **aadhaarPriorityConfig** below. | — | ###### aadhaarPriorityConfig Retry attempts and ordering for each Aadhaar authentication mode. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `prioritisationOtpRetryAttempts` | integer | No | Retry attempts allowed for Aadhaar OTP. | `1` | | `prioritisationOtpOrder` | integer | No | Priority-order position of Aadhaar OTP. | `2` | | `prioritisationBioRetryAttempts` | integer | No | Retry attempts allowed for Aadhaar biometric. | `1` | | `prioritisationBioOrder` | integer | No | Priority-order position of Aadhaar biometric. | `4` | | `prioritisationIrisRetryAttempts` | integer | No | Retry attempts allowed for Aadhaar iris. | `1` | | `prioritisationIrisOrder` | integer | No | Priority-order position of Aadhaar iris. | `4` | | `prioritisationFaceAuthRetryAttempts` | integer | No | Retry attempts allowed for Aadhaar face authentication. | `2` | | `prioritisationFaceAuthOrder` | integer | No | Priority-order position of Aadhaar face authentication. | `3` | ###### signatureAppearance How the signature block looks on the document. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `allowEditingNameInSigningJourney` | boolean | No | Set to `true` to let the signer edit the name shown in their signature during signing. | `false` | | `displayNameInSignatureAppearances` | boolean | No | Set to `true` to display the signer's name in the signature appearance. | `true` | | `requireOrgSeal` | boolean | No | Set to `true` to include an organisation seal in the signature appearance. | `true` | | `orgNameInSeal` | string | No | Organisation name printed on the seal. | `Acme Corp` | | `orgSealType` | string | No | Type of organisation seal to use (for example, `CUSTOM`). | `CUSTOM` | ###### webhooks Per-combination webhook configuration. Omitting `webhooks` means no webhooks fire for this combination. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `successWebhook` | string | No | The URL Leegality calls when the event completes successfully. | `https://integrator.example.com/webhooks/leegality/success` | | `errorWebhook` | string | No | The URL Leegality calls when an error occurs. | `https://integrator.example.com/webhooks/leegality/error` | | `webhookProfileId` | string | No | References a configured webhook profile (auth credentials, headers, retry policy). The profile does not carry the destination URL. | `8b9bfa84-3982-4ffe-a5b9-16a403eca7a1` | | `webhookVersion` | string | No | Webhook payload version. **Possible values:** - `VERSION_2.3` - `VERSION_2.5` - `VERSION_4.0` Required whenever `successWebhook` or `errorWebhook` is configured. Allowed: `VERSION_2.3`, `VERSION_2.5`, `VERSION_4.0`. | `VERSION_4.0` | ###### customConsent Custom consent settings. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableCustomConsent` | boolean | No | Set to `true` to show a custom consent to the invitee (provide `customConsentInput`). | `true` | | `consentAutoCheck` | boolean | No | Set to `true` to pre-check the consent checkbox for the invitee. | `true` | | `customConsentAutoCheck` | boolean | No | Set to `true` to pre-check the custom consent checkbox for the invitee. | `true` | | `customConsentInput` | string | No | Custom consent text shown to the invitee. Active when `enableCustomConsent = true`. | `null` | ###### expiry Invitation expiry settings. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enableExpiry` | boolean | No | Set to `true` to expire the invitation after a set number of days (provide `expiry`). When `false`, any `expiry` sent in the request is ignored. When `true`, a valid `expiry` is required. | `true` | | `expiry` | integer | No | When the invitation expires. Applies when `enableExpiry` is `true`. **Possible values:** - `-1` — 45 minutes - `0` — same day - `1` to `365` — that many days (`1` = next day, end of day) | `30` | ###### paymentCollect Payment collection settings. Active when `enablePaymentCollect = true`. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `enablePaymentCollect` | boolean | No | Set to `true` to collect a payment before signing (fill in the fields below). When `false`, the payment fields are ignored. | `true` | | `paymentProfile` | string | No | ID of the payment profile used to collect the payment. | `23931d8d-9edb-4895-adee-e296dcba07c9` | | `paymentAmount` | integer | No | Amount to collect from the invitee. | `500` | | `customMessagePaymentPage` | string | No | Custom message shown on the payment page. Send it only alongside `paymentAmount`. | `Stamp duty payment required.` | #### cc | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this CC recipient. Leegality generates it if the CC recipient is already configured in the workflow. If the workflow creator allows adding CC recipients and you add one while sending, generate a new UUID v4 yourself. | `4a444444-4444-4444-8444-444444444444` | | `name` | string | Yes | CC recipient name. **Required.** | `CC Person` | | `email` | string | Yes | CC recipient email. **Required.** | `cc@g.com` | | `invitationNotifications` | boolean | No | Set to `true` to notify the CC recipient when invitations are sent. | `true` | | `signingNotifications` | boolean | No | Set to `true` to notify the CC recipient each time an invitee signs. | `true` | | `completionNotifications` | boolean | No | Set to `true` to notify the CC recipient when the pack is completed. | `true` | | `failureNotifications` | boolean | No | Set to `true` to notify the CC recipient if the pack fails. | `true` | | `sendInvitationUrl` | boolean | No | Set to `true` to include the signing/invitation URL in notifications to the CC recipient. | `true` | | `shareDocAuditTrail` | boolean | No | Set to `true` to share the document audit trail with the CC recipient on completion. | `true` | | `recordAuditTrail` | boolean | No | Set to `true` to record the CC recipient's notifications in the audit trail. | `true` | | `addInviteeToContactBook` | boolean | No | Set to `true` to save the CC invitee in Leegality's [contact book](https://knowledge.leegality.com/document-execution/contact-book) for reuse. | `true` | #### coordinates | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this coordinate. Leegality generates it if the coordinate is already configured in the workflow. If the workflow creator allows adding coordinates and you add one while sending, generate a new UUID v4 yourself. | `5c047eb0-aa4d-4e68-8ef7-617b8ec2e87d` | | `inviteeUuid` | string | Yes | The invitee whose signature this entry places. Must match the `uuid` of an invitee (`invitees[]`) included in this same request. **Required.** | `8bc21487-b200-4130-8240-a5f1715244dc` | | `appearances` | array\ | Yes | Individual signature placements for the invitee across documents and pages. **Required.** See **appearances** below. | — | | `groupSigningSlot` | integer | No | Threshold-signing slot for a group signer (`groupSigner`). **Required when `groupThreshold > 1`** (valid range `1..groupThreshold`); when the threshold is `1` it is optional (must be `1` if sent). Reviewers and group reviewers never receive coordinates. Slots are claimed in signing order, not bound to a specific member. | `1` | ##### appearances | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | Yes | Unique ID (UUID v4) for this signature appearance. Leegality generates it if the signature appearance is already configured in the workflow. If the workflow creator allows adding signature appearances and you add one while sending, generate a new UUID v4 yourself. | `c39d44b6-6135-4279-a4b6-2bc53dce2fdc` | | `documentUuid` | string | Yes | The document this appearance is placed on. Must match the `uuid` of a document (`documents[]`) included in this same request. **Required.** | `711abfff-2057-48ac-909e-519f3f7415a4` | | `subDocumentUuid` | string | Yes | The sub-document this appearance is placed on. Must match the `uuid` of a sub-document (`documents[].subDocuments[]`) included in this same request. **Required.** | `795df69d-12c9-4959-be9a-9a73a2e1dd30` | | `combinationUuid` | string | Yes | The combination this appearance belongs to. Must match the `uuid` of a combination (`invitees[].combinations[]`) included in this same request. An invitee can have multiple combinations over the same document, so it can't be inferred automatically. | `29bdb6fd-99a9-4501-b74b-d482d7ad5062` | | `pageNo` | string | Yes | Page number on which to place the appearance (1-indexed, as a string). **Required.** | `1` | | `rect` | object | Yes | Placement rectangle `{ x1Axis, y1Axis, x2Axis, y2Axis }` (coordinates as strings). **Required.** See **rect** below. | — | | `type` | string | Yes | Placement type. **Required.** **Possible values:** - `FULL_DOC` - `SUB_DOC` - `CUSTOM` - `DEFAULT` Allowed: `FULL_DOC`, `SUB_DOC`, `CUSTOM`, `DEFAULT`. | `FULL_DOC` | | `subDocumentType` | string | No | The sub-document's type. Pass the value that matches the sub-document: **Possible values:** - `PDF` — for a PDF - `STAMP` — for a stamp - `TEMPLATE` — for a template Allowed: `PDF`, `STAMP`, `TEMPLATE`. | `PDF` | ###### rect Placement rectangle `{ x1Axis, y1Axis, x2Axis, y2Axis }` (coordinates as strings). **Required.** | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `x1Axis` | string | Yes | X coordinate of the rectangle's first corner (string). | `350` | | `y1Axis` | string | Yes | Y coordinate of the rectangle's first corner (string). | `680` | | `x2Axis` | string | Yes | X coordinate of the rectangle's opposite corner (string). | `550` | | `y2Axis` | string | Yes | Y coordinate of the rectangle's opposite corner (string). | `720` | ### Sample Request ```json { "workflowId": "70843c25-8d80-40ac-ab6b-edba12abd495", "pack": { "packName": "Home Loan Agreement - Rajesh Kumar", "packIrn": "IRN-2026-001234", "urn": "21312313131", "packFolderId": "K4wFolder", "deleteOnComplete": false, "sftpProfileId": "07aba168-b55b-4889-bddf-9012fa853e61", "brandingProfileId": "branding-001", "lecf_loanId": "LOAN-2026-5678", "lecf_branchCode": "MUM-001", "signingOrder": { "setSigningOrder": true, "preventChangesToSigningOrder": false, "setAdvanceSigningOrder": false } }, "documents": [ { "uuid": "711abfff-2057-48ac-909e-519f3f7415a4", "documentName": "Loan Agreement", "irn": "DOC-IRN-001", "documentFolderId": "K4wKEBB", "subDocuments": [ { "uuid": "795df69d-12c9-4959-be9a-9a73a2e1dd30", "templateId": "tpl_mapping_abc123", "templateVersion": "1.0", "allowFirstInviteeToFill": true, "templateFieldValues": [ { "fieldId": "f1a23456-78bc-4def-9012-3456789abcde", "fieldValue": "Rajesh Kumar", "fieldName": "borrower name" } ], "enableRevenueStamp": true, "revenueStamp": { "revenueStampQuantity": 1, "revenueStampId": "10" }, "enableStampSeries": true, "stampSeries": [ { "uuid": "0a1b2c3d-4e5f-4abc-8def-0123456789ab", "stampSeriesId": "01", "stampQuantities": 1 } ], "enableStampUpload": true, "stampUpload": { "stampUploadState": "PB", "stampUploadedFile": { "file": "JVBERi0xLjQKJeLjz9MK…(base64-encoded file)" }, "stampUploadDenomination": 100, "stampUploadFirstPartyName": "John Doe", "stampUploadSecondPartyName": "Jane Smith", "stampUploadSerialNumber": "123" }, "enableStampGroup": true, "stampGroup": { "stampGroupId": "PB01", "stampGroupAmount": 1 }, "file": "JVBERi0xLjQKJeLjz9MK…(base64-encoded file)" } ], "stamps": { "enableStamp": true, "enableRevenueStamp": true, "revenueStamp": { "revenueStampQuantity": 1, "revenueStampId": "10" }, "enableStampSeries": true, "stampSeries": [ { "uuid": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5e", "stampSeriesId": "01", "stampQuantities": 1 } ], "enableStampGroup": true, "stampGroup": { "stampGroupId": "PB01", "stampGroupAmount": 10 }, "enableStampUpload": true, "stampUpload": { "stampUploadSerialNumber": "SERIAL001", "stampUploadFirstPartyName": "Alice", "stampUploadDenomination": 100, "stampUploadedFile": { "file": "JVBERi0xLjQKJeLjz9MK…(base64-encoded file)" }, "stampUploadState": "PB", "stampUploadSecondPartyName": "Bob" } }, "referenceAttachment": { "enableReferenceAttachment": true, "referenceAttachmentFiles": [ { "uuid": "23c96e97-813a-4a6c-9c37-e939f54d597d", "file": "JVBERi0xLjQKJeLjz9MK…(base64-encoded file)" } ] }, "lecf_documentCategory": "CONTRACT" } ], "invitees": [ { "uuid": "8bc21487-b200-4130-8240-a5f1715244dc", "type": "signer", "level": 1, "groupName": "", "groupThreshold": 2, "inviteeDetails": [ { "uuid": "1aa11111-1111-4111-8111-111111111111", "inviteeName": "Rajesh Kumar", "inviteeLabel": "borrower", "inviteeEmail": "rajesh@example.com", "inviteePhone": "9820000001", "enableWhatsAppMandatoryNotifications": false, "lecf_employeeCode": "EMP-00921" } ], "inviteeSettings": { "securityOptions": { "oneFactorAuthentication": false, "twoFactorAuthentication": true, "gps": { "enabled": true, "accuracyBasedRestriction": true, "accuracyThreshold": 12, "locationBasedRestriction": true, "latitude": 23.34, "longitude": 72.88, "permissibleRadius": 100, "restrictToIndia": true, "enableLatLngRadius": true }, "faceCapture": { "enabled": true, "liveliness": true, "smartUserLiveliness": "smart", "smartUserLivelinessRetryAttempts": 3, "match": true, "faceMatchRetryAttempts": 2, "faceMatch": [ { "uuid": "3a333333-3333-4333-8333-333333333333", "faceMatchImage": { "file": "JVBERi0xLjQKJeLjz9MK…(base64-encoded file)" } } ] }, "docDownloadLinkWithOtp": false, "maskContactDetails": false }, "manageInviteInteractions": { "enableSupportingDocs": true, "supportingDocumentConfig": { "supportingDocuments": [ { "uuid": "2a222222-2222-4222-8222-222222222222", "supportingDocName": "ID Proof", "supportingDocFormat": "PDF", "supportingDocSize": 2048 } ], "allowViewingSupportingDocs": true }, "baseUrl": "https://client.example.com/sign", "redirectUrl": "https://client.example.com/sign/complete", "enableRejection": true, "enforceRejectionMessage": false, "enableCustomMessage": true, "customMessageInput": "Please review and sign the loan agreement.", "enableLocalLanguage": true, "languageDefaultVsSignerSelect": "default", "localLanguageChooseDefault": "hi" }, "notifications": { "enableSmsNotifications": true, "enableEmailNotifications": true, "enableWhatsAppNotifications": false }, "contactBook": { "addInviteeToContactBook": true, "inviteeLabel": "borrower" }, "certificateVerification": { "aadhaarVerifyCertificateDetails": [ { "aadhaarVerifyName": false, "aadhaarSmartNameVerify": false, "aadhaarVerifyYob": "1997", "aadhaarVerifyState": "bihar", "aadhaarVerifyTitle": "3046", "aadhaarVerifyPincode": 845446, "aadhaarVerifyGender": "M" } ], "cloudDscVerifyCertificateDetails": [ { "cloudDscVerifyName": true, "cloudDscSmartNameVerify": false, "cloudDscVerifyState": "Maharashtra", "cloudDscVerifyPincode": 400001 } ], "dscVerifyCertificateDetails": [ { "dscVerifyName": false, "dscSmartNameVerify": false, "dscVerifyPincode": 845449, "dscVerifyState": "bihar" } ] }, "reviewer": { "enableAuditTrail": true, "enableOtpForReview": false } }, "combinations": [ { "uuid": "29bdb6fd-99a9-4501-b74b-d482d7ad5062", "assignedDocuments": [ { "uuid": "cd7c1c46-af20-4452-9f6c-ca507705a8b9", "documentUuid": "711abfff-2057-48ac-909e-519f3f7415a4", "role": "signer" } ], "combinationSettings": { "esignTypes": { "aadharEsign": { "aadharEsignEnabled": true, "aadhaarEsignConfig": { "aadhaarOtp": true, "aadhaarBio": false, "aadhaarIris": false, "aadhaarFace": false, "aadhaarSetMaxRetryAttempts": true, "aadhaarMaxRetryAttempts": 3 } }, "automatedEsign": { "enableAutomatedSign": true, "automatedSignConfig": { "automatedSignProfile": "auto-profile-001", "automatedSignPassword": "secret" } }, "quickSign": { "enableQuickSign": true, "quickSignConfig": { "quickSignDraw": true, "quickSignAutoGenerate": true, "quickSignFingerprint": false } }, "visualSign": { "enableVisualSign": true, "visualSignConfig": { "visualSignDraw": true, "visualSignAutoGenerate": true, "visualSignFingerprint": false, "visualSignUpload": true } }, "virtualEsign": { "virtualEsignEnabled": true, "virtualEsignConfig": { "virtualDrawSignature": true, "virtualSelect": true, "virtualFingerprint": false, "virtualSignUpload": false } }, "dscToken": { "enableDscToken": true }, "docSign": { "enableDocSigner": true }, "cloudDsc": { "enableCloudDsc": true } }, "eSignPrioritisation": { "orderLevelRetryCount": true, "enableAadhaarPriority": true, "aadhaarPriorityConfig": { "prioritisationOtpRetryAttempts": 1, "prioritisationOtpOrder": 2, "prioritisationBioRetryAttempts": 1, "prioritisationBioOrder": 4, "prioritisationIrisRetryAttempts": 1, "prioritisationIrisOrder": 4, "prioritisationFaceAuthRetryAttempts": 2, "prioritisationFaceAuthOrder": 3 } }, "signatureAppearance": { "allowEditingNameInSigningJourney": false, "displayNameInSignatureAppearances": true, "requireOrgSeal": true, "orgNameInSeal": "Acme Corp", "orgSealType": "CUSTOM" }, "webhooks": { "successWebhook": "https://integrator.example.com/webhooks/leegality/success", "errorWebhook": "https://integrator.example.com/webhooks/leegality/error", "webhookProfileId": "8b9bfa84-3982-4ffe-a5b9-16a403eca7a1", "webhookVersion": "VERSION_4.0" }, "customConsent": { "enableCustomConsent": true, "consentAutoCheck": true, "customConsentAutoCheck": true, "customConsentInput": null }, "expiry": { "enableExpiry": true, "expiry": 30 }, "paymentCollect": { "enablePaymentCollect": true, "paymentProfile": "23931d8d-9edb-4895-adee-e296dcba07c9", "paymentAmount": 500, "customMessagePaymentPage": "Stamp duty payment required." } } } ], "lecf_customerId": "CUST-8842" } ], "cc": [ { "uuid": "4a444444-4444-4444-8444-444444444444", "name": "CC Person", "email": "cc@g.com", "invitationNotifications": true, "signingNotifications": true, "completionNotifications": true, "failureNotifications": true, "sendInvitationUrl": true, "shareDocAuditTrail": true, "recordAuditTrail": true, "addInviteeToContactBook": true } ], "coordinates": [ { "uuid": "5c047eb0-aa4d-4e68-8ef7-617b8ec2e87d", "inviteeUuid": "8bc21487-b200-4130-8240-a5f1715244dc", "appearances": [ { "uuid": "c39d44b6-6135-4279-a4b6-2bc53dce2fdc", "documentUuid": "711abfff-2057-48ac-909e-519f3f7415a4", "subDocumentUuid": "795df69d-12c9-4959-be9a-9a73a2e1dd30", "combinationUuid": "29bdb6fd-99a9-4501-b74b-d482d7ad5062", "pageNo": "1", "rect": { "x1Axis": "350", "y1Axis": "680", "x2Axis": "550", "y2Axis": "720" }, "type": "FULL_DOC", "subDocumentType": "PDF" } ], "groupSigningSlot": 1 } ] } ``` --- ## Responses ### 201 — Pack created and sent. Returns the created pack with its documents, invitations, and sign URLs. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `code` | string | No | Result code. `SUCCESS` when the pack was created. | `SUCCESS` | | `message` | string | No | Human-readable status message. | `Pack created` | | `data` | object | No | See **data** below. | — | #### data | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `workflowRunContextId` | string | No | Unique ID for this submission. Use it with **Check Pack Details** to view the pack. | `b7c4f1e2-9a0d-4c3b-8f11-2a5d6e7f8a90` | | `pack` | object | No | The created pack. See **pack** below. | — | | `documents` | array\ | No | The documents in the pack. See **documents** below. | — | | `invitations` | array\ | No | The invitee groups on the pack. See **invitations** below. | — | | `cc` | array\ | No | CC recipients on the pack. See **cc** below. | — | ##### pack The created pack. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `packId` | string | No | Unique ID of the pack. | `PK-90211` | | `packIrn` | string | No | Your Internal Reference Number for the pack. | `IRN-1001` | | `urn` | string | No | Your Unique Reference Number for the pack. | `URN-1001` | | `packName` | string | No | Display name of the pack. | `Loan Agreement Pack` | ##### documents | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `documentId` | string | No | Unique ID of the document. | `DOC-45120` | | `documentName` | string | No | Display name of the document. | `Loan Agreement` | | `irn` | string | No | Your Internal Reference Number for the document. | `DOC-IRN-1` | ##### invitations | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | ID of the invitee group. | `c2b2f8d0-0000-4000-8000-000000000001` | | `groupName` | string | No | Name of the invitee group. | `Borrower` | | `groupThreshold` | integer | No | Minimum members required to complete the group's action. | `1` | | `type` | string | No | Type of invitee (e.g. `SIGNER`, `REVIEWER`). | `SIGNER` | | `level` | integer | No | Signing-order level (1 = first). | `1` | | `inviteeDetails` | array\ | No | The person(s) in this invitee group. See **inviteeDetails** below. | — | ###### inviteeDetails | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | ID of this person. | `c2b2f8d0-0000-4000-8000-000000000011` | | `inviteeName` | string | No | Full name of the invitee. | `Asha Rao` | | `inviteeEmail` | string | No | Email address of the invitee. | `asha@example.com` | | `inviteePhone` | string | No | Mobile number of the invitee. | `9800000000` | | `invitationUrl` | string | No | The invitee's sign URL. | `https:///sign/xxxxxxxx` | ##### cc | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | ID of this CC entry. | `d3c3f8d0-0000-4000-8000-000000000001` | | `name` | string | No | CC recipient name. | `Ops Desk` | | `email` | string | No | CC recipient email. | `ops@example.com` | ### Sample Response (201) ```json { "code": "SUCCESS", "message": "Pack created", "data": { "workflowRunContextId": "b7c4f1e2-9a0d-4c3b-8f11-2a5d6e7f8a90", "pack": { "packId": "PK-90211", "packIrn": "IRN-1001", "urn": "URN-1001", "packName": "Loan Agreement Pack" }, "documents": [ { "documentId": "DOC-45120", "documentName": "Loan Agreement", "irn": "DOC-IRN-1" } ], "invitations": [ { "uuid": "c2b2f8d0-0000-4000-8000-000000000001", "groupName": "Borrower", "groupThreshold": 1, "type": "SIGNER", "level": 1, "inviteeDetails": [ { "uuid": "c2b2f8d0-0000-4000-8000-000000000011", "inviteeName": "Asha Rao", "inviteeEmail": "asha@example.com", "inviteePhone": "9800000000", "invitationUrl": "https:///sign/xxxxxxxx" } ] } ], "cc": [ { "uuid": "d3c3f8d0-0000-4000-8000-000000000001", "name": "Ops Desk", "email": "ops@example.com" } ] } } ```